mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-29 05:04:05 +08:00
99 lines
3.9 KiB
Python
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)
|