@@ -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