55from fastapi import status
66from httpx import ASGITransport , AsyncClient
77from opentelemetry import trace
8- from opentelemetry .sdk .trace import ReadableSpan , TracerProvider
8+ from opentelemetry .sdk .trace import TracerProvider
99from opentelemetry .sdk .trace .export import SimpleSpanProcessor
1010from opentelemetry .sdk .trace .export .in_memory_span_exporter import InMemorySpanExporter
1111from opentelemetry .trace import SpanKind
1818 import pytest
1919
2020
21- async def _trace_list_decks (monkeypatch : pytest .MonkeyPatch ) -> tuple [ ReadableSpan , ...] :
21+ async def test_traced_request_records_server_and_db_spans_only (monkeypatch : pytest .MonkeyPatch ) -> None :
2222 traced_config = dataclasses .replace (settings .api_bootstrapper_config , opentelemetry_log_traces = True )
2323 monkeypatch .setattr (Settings , "api_bootstrapper_config" , traced_config )
2424 exporter = InMemorySpanExporter ()
@@ -31,26 +31,20 @@ async def _trace_list_decks(monkeypatch: pytest.MonkeyPatch) -> tuple[ReadableSp
3131 response = await client .get ("/api/decks/" )
3232
3333 assert response .status_code == status .HTTP_200_OK
34- return exporter .get_finished_spans ()
35-
36-
37- async def test_db_queries_produce_sqlalchemy_spans (monkeypatch : pytest .MonkeyPatch ) -> None :
34+ spans = exporter .get_finished_spans ()
35+ sqlalchemy_scope = "opentelemetry.instrumentation.sqlalchemy"
3836 db_spans = [
3937 span
40- for span in await _trace_list_decks ( monkeypatch )
38+ for span in spans
4139 if span .instrumentation_scope is not None
42- and span .instrumentation_scope .name == "opentelemetry.instrumentation.sqlalchemy"
40+ and span .instrumentation_scope .name == sqlalchemy_scope
4341 and span .name .startswith ("SELECT" )
4442 ]
4543 assert db_spans
4644 assert all (span .parent is not None for span in db_spans )
47-
48-
49- async def test_request_has_no_asgi_event_spans (monkeypatch : pytest .MonkeyPatch ) -> None :
5045 request_spans = [
5146 span
52- for span in await _trace_list_decks (monkeypatch )
53- if span .instrumentation_scope is None
54- or span .instrumentation_scope .name != "opentelemetry.instrumentation.sqlalchemy"
47+ for span in spans
48+ if span .instrumentation_scope is None or span .instrumentation_scope .name != sqlalchemy_scope
5549 ]
5650 assert [span .kind for span in request_spans ] == [SpanKind .SERVER ]
0 commit comments