Skip to content

Commit 1943205

Browse files
committed
Tests correctly reset config object.
1 parent 6e507eb commit 1943205

File tree

8 files changed

+62
-45
lines changed

8 files changed

+62
-45
lines changed

datadog_lambda/config.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def _getter(self):
1717
setattr(self, prop_key, val)
1818
return getattr(self, prop_key)
1919

20-
prop_key = f"_{key}"
20+
prop_key = f"_config_{key}"
2121
return _getter
2222

2323

@@ -42,12 +42,17 @@ class Config:
4242

4343
@property
4444
def fips_mode_enabled(self):
45-
if not hasattr(self, "_fips_mode_enabled"):
46-
self._fips_mode_enabled = os.environ.get(
45+
if not hasattr(self, "_config_fips_mode_enabled"):
46+
self._config_fips_mode_enabled = os.environ.get(
4747
"DD_LAMBDA_FIPS_MODE",
4848
"true" if self.is_gov_region else "false",
4949
).lower() == "true"
50-
return self._fips_mode_enabled
50+
return self._config_fips_mode_enabled
51+
52+
def reset(self):
53+
for attr in dir(self):
54+
if attr.startswith("_config_"):
55+
delattr(self, attr)
5156

5257

5358
config = Config()

tests/conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import pytest
2+
3+
from datadog_lambda.config import config
4+
5+
@pytest.fixture(autouse=True)
6+
def reset_config():
7+
config.reset()

tests/test_api.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ def setUp(self):
2222
)
2323
self.env_patcher.start()
2424

25-
@patch("datadog_lambda.api.fips_mode_enabled", True)
25+
def tearDown(self):
26+
del os.environ["AWS_REGION"]
27+
28+
@patch("datadog_lambda.config.Config.fips_mode_enabled", True)
2629
@patch("botocore.session.Session.create_client")
2730
def test_secrets_manager_fips_endpoint(self, mock_boto3_client):
2831
mock_client = MagicMock()
@@ -63,7 +66,7 @@ def test_secrets_manager_different_region(self, mock_boto3_client):
6366
)
6467
self.assertEqual(api_key, "test-api-key")
6568

66-
@patch("datadog_lambda.api.fips_mode_enabled", True)
69+
@patch("datadog_lambda.config.Config.fips_mode_enabled", True)
6770
@patch("botocore.session.Session.create_client")
6871
def test_secrets_manager_different_region_but_still_fips(self, mock_boto3_client):
6972
mock_client = MagicMock()
@@ -84,7 +87,7 @@ def test_secrets_manager_different_region_but_still_fips(self, mock_boto3_client
8487
)
8588
self.assertEqual(api_key, "test-api-key")
8689

87-
@patch("datadog_lambda.api.fips_mode_enabled", True)
90+
@patch("datadog_lambda.config.Config.fips_mode_enabled", True)
8891
@patch("botocore.session.Session.create_client")
8992
def test_ssm_fips_endpoint(self, mock_boto3_client):
9093
mock_client = MagicMock()
@@ -103,7 +106,7 @@ def test_ssm_fips_endpoint(self, mock_boto3_client):
103106
)
104107
self.assertEqual(api_key, "test-api-key")
105108

106-
@patch("datadog_lambda.api.fips_mode_enabled", True)
109+
@patch("datadog_lambda.config.Config.fips_mode_enabled", True)
107110
@patch("botocore.session.Session.create_client")
108111
@patch("datadog_lambda.api.decrypt_kms_api_key")
109112
def test_kms_fips_endpoint(self, mock_decrypt_kms, mock_boto3_client):

tests/test_cold_start.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def finish(span):
247247

248248
monkeypatch.setattr(wrapper.tracer, "_on_span_finish", finish)
249249
monkeypatch.setattr(wrapper, "is_new_sandbox", lambda: True)
250-
monkeypatch.setattr("datadog_lambda.wrapper.dd_tracing_enabled", True)
250+
monkeypatch.setattr("datadog_lambda.config.Config.trace_enabled", True)
251251
monkeypatch.setenv(
252252
"DD_COLD_START_TRACE_SKIP_LIB", "ddtrace.contrib.logging,datadog_lambda.wrapper"
253253
)

tests/test_config.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
import pytest
22

3-
from datadog_lambda.config import Config
3+
from datadog_lambda.config import config
4+
5+
6+
@pytest.fixture
7+
def setenv(monkeypatch):
8+
def set_env(key, value):
9+
if value is None:
10+
monkeypatch.delenv(key, raising=False)
11+
else:
12+
monkeypatch.setenv(key, value)
13+
return set_env
414

515

616
_test_config_from_environ = (
@@ -109,10 +119,8 @@
109119
)
110120

111121
@pytest.mark.parametrize('env_key,conf_key,env_val,conf_val', _test_config_from_environ)
112-
def test_config_from_environ(env_key, conf_key, env_val, conf_val, monkeypatch):
113-
if env_val is not None:
114-
monkeypatch.setenv(env_key, env_val)
115-
config = Config()
122+
def test_config_from_environ(env_key, conf_key, env_val, conf_val, setenv):
123+
setenv(env_key, env_val)
116124
assert getattr(config, conf_key) == conf_val
117125

118126

@@ -160,9 +168,7 @@ def test_config_from_environ(env_key, conf_key, env_val, conf_val, monkeypatch):
160168
)
161169

162170
@pytest.mark.parametrize('fips_mode,region,conf_val', _test_fips_mode_from_environ)
163-
def test_fips_mode_from_environ(fips_mode, region, conf_val, monkeypatch):
164-
if fips_mode is not None:
165-
monkeypatch.setenv("DD_LAMBDA_FIPS_MODE", fips_mode)
166-
if region is not None:
167-
monkeypatch.setenv("AWS_REGION", region)
168-
assert Config().fips_mode_enabled == conf_val
171+
def test_fips_mode_from_environ(fips_mode, region, conf_val, setenv):
172+
setenv("DD_LAMBDA_FIPS_MODE", fips_mode)
173+
setenv("AWS_REGION", region)
174+
assert config.fips_mode_enabled == conf_val

tests/test_metric.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from datadog.api.exceptions import ClientError
88

99
from datadog_lambda.api import KMS_ENCRYPTION_CONTEXT_KEY, decrypt_kms_api_key
10+
from datadog_lambda.config import config
1011
from datadog_lambda.metric import (
1112
MetricsHandler,
1213
_select_metrics_handler,
@@ -19,6 +20,7 @@
1920

2021
class TestLambdaMetric(unittest.TestCase):
2122
def setUp(self):
23+
config.reset()
2224
lambda_stats_patcher = patch("datadog_lambda.metric.lambda_stats")
2325
self.mock_metric_lambda_stats = lambda_stats_patcher.start()
2426
self.addCleanup(lambda_stats_patcher.stop)
@@ -62,7 +64,7 @@ def test_select_metrics_handler_dd_api_fallback(self):
6264
self.assertEqual(MetricsHandler.DATADOG_API, _select_metrics_handler())
6365
del os.environ["DD_FLUSH_TO_LOG"]
6466

65-
@patch("datadog_lambda.metric.fips_mode_enabled", True)
67+
@patch("datadog_lambda.config.Config.fips_mode_enabled", True)
6668
@patch("datadog_lambda.metric.should_use_extension", False)
6769
def test_select_metrics_handler_has_no_fallback_in_fips_mode(self):
6870
os.environ["DD_FLUSH_TO_LOG"] = "False"

tests/test_tracing.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from ddtrace._trace._span_pointer import _SpanPointerDirection
1616
from ddtrace._trace._span_pointer import _SpanPointerDescription
1717

18+
from datadog_lambda.config import config
1819
from datadog_lambda.constants import (
1920
SamplingPriority,
2021
TraceHeader,
@@ -251,20 +252,16 @@ def test_extract_dd_trace_context(event, expect):
251252

252253
class TestExtractAndGetDDTraceContext(unittest.TestCase):
253254
def setUp(self):
254-
global dd_tracing_enabled
255-
dd_tracing_enabled = False
256255
os.environ["_X_AMZN_TRACE_ID"] = fake_xray_header_value
257256
patcher = patch("datadog_lambda.tracing.send_segment")
258257
self.mock_send_segment = patcher.start()
259258
self.addCleanup(patcher.stop)
260-
patcher = patch("datadog_lambda.tracing.is_lambda_context")
259+
patcher = patch("datadog_lambda.config.Config.is_lambda_context")
261260
self.mock_is_lambda_context = patcher.start()
262261
self.mock_is_lambda_context.return_value = True
263262
self.addCleanup(patcher.stop)
264263

265264
def tearDown(self):
266-
global dd_tracing_enabled
267-
dd_tracing_enabled = False
268265
del os.environ["_X_AMZN_TRACE_ID"]
269266

270267
@with_trace_propagation_style("datadog")
@@ -975,6 +972,7 @@ def test_convert_xray_sampling(self):
975972

976973
class TestLogsInjection(unittest.TestCase):
977974
def setUp(self):
975+
config.reset()
978976
patcher = patch("datadog_lambda.tracing.get_dd_trace_context_obj")
979977
self.mock_get_dd_trace_context = patcher.start()
980978
self.mock_get_dd_trace_context.return_value = Context(
@@ -984,11 +982,12 @@ def setUp(self):
984982
)
985983
self.addCleanup(patcher.stop)
986984

987-
patcher = patch("datadog_lambda.tracing.is_lambda_context")
985+
patcher = patch("datadog_lambda.config.Config.is_lambda_context")
988986
self.mock_is_lambda_context = patcher.start()
989987
self.mock_is_lambda_context.return_value = True
990988
self.addCleanup(patcher.stop)
991989

990+
@patch("datadog_lambda.config.Config.trace_enabled", False)
992991
def test_set_correlation_ids(self):
993992
set_correlation_ids()
994993
span = tracer.current_span()
@@ -1124,13 +1123,11 @@ def test_function_with_span_pointers(self):
11241123

11251124
class TestSetTraceRootSpan(unittest.TestCase):
11261125
def setUp(self):
1127-
global dd_tracing_enabled
1128-
dd_tracing_enabled = False
11291126
os.environ["_X_AMZN_TRACE_ID"] = fake_xray_header_value
11301127
patcher = patch("datadog_lambda.tracing.send_segment")
11311128
self.mock_send_segment = patcher.start()
11321129
self.addCleanup(patcher.stop)
1133-
patcher = patch("datadog_lambda.tracing.is_lambda_context")
1130+
patcher = patch("datadog_lambda.config.Config.is_lambda_context")
11341131
self.mock_is_lambda_context = patcher.start()
11351132
self.mock_is_lambda_context.return_value = True
11361133
self.addCleanup(patcher.stop)
@@ -1143,8 +1140,6 @@ def setUp(self):
11431140
self.addCleanup(patcher.stop)
11441141

11451142
def tearDown(self):
1146-
global dd_tracing_enabled
1147-
dd_tracing_enabled = False
11481143
del os.environ["_X_AMZN_TRACE_ID"]
11491144

11501145
def test_mixed_parent_context_when_merging(self):
@@ -1245,6 +1240,7 @@ def test_get_service_mapping(self):
12451240
create_service_mapping(os.environ["DD_SERVICE_MAPPING"])
12461241
)
12471242
self.assertEqual(self.get_service_mapping(), expected_output)
1243+
del os.environ["DD_SERVICE_MAPPING"]
12481244

12491245
def test_set_service_mapping(self):
12501246
new_service_mapping = {"api3": "service3", "api4": "service4"}
@@ -1285,6 +1281,8 @@ def test_determine_service_name(self):
12851281
"default",
12861282
)
12871283

1284+
del os.environ["DD_SERVICE_MAPPING"]
1285+
12881286
def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self):
12891287
new_service_mapping = {"lambda_api_gateway": "new-name"}
12901288
self.set_service_mapping(new_service_mapping)
@@ -2386,7 +2384,7 @@ def test_deterministic_m5_hash__always_leading_with_zero(self):
23862384

23872385

23882386
class TestExceptionOutsideHandler(unittest.TestCase):
2389-
@patch("datadog_lambda.tracing.dd_tracing_enabled", True)
2387+
@patch("datadog_lambda.config.Config.trace_enabled", True)
23902388
@patch("datadog_lambda.tracing.submit_errors_metric")
23912389
@patch("time.time_ns", return_value=42)
23922390
def test_exception_outside_handler_tracing_enabled(
@@ -2427,7 +2425,7 @@ def test_exception_outside_handler_tracing_enabled(
24272425
assert mock_span.error == 1
24282426
assert mock_span.start_ns == 42
24292427

2430-
@patch("datadog_lambda.tracing.dd_tracing_enabled", False)
2428+
@patch("datadog_lambda.config.Config.trace_enabled", False)
24312429
@patch("datadog_lambda.tracing.submit_errors_metric")
24322430
@patch("time.time_ns", return_value=42)
24332431
def test_exception_outside_handler_tracing_disabled(

tests/test_wrapper.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import datadog_lambda.wrapper as wrapper
1010
import datadog_lambda.xray as xray
11+
12+
from datadog_lambda.config import config
1113
from datadog_lambda.metric import lambda_metric
1214
from datadog_lambda.thread_stats_writer import ThreadStatsWriter
1315
from ddtrace.trace import Span, tracer
@@ -24,7 +26,6 @@ def setUp(self):
2426
patch("ddtrace.internal.writer.AgentWriter.flush_queue").start()
2527

2628
wrapper.datadog_lambda_wrapper._force_wrap = True
27-
wrapper.dd_tracing_enabled = True
2829
patcher = patch(
2930
"datadog.threadstats.reporters.HttpReporter.flush_distributions"
3031
)
@@ -76,9 +77,8 @@ def setUp(self):
7677
self.mock_dd_lambda_layer_tag = patcher.start()
7778
self.addCleanup(patcher.stop)
7879

80+
@patch("datadog_lambda.config.Config.trace_enabled", False)
7981
def test_datadog_lambda_wrapper(self):
80-
wrapper.dd_tracing_enabled = False
81-
8282
@wrapper.datadog_lambda_wrapper
8383
def lambda_handler(event, context):
8484
lambda_metric("test.metric", 100)
@@ -88,7 +88,6 @@ def lambda_handler(event, context):
8888
lambda_context = get_mock_context()
8989

9090
lambda_handler(lambda_event, lambda_context)
91-
wrapper.dd_tracing_enabled = True
9291
self.mock_threadstats_flush_distributions.assert_has_calls(
9392
[
9493
call(
@@ -185,17 +184,16 @@ def lambda_handler(event, context):
185184
metric_module.lambda_stats.stop()
186185
metric_module.lambda_stats = ThreadStatsWriter(False)
187186

187+
@patch("datadog_lambda.config.Config.trace_enabled", False)
188188
def test_datadog_lambda_wrapper_inject_correlation_ids(self):
189189
os.environ["DD_LOGS_INJECTION"] = "True"
190-
wrapper.dd_tracing_enabled = False
191190

192191
@wrapper.datadog_lambda_wrapper
193192
def lambda_handler(event, context):
194193
lambda_metric("test.metric", 100)
195194

196195
lambda_event = {}
197196
lambda_handler(lambda_event, get_mock_context())
198-
wrapper.dd_tracing_enabled = True
199197
self.mock_set_correlation_ids.assert_called()
200198
self.mock_inject_correlation_ids.assert_called()
201199

@@ -453,11 +451,8 @@ def lambda_handler(event, context):
453451
]
454452
)
455453

454+
@patch("datadog_lambda.config.Config.enhanced_metrics_enabled", False)
456455
def test_no_enhanced_metrics_without_env_var(self):
457-
patcher = patch("datadog_lambda.metric.enhanced_metrics_enabled", False)
458-
patcher.start()
459-
self.addCleanup(patcher.stop)
460-
461456
@wrapper.datadog_lambda_wrapper
462457
def lambda_handler(event, context):
463458
raise RuntimeError()
@@ -565,8 +560,9 @@ def return_type_test(event, context):
565560

566561

567562
class TestLambdaDecoratorSettings(unittest.TestCase):
563+
564+
@patch("datadog_lambda.config.Config.trace_enabled", False)
568565
def test_some_envs_should_depend_on_dd_tracing_enabled(self):
569-
wrapper.dd_tracing_enabled = False
570566
os.environ[wrapper.DD_TRACE_MANAGED_SERVICES] = "true"
571567
os.environ[wrapper.DD_ENCODE_AUTHORIZER_CONTEXT] = "true"
572568
os.environ[wrapper.DD_DECODE_AUTHORIZER_CONTEXT] = "true"

0 commit comments

Comments
 (0)