mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-07-12 18:50:35 +00:00
Exercise real cache diagnostics instead of source-text checks
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
from pathlib import Path
|
||||
|
||||
import api.routes as routes
|
||||
from api.request_diagnostics import RequestDiagnostics
|
||||
|
||||
|
||||
@@ -7,14 +6,84 @@ def test_request_diagnostics_maybe_start_still_covers_sessions_route():
|
||||
assert RequestDiagnostics.maybe_start("GET", "/api/sessions") is not None
|
||||
|
||||
|
||||
def test_sessions_route_emits_cache_diagnostic_stage_names():
|
||||
src = Path("api/routes.py").read_text(encoding="utf-8")
|
||||
def _session_cache_diag_stage_names(diag: RequestDiagnostics) -> list[str]:
|
||||
return [stage["name"] for stage in diag._stages] + [diag._current_stage]
|
||||
|
||||
for stage in (
|
||||
|
||||
def _session_cache_key() -> tuple:
|
||||
return routes._session_list_cache_key(
|
||||
active_profile="default",
|
||||
all_profiles=False,
|
||||
show_cli_sessions=False,
|
||||
show_previous_messaging_sessions=False,
|
||||
show_cron_sessions=False,
|
||||
)
|
||||
|
||||
|
||||
def test_sessions_route_emits_cache_hit_diagnostic_stages():
|
||||
key = _session_cache_key()
|
||||
routes._session_list_cache_clear()
|
||||
routes._session_list_cache_set(key, {"sessions": [], "cli_count": 0})
|
||||
|
||||
diag = RequestDiagnostics("GET", "/api/sessions", auto_start=False)
|
||||
payload = routes._get_cached_session_list_payload(
|
||||
key=key,
|
||||
builder=lambda: {"sessions": ["unexpected"]},
|
||||
diag=diag,
|
||||
)
|
||||
|
||||
assert payload == {"sessions": [], "cli_count": 0}
|
||||
assert _session_cache_diag_stage_names(diag) == [
|
||||
"start",
|
||||
"session_list_cache_lookup",
|
||||
"session_list_cache_hit",
|
||||
"session_list_cache_wait",
|
||||
]
|
||||
|
||||
|
||||
def test_sessions_route_emits_cache_store_diagnostic_stages():
|
||||
key = _session_cache_key()
|
||||
routes._session_list_cache_clear()
|
||||
|
||||
diag = RequestDiagnostics("GET", "/api/sessions", auto_start=False)
|
||||
payload = routes._get_cached_session_list_payload(
|
||||
key=key,
|
||||
builder=lambda: {"sessions": ["rebuilt"], "cli_count": 0},
|
||||
diag=diag,
|
||||
)
|
||||
|
||||
assert payload == {"sessions": ["rebuilt"], "cli_count": 0}
|
||||
assert _session_cache_diag_stage_names(diag) == [
|
||||
"start",
|
||||
"session_list_cache_lookup",
|
||||
"session_list_cache_rebuild_owner",
|
||||
"session_list_cache_stored",
|
||||
]
|
||||
|
||||
|
||||
def test_sessions_route_emits_invalidation_retry_diagnostic_stage():
|
||||
key = _session_cache_key()
|
||||
routes._session_list_cache_clear()
|
||||
calls = {"count": 0}
|
||||
|
||||
def _builder():
|
||||
calls["count"] += 1
|
||||
if calls["count"] == 1:
|
||||
routes._session_list_cache_clear()
|
||||
return {"sessions": [calls["count"]], "cli_count": 0}
|
||||
|
||||
diag = RequestDiagnostics("GET", "/api/sessions", auto_start=False)
|
||||
payload = routes._get_cached_session_list_payload(
|
||||
key=key,
|
||||
builder=_builder,
|
||||
diag=diag,
|
||||
)
|
||||
|
||||
assert payload == {"sessions": [2], "cli_count": 0}
|
||||
assert calls["count"] == 2
|
||||
assert _session_cache_diag_stage_names(diag) == [
|
||||
"start",
|
||||
"session_list_cache_lookup",
|
||||
"session_list_cache_rebuild_owner",
|
||||
"session_list_cache_invalidated_during_rebuild",
|
||||
):
|
||||
assert stage in src
|
||||
"session_list_cache_stored",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user