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

99 lines
3.9 KiB
Python

import os
import unittest
import warnings
from ddtrace.utils.deprecation import deprecation, deprecated, format_message
from ddtrace.utils.formats import asbool, get_env, flatten_dict
class TestUtils(unittest.TestCase):
def test_asbool(self):
# ensure the value is properly cast
self.assertTrue(asbool('True'))
self.assertTrue(asbool('true'))
self.assertTrue(asbool('1'))
self.assertFalse(asbool('False'))
self.assertFalse(asbool('false'))
self.assertFalse(asbool(None))
self.assertFalse(asbool(''))
self.assertTrue(asbool(True))
self.assertFalse(asbool(False))
def test_get_env(self):
# ensure `get_env` returns a default value if environment variables
# are not set
value = get_env('django', 'distributed_tracing')
self.assertIsNone(value)
value = get_env('django', 'distributed_tracing', False)
self.assertFalse(value)
def test_get_env_found(self):
# ensure `get_env` returns a value if the environment variable is set
os.environ['DD_REQUESTS_DISTRIBUTED_TRACING'] = '1'
value = get_env('requests', 'distributed_tracing')
self.assertEqual(value, '1')
def test_get_env_found_legacy(self):
# ensure `get_env` returns a value if legacy environment variables
# are used, raising a Deprecation warning
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
os.environ['DATADOG_REQUESTS_DISTRIBUTED_TRACING'] = '1'
value = get_env('requests', 'distributed_tracing')
self.assertEqual(value, '1')
self.assertEqual(len(w), 1)
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
self.assertTrue('Use `DD_` prefix instead' in str(w[-1].message))
def test_get_env_key_priority(self):
# ensure `get_env` use `DD_` with highest priority
os.environ['DD_REQUESTS_DISTRIBUTED_TRACING'] = 'highest'
os.environ['DATADOG_REQUESTS_DISTRIBUTED_TRACING'] = 'lowest'
value = get_env('requests', 'distributed_tracing')
self.assertEqual(value, 'highest')
def test_deprecation_formatter(self):
# ensure the formatter returns the proper message
msg = format_message(
'deprecated_function',
'use something else instead',
'1.0.0',
)
expected = (
'\'deprecated_function\' is deprecated and will be remove in future versions (1.0.0). '
'use something else instead'
)
self.assertEqual(msg, expected)
def test_deprecation(self):
# ensure `deprecation` properly raise a DeprecationWarning
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
deprecation(
name='fn',
message='message',
version='1.0.0'
)
self.assertEqual(len(w), 1)
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
self.assertIn('message', str(w[-1].message))
def test_deprecated_decorator(self):
# ensure `deprecated` decorator properly raise a DeprecationWarning
@deprecated('decorator', version='1.0.0')
def fxn():
pass
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
fxn()
self.assertEqual(len(w), 1)
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
self.assertIn('decorator', str(w[-1].message))
def test_flatten_dict(self):
""" ensure that flattening of a nested dict results in a normalized, 1-level dict """
d = dict(A=1, B=2, C=dict(A=3, B=4, C=dict(A=5, B=6)))
e = dict(A=1, B=2, C_A=3, C_B=4, C_C_A=5, C_C_B=6)
self.assertEquals(flatten_dict(d, sep='_'), e)