@@ -2536,6 +2536,98 @@ def test_authorizer_span_no_negative_duration_when_clock_skew(mock_span_finish):
25362536 )
25372537
25382538
2539+ class TestDurableExecutionInferredSpan (unittest .TestCase ):
2540+ def test_creates_execution_init_span_for_first_invocation (self ):
2541+ event = {
2542+ "DurableExecutionArn" : "arn:aws:lambda:us-east-1:123456789012:function:my-func:1/durable-execution/my-execution/550e8400-e29b-41d4-a716-446655440004" ,
2543+ "InitialExecutionState" : {
2544+ "Operations" : [{"StartTimestamp" : "1778088546775" }]
2545+ },
2546+ }
2547+ durable_function_tags = {
2548+ "aws_lambda.durable_function.execution_name" : "my-execution" ,
2549+ "aws_lambda.durable_function.execution_id" : "550e8400-e29b-41d4-a716-446655440004" ,
2550+ "aws_lambda.durable_function.first_invocation" : "true" ,
2551+ }
2552+ ctx = get_mock_context (aws_request_id = "abc-123" )
2553+
2554+ with patch .dict (
2555+ os .environ , {"DD_DURABLE_EXECUTION_SERVICE" : "durable-svc" }, clear = False
2556+ ):
2557+ span = create_inferred_span (
2558+ event , ctx , durable_function_tags = durable_function_tags
2559+ )
2560+
2561+ self .assertIsNotNone (span )
2562+ self .assertEqual (span .name , "aws.durable.execution_init" )
2563+ self .assertEqual (span .service , "durable-svc" )
2564+ self .assertEqual (span .resource , "my-execution" )
2565+ self .assertEqual (span .start_ns , 1778088546775000000 )
2566+ self .assertEqual (
2567+ span .get_tag ("operation_name" ), "aws.durable.execution_init"
2568+ )
2569+ self .assertEqual (
2570+ span .get_tag ("durable.execution_arn" ), event ["DurableExecutionArn" ]
2571+ )
2572+ self .assertEqual (span .get_tag ("durable.execution_name" ), "my-execution" )
2573+ self .assertEqual (
2574+ span .get_tag ("durable.execution_id" ),
2575+ "550e8400-e29b-41d4-a716-446655440004" ,
2576+ )
2577+ span .finish ()
2578+
2579+ def test_does_not_create_execution_init_span_for_replay_invocation (self ):
2580+ event = {
2581+ "DurableExecutionArn" : "arn:aws:lambda:us-east-1:123456789012:function:my-func:1/durable-execution/my-execution/550e8400-e29b-41d4-a716-446655440004" ,
2582+ "InitialExecutionState" : {
2583+ "Operations" : [{"StartTimestamp" : "1778088546775" }]
2584+ },
2585+ }
2586+ durable_function_tags = {
2587+ "aws_lambda.durable_function.execution_name" : "my-execution" ,
2588+ "aws_lambda.durable_function.execution_id" : "550e8400-e29b-41d4-a716-446655440004" ,
2589+ "aws_lambda.durable_function.first_invocation" : "false" ,
2590+ }
2591+ ctx = get_mock_context ()
2592+
2593+ span = create_inferred_span (event , ctx , durable_function_tags = durable_function_tags )
2594+ self .assertIsNone (span )
2595+
2596+ def test_parents_lambda_span_to_execution_init_span (self ):
2597+ event = {
2598+ "DurableExecutionArn" : "arn:aws:lambda:us-east-1:123456789012:function:my-func:1/durable-execution/my-execution/550e8400-e29b-41d4-a716-446655440004" ,
2599+ "InitialExecutionState" : {
2600+ "Operations" : [{"StartTimestamp" : "1778088546775" }]
2601+ },
2602+ }
2603+ durable_function_tags = {
2604+ "aws_lambda.durable_function.execution_name" : "my-execution" ,
2605+ "aws_lambda.durable_function.execution_id" : "550e8400-e29b-41d4-a716-446655440004" ,
2606+ "aws_lambda.durable_function.first_invocation" : "true" ,
2607+ }
2608+ ctx = get_mock_context ()
2609+
2610+ inferred_span = create_inferred_span (
2611+ event , ctx , durable_function_tags = durable_function_tags
2612+ )
2613+ lambda_span = create_function_execution_span (
2614+ context = ctx ,
2615+ function_name = "Function" ,
2616+ is_cold_start = False ,
2617+ is_proactive_init = False ,
2618+ trace_context_source = {"source" : "" },
2619+ merge_xray_traces = False ,
2620+ trigger_tags = {},
2621+ durable_function_tags = durable_function_tags ,
2622+ parent_span = inferred_span ,
2623+ span_pointers = None ,
2624+ )
2625+
2626+ self .assertEqual (lambda_span .parent_id , inferred_span .span_id )
2627+ lambda_span .finish ()
2628+ inferred_span .finish ()
2629+
2630+
25392631class TestInferredSpans (unittest .TestCase ):
25402632 @patch ("datadog_lambda.tracing.submit_errors_metric" )
25412633 def test_mark_trace_as_error_for_5xx_responses_getting_400_response_code (
0 commit comments