@@ -46,6 +46,16 @@ def my_lambda_handler(event, context):
4646module_name , function_name = get_lambda_handler_or_default ()
4747wrapt .wrap_function_wrapper (module_name , function_name , lambda_handler_with_instana )
4848
49+ def my_errored_lambda_handler (event , context ):
50+ return {
51+ 'statusCode' : 500 ,
52+ 'headers' : {'Content-Type' : 'application/json' },
53+ 'body' : json .dumps ({'site' : 'wikipedia.org' , 'response' : 500 })
54+ }
55+
56+ os .environ ["LAMBDA_HANDLER" ] = "tests.platforms.test_lambda.my_errored_lambda_handler"
57+ module_name , function_name = get_lambda_handler_or_default ()
58+ wrapt .wrap_function_wrapper (module_name , function_name , lambda_handler_with_instana )
4959
5060class TestLambda (unittest .TestCase ):
5161 def __init__ (self , methodName = 'runTest' ):
@@ -364,6 +374,70 @@ def test_api_gateway_v2_trigger_tracing(self):
364374 self .assertEqual ("secret=key&q=term" , span .data ['http' ]['params' ])
365375
366376
377+ def test_api_gateway_v2_trigger_errored_tracing (self ):
378+
379+ with open (self .pwd + '/../data/lambda/api_gateway_v2_event.json' , 'r' ) as json_file :
380+ event = json .load (json_file )
381+
382+ os .environ ["LAMBDA_HANDLER" ] = "tests.platforms.test_lambda.my_errored_lambda_handler"
383+ self .create_agent_and_setup_tracer ()
384+
385+ result = lambda_handler (event , self .context )
386+
387+ assert isinstance (result , dict )
388+ assert 'headers' in result
389+ assert 'Server-Timing' in result ['headers' ]
390+
391+ time .sleep (1 )
392+ payload = self .agent .collector .prepare_payload ()
393+
394+ self .assertTrue ("metrics" in payload )
395+ self .assertTrue ("spans" in payload )
396+ self .assertEqual (2 , len (payload .keys ()))
397+
398+ self .assertTrue (isinstance (payload ['metrics' ]['plugins' ], list ))
399+ self .assertTrue (len (payload ['metrics' ]['plugins' ]) == 1 )
400+ plugin_data = payload ['metrics' ]['plugins' ][0 ]
401+
402+ self .assertEqual ('com.instana.plugin.aws.lambda' , plugin_data ['name' ])
403+ self .assertEqual ('arn:aws:lambda:us-east-2:12345:function:TestPython:1' , plugin_data ['entityId' ])
404+
405+ self .assertEqual (1 , len (payload ['spans' ]))
406+
407+ span = payload ['spans' ][0 ]
408+ self .assertEqual ('aws.lambda.entry' , span .n )
409+ self .assertEqual ('0000000000001234' , span .t )
410+ self .assertIsNotNone (span .s )
411+ self .assertEqual ('0000000000004567' , span .p )
412+ self .assertIsNotNone (span .ts )
413+ self .assertIsNotNone (span .d )
414+
415+ server_timing_value = "intid;desc=%s" % span .t
416+ assert result ['headers' ]['Server-Timing' ] == server_timing_value
417+
418+ self .assertEqual ({'hl' : True , 'cp' : 'aws' , 'e' : 'arn:aws:lambda:us-east-2:12345:function:TestPython:1' },
419+ span .f )
420+
421+ self .assertTrue (span .sy )
422+
423+ self .assertEqual (1 , span .ec )
424+ self .assertEqual ('HTTP status 500' , span .data ['lambda' ]['error' ])
425+
426+ self .assertEqual ('arn:aws:lambda:us-east-2:12345:function:TestPython:1' , span .data ['lambda' ]['arn' ])
427+ self .assertEqual (None , span .data ['lambda' ]['alias' ])
428+ self .assertEqual ('python' , span .data ['lambda' ]['runtime' ])
429+ self .assertEqual ('TestPython' , span .data ['lambda' ]['functionName' ])
430+ self .assertEqual ('1' , span .data ['lambda' ]['functionVersion' ])
431+ self .assertIsNone (span .data ['service' ])
432+
433+ self .assertEqual ('aws:api.gateway' , span .data ['lambda' ]['trigger' ])
434+ self .assertEqual ('POST' , span .data ['http' ]['method' ])
435+ self .assertEqual (500 , span .data ['http' ]['status' ])
436+ self .assertEqual ('/my/path' , span .data ['http' ]['url' ])
437+ self .assertEqual ('/my/{resource}' , span .data ['http' ]['path_tpl' ])
438+ self .assertEqual ("secret=key&q=term" , span .data ['http' ]['params' ])
439+
440+
367441 def test_application_lb_trigger_tracing (self ):
368442 with open (self .pwd + '/../data/lambda/api_gateway_event.json' , 'r' ) as json_file :
369443 event = json .load (json_file )
0 commit comments