@@ -136,6 +136,70 @@ def test_with_complete_datadog_trace_headers(self):
136136 XraySubsegment .NAMESPACE ,
137137 )
138138
139+ def test_with_extractor_function (self ):
140+ def extractor_foo (event , context ):
141+ foo = event .get ("foo" , {})
142+ lowercase_foo = {k .lower (): v for k , v in foo .items ()}
143+
144+ trace_id = lowercase_foo .get (TraceHeader .TRACE_ID )
145+ parent_id = lowercase_foo .get (TraceHeader .PARENT_ID )
146+ sampling_priority = lowercase_foo .get (TraceHeader .SAMPLING_PRIORITY )
147+ return trace_id , parent_id , sampling_priority
148+
149+ lambda_ctx = get_mock_context ()
150+ ctx , ctx_source = extract_dd_trace_context (
151+ {
152+ "foo" : {
153+ TraceHeader .TRACE_ID : "123" ,
154+ TraceHeader .PARENT_ID : "321" ,
155+ TraceHeader .SAMPLING_PRIORITY : "1" ,
156+ }
157+ },
158+ lambda_ctx ,
159+ extractor = extractor_foo ,
160+ )
161+ self .assertEquals (ctx_source , "event" )
162+ self .assertDictEqual (
163+ ctx , {"trace-id" : "123" , "parent-id" : "321" , "sampling-priority" : "1" ,},
164+ )
165+ self .assertDictEqual (
166+ get_dd_trace_context (),
167+ {
168+ TraceHeader .TRACE_ID : "123" ,
169+ TraceHeader .PARENT_ID : "65535" ,
170+ TraceHeader .SAMPLING_PRIORITY : "1" ,
171+ },
172+ )
173+
174+ def test_graceful_fail_of_extractor_function (self ):
175+ def extractor_raiser (event , context ):
176+ raise Exception ("kreator" )
177+
178+ lambda_ctx = get_mock_context ()
179+ ctx , ctx_source = extract_dd_trace_context (
180+ {
181+ "foo" : {
182+ TraceHeader .TRACE_ID : "123" ,
183+ TraceHeader .PARENT_ID : "321" ,
184+ TraceHeader .SAMPLING_PRIORITY : "1" ,
185+ }
186+ },
187+ lambda_ctx ,
188+ extractor = extractor_raiser ,
189+ )
190+ self .assertEquals (ctx_source , "xray" )
191+ self .assertDictEqual (
192+ ctx , {"trace-id" : "4369" , "parent-id" : "65535" , "sampling-priority" : "2" ,},
193+ )
194+ self .assertDictEqual (
195+ get_dd_trace_context (),
196+ {
197+ TraceHeader .TRACE_ID : "4369" ,
198+ TraceHeader .PARENT_ID : "65535" ,
199+ TraceHeader .SAMPLING_PRIORITY : "2" ,
200+ },
201+ )
202+
139203 def test_with_sqs_distributed_datadog_trace_data (self ):
140204 lambda_ctx = get_mock_context ()
141205 sqs_event = {
0 commit comments