|
1 | | -from typing import Any |
2 | | -from unittest.mock import AsyncMock, Mock |
3 | | - |
4 | 1 | import pytest |
5 | 2 | from agenticlayer.agent_to_a2a import to_a2a |
6 | | -from agenticlayer.otel import TelemetryFilter |
7 | 3 | from google.adk.agents.base_agent import BaseAgent |
8 | 4 | from starlette.applications import Starlette |
9 | 5 | from starlette.testclient import TestClient |
@@ -40,74 +36,3 @@ def test_agent_card_endpoint(self, starlette_app: Starlette, client: TestClient) |
40 | 36 |
|
41 | 37 | # Verify it contains expected agent card fields |
42 | 38 | assert len(data) > 0, "Agent card should not be empty" |
43 | | - |
44 | | - |
45 | | -class TestTelemetryFilter: |
46 | | - """Test suite for the TelemetryFilter class.""" |
47 | | - async def create_telemetry_filter(self, app_mock: AsyncMock) -> TelemetryFilter: |
48 | | - return TelemetryFilter( |
49 | | - app=app_mock, |
50 | | - filtered_paths={"/.well-known/agent-card.json"} |
51 | | - ) |
52 | | - |
53 | | - async def simulate_request(self, path: str) -> tuple[Mock, dict[str, Any], Mock]: |
54 | | - scope = {"type": "http", "path": path} |
55 | | - receive = Mock() |
56 | | - send = Mock() |
57 | | - return receive, scope, send |
58 | | - |
59 | | - @pytest.mark.anyio |
60 | | - async def test_telemetry_filter_bypasses_health_checks(self) -> None: |
61 | | - """Verify TelemetryFilter bypasses OpenTelemetry for health checks.""" |
62 | | - # Create mocks |
63 | | - app_mock = AsyncMock() |
64 | | - otel_middleware_mock = AsyncMock() |
65 | | - |
66 | | - # Create filter with health check path |
67 | | - telemetry_filter = await self.create_telemetry_filter(app_mock) |
68 | | - telemetry_filter.otel_middleware = otel_middleware_mock |
69 | | - |
70 | | - # Simulate health check request |
71 | | - receive, scope, send = await self.simulate_request("/.well-known/agent-card.json") |
72 | | - # Call the filter |
73 | | - await telemetry_filter(scope, receive, send) |
74 | | - |
75 | | - # Assert: app was called directly (bypassed OTEL) |
76 | | - app_mock.assert_called_once_with(scope, receive, send) |
77 | | - otel_middleware_mock.assert_not_called() |
78 | | - |
79 | | - @pytest.mark.anyio |
80 | | - async def test_telemetry_filter_allows_regular_requests(self) -> None: |
81 | | - """Verify TelemetryFilter applies OpenTelemetry for regular requests.""" |
82 | | - # Create mocks |
83 | | - app_mock = AsyncMock() |
84 | | - otel_middleware_mock = AsyncMock() |
85 | | - |
86 | | - telemetry_filter = await self.create_telemetry_filter(app_mock) |
87 | | - telemetry_filter.otel_middleware = otel_middleware_mock |
88 | | - |
89 | | - # Simulate regular request |
90 | | - receive, scope, send = await self.simulate_request("/a2a/v1/tasks") |
91 | | - # Call the filter |
92 | | - await telemetry_filter(scope, receive, send) |
93 | | - |
94 | | - # Assert: OTEL middleware was used |
95 | | - otel_middleware_mock.assert_called_once_with(scope, receive, send) |
96 | | - |
97 | | - @pytest.mark.anyio |
98 | | - async def test_telemetry_filter_handles_non_http_requests(self) -> None: |
99 | | - """Verify TelemetryFilter passes non-HTTP requests to OTEL middleware.""" |
100 | | - # Create mocks |
101 | | - app_mock = AsyncMock() |
102 | | - otel_middleware_mock = AsyncMock() |
103 | | - |
104 | | - telemetry_filter = await self.create_telemetry_filter(app_mock) |
105 | | - telemetry_filter.otel_middleware = otel_middleware_mock |
106 | | - |
107 | | - # Simulate WebSocket request (non-HTTP) |
108 | | - receive, scope, send = await self.simulate_request("/ws") |
109 | | - # Call the filter |
110 | | - await telemetry_filter(scope, receive, send) |
111 | | - |
112 | | - # Assert: OTEL middleware was used (non-HTTP requests go through) |
113 | | - otel_middleware_mock.assert_called_once_with(scope, receive, send) |
0 commit comments