Skip to content

Commit e21d343

Browse files
committed
Tests for new validation functions in updater.py
Signed-off-by: Martin Vrachev <[email protected]>
1 parent bc94d6f commit e21d343

File tree

2 files changed

+55
-5
lines changed

2 files changed

+55
-5
lines changed

tests/test_endless_data_attack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@ def test_with_tuf(self):
269269
self.repository_updater.refresh()
270270

271271
except tuf.exceptions.NoWorkingMirrorError as exception:
272-
for mirror_url, mirror_error in six.iteritems(exception.mirror_errors):
273-
self.assertTrue(isinstance(mirror_error, securesystemslib.exceptions.Error))
272+
for _, mirror_error in six.iteritems(exception.mirror_errors):
273+
self.assertTrue(isinstance(mirror_error, tuf.exceptions.InvalidMetadataJSONError))
274274

275275
else:
276276
self.fail('TUF did not prevent an endless data attack.')

tests/test_updater.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,10 +1760,58 @@ def test_11__verify_metadata_file(self):
17601760

17611761
self.assertRaises(tuf.exceptions.InvalidMetadataJSONError,
17621762
self.repository_updater._verify_metadata_file,
1763-
metadata_file_object, 'root')
1763+
metadata_file_object, 'root', None)
17641764

17651765

1766-
def test_12__get_file(self):
1766+
1767+
def test_12__validate_metadata_version(self):
1768+
# Test for valid metadata version with expected_version.
1769+
self.repository_updater._validate_metadata_version(
1770+
expected_version=1, metadata_role='root', version_downloaded=1)
1771+
1772+
# Test for valid metadata version without expected_version.
1773+
self.repository_updater._validate_metadata_version(
1774+
expected_version=None, metadata_role='root', version_downloaded=1)
1775+
1776+
# Test for expected_version different than version downloaded.
1777+
self.assertRaises(tuf.exceptions.BadVersionNumberError,
1778+
self.repository_updater._validate_metadata_version,
1779+
expected_version=2, metadata_role='root', version_downloaded=1)
1780+
1781+
# Test without expected_version and version_downloaded < current_version.
1782+
self.assertRaises(tuf.exceptions.ReplayedMetadataError,
1783+
self.repository_updater._validate_metadata_version,
1784+
expected_version=None, metadata_role='root', version_downloaded=0)
1785+
1786+
1787+
1788+
def test_13__validate_spec_version(self):
1789+
# Tests when metadata spec ver is compatible with tuf.SPECIFICATION_VERSION
1790+
1791+
# metadata spec ver = tuf.SPECIFICATION_VERSION
1792+
self.repository_updater._validate_spec_version(tuf.SPECIFICATION_VERSION)
1793+
1794+
code_spec_ver_split = tuf.SPECIFICATION_VERSION.split('.')
1795+
code_spec_major = int(code_spec_ver_split[0])
1796+
code_spec_minor= int(code_spec_ver_split[1])
1797+
1798+
# metadata major ver is the same as tuf.SPECIFICATION_VERSION major ver
1799+
# but metadata minor ver != tuf.SPECIFICATION_VERSION minor ver
1800+
metadata_spec = [str(code_spec_major), str(code_spec_minor + 1), '0']
1801+
separator = '.'
1802+
metadata_spec = separator.join(metadata_spec)
1803+
self.repository_updater._validate_spec_version(metadata_spec)
1804+
1805+
# Test when metadata spec ver is NOT compatible
1806+
# with tuf.SPECIFICATION_VERSION
1807+
metadata_spec = [str(code_spec_major + 1), str(code_spec_minor), '0']
1808+
metadata_spec = separator.join(metadata_spec)
1809+
self.assertRaises(tuf.exceptions.UnsupportedSpecificationError,
1810+
self.repository_updater._validate_spec_version, metadata_spec)
1811+
1812+
1813+
1814+
def test_14__get_file(self):
17671815
# Test for an "unsafe" download, where the file is downloaded up to
17681816
# a required length (and no more). The "safe" download approach
17691817
# downloads an exact required length.
@@ -1783,7 +1831,9 @@ def verify_target_file(targets_path):
17831831
self.repository_updater._get_file('targets.json', verify_target_file,
17841832
file_type, file_size, download_safely=False).close()
17851833

1786-
def test_13__targets_of_role(self):
1834+
1835+
1836+
def test_15__targets_of_role(self):
17871837
# Test case where a list of targets is given. By default, the 'targets'
17881838
# parameter is None.
17891839
targets = [{'filepath': 'file1.txt', 'fileinfo': {'length': 1, 'hashes': {'sha256': 'abc'}}}]

0 commit comments

Comments
 (0)