1919import pytest
2020import pytest_asyncio
2121
22+ from opentelemetry import metrics as metrics_api
2223from opentelemetry import trace as trace_api
2324from opentelemetry .instrumentation .aiohttp_server import (
2425 AioHttpServerInstrumentor ,
2930 HTTP_STATUS_CODE ,
3031 HTTP_URL ,
3132)
32- from opentelemetry .test .globals_test import reset_trace_globals
33+ from opentelemetry .test .globals_test import (
34+ reset_metrics_globals ,
35+ reset_trace_globals ,
36+ )
3337from opentelemetry .test .test_base import TestBase
3438from opentelemetry .util ._importlib_metadata import entry_points
3539
@@ -65,6 +69,20 @@ def fixture_tracer():
6569 reset_trace_globals ()
6670
6771
72+ @pytest .fixture (name = "meter" , scope = "session" )
73+ def fixture_meter ():
74+ test_base = TestBase ()
75+
76+ meter_provider , memory_reader = test_base .create_meter_provider ()
77+
78+ reset_trace_globals ()
79+ metrics_api .set_meter_provider (meter_provider )
80+
81+ yield meter_provider , memory_reader
82+
83+ reset_metrics_globals ()
84+
85+
6886async def default_handler (request , status = 200 ):
6987 return aiohttp .web .Response (status = status )
7088
@@ -113,21 +131,27 @@ def test_checking_instrumentor_pkg_installed():
113131)
114132async def test_status_code_instrumentation (
115133 tracer ,
134+ meter ,
116135 server_fixture ,
117136 aiohttp_client ,
118137 url ,
119138 expected_method ,
120139 expected_status_code ,
121140):
122141 _ , memory_exporter = tracer
142+ _ , metrics_reader = meter
123143 server , _ = server_fixture
124144
125145 assert len (memory_exporter .get_finished_spans ()) == 0
146+ metrics = _get_sorted_metrics (metrics_reader .get_metrics_data ())
147+ assert len (metrics ) == 0
126148
127149 client = await aiohttp_client (server )
128150 await client .get (url )
129151
130152 assert len (memory_exporter .get_finished_spans ()) == 1
153+ metrics = _get_sorted_metrics (metrics_reader .get_metrics_data ())
154+ assert len (metrics ) == 2
131155
132156 [span ] = memory_exporter .get_finished_spans ()
133157
@@ -197,14 +221,31 @@ async def handler(request):
197221 memory_exporter .clear ()
198222
199223
224+ def _get_sorted_metrics (metrics_data ):
225+ resource_metrics = metrics_data .resource_metrics if metrics_data else []
226+
227+ all_metrics = []
228+ for metrics in resource_metrics :
229+ for scope_metrics in metrics .scope_metrics :
230+ all_metrics .extend (scope_metrics .metrics )
231+
232+ return sorted (
233+ all_metrics ,
234+ key = lambda m : m .name ,
235+ )
236+
237+
200238@pytest .mark .asyncio
201239@pytest .mark .parametrize (
202240 "env_var" ,
203241 ["OTEL_PYTHON_AIOHTTP_SERVER_EXCLUDED_URLS" , "OTEL_PYTHON_EXCLUDED_URLS" ],
204242)
205- async def test_excluded_urls (tracer , aiohttp_server , monkeypatch , env_var ):
243+ async def test_excluded_urls (
244+ tracer , meter , aiohttp_server , monkeypatch , env_var
245+ ):
206246 """Test that excluded env vars are taken into account."""
207247 _ , memory_exporter = tracer
248+ _ , metrics_reader = meter
208249
209250 monkeypatch .setenv (env_var , "/status/200" )
210251 AioHttpServerInstrumentor ().instrument ()
@@ -227,4 +268,7 @@ async def handler(request):
227268 spans = memory_exporter .get_finished_spans ()
228269 assert len (spans ) == 0
229270
271+ metrics = _get_sorted_metrics (metrics_reader .get_metrics_data ())
272+ assert len (metrics ) == 0
273+
230274 AioHttpServerInstrumentor ().uninstrument ()
0 commit comments