from __future__ import annotations import osimport tempfileimport timeimport unittestfrom pathlib import Path from zed_eval import cleanup def age_path(path: Path, days: float) -> None: past = time.time() - days * 86400.0 os.utime(path, (past, past)) class PruneArtifactsTests(unittest.TestCase): def setUp(self) -> None: self._tmp = tempfile.TemporaryDirectory() self.root = Path(self._tmp.name) self.addCleanup(self._tmp.cleanup) def _make_build(self, build_id: str, age_days: float) -> Path: build_dir = self.root / "builds" / build_id build_dir.mkdir(parents=True) (build_dir / "eval-cli").write_text("binary") ready = build_dir / "READY" ready.write_text("done") age_path(ready, age_days) return build_dir def test_eval_results_are_never_touched(self) -> None: runs = self.root / "runs" / "anant" / "swe-atlas-rf" / "run-1" runs.mkdir(parents=True) result_file = runs / "summary.json" result_file.write_text("{}") age_path(result_file, 999) cleanup.prune_artifacts(self.root, dry_run=False, build_retention_days=14) self.assertTrue(result_file.exists()) def test_removes_old_builds_keeps_recent(self) -> None: self._make_build("bld-old", age_days=30) self._make_build("bld-new", age_days=1) result = cleanup.prune_artifacts( self.root, dry_run=False, build_retention_days=14 ) self.assertFalse((self.root / "builds" / "bld-old").exists()) self.assertTrue((self.root / "builds" / "bld-new").exists()) self.assertEqual(result["counts"]["builds"], 1) def test_dry_run_deletes_nothing(self) -> None: self._make_build("bld-old", age_days=30) result = cleanup.prune_artifacts( self.root, dry_run=True, build_retention_days=14 ) self.assertTrue((self.root / "builds" / "bld-old").exists()) self.assertEqual(result["counts"]["builds"], 1) def test_stale_lock_removed(self) -> None: locks = self.root / "build-locks" locks.mkdir(parents=True) stale = locks / "bld-x.json" stale.write_text("{}") age_path(stale, 1) # 1 day > 6h ttl fresh = locks / "bld-y.json" fresh.write_text("{}") cleanup.prune_artifacts(self.root, dry_run=False, lock_ttl_hours=6) self.assertFalse(stale.exists()) self.assertTrue(fresh.exists()) if __name__ == "__main__": unittest.main()
from __future__ import annotations
import os
import tempfile
import time
import unittest
from pathlib import Path
from zed_eval import cleanup
def age_path(path: Path, days: float) -> None:
past = time.time() - days * 86400.0
os.utime(path, (past, past))
class PruneArtifactsTests(unittest.TestCase):
def setUp(self) -> None:
self._tmp = tempfile.TemporaryDirectory()
self.root = Path(self._tmp.name)
self.addCleanup(self._tmp.cleanup)
def _make_build(self, build_id: str, age_days: float) -> Path:
build_dir = self.root / "builds" / build_id
build_dir.mkdir(parents=True)
(build_dir / "eval-cli").write_text("binary")
ready = build_dir / "READY"
ready.write_text("done")
age_path(ready, age_days)
return build_dir
def test_eval_results_are_never_touched(self) -> None:
runs = self.root / "runs" / "anant" / "swe-atlas-rf" / "run-1"
runs.mkdir(parents=True)
result_file = runs / "summary.json"
result_file.write_text("{}")
age_path(result_file, 999)
cleanup.prune_artifacts(self.root, dry_run=False, build_retention_days=14)
self.assertTrue(result_file.exists())
def test_removes_old_builds_keeps_recent(self) -> None:
self._make_build("bld-old", age_days=30)
self._make_build("bld-new", age_days=1)
result = cleanup.prune_artifacts(
self.root, dry_run=False, build_retention_days=14
)
self.assertFalse((self.root / "builds" / "bld-old").exists())
self.assertTrue((self.root / "builds" / "bld-new").exists())
self.assertEqual(result["counts"]["builds"], 1)
def test_dry_run_deletes_nothing(self) -> None:
self._make_build("bld-old", age_days=30)
result = cleanup.prune_artifacts(
self.root, dry_run=True, build_retention_days=14
)
self.assertTrue((self.root / "builds" / "bld-old").exists())
self.assertEqual(result["counts"]["builds"], 1)
def test_stale_lock_removed(self) -> None:
locks = self.root / "build-locks"
locks.mkdir(parents=True)
stale = locks / "bld-x.json"
stale.write_text("{}")
age_path(stale, 1) # 1 day > 6h ttl
fresh = locks / "bld-y.json"
fresh.write_text("{}")
cleanup.prune_artifacts(self.root, dry_run=False, lock_ttl_hours=6)
self.assertFalse(stale.exists())
self.assertTrue(fresh.exists())
if __name__ == "__main__":
unittest.main()