diff --git a/tests/test_api.py b/tests/test_api.py index 7ed6a61e54..5e1a4ff4f3 100755 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -232,6 +232,10 @@ def test_metadata_snapshot(self): self.assertNotEqual(snapshot.signed.meta, fileinfo) snapshot.signed.update('role1', 2, 123, hashes) self.assertEqual(snapshot.signed.meta, fileinfo) + # Update only version. Length and hashes are optional. + snapshot.signed.update('role1', 3) + fileinfo['role1.json'] = {'version': 3} + self.assertEqual(snapshot.signed.meta, fileinfo) def test_metadata_timestamp(self): @@ -267,6 +271,10 @@ def test_metadata_timestamp(self): self.assertNotEqual(timestamp.signed.meta['snapshot.json'], fileinfo) timestamp.signed.update(2, 520, hashes) self.assertEqual(timestamp.signed.meta['snapshot.json'], fileinfo) + # Update only version. Length and hashes are optional. + timestamp.signed.update(3) + fileinfo = {'version': 3} + self.assertEqual(timestamp.signed.meta['snapshot.json'], fileinfo) def test_metadata_root(self): diff --git a/tuf/api/metadata.py b/tuf/api/metadata.py index a747be6d13..f306baae7f 100644 --- a/tuf/api/metadata.py +++ b/tuf/api/metadata.py @@ -431,7 +431,7 @@ class Timestamp(Signed): '': '', '': '', ... - } + } // optional } } @@ -455,13 +455,16 @@ def to_dict(self) -> JsonDict: # Modification. - def update(self, version: int, length: int, hashes: JsonDict) -> None: + def update(self, version: int, length: Optional[int] = None, + hashes: Optional[JsonDict] = None) -> None: """Assigns passed info about snapshot metadata to meta dict. """ - self.meta['snapshot.json'] = { - 'version': version, - 'length': length, - 'hashes': hashes - } + + self.meta['snapshot.json'] = {'version': version} + if length is not None: + self.meta['snapshot.json']['length'] = length + + if hashes is not None: + self.meta['snapshot.json']['hashes'] = hashes class Snapshot(Signed):