|
69 | 69 | ) |
70 | 70 | from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE |
71 | 71 | from opentelemetry.test.wsgitestutil import WsgiTestBase |
| 72 | +from opentelemetry.trace.propagation import _SPAN_KEY |
72 | 73 | from opentelemetry.util.http import ( |
73 | 74 | OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, |
74 | 75 | OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, |
@@ -810,6 +811,50 @@ def test_flask_metrics_excluded_urls_new_semconv(self): |
810 | 811 | self.assertTrue(number_data_point_seen) |
811 | 812 | self.assertFalse(histogram_data_point_seen) |
812 | 813 |
|
| 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 | + |
813 | 858 |
|
814 | 859 | class TestProgrammaticHooks(InstrumentationTest, WsgiTestBase): |
815 | 860 | def setUp(self): |
|
0 commit comments