| 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()
|