Preserve canonical journal digests and bounded JWT source reviews
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
codex 2026-10-11 17:30:10 +02:00
parent 4ed50501f6
commit 4e8fa6e831
6 changed files with 241 additions and 9 deletions

View file

@ -32,7 +32,7 @@ class Tests(unittest.TestCase):
self.tmp = tempfile.TemporaryDirectory()
self.addCleanup(self.tmp.cleanup)
self.path = Path(self.tmp.name)
self.binding = Binding('approval-1', 'a'*64, str(uuid.uuid4()), 'b'*64)
self.binding = Binding('approval-1', 'sha256:'+'a'*64, str(uuid.uuid4()), 'b'*64)
self.journal = Journal(self.path)
self.addCleanup(self.journal.close)
@ -61,7 +61,7 @@ class Tests(unittest.TestCase):
def test_same_approval_different_digest_refused(self):
with self.journal.locked(): self.journal.reserve(self.binding)
changed = Binding('approval-1','c'*64,str(uuid.uuid4()),'b'*64)
changed = Binding('approval-1','sha256:'+'c'*64,str(uuid.uuid4()),'b'*64)
with self.journal.locked():
with self.assertRaises(Refused): self.journal.reserve(changed)
with self.assertRaises(Refused): self.journal.observe(changed)
@ -69,7 +69,7 @@ class Tests(unittest.TestCase):
def test_same_operation_different_approval_refused(self):
with self.journal.locked(): self.journal.reserve(self.binding)
with self.journal.locked():
with self.assertRaises(Refused): self.journal.reserve(Binding('approval-2','a'*64,self.binding.operation_id,'b'*64))
with self.assertRaises(Refused): self.journal.reserve(Binding('approval-2','sha256:'+'a'*64,self.binding.operation_id,'b'*64))
def test_full_path_cleanup_and_terminal_replay(self):
states=['reserved','consume-confirmed','authenticating','grant-issuing','grant-issued','applying','readback','verified','cleanup-confirmed']
@ -118,8 +118,8 @@ class Tests(unittest.TestCase):
def test_binding_rejects_unbounded_or_malformed_metadata(self):
for value in ['token'+ 'x'*200, '../approval', 'approval\n1']:
with self.assertRaises(Refused): Binding(value,'a'*64,self.binding.operation_id,'b'*64).validate()
for value in ['a'*63,'A'*64,'not-a-digest']:
with self.assertRaises(Refused): Binding(value,'sha256:'+'a'*64,self.binding.operation_id,'b'*64).validate()
for value in ['a'*64,'sha256:'+'a'*63,'sha256:'+'A'*64,'not-a-digest']:
with self.assertRaises(Refused): Binding('a',value,self.binding.operation_id,'b'*64).validate()
def test_pending_external_call_blocks_next_and_survives_reopen(self):
@ -146,7 +146,7 @@ class Tests(unittest.TestCase):
self.journal.before_call(self.binding,1,'e'*64)
def test_nonstring_binding_and_boolean_ordinal_refused(self):
with self.assertRaises(Refused): Binding(True,'a'*64,self.binding.operation_id,'b'*64).validate()
with self.assertRaises(Refused): Binding(True,'sha256:'+'a'*64,self.binding.operation_id,'b'*64).validate()
with self.journal.locked():
self.journal.reserve(self.binding)
with self.assertRaises(Refused): self.journal.before_call(self.binding,False,'d'*64)