mirror of
https://github.com/theupdateframework/python-tuf
synced 2026-05-24 10:08:28 +00:00
Clean up download function patching in test_updater's module teardown.
This commit is contained in:
parent
43d11144e5
commit
dcd71ab1b7
1 changed files with 121 additions and 119 deletions
|
|
@ -67,6 +67,8 @@ class guarantees the order of unit tests. So that, 'test_something_A'
|
|||
'length': tuf.conf.DEFAULT_TIMESTAMP_REQUIRED_LENGTH
|
||||
}
|
||||
|
||||
original_safe_download = tuf.download.safe_download
|
||||
original_unsafe_download = tuf.download.unsafe_download
|
||||
|
||||
class TestUpdater_init_(unittest_toolbox.Modified_TestCase):
|
||||
|
||||
|
|
@ -404,6 +406,27 @@ def test_1__rebuild_key_and_role_db(self):
|
|||
|
||||
|
||||
|
||||
def test_1__update_fileinfo(self):
|
||||
# Tests
|
||||
# Verify that fileinfo dictionary is empty.
|
||||
self.assertFalse(self.Repository.fileinfo)
|
||||
|
||||
# Load file info for top level roles. This populates the fileinfo
|
||||
# dictionary.
|
||||
for role in self.role_list:
|
||||
self.Repository._update_fileinfo(role+'.txt')
|
||||
|
||||
# Verify that fileinfo has been populated and contains appropriate data.
|
||||
self.assertTrue(self.Repository.fileinfo)
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0], 'hashes':role_info[1]}
|
||||
self.assertTrue(role+'.txt' in self.Repository.fileinfo.keys())
|
||||
self.assertEqual(self.Repository.fileinfo[role+'.txt'], role_info_dict)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__import_delegations(self):
|
||||
|
|
@ -485,6 +508,86 @@ def test_2__ensure_all_targets_allowed(self):
|
|||
|
||||
|
||||
|
||||
def test_2__fileinfo_has_changed(self):
|
||||
# Verify that the method returns 'False' if file info was not changed.
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0], 'hashes':role_info[1]}
|
||||
self.assertFalse(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
# Verify that the method returns 'True' if length or hashes were changed.
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':8, 'hashes':role_info[1]}
|
||||
self.assertTrue(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0],
|
||||
'hashes':{'sha256':self.random_string()}}
|
||||
self.assertTrue(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__move_current_to_previous(self):
|
||||
# The test will consist of removing a metadata file from client's
|
||||
# {client_repository}/metadata/previous directory, executing the method
|
||||
# and then verifying that the 'previous' directory contains
|
||||
# the release file.
|
||||
release_meta_path = os.path.join(self.client_previous_dir, 'release.txt')
|
||||
os.remove(release_meta_path)
|
||||
self.assertFalse(os.path.exists(release_meta_path))
|
||||
self.Repository._move_current_to_previous('release')
|
||||
self.assertTrue(os.path.exists(release_meta_path))
|
||||
shutil.copy(release_meta_path, self.client_current_dir)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__delete_metadata(self):
|
||||
# This test will verify that 'root' metadata is never deleted, when
|
||||
# role is deleted verify that the file is not present in the
|
||||
# self.Repository.metadata dictionary.
|
||||
self.Repository._delete_metadata('root')
|
||||
self.assertTrue('root' in self.Repository.metadata['current'])
|
||||
self.Repository._delete_metadata('timestamp')
|
||||
self.assertFalse('timestamp' in self.Repository.metadata['current'])
|
||||
timestamp_meta_path = os.path.join(self.client_previous_dir,
|
||||
'timestamp.txt')
|
||||
shutil.copy(timestamp_meta_path, self.client_current_dir)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__ensure_not_expired(self):
|
||||
# This test condition will verify that nothing is raised when a metadata
|
||||
# file has a future expiration date.
|
||||
self.Repository._ensure_not_expired('root')
|
||||
|
||||
# 'tuf.ExpiredMetadataError' should be raised in this next test condition,
|
||||
# because the expiration_date has expired by 10 seconds.
|
||||
expires = tuf.formats.format_time(time.time() - 10)
|
||||
self.Repository.metadata['current']['root']['expires'] = expires
|
||||
|
||||
# Ensure the 'expires' field of the root file is properly formatted.
|
||||
self.assertTrue(tuf.formats.ROOT_SCHEMA.matches(self.Repository.metadata\
|
||||
['current']['root']))
|
||||
self.assertRaises(tuf.ExpiredMetadataError,
|
||||
self.Repository._ensure_not_expired, 'root')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_3__update_metadata(self):
|
||||
"""
|
||||
This unit test verifies the method's proper behaviour on the expected input.
|
||||
|
|
@ -540,10 +643,8 @@ def test_3__update_metadata(self):
|
|||
self._mock_download_url_to_tempfileobj(targets_filepath_compressed)
|
||||
# TODO: Not convinced this is actually being tested correctly.
|
||||
# See how we get fileinfo in tuf.client.updater._update_metadata_if_changed
|
||||
_update_metadata('targets',
|
||||
#signerlib.get_metadata_file_info(self.targets_filepath),
|
||||
None,
|
||||
compression='gzip')
|
||||
self.Repository._update_metadata_if_changed('targets')
|
||||
|
||||
list_of_targets = self.Repository.metadata['current']['targets']['targets']
|
||||
|
||||
# Verify that the added target's path is listed in target's metadata.
|
||||
|
|
@ -558,56 +659,6 @@ def test_3__update_metadata(self):
|
|||
|
||||
|
||||
|
||||
def test_1__update_fileinfo(self):
|
||||
# Tests
|
||||
# Verify that fileinfo dictionary is empty.
|
||||
self.assertFalse(self.Repository.fileinfo)
|
||||
|
||||
# Load file info for top level roles. This populates the fileinfo
|
||||
# dictionary.
|
||||
for role in self.role_list:
|
||||
self.Repository._update_fileinfo(role+'.txt')
|
||||
|
||||
# Verify that fileinfo has been populated and contains appropriate data.
|
||||
self.assertTrue(self.Repository.fileinfo)
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0], 'hashes':role_info[1]}
|
||||
self.assertTrue(role+'.txt' in self.Repository.fileinfo.keys())
|
||||
self.assertEqual(self.Repository.fileinfo[role+'.txt'], role_info_dict)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__fileinfo_has_changed(self):
|
||||
# Verify that the method returns 'False' if file info was not changed.
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0], 'hashes':role_info[1]}
|
||||
self.assertFalse(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
# Verify that the method returns 'True' if length or hashes were changed.
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':8, 'hashes':role_info[1]}
|
||||
self.assertTrue(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
for role in self.role_list:
|
||||
role_filepath = os.path.join(self.client_current_dir, role+'.txt')
|
||||
role_info = tuf.util.get_file_details(role_filepath)
|
||||
role_info_dict = {'length':role_info[0],
|
||||
'hashes':{'sha256':self.random_string()}}
|
||||
self.assertTrue(self.Repository._fileinfo_has_changed(role+'.txt',
|
||||
role_info_dict))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_3__update_metadata_if_changed(self):
|
||||
|
|
@ -711,53 +762,23 @@ def test_3__update_metadata_if_changed(self):
|
|||
|
||||
|
||||
|
||||
def test_2__move_current_to_previous(self):
|
||||
# The test will consist of removing a metadata file from client's
|
||||
# {client_repository}/metadata/previous directory, executing the method
|
||||
# and then verifying that the 'previous' directory contains
|
||||
# the release file.
|
||||
release_meta_path = os.path.join(self.client_previous_dir, 'release.txt')
|
||||
os.remove(release_meta_path)
|
||||
self.assertFalse(os.path.exists(release_meta_path))
|
||||
self.Repository._move_current_to_previous('release')
|
||||
self.assertTrue(os.path.exists(release_meta_path))
|
||||
shutil.copy(release_meta_path, self.client_current_dir)
|
||||
def test_3__targets_of_role(self):
|
||||
# Setup
|
||||
targets_dir_content = os.listdir(self.targets_dir)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__delete_metadata(self):
|
||||
# This test will verify that 'root' metadata is never deleted, when
|
||||
# role is deleted verify that the file is not present in the
|
||||
# self.Repository.metadata dictionary.
|
||||
self.Repository._delete_metadata('root')
|
||||
self.assertTrue('root' in self.Repository.metadata['current'])
|
||||
self.Repository._delete_metadata('timestamp')
|
||||
self.assertFalse('timestamp' in self.Repository.metadata['current'])
|
||||
timestamp_meta_path = os.path.join(self.client_previous_dir,
|
||||
'timestamp.txt')
|
||||
shutil.copy(timestamp_meta_path, self.client_current_dir)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_2__ensure_not_expired(self):
|
||||
# This test condition will verify that nothing is raised when a metadata
|
||||
# file has a future expiration date.
|
||||
self.Repository._ensure_not_expired('root')
|
||||
# Test: normal case.
|
||||
targets_list = self.Repository._targets_of_role('targets')
|
||||
|
||||
# 'tuf.ExpiredMetadataError' should be raised in this next test condition,
|
||||
# because the expiration_date has expired by 10 seconds.
|
||||
expires = tuf.formats.format_time(time.time() - 10)
|
||||
self.Repository.metadata['current']['root']['expires'] = expires
|
||||
|
||||
# Ensure the 'expires' field of the root file is properly formatted.
|
||||
self.assertTrue(tuf.formats.ROOT_SCHEMA.matches(self.Repository.metadata\
|
||||
['current']['root']))
|
||||
self.assertRaises(tuf.ExpiredMetadataError,
|
||||
self.Repository._ensure_not_expired, 'root')
|
||||
# Verify that list of targets was returned,
|
||||
# and that it contains valid target file.
|
||||
self.assertTrue(tuf.formats.TARGETFILES_SCHEMA.matches(targets_list))
|
||||
targets_filepaths = []
|
||||
for target in range(len(targets_list)):
|
||||
targets_filepaths.append(targets_list[target]['filepath'])
|
||||
for dir_target in targets_dir_content:
|
||||
if dir_target.endswith('.txt'):
|
||||
self.assertTrue(dir_target in targets_filepaths)
|
||||
|
||||
|
||||
|
||||
|
|
@ -857,27 +878,6 @@ def test_4__refresh_targets_metadata(self):
|
|||
|
||||
|
||||
|
||||
def test_3__targets_of_role(self):
|
||||
# Setup
|
||||
targets_dir_content = os.listdir(self.targets_dir)
|
||||
|
||||
|
||||
# Test: normal case.
|
||||
targets_list = self.Repository._targets_of_role('targets')
|
||||
|
||||
# Verify that list of targets was returned,
|
||||
# and that it contains valid target file.
|
||||
self.assertTrue(tuf.formats.TARGETFILES_SCHEMA.matches(targets_list))
|
||||
targets_filepaths = []
|
||||
for target in range(len(targets_list)):
|
||||
targets_filepaths.append(targets_list[target]['filepath'])
|
||||
for dir_target in targets_dir_content:
|
||||
if dir_target.endswith('.txt'):
|
||||
self.assertTrue(dir_target in targets_filepaths)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def test_5_all_targets(self):
|
||||
|
||||
|
|
@ -1138,6 +1138,8 @@ def tearDownModule():
|
|||
# http://docs.python.org/2/library/unittest.html#class-and-module-fixtures
|
||||
setup.remove_all_repositories(TestUpdater.repositories['main_repository'])
|
||||
unittest_toolbox.Modified_TestCase.clear_toolbox()
|
||||
tuf.download.safe_download = original_safe_download
|
||||
tuf.download.unsafe_download = original_unsafe_download
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Reference in a new issue