6
6
from unittest .mock import patch , call , ANY , MagicMock
7
7
from datadog_lambda .constants import TraceHeader
8
8
9
- from datadog_lambda .wrapper import datadog_lambda_wrapper
9
+ import datadog_lambda .wrapper as wrapper
10
10
from datadog_lambda .metric import lambda_metric
11
11
from datadog_lambda .thread_stats_writer import ThreadStatsWriter
12
12
@@ -31,8 +31,11 @@ class TestDatadogLambdaWrapper(unittest.TestCase):
31
31
def setUp (self ):
32
32
# Force @datadog_lambda_wrapper to always create a real
33
33
# (not no-op) wrapper.
34
- datadog_lambda_wrapper ._force_wrap = True
34
+ patch ("ddtrace.internal.remoteconfig.RemoteConfig" ).start ()
35
+ patch ("ddtrace.internal.writer.AgentWriter.flush_queue" ).start ()
35
36
37
+ wrapper .datadog_lambda_wrapper ._force_wrap = True
38
+ wrapper .dd_tracing_enabled = True
36
39
patcher = patch (
37
40
"datadog.threadstats.reporters.HttpReporter.flush_distributions"
38
41
)
@@ -84,7 +87,9 @@ def setUp(self):
84
87
self .addCleanup (patcher .stop )
85
88
86
89
def test_datadog_lambda_wrapper (self ):
87
- @datadog_lambda_wrapper
90
+ wrapper .dd_tracing_enabled = False
91
+
92
+ @wrapper .datadog_lambda_wrapper
88
93
def lambda_handler (event , context ):
89
94
lambda_metric ("test.metric" , 100 )
90
95
@@ -93,7 +98,7 @@ def lambda_handler(event, context):
93
98
lambda_context = get_mock_context ()
94
99
95
100
lambda_handler (lambda_event , lambda_context )
96
-
101
+ wrapper . dd_tracing_enabled = True
97
102
self .mock_threadstats_flush_distributions .assert_has_calls (
98
103
[
99
104
call (
@@ -112,7 +117,10 @@ def lambda_handler(event, context):
112
117
]
113
118
)
114
119
self .mock_extract_dd_trace_context .assert_called_with (
115
- lambda_event , lambda_context , extractor = None , decode_authorizer_context = True
120
+ lambda_event ,
121
+ lambda_context ,
122
+ extractor = None ,
123
+ decode_authorizer_context = False ,
116
124
)
117
125
self .mock_set_correlation_ids .assert_called ()
118
126
self .mock_inject_correlation_ids .assert_called ()
@@ -121,7 +129,7 @@ def lambda_handler(event, context):
121
129
def test_datadog_lambda_wrapper_flush_to_log (self ):
122
130
os .environ ["DD_FLUSH_TO_LOG" ] = "True"
123
131
124
- @datadog_lambda_wrapper
132
+ @wrapper . datadog_lambda_wrapper
125
133
def lambda_handler (event , context ):
126
134
lambda_metric ("test.metric" , 100 )
127
135
@@ -139,7 +147,7 @@ def test_datadog_lambda_wrapper_flush_in_thread(self):
139
147
metric_module .lambda_stats .stop ()
140
148
metric_module .lambda_stats = ThreadStatsWriter (True )
141
149
142
- @datadog_lambda_wrapper
150
+ @wrapper . datadog_lambda_wrapper
143
151
def lambda_handler (event , context ):
144
152
import time
145
153
@@ -166,7 +174,7 @@ def test_datadog_lambda_wrapper_not_flush_in_thread(self):
166
174
metric_module .lambda_stats .stop ()
167
175
metric_module .lambda_stats = ThreadStatsWriter (False )
168
176
169
- @datadog_lambda_wrapper
177
+ @wrapper . datadog_lambda_wrapper
170
178
def lambda_handler (event , context ):
171
179
import time
172
180
@@ -188,21 +196,22 @@ def lambda_handler(event, context):
188
196
189
197
def test_datadog_lambda_wrapper_inject_correlation_ids (self ):
190
198
os .environ ["DD_LOGS_INJECTION" ] = "True"
199
+ wrapper .dd_tracing_enabled = False
191
200
192
- @datadog_lambda_wrapper
201
+ @wrapper . datadog_lambda_wrapper
193
202
def lambda_handler (event , context ):
194
203
lambda_metric ("test.metric" , 100 )
195
204
196
205
lambda_event = {}
197
206
lambda_handler (lambda_event , get_mock_context ())
198
-
207
+ wrapper . dd_tracing_enabled = True
199
208
self .mock_set_correlation_ids .assert_called ()
200
209
self .mock_inject_correlation_ids .assert_called ()
201
210
202
211
del os .environ ["DD_LOGS_INJECTION" ]
203
212
204
213
def test_invocations_metric (self ):
205
- @datadog_lambda_wrapper
214
+ @wrapper . datadog_lambda_wrapper
206
215
def lambda_handler (event , context ):
207
216
lambda_metric ("test.metric" , 100 )
208
217
@@ -232,7 +241,7 @@ def lambda_handler(event, context):
232
241
)
233
242
234
243
def test_errors_metric (self ):
235
- @datadog_lambda_wrapper
244
+ @wrapper . datadog_lambda_wrapper
236
245
def lambda_handler (event , context ):
237
246
raise RuntimeError ()
238
247
@@ -288,7 +297,7 @@ def test_5xx_sends_errors_metric_and_set_tags(self, mock_extract_trigger_tags):
288
297
"http.method" : "GET" ,
289
298
}
290
299
291
- @datadog_lambda_wrapper
300
+ @wrapper . datadog_lambda_wrapper
292
301
def lambda_handler (event , context ):
293
302
return {"statusCode" : 500 , "body" : "fake response body" }
294
303
@@ -334,7 +343,7 @@ def lambda_handler(event, context):
334
343
)
335
344
336
345
def test_enhanced_metrics_cold_start_tag (self ):
337
- @datadog_lambda_wrapper
346
+ @wrapper . datadog_lambda_wrapper
338
347
def lambda_handler (event , context ):
339
348
lambda_metric ("test.metric" , 100 )
340
349
@@ -386,7 +395,7 @@ def lambda_handler(event, context):
386
395
)
387
396
388
397
def test_enhanced_metrics_latest (self ):
389
- @datadog_lambda_wrapper
398
+ @wrapper . datadog_lambda_wrapper
390
399
def lambda_handler (event , context ):
391
400
lambda_metric ("test.metric" , 100 )
392
401
@@ -420,7 +429,7 @@ def lambda_handler(event, context):
420
429
)
421
430
422
431
def test_enhanced_metrics_alias (self ):
423
- @datadog_lambda_wrapper
432
+ @wrapper . datadog_lambda_wrapper
424
433
def lambda_handler (event , context ):
425
434
lambda_metric ("test.metric" , 100 )
426
435
@@ -456,7 +465,7 @@ def lambda_handler(event, context):
456
465
def test_no_enhanced_metrics_without_env_var (self ):
457
466
os .environ ["DD_ENHANCED_METRICS" ] = "false"
458
467
459
- @datadog_lambda_wrapper
468
+ @wrapper . datadog_lambda_wrapper
460
469
def lambda_handler (event , context ):
461
470
raise RuntimeError ()
462
471
@@ -474,15 +483,15 @@ def test_only_one_wrapper_in_use(self):
474
483
self .mock_submit_invocations_metric = patcher .start ()
475
484
self .addCleanup (patcher .stop )
476
485
477
- @datadog_lambda_wrapper
486
+ @wrapper . datadog_lambda_wrapper
478
487
def lambda_handler (event , context ):
479
488
lambda_metric ("test.metric" , 100 )
480
489
481
490
# Turn off _force_wrap to emulate the nested wrapper scenario,
482
491
# the second @datadog_lambda_wrapper should actually be no-op.
483
- datadog_lambda_wrapper ._force_wrap = False
492
+ wrapper . datadog_lambda_wrapper ._force_wrap = False
484
493
485
- lambda_handler_double_wrapped = datadog_lambda_wrapper (lambda_handler )
494
+ lambda_handler_double_wrapped = wrapper . datadog_lambda_wrapper (lambda_handler )
486
495
487
496
lambda_event = {}
488
497
@@ -492,7 +501,7 @@ def lambda_handler(event, context):
492
501
self .mock_submit_invocations_metric .assert_called_once ()
493
502
494
503
def test_dd_requests_service_name_default (self ):
495
- @datadog_lambda_wrapper
504
+ @wrapper . datadog_lambda_wrapper
496
505
def lambda_handler (event , context ):
497
506
pass
498
507
@@ -501,15 +510,15 @@ def lambda_handler(event, context):
501
510
def test_dd_requests_service_name_set (self ):
502
511
os .environ ["DD_SERVICE" ] = "myAwesomeService"
503
512
504
- @datadog_lambda_wrapper
513
+ @wrapper . datadog_lambda_wrapper
505
514
def lambda_handler (event , context ):
506
515
pass
507
516
508
517
self .assertEqual (os .environ .get ("DD_REQUESTS_SERVICE_NAME" ), "myAwesomeService" )
509
518
del os .environ ["DD_SERVICE" ]
510
519
511
520
def test_encode_authorizer_span (self ):
512
- @datadog_lambda_wrapper
521
+ @wrapper . datadog_lambda_wrapper
513
522
def lambda_handler (event , context ):
514
523
return {
515
524
"principalId" : "foo" ,
@@ -537,7 +546,7 @@ def lambda_handler(event, context):
537
546
mock_span .start_ns = 1668127541671386817
538
547
mock_span .duration_ns = 1e8
539
548
lambda_handler .inferred_span = mock_span
540
-
549
+ lambda_handler . make_inferred_span = False
541
550
result = lambda_handler (lambda_event , lambda_context )
542
551
inject_data = json .loads (base64 .b64decode (result ["context" ]["_datadog" ]))
543
552
self .assertEquals (inject_data [TraceHeader .PARENT_ID ], "123" )
@@ -551,10 +560,22 @@ def test_different_return_type_no_error(self, MockPrintExc):
551
560
mock_context = get_mock_context ()
552
561
for test_result in TEST_RESULTS :
553
562
554
- @datadog_lambda_wrapper
563
+ @wrapper . datadog_lambda_wrapper
555
564
def return_type_test (event , context ):
556
565
return test_result
557
566
558
567
result = return_type_test ({}, mock_context )
559
568
self .assertEquals (result , test_result )
560
569
self .assertFalse (MockPrintExc .called )
570
+
571
+
572
+ class TestLambdaDecoratorSettings (unittest .TestCase ):
573
+ def test_some_envs_should_depend_on_dd_tracing_enabled (self ):
574
+ wrapper .dd_tracing_enabled = False
575
+ os .environ [wrapper .DD_TRACE_MANAGED_SERVICES ] = "true"
576
+ os .environ [wrapper .DD_ENCODE_AUTHORIZER_CONTEXT ] = "true"
577
+ os .environ [wrapper .DD_DECODE_AUTHORIZER_CONTEXT ] = "true"
578
+ decorator = wrapper ._LambdaDecorator (func = None )
579
+ self .assertFalse (decorator .make_inferred_span )
580
+ self .assertFalse (decorator .encode_authorizer_context )
581
+ self .assertFalse (decorator .decode_authorizer_context )
0 commit comments