Files
2026-07-22 13:48:46 +08:00

79 lines
2.3 KiB
Python

from __future__ import annotations
from pathlib import Path
from experiments.scripts.rebuttal_monitor import (
RebuttalTarget,
build_target_status,
safe_json_dump,
)
def test_build_target_status_reads_manifest_progress_and_log(tmp_path: Path) -> None:
worktree = tmp_path / "rebuttle-ecip"
state_dir = tmp_path / "state"
run_root = worktree / "workspace" / "experiments" / "runs" / "run1"
run_root.mkdir(parents=True)
log_path = tmp_path / "ecip.log"
log_path.write_text("line one\nline two\n", encoding="utf-8")
safe_json_dump(
{
"run_id": "run1",
"status": "running",
"updated_at": "2026-03-22T12:00:00+00:00",
"total_cases": 8,
"completed_cases": 3,
"success": 2,
"failed": 1,
"running_case_ids": ["simple/0000/0004"],
"pending_case_ids": ["simple/0000/0005"],
"skipped_existing": 2,
},
run_root / "progress.json",
)
safe_json_dump(
{
"run_id": "run1",
"total_cases": 8,
"success": 2,
"failed": 1,
},
run_root / "summary.json",
)
safe_json_dump(
{
"target": "ecip",
"branch": "rebuttle/ecip",
"worktree_path": str(worktree),
"run_id": "run1",
"pid": 999999,
"execution_root": str(worktree / "workspace"),
"run_root": str(run_root),
"output_root": str(
worktree / "workspace" / "experiments" / "output_test" / "run1"
),
"log_path": str(log_path),
"started_at": "2026-03-22T11:59:00+00:00",
"updated_at": "2026-03-22T12:00:00+00:00",
},
state_dir / "ecip.json",
)
status = build_target_status(
RebuttalTarget(
name="ecip",
branch="rebuttle/ecip",
worktree_path=str(worktree),
),
state_dir=state_dir,
log_line_count=5,
)
assert status["target"] == "ecip"
assert status["run_id"] == "run1"
assert status["summary"]["success"] == 2
assert status["progress"]["running_case_ids"] == ["simple/0000/0004"]
assert status["log_tail"] == ["line one", "line two"]
assert status["status"] in {"running", "stopped", "finished"}