Skip to content

Commit 9d50736

Browse files
committed
Assert metrics in aiohttp-server tests
1 parent df15faa commit 9d50736

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

instrumentation/opentelemetry-instrumentation-aiohttp-server/tests/test_aiohttp_server_integration.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import pytest
2020
import pytest_asyncio
2121

22+
from opentelemetry import metrics as metrics_api
2223
from opentelemetry import trace as trace_api
2324
from opentelemetry.instrumentation.aiohttp_server import (
2425
AioHttpServerInstrumentor,
@@ -29,7 +30,10 @@
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+
)
3337
from opentelemetry.test.test_base import TestBase
3438
from 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+
6886
async 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
)
114132
async 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

Comments
 (0)