teleo-infrastructure/tests/test_collect_leo_restart_survival_proof.py
twentyOne2x c88b54d573
Some checks are pending
CI / lint-and-test (push) Waiting to run
Prove Leo restart survival and tighten identity proof
2026-07-10 05:32:21 +02:00

120 lines
4.1 KiB
Python

"""Tests for scripts/collect_leo_restart_survival_proof.py."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO_ROOT / "scripts"))
import collect_leo_restart_survival_proof as restart_proof # noqa: E402
COUNTS = {
"public.claims": 1837,
"public.sources": 4145,
"public.claim_evidence": 4670,
"public.claim_edges": 4916,
"kb_stage.kb_proposals": 26,
}
def args(tmp_path: Path, *, execute_restart: bool = True, skip_handler: bool = False) -> argparse.Namespace:
return argparse.Namespace(
execute_restart=execute_restart,
skip_handler=skip_handler,
out=tmp_path / "restart.json",
markdown_out=tmp_path / "restart.md",
ssh_target="root@example.test",
ssh_key=tmp_path / "key",
connect_timeout=1,
timeout=5,
active_timeout=5,
poll_interval=0,
handler_timeout=5,
handler_turn_timeout=300,
remote_handler_report="/tmp/leo-restart-survival-direct-claim-current.json",
)
def readback(label: str, pid: str) -> dict:
return {
"label": label,
"remote_repo": "/opt/teleo-eval/workspaces/deploy-infra",
"deploy_head": "abc123",
"last_deploy_sha": "abc123",
"git_status_short": "",
"service": {
"returncode": 0,
"stderr": "",
"state": {
"ActiveState": "active",
"SubState": "running",
"MainPID": pid,
"NRestarts": "0",
"ExecMainStartTimestamp": "Fri 2026-07-10 01:04:22 UTC",
},
},
"db_counts": {"returncode": 0, "stderr": "", "counts": COUNTS, "raw": json.dumps(COUNTS)},
}
def fake_runner(command: list[str], input_text: str, timeout: int) -> restart_proof.CommandResult:
remote = command[-1]
if "before_restart" in remote:
return restart_proof.CommandResult(0, json.dumps(readback("before_restart", "100")) + "\n", "")
if remote == "systemctl restart leoclean-gateway.service":
return restart_proof.CommandResult(0, "", "")
if "after_restart_poll" in remote:
return restart_proof.CommandResult(0, json.dumps(readback("after_restart_poll", "200")) + "\n", "")
if "run_leo_direct_claim_handler_remote.py" in remote:
return restart_proof.CommandResult(
0,
json.dumps(
{
"pass_runtime": True,
"posted_to_telegram": False,
"mutates_kb_by_harness": False,
"changed_live_profile": False,
"temp_profile_removed": True,
"results": [{"prompt_id": "DC-01", "ok": True, "reply": "ok"}],
}
)
+ "\n",
"",
)
raise AssertionError(remote)
def test_collect_restart_survival_passes_with_unchanged_counts_and_handler(tmp_path: Path):
report = restart_proof.collect(args(tmp_path), runner=fake_runner)
assert report["status"] == "pass"
assert report["survives_restart"] is True
assert report["db_counts_changed"] is False
assert report["posted_to_telegram"] is False
assert report["production_db_apply_ran"] is False
assert report["handler"]["pass_runtime"] is True
assert report["before"]["service"]["state"]["MainPID"] == "100"
assert report["after"]["service"]["state"]["MainPID"] == "200"
def test_collect_refuses_to_claim_restart_without_execute_flag(tmp_path: Path):
report = restart_proof.collect(args(tmp_path, execute_restart=False), runner=fake_runner)
assert report["status"] == "not_executed_missing_execute_restart"
assert report["survives_restart"] is False
assert "before" in report
def test_markdown_report_names_safety_boundaries(tmp_path: Path):
report = restart_proof.collect(args(tmp_path), runner=fake_runner)
text = restart_proof.markdown_report(report)
assert "Survives restart: `True`" in text
assert "Posted to Telegram: `False`" in text
assert "Production DB apply ran: `False`" in text