Preserve canonical journal digests and bounded JWT source reviews
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
parent
4ed50501f6
commit
4e8fa6e831
6 changed files with 241 additions and 9 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue