Files
hermes-webui/tests/test_run_lifecycle_health.py
T
2026-05-11 02:15:00 +02:00

51 lines
1.6 KiB
Python

"""Regression coverage for restart-safety run lifecycle reporting."""
import time
def test_health_counts_active_runs_even_when_no_sse_streams():
"""A worker run can outlive its SSE channel; health must expose the run."""
from api import config, routes
with config.STREAMS_LOCK:
config.STREAMS.clear()
with config.ACTIVE_RUNS_LOCK:
config.ACTIVE_RUNS.clear()
config.ACTIVE_RUNS["stream-1"] = {
"stream_id": "stream-1",
"session_id": "session-1",
"started_at": time.time() - 42,
"phase": "running",
}
try:
stream_check = routes._streams_lock_health()
run_check = routes._run_lifecycle_health()
assert stream_check["active_streams"] == 0
assert run_check["active_runs"] == 1
assert run_check["oldest_run_age_seconds"] >= 40
assert run_check["runs"][0]["session_id"] == "session-1"
finally:
with config.ACTIVE_RUNS_LOCK:
config.ACTIVE_RUNS.clear()
def test_run_registry_unregister_records_last_finished_time():
"""Guards need a grace window after the last real worker exits."""
from api import config
with config.ACTIVE_RUNS_LOCK:
config.ACTIVE_RUNS.clear()
config.LAST_RUN_FINISHED_AT = None
config.register_active_run("stream-2", session_id="session-2", phase="starting")
with config.ACTIVE_RUNS_LOCK:
assert "stream-2" in config.ACTIVE_RUNS
config.unregister_active_run("stream-2")
with config.ACTIVE_RUNS_LOCK:
assert "stream-2" not in config.ACTIVE_RUNS
assert isinstance(config.LAST_RUN_FINISHED_AT, float)