From d6f3c1b4be4433f47eb8d1bd792d0e8d52ef6275 Mon Sep 17 00:00:00 2001 From: tammy-baylis-swi Date: Fri, 16 Feb 2024 15:15:39 -0800 Subject: [PATCH] Add lambda test --- .../tests/mocks/lambda_function.py | 4 ++++ .../test_aws_lambda_instrumentation_manual.py | 23 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/mocks/lambda_function.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/mocks/lambda_function.py index 259375c481..a878d0f06a 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/mocks/lambda_function.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/mocks/lambda_function.py @@ -19,3 +19,7 @@ def handler(event, context): def rest_api_handler(event, context): return {"statusCode": 200, "body": "200 ok"} + + +def handler_exc(event, context): + raise Exception("500 internal server error") diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py index 5e4aaf0312..070579ef6f 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py @@ -40,7 +40,7 @@ from opentelemetry.semconv.resource import ResourceAttributes from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.test.test_base import TestBase -from opentelemetry.trace import NoOpTracerProvider, SpanKind +from opentelemetry.trace import NoOpTracerProvider, SpanKind, StatusCode from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, ) @@ -410,6 +410,27 @@ def test_lambda_handles_list_event(self): assert spans + def test_lambda_handles_handler_exception(self): + self.exc_env_patch = mock.patch.dict( + "os.environ", + {_HANDLER: "tests.mocks.lambda_function.handler_exc"}, + ) + self.exc_env_patch.start() + AwsLambdaInstrumentor().instrument() + # instrumentor re-raises the exception + with self.assertRaises(Exception): + mock_execute_lambda() + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual(span.status.status_code, StatusCode.ERROR) + self.assertEqual(len(span.events), 1) + event = span.events[0] + self.assertEqual(event.name, "exception") + + self.exc_env_patch.stop() + def test_uninstrument(self): AwsLambdaInstrumentor().instrument()