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