diff --git a/tests/test_api.py b/tests/test_api.py index 85cc33eae5..e4d1a4ef40 100755 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -258,6 +258,10 @@ def test_metadata_snapshot(self): 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): timestamp_path = os.path.join( @@ -293,6 +297,10 @@ def test_metadata_timestamp(self): 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): root_path = os.path.join( diff --git a/tuf/api/metadata.py b/tuf/api/metadata.py index e28310ae56..c5fa78bff0 100644 --- a/tuf/api/metadata.py +++ b/tuf/api/metadata.py @@ -520,7 +520,7 @@ class Timestamp(Signed): '': '', '': '', ... - } + } // optional } } @@ -557,14 +557,19 @@ def to_dict(self) -> Dict[str, Any]: # Modification. def update( - self, version: int, length: int, hashes: Mapping[str, Any] + self, + version: int, + length: Optional[int] = None, + hashes: Optional[Mapping[str, Any]] = 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):