Files
2020-04-08 10:39:44 -07:00

111 lines
4.2 KiB
Python

import unittest
# project
from ddtrace.tracer import Tracer
from ddtrace.contrib.flask_cache import get_traced_cache
from ddtrace.contrib.flask_cache.utils import _extract_conn_tags, _resource_from_cache_prefix
# 3rd party
from flask import Flask
# testing
from ..config import REDIS_CONFIG, MEMCACHED_CONFIG
class FlaskCacheUtilsTest(unittest.TestCase):
SERVICE = 'test-flask-cache'
def test_extract_redis_connection_metadata(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
config = {
'CACHE_TYPE': 'redis',
'CACHE_REDIS_PORT': REDIS_CONFIG['port'],
}
traced_cache = Cache(app, config=config)
# extract client data
meta = _extract_conn_tags(traced_cache.cache._client)
expected_meta = {'out.host': 'localhost', 'out.port': REDIS_CONFIG['port'], 'out.redis_db': 0}
assert meta == expected_meta
def test_extract_memcached_connection_metadata(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
config = {
'CACHE_TYPE': 'memcached',
'CACHE_MEMCACHED_SERVERS': ['127.0.0.1:{}'.format(MEMCACHED_CONFIG['port'])],
}
traced_cache = Cache(app, config=config)
# extract client data
meta = _extract_conn_tags(traced_cache.cache._client)
expected_meta = {'out.host': '127.0.0.1', 'out.port': MEMCACHED_CONFIG['port']}
assert meta == expected_meta
def test_extract_memcached_multiple_connection_metadata(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
config = {
'CACHE_TYPE': 'memcached',
'CACHE_MEMCACHED_SERVERS': [
'127.0.0.1:{}'.format(MEMCACHED_CONFIG['port']),
'localhost:{}'.format(MEMCACHED_CONFIG['port']),
],
}
traced_cache = Cache(app, config=config)
# extract client data
meta = _extract_conn_tags(traced_cache.cache._client)
expected_meta = {
'out.host': '127.0.0.1',
'out.port': MEMCACHED_CONFIG['port'],
}
assert meta == expected_meta
def test_resource_from_cache_with_prefix(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
config = {
'CACHE_TYPE': 'redis',
'CACHE_REDIS_PORT': REDIS_CONFIG['port'],
'CACHE_KEY_PREFIX': 'users',
}
traced_cache = Cache(app, config=config)
# expect a resource with a prefix
expected_resource = 'get users'
resource = _resource_from_cache_prefix('GET', traced_cache.cache)
assert resource == expected_resource
def test_resource_from_cache_with_empty_prefix(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
config = {
'CACHE_TYPE': 'redis',
'CACHE_REDIS_PORT': REDIS_CONFIG['port'],
'CACHE_KEY_PREFIX': '',
}
traced_cache = Cache(app, config=config)
# expect a resource with a prefix
expected_resource = 'get'
resource = _resource_from_cache_prefix('GET', traced_cache.cache)
assert resource == expected_resource
def test_resource_from_cache_without_prefix(self):
# create the TracedCache instance for a Flask app
tracer = Tracer()
Cache = get_traced_cache(tracer, service=self.SERVICE)
app = Flask(__name__)
traced_cache = Cache(app, config={'CACHE_TYPE': 'redis'})
# expect only the resource name
expected_resource = 'get'
resource = _resource_from_cache_prefix('GET', traced_cache.config)
assert resource == expected_resource