From 0431d7b62f4cf363fceb1f3f722339b975f46d6b Mon Sep 17 00:00:00 2001 From: Sanket Mehta Date: Thu, 3 Feb 2022 22:40:03 +0530 Subject: [PATCH] =?UTF-8?q?adding=20unit=20test=20case=20for=20ASGI=20fram?= =?UTF-8?q?ework=20for=20application=20wrapped=20with=E2=80=A6=20(#899)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adding unit test case for ASGI framework for application wrapped with another framework * resolving lint errors * resolving generate build errors * resolving flake errors Co-authored-by: Diego Hurtado --- .../tests/test_asgi_middleware.py | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py index aa33c3489..f1128b8cb 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py @@ -30,7 +30,7 @@ from opentelemetry.test.asgitestutil import ( setup_testing_defaults, ) from opentelemetry.test.test_base import TestBase -from opentelemetry.trace import format_span_id, format_trace_id +from opentelemetry.trace import SpanKind, format_span_id, format_trace_id async def http_app(scope, receive, send): @@ -550,5 +550,38 @@ class TestAsgiAttributes(unittest.TestCase): ) +class TestWrappedApplication(AsgiTestBase): + def test_mark_span_internal_in_presence_of_span_from_other_framework(self): + tracer_provider, exporter = TestBase.create_tracer_provider() + tracer = tracer_provider.get_tracer(__name__) + app = otel_asgi.OpenTelemetryMiddleware( + simple_asgi, tracer_provider=tracer_provider + ) + + # Wrapping the otel intercepted app with server span + async def wrapped_app(scope, receive, send): + with tracer.start_as_current_span( + "test", kind=SpanKind.SERVER + ) as _: + await app(scope, receive, send) + + self.seed_app(wrapped_app) + self.send_default_request() + span_list = exporter.get_finished_spans() + + self.assertEqual(SpanKind.INTERNAL, span_list[0].kind) + self.assertEqual(SpanKind.INTERNAL, span_list[1].kind) + self.assertEqual(SpanKind.INTERNAL, span_list[2].kind) + self.assertEqual(trace_api.SpanKind.INTERNAL, span_list[3].kind) + + # SERVER "test" + self.assertEqual(SpanKind.SERVER, span_list[4].kind) + + # internal span should be child of the test span we have provided + self.assertEqual( + span_list[4].context.span_id, span_list[3].parent.span_id + ) + + if __name__ == "__main__": unittest.main()