|
21 | 21 | from timeit import default_timer |
22 | 22 | from unittest import mock |
23 | 23 |
|
| 24 | +import pytest |
| 25 | + |
24 | 26 | import opentelemetry.instrumentation.asgi as otel_asgi |
25 | 27 | from opentelemetry import trace as trace_api |
26 | 28 | from opentelemetry.instrumentation.propagators import ( |
@@ -752,52 +754,64 @@ def test_asgi_metrics(self): |
752 | 754 | ) |
753 | 755 | self.assertTrue(number_data_point_seen and histogram_data_point_seen) |
754 | 756 |
|
755 | | - def test_basic_metric_success(self): |
756 | | - app = otel_asgi.OpenTelemetryMiddleware(simple_asgi) |
757 | | - self.seed_app(app) |
758 | | - start = default_timer() |
759 | | - self.send_default_request() |
760 | | - duration = max(round((default_timer() - start) * 1000), 0) |
761 | | - expected_duration_attributes = { |
762 | | - "http.method": "GET", |
763 | | - "http.host": "127.0.0.1", |
764 | | - "http.scheme": "http", |
765 | | - "http.flavor": "1.0", |
766 | | - "net.host.port": 80, |
767 | | - "http.status_code": 200, |
768 | | - } |
769 | | - expected_requests_count_attributes = { |
770 | | - "http.method": "GET", |
771 | | - "http.host": "127.0.0.1", |
772 | | - "http.scheme": "http", |
773 | | - "http.flavor": "1.0", |
774 | | - } |
775 | | - metrics_list = self.memory_metrics_reader.get_metrics_data() |
776 | | - # pylint: disable=too-many-nested-blocks |
777 | | - for resource_metric in metrics_list.resource_metrics: |
778 | | - for scope_metrics in resource_metric.scope_metrics: |
779 | | - for metric in scope_metrics.metrics: |
780 | | - for point in list(metric.data.data_points): |
781 | | - if isinstance(point, HistogramDataPoint): |
782 | | - self.assertDictEqual( |
783 | | - expected_duration_attributes, |
784 | | - dict(point.attributes), |
785 | | - ) |
786 | | - self.assertEqual(point.count, 1) |
787 | | - if metric.name == "http.server.duration": |
788 | | - self.assertAlmostEqual( |
789 | | - duration, point.sum, delta=5 |
| 757 | + @pytest.mark.parametrize( |
| 758 | + "span_recording", |
| 759 | + [True, False], |
| 760 | + ) |
| 761 | + def test_basic_metric_success(self, span_recording): |
| 762 | + mock_tracer = mock.Mock() |
| 763 | + mock_span = mock.Mock() |
| 764 | + mock_span.is_recording.return_value = span_recording |
| 765 | + mock_tracer.start_as_current_span.return_value = mock_span |
| 766 | + mock_tracer.start_as_current_span.return_value.__enter__ = mock_span |
| 767 | + mock_tracer.start_as_current_span.return_value.__exit__ = mock_span |
| 768 | + with mock.patch("opentelemetry.trace.get_tracer") as tracer: |
| 769 | + tracer.return_value = mock_tracer |
| 770 | + app = otel_asgi.OpenTelemetryMiddleware(simple_asgi) |
| 771 | + self.seed_app(app) |
| 772 | + start = default_timer() |
| 773 | + self.send_default_request() |
| 774 | + duration = max(round((default_timer() - start) * 1000), 0) |
| 775 | + expected_duration_attributes = { |
| 776 | + "http.method": "GET", |
| 777 | + "http.host": "127.0.0.1", |
| 778 | + "http.scheme": "http", |
| 779 | + "http.flavor": "1.0", |
| 780 | + "net.host.port": 80, |
| 781 | + "http.status_code": 200, |
| 782 | + } |
| 783 | + expected_requests_count_attributes = { |
| 784 | + "http.method": "GET", |
| 785 | + "http.host": "127.0.0.1", |
| 786 | + "http.scheme": "http", |
| 787 | + "http.flavor": "1.0", |
| 788 | + } |
| 789 | + metrics_list = self.memory_metrics_reader.get_metrics_data() |
| 790 | + # pylint: disable=too-many-nested-blocks |
| 791 | + for resource_metric in metrics_list.resource_metrics: |
| 792 | + for scope_metrics in resource_metric.scope_metrics: |
| 793 | + for metric in scope_metrics.metrics: |
| 794 | + for point in list(metric.data.data_points): |
| 795 | + if isinstance(point, HistogramDataPoint): |
| 796 | + self.assertDictEqual( |
| 797 | + expected_duration_attributes, |
| 798 | + dict(point.attributes), |
790 | 799 | ) |
791 | | - elif metric.name == "http.server.response.size": |
792 | | - self.assertEqual(1024, point.sum) |
793 | | - elif metric.name == "http.server.request.size": |
794 | | - self.assertEqual(128, point.sum) |
795 | | - elif isinstance(point, NumberDataPoint): |
796 | | - self.assertDictEqual( |
797 | | - expected_requests_count_attributes, |
798 | | - dict(point.attributes), |
799 | | - ) |
800 | | - self.assertEqual(point.value, 0) |
| 800 | + self.assertEqual(point.count, 1) |
| 801 | + if metric.name == "http.server.duration": |
| 802 | + self.assertAlmostEqual( |
| 803 | + duration, point.sum, delta=5 |
| 804 | + ) |
| 805 | + elif metric.name == "http.server.response.size": |
| 806 | + self.assertEqual(1024, point.sum) |
| 807 | + elif metric.name == "http.server.request.size": |
| 808 | + self.assertEqual(128, point.sum) |
| 809 | + elif isinstance(point, NumberDataPoint): |
| 810 | + self.assertDictEqual( |
| 811 | + expected_requests_count_attributes, |
| 812 | + dict(point.attributes), |
| 813 | + ) |
| 814 | + self.assertEqual(point.value, 0) |
801 | 815 |
|
802 | 816 | def test_metric_target_attribute(self): |
803 | 817 | expected_target = "/api/user/{id}" |
|
0 commit comments