mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-17 18:25:42 +02:00
31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
"""Route-collision guard: no two handlers may register the same (method, path).
|
|
|
|
The bug class: two files registered POST /api/agents/sessions/{id}/compact (and
|
|
/clear). Starlette silently serves the first-registered one, so the second handler
|
|
was dead code AND the live one had the wrong behavior (marker-only /compact never
|
|
rebuilt). Nothing surfaced it, because a duplicate route is not an error to Starlette.
|
|
|
|
The seal: enumerate the built app's routes and fail on any duplicate (method, path).
|
|
A shadowed route can never ship again; the machine catches it, not a human months later.
|
|
"""
|
|
|
|
from collections import Counter
|
|
|
|
from backend.main import app
|
|
|
|
|
|
def test_no_duplicate_method_path_routes() -> None:
|
|
pairs = []
|
|
for route in app.routes:
|
|
path = getattr(route, "path", None)
|
|
methods = getattr(route, "methods", None)
|
|
if path is None or not methods:
|
|
continue
|
|
for method in methods:
|
|
pairs.append((method, path))
|
|
dupes = [pair for pair, n in Counter(pairs).items() if n > 1]
|
|
assert not dupes, (
|
|
"Duplicate route registrations (one silently shadows the other; "
|
|
f"consolidate to a single handler): {sorted(dupes)}"
|
|
)
|