Skip to content

Commit e31a985

Browse files
IlyaasKclaude
andcommitted
test: cover telemetry/events on control plane + segment-boundary matcher
Adds an integration test (rewrite_direct_vm_options) asserting telemetry/events stays on the control plane while telemetry/stream routes to the VM, and switches the stream test env to the full-path 'telemetry/stream'. Addresses review. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 9bcc418 commit e31a985

1 file changed

Lines changed: 30 additions & 1 deletion

File tree

tests/test_browser_routing.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def test_browser_request_uses_curl_raw() -> None:
9999

100100
@respx.mock
101101
def test_telemetry_stream_routes_directly_to_vm(monkeypatch: pytest.MonkeyPatch) -> None:
102-
monkeypatch.setenv("KERNEL_BROWSER_ROUTING_SUBRESOURCES", "telemetry")
102+
monkeypatch.setenv("KERNEL_BROWSER_ROUTING_SUBRESOURCES", "telemetry/stream")
103103
route = respx.get("http://browser-session.test/browser/kernel/telemetry/stream").mock(
104104
return_value=httpx.Response(
105105
200,
@@ -356,6 +356,35 @@ def test_direct_vm_routing_allowlist_segment_boundary() -> None:
356356
assert _matches_direct_vm_prefix("fs/read", prefixes) is False
357357

358358

359+
def test_rewrite_direct_vm_options_keeps_telemetry_events_on_control_plane() -> None:
360+
# Integration through the real routing hook: telemetry/events (historical,
361+
# control-plane/S2) must NOT be rewritten to the VM, while telemetry/stream
362+
# (live SSE) must be.
363+
from kernel._models import FinalRequestOptions
364+
from kernel.lib.browser_routing.routing import (
365+
BrowserRoute,
366+
BrowserRouteCache,
367+
BrowserRoutingConfig,
368+
rewrite_direct_vm_options,
369+
)
370+
371+
cache = BrowserRouteCache()
372+
cache.set(
373+
BrowserRoute(session_id="sess-1", base_url="http://browser-session.test/browser/kernel", jwt="token-abc")
374+
)
375+
config = BrowserRoutingConfig(subresources=("curl", "telemetry/stream"))
376+
377+
events = rewrite_direct_vm_options(
378+
FinalRequestOptions(method="get", url="/browsers/sess-1/telemetry/events"), cache=cache, config=config
379+
)
380+
assert events.url == "/browsers/sess-1/telemetry/events" # unchanged -> control plane
381+
382+
stream = rewrite_direct_vm_options(
383+
FinalRequestOptions(method="get", url="/browsers/sess-1/telemetry/stream"), cache=cache, config=config
384+
)
385+
assert str(stream.url).startswith("http://browser-session.test/browser/kernel/telemetry/stream")
386+
387+
359388
def test_browser_routing_config_from_env_empty_string_disables_routing(monkeypatch: pytest.MonkeyPatch) -> None:
360389
monkeypatch.setenv("KERNEL_BROWSER_ROUTING_SUBRESOURCES", "")
361390
assert browser_routing_config_from_env().subresources == ()

0 commit comments

Comments
 (0)