Viewing files at commit 369435870869Commit detailsView latest

Browse files
tests/test_independent_oracle_wiring.py 115 lines · 5.9 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
import unittest.mock
7
from types import SimpleNamespace
8
9
ROOT = Path(__file__).resolve().parents[1]
10
sys.path.insert(0, str(ROOT / "scripts"))
11
try:
12
    from tests.test_oak_sqlite_reader import SyntheticRepo
13
except ImportError:  # discover -s tests
14
    from test_oak_sqlite_reader import SyntheticRepo
15
16
import parallel_contention  # noqa: E402
17
import task_loop  # noqa: E402
18
from oakbench import integrity  # noqa: E402
19
from oakbench import purezstd  # noqa: E402
20
21
22
class WiringTests(unittest.TestCase):
23
    def setUp(self):
24
        self.tmp = tempfile.TemporaryDirectory()
25
        self.addCleanup(self.tmp.cleanup)
26
        self.repo = SyntheticRepo(Path(self.tmp.name) / "repo")
27
        self.repo.commit(self.repo.file_tree({"payload.txt": b"committed payload\n"}))
28
        # The worktree disagrees with the commit: a worktree oracle would pass.
29
        (self.repo.root / "payload.txt").write_bytes(b"worktree only\n")
30
31
    def corrupt(self):
32
        with self.repo.db() as db:
33
            db.execute("UPDATE blobs SET content=? WHERE size=?",
34
                       (purezstd.encode_raw(b"committed paylo4d\n"), len(b"committed payload\n")))
35
36
    def test_integrity_reads_committed_head_as_strong_source(self):
37
        fields = integrity.content_integrity_fields(
38
            self.repo.root, operation="snapshot", process_returncode=0,
39
            expected_payloads={"payload.txt": "committed payload"})
40
        self.assertTrue(fields["content_integrity_check_passed"], fields)
41
        self.assertEqual(fields["content_integrity_source"], integrity.OAK_READER_PAYLOAD_SOURCE)
42
        self.assertTrue(fields["content_integrity_public_trust_passed"])
43
        worktree_only = integrity.content_integrity_fields(
44
            self.repo.root, operation="snapshot", process_returncode=0,
45
            expected_payloads={"payload.txt": "worktree only"})
46
        self.assertFalse(worktree_only["content_integrity_check_passed"])
47
48
    def test_integrity_flags_corrupt_committed_state(self):
49
        self.corrupt()
50
        fields = integrity.content_integrity_fields(
51
            self.repo.root, operation="snapshot", process_returncode=0,
52
            expected_payloads={"payload.txt": "committed payload"})
53
        self.assertFalse(fields["content_integrity_check_passed"])
54
        self.assertIn("oak_committed_state_invalid", fields["content_integrity_failure_reason"])
55
56
    def test_contention_payload_and_deep_integrity_use_the_reader(self):
57
        subject = SimpleNamespace(kind="oak", bin="oak")
58
        self.assertEqual(parallel_contention.tree_payload(subject, self.repo.root, "payload.txt"), "committed payload\n")
59
        self.assertEqual(parallel_contention.oak_committed_integrity(self.repo.root)[0], True)
60
        self.corrupt()
61
        self.assertIsNone(parallel_contention.tree_payload(subject, self.repo.root, "payload.txt"))
62
        verified, how = parallel_contention.oak_committed_integrity(self.repo.root)
63
        self.assertIs(verified, False)
64
        self.assertIn("invalid", how)
65
66
    def test_task_loop_committed_state_helper(self):
67
        text, head = task_loop.independent_committed_state(self.repo.root, "payload.txt")
68
        self.assertEqual(text, "committed payload\n")
69
        self.assertRegex(head, "^[0-9a-f]{64}$")
70
        self.assertEqual(task_loop.independent_committed_text(self.repo.root, "absent.txt"), "")
71
        self.corrupt()
72
        self.assertEqual(task_loop.independent_committed_state(self.repo.root, "payload.txt"), ("", None))
73
74
    # QA P2-1: an unavailable reader (format drift, bounds) is unmeasured in
75
    # every oracle; the correct-looking worktree must never turn it into a pass.
76
    def make_unavailable(self):
77
        (self.repo.root / "payload.txt").write_bytes(b"committed payload\n")  # worktree now "correct"
78
        with self.repo.db() as db:
79
            db.execute("INSERT INTO schema_migrations VALUES ('9999_future_format','x',1)")
80
81
    def test_integrity_unavailable_is_unmeasured_not_worktree_pass(self):
82
        self.make_unavailable()
83
        fields = integrity.content_integrity_fields(
84
            self.repo.root, operation="snapshot", process_returncode=0,
85
            expected_payloads={"payload.txt": "committed payload"})
86
        self.assertIsNone(fields["content_integrity_check_passed"], fields)
87
        self.assertFalse(fields["content_integrity_public_trust_passed"])
88
        self.assertIn("oak_reader_unavailable", fields["content_integrity_unmeasured_reason"])
89
90
    def test_contention_unavailable_is_unmeasured(self):
91
        self.make_unavailable()
92
        subject = SimpleNamespace(kind="oak", bin="oak")
93
        with self.assertRaises(parallel_contention.CommittedStateUnmeasured):
94
            parallel_contention.tree_payload(subject, self.repo.root, "payload.txt")
95
        self.assertIsNone(parallel_contention.oak_committed_integrity(self.repo.root)[0])
96
        self.assertEqual(parallel_contention.unmeasured_returncode(None, 0), 77)
97
        self.assertEqual(parallel_contention.unmeasured_returncode(True, 0), 0)
98
99
    def test_contention_integrity_check_reports_unmeasured(self):
100
        self.make_unavailable()
101
        subject = SimpleNamespace(kind="oak", bin="/usr/bin/true", name="oak")
102
        result = SimpleNamespace(succeeded_payloads=[("payload.txt", "committed payload")])
103
        with unittest.mock.patch.object(parallel_contention, "snapshot_commands", return_value=[]):
104
            passed, lost, method = parallel_contention.integrity_check(subject, self.repo.root, [result])
105
        self.assertIsNone(passed)
106
        self.assertIsNone(lost)
107
        self.assertIn("unmeasured", method)
108
109
    def test_task_loop_unavailable_is_none_not_worktree(self):
110
        self.make_unavailable()
111
        self.assertEqual(task_loop.independent_committed_state(self.repo.root, "payload.txt"), (None, None))
112
113
114
if __name__ == "__main__":
115
    unittest.main()