79 lines
2.3 KiB
Python
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"}
|