Skip to content

Commit c4341a8

Browse files
Add unit test
1 parent f82f6a2 commit c4341a8

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
)
7070
from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
7171
from opentelemetry.test.wsgitestutil import WsgiTestBase
72+
from opentelemetry.trace.propagation import _SPAN_KEY
7273
from opentelemetry.util.http import (
7374
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS,
7475
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST,
@@ -810,6 +811,50 @@ def test_flask_metrics_excluded_urls_new_semconv(self):
810811
self.assertTrue(number_data_point_seen)
811812
self.assertFalse(histogram_data_point_seen)
812813

814+
def test_duration_histogram_old_record_with_context(self):
815+
with patch("opentelemetry.context.set_value") as mock_set_value:
816+
self.client.get("/hello/123")
817+
818+
# Verify that context.set_value was called for metrics exemplar context
819+
# with same trace, span ID as trace
820+
mock_set_value.assert_called()
821+
call_args = mock_set_value.call_args
822+
self.assertEqual(len(call_args[0]), 2)
823+
self.assertEqual(call_args[0][0], _SPAN_KEY)
824+
span_arg = call_args[0][1]
825+
self.assertIsNotNone(span_arg)
826+
finished_spans = self.memory_exporter.get_finished_spans()
827+
self.assertEqual(len(finished_spans), 1)
828+
finished_span = finished_spans[0]
829+
self.assertEqual(
830+
span_arg.context.trace_id, finished_span.context.trace_id
831+
)
832+
self.assertEqual(
833+
span_arg.context.span_id, finished_span.context.span_id
834+
)
835+
836+
def test_duration_histogram_new_record_with_context_new_semconv(self):
837+
with patch("opentelemetry.context.set_value") as mock_set_value:
838+
self.client.get("/hello/123")
839+
840+
# Verify that context.set_value was called for metrics exemplar context
841+
# with same trace, span ID as trace
842+
mock_set_value.assert_called()
843+
call_args = mock_set_value.call_args
844+
self.assertEqual(len(call_args[0]), 2)
845+
self.assertEqual(call_args[0][0], _SPAN_KEY)
846+
span_arg = call_args[0][1]
847+
self.assertIsNotNone(span_arg)
848+
finished_spans = self.memory_exporter.get_finished_spans()
849+
self.assertEqual(len(finished_spans), 1)
850+
finished_span = finished_spans[0]
851+
self.assertEqual(
852+
span_arg.context.trace_id, finished_span.context.trace_id
853+
)
854+
self.assertEqual(
855+
span_arg.context.span_id, finished_span.context.span_id
856+
)
857+
813858

814859
class TestProgrammaticHooks(InstrumentationTest, WsgiTestBase):
815860
def setUp(self):

0 commit comments

Comments
 (0)