37 lines
1.7 KiB
Python
37 lines
1.7 KiB
Python
"""Tests use fresh temporary directories, never scientific project data."""
|
|
import gzip
|
|
import json
|
|
from pathlib import Path
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
TOOL = Path(__file__).with_name("repository_audit.py")
|
|
|
|
class AuditTests(unittest.TestCase):
|
|
def test_snapshot_detects_change_and_addition(self):
|
|
with tempfile.TemporaryDirectory(prefix="drosophila-audit-test-") as tmp:
|
|
root = Path(tmp)
|
|
(root / "datasets").mkdir()
|
|
(root / "datasets/a.bin").write_bytes(b"raw\0data")
|
|
(root / "datasets/.venv").mkdir()
|
|
(root / "datasets/.venv/excluded").write_bytes(b"environment")
|
|
snap = root / "snapshot"
|
|
cmd = [sys.executable, "-B", str(TOOL), "--root", str(root)]
|
|
subprocess.run(cmd+["snapshot", "--output", str(snap)], check=True, capture_output=True)
|
|
with gzip.open(snap / "files.jsonl.gz", "rt") as f:
|
|
self.assertEqual(len([json.loads(x) for x in f]), 1)
|
|
self.assertEqual(subprocess.run(cmd+["verify", "--snapshot", str(snap)], capture_output=True).returncode, 0)
|
|
self.assertNotEqual(subprocess.run(cmd+["snapshot", "--output", str(snap)], capture_output=True).returncode, 0)
|
|
(root / "datasets/a.bin").write_bytes(b"changed!")
|
|
(root / "datasets/new.bin").write_bytes(b"new")
|
|
check = subprocess.run(cmd+["verify", "--snapshot", str(snap)], capture_output=True)
|
|
result = json.loads(check.stdout)
|
|
self.assertEqual(check.returncode, 1)
|
|
self.assertEqual(result["added"], ["datasets/new.bin"])
|
|
self.assertEqual(result["mismatches"][0]["path"], "datasets/a.bin")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|