Viewing files at commit 21316fe59317Commit detailsView latest

Browse files
tests/test_independent_oracle_wiring.py 75 lines · 3.6 KB · python
1
"""Oak oracles read committed state through the independent reader, not the worktree or binary."""
2
from pathlib import Path
3
import sys
4
import tempfile
5
import unittest
6
from types import SimpleNamespace
7
8
ROOT = Path(__file__).resolve().parents[1]
9
sys.path.insert(0, str(ROOT / "scripts"))
10
try:
11
    from tests.test_oak_sqlite_reader import SyntheticRepo
12
except ImportError:  # discover -s tests
13
    from test_oak_sqlite_reader import SyntheticRepo
14
15
import parallel_contention  # noqa: E402
16
import task_loop  # noqa: E402
17
from oakbench import integrity  # noqa: E402
18
from oakbench import purezstd  # noqa: E402
19
20
21
class WiringTests(unittest.TestCase):
22
    def setUp(self):
23
        self.tmp = tempfile.TemporaryDirectory()
24
        self.addCleanup(self.tmp.cleanup)
25
        self.repo = SyntheticRepo(Path(self.tmp.name) / "repo")
26
        self.repo.commit(self.repo.file_tree({"payload.txt": b"committed payload\n"}))
27
        # The worktree disagrees with the commit: a worktree oracle would pass.
28
        (self.repo.root / "payload.txt").write_bytes(b"worktree only\n")
29
30
    def corrupt(self):
31
        with self.repo.db() as db:
32
            db.execute("UPDATE blobs SET content=? WHERE size=?",
33
                       (purezstd.encode_raw(b"committed paylo4d\n"), len(b"committed payload\n")))
34
35
    def test_integrity_reads_committed_head_as_strong_source(self):
36
        fields = integrity.content_integrity_fields(
37
            self.repo.root, operation="snapshot", process_returncode=0,
38
            expected_payloads={"payload.txt": "committed payload"})
39
        self.assertTrue(fields["content_integrity_check_passed"], fields)
40
        self.assertEqual(fields["content_integrity_source"], integrity.OAK_READER_PAYLOAD_SOURCE)
41
        self.assertTrue(fields["content_integrity_public_trust_passed"])
42
        worktree_only = integrity.content_integrity_fields(
43
            self.repo.root, operation="snapshot", process_returncode=0,
44
            expected_payloads={"payload.txt": "worktree only"})
45
        self.assertFalse(worktree_only["content_integrity_check_passed"])
46
47
    def test_integrity_flags_corrupt_committed_state(self):
48
        self.corrupt()
49
        fields = integrity.content_integrity_fields(
50
            self.repo.root, operation="snapshot", process_returncode=0,
51
            expected_payloads={"payload.txt": "committed payload"})
52
        self.assertFalse(fields["content_integrity_check_passed"])
53
        self.assertIn("oak_committed_state_invalid", fields["content_integrity_failure_reason"])
54
55
    def test_contention_payload_and_deep_integrity_use_the_reader(self):
56
        subject = SimpleNamespace(kind="oak", bin="oak")
57
        self.assertEqual(parallel_contention.tree_payload(subject, self.repo.root, "payload.txt"), "committed payload\n")
58
        self.assertEqual(parallel_contention.oak_committed_integrity(self.repo.root)[0], True)
59
        self.corrupt()
60
        self.assertIsNone(parallel_contention.tree_payload(subject, self.repo.root, "payload.txt"))
61
        verified, how = parallel_contention.oak_committed_integrity(self.repo.root)
62
        self.assertIs(verified, False)
63
        self.assertIn("invalid", how)
64
65
    def test_task_loop_committed_state_helper(self):
66
        text, head = task_loop.independent_committed_state(self.repo.root, "payload.txt")
67
        self.assertEqual(text, "committed payload\n")
68
        self.assertRegex(head, "^[0-9a-f]{64}$")
69
        self.assertEqual(task_loop.independent_committed_text(self.repo.root, "absent.txt"), "")
70
        self.corrupt()
71
        self.assertEqual(task_loop.independent_committed_state(self.repo.root, "payload.txt"), ("", None))
72
73
74
if __name__ == "__main__":
75
    unittest.main()