diff --git a/tests/test_updater_top_level_update.py b/tests/test_updater_top_level_update.py index 9ecf4956..0406816b 100644 --- a/tests/test_updater_top_level_update.py +++ b/tests/test_updater_top_level_update.py @@ -18,6 +18,7 @@ from tests.repository_simulator import RepositorySimulator from tuf.api.exceptions import ( BadVersionNumberError, + DownloadLengthMismatchError, ExpiredMetadataError, LengthOrHashMismatchError, UnsignedMetadataError, @@ -777,6 +778,30 @@ def test_expired_metadata(self, mock_time: Mock) -> None: md = Metadata.from_file(f"{self.metadata_dir}/{role}.json") self.assertEqual(md.signed.version, 2) + def test_max_metadata_lengths(self) -> None: + """Test that clients configured max metadata lengths are respected""" + + # client has root v1 already: create a new one available for download + self.sim.root.version += 1 + self.sim.publish_root() + + config_vars = [ + "root_max_length", + "timestamp_max_length", + "snapshot_max_length", + "targets_max_length", + ] + # make sure going over any length limit raises DownloadLengthMismatchError + for var_name in config_vars: + updater = self._init_updater() + setattr(updater.config, var_name, 100) + with self.assertRaises(DownloadLengthMismatchError): + updater.refresh() + + # All good with normal length limits + updater = self._init_updater() + updater.refresh() + if __name__ == "__main__": if "--dump" in sys.argv: