Skip to content

Commit 506b40d

Browse files
committed
tests: Update to new VerificationResult
Changes are * expected result changes (like the handling of keyids without keys) * test refactoring to have access to the Key * Removal of union test * use the fact that VerificationResult is Truthy in asserts (to get 1 more line of coverage) Signed-off-by: Jussi Kukkonen <jkukkonen@google.com>
1 parent 368bee8 commit 506b40d

File tree

1 file changed

+30
-54
lines changed

1 file changed

+30
-54
lines changed

tests/test_api.py

Lines changed: 30 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
TargetFile,
4848
Targets,
4949
Timestamp,
50-
VerificationResult,
5150
)
5251
from tuf.api.serialization import DeserializationError, SerializationError
5352
from tuf.api.serialization.json import JSONSerializer
@@ -475,92 +474,69 @@ def test_signed_get_verification_result(self) -> None:
475474
# Setup: Load test metadata and keys
476475
root_path = os.path.join(self.repo_dir, "metadata", "root.json")
477476
root = Metadata[Root].from_file(root_path)
478-
initial_root_keyids = root.signed.roles[Root.type].keyids
479-
self.assertEqual(len(initial_root_keyids), 1)
480-
key1_id = initial_root_keyids[0]
481-
key2 = self.keystore[Timestamp.type]
482-
key2_id = key2["keyid"]
477+
478+
key1_id = root.signed.roles[Root.type].keyids[0]
479+
key1 = root.signed.get_key(key1_id)
480+
481+
key2_id = root.signed.roles[Timestamp.type].keyids[0]
482+
key2 = root.signed.get_key(key2_id)
483+
priv_key2 = self.keystore[Timestamp.type]
484+
483485
key3_id = "123456789abcdefg"
484-
key4 = self.keystore[Snapshot.type]
485-
key4_id = key4["keyid"]
486+
priv_key4 = self.keystore[Snapshot.type]
487+
key4_id = priv_key4["keyid"]
486488

487489
# Test: 1 authorized key, 1 valid signature
488490
result = root.signed.get_verification_result(
489491
Root.type, root.signed_bytes, root.signatures
490492
)
491-
self.assertTrue(result.verified)
492-
self.assertEqual(result.signed, {key1_id})
493-
self.assertEqual(result.unsigned, set())
493+
self.assertTrue(result)
494+
self.assertEqual(result.signed, {key1_id: key1})
495+
self.assertEqual(result.unsigned, {})
494496

495497
# Test: 2 authorized keys, 1 invalid signature
496498
# Adding a key, i.e. metadata change, invalidates existing signature
497-
root.signed.add_key(
498-
SSlibKey.from_securesystemslib_key(key2),
499-
Root.type,
500-
)
499+
root.signed.add_key(key2, Root.type)
501500
result = root.signed.get_verification_result(
502501
Root.type, root.signed_bytes, root.signatures
503502
)
504-
self.assertFalse(result.verified)
505-
self.assertEqual(result.signed, set())
506-
self.assertEqual(result.unsigned, {key1_id, key2_id})
503+
self.assertFalse(result)
504+
self.assertEqual(result.signed, {})
505+
self.assertEqual(result.unsigned, {key1_id: key1, key2_id: key2})
507506

508507
# Test: 3 authorized keys, 1 invalid signature, 1 key missing key data
509-
# Adding a keyid w/o key, fails verification the same as no signature
510-
# or an invalid signature for that key
508+
# Adding a keyid w/o key, fails verification but this key is not listed
509+
# in unsigned
511510
root.signed.roles[Root.type].keyids.append(key3_id)
512511
result = root.signed.get_verification_result(
513512
Root.type, root.signed_bytes, root.signatures
514513
)
515-
self.assertFalse(result.verified)
516-
self.assertEqual(result.signed, set())
517-
self.assertEqual(result.unsigned, {key1_id, key2_id, key3_id})
514+
self.assertFalse(result)
515+
self.assertEqual(result.signed, {})
516+
self.assertEqual(result.unsigned, {key1_id: key1, key2_id: key2})
518517

519518
# Test: 3 authorized keys, 1 valid signature, 1 invalid signature, 1
520519
# key missing key data
521-
root.sign(SSlibSigner(key2), append=True)
520+
root.sign(SSlibSigner(priv_key2), append=True)
522521
result = root.signed.get_verification_result(
523522
Root.type, root.signed_bytes, root.signatures
524523
)
525-
self.assertTrue(result.verified)
526-
self.assertEqual(result.signed, {key2_id})
527-
self.assertEqual(result.unsigned, {key1_id, key3_id})
524+
self.assertTrue(result)
525+
self.assertEqual(result.signed, {key2_id: key2})
526+
self.assertEqual(result.unsigned, {key1_id: key1})
528527

529528
# Test: 3 authorized keys, 1 valid signature, 1 invalid signature, 1
530529
# key missing key data, 1 ignored unrelated signature
531-
root.sign(SSlibSigner(key4), append=True)
530+
root.sign(SSlibSigner(priv_key4), append=True)
532531
self.assertEqual(
533532
set(root.signatures.keys()), {key1_id, key2_id, key4_id}
534533
)
535-
self.assertTrue(result.verified)
536-
self.assertEqual(result.signed, {key2_id})
537-
self.assertEqual(result.unsigned, {key1_id, key3_id})
534+
self.assertTrue(result)
535+
self.assertEqual(result.signed, {key2_id: key2})
536+
self.assertEqual(result.unsigned, {key1_id: key1})
538537

539538
# See test_signed_verify_delegate for more related tests ...
540539

541-
def test_signed_verification_result_union(self) -> None:
542-
# Test all possible "unions" (AND) of "verified" field
543-
data = [
544-
(True, True, True),
545-
(True, False, False),
546-
(False, True, False),
547-
(False, False, False),
548-
]
549-
550-
for a_part, b_part, ab_part in data:
551-
self.assertEqual(
552-
VerificationResult(a_part, set(), set()).union(
553-
VerificationResult(b_part, set(), set())
554-
),
555-
VerificationResult(ab_part, set(), set()),
556-
)
557-
558-
# Test exemplary union (|) of "signed" and "unsigned" fields
559-
a = VerificationResult(True, {"1"}, {"2"})
560-
b = VerificationResult(True, {"3"}, {"4"})
561-
ab = VerificationResult(True, {"1", "3"}, {"2", "4"})
562-
self.assertEqual(a.union(b), ab)
563-
564540
def test_key_class(self) -> None:
565541
# Test if from_securesystemslib_key removes the private key from keyval
566542
# of a securesystemslib key dictionary.

0 commit comments

Comments
 (0)