mirror of
https://github.com/theupdateframework/python-tuf
synced 2026-05-24 10:08:28 +00:00
Add more of implementation for MultiRepoUpdater
This commit is contained in:
parent
4672d51908
commit
45c780c06e
3 changed files with 13 additions and 68 deletions
|
|
@ -129,6 +129,7 @@ def setUp(self):
|
|||
original_repository = os.path.join(original_repository_files, 'repository')
|
||||
original_client = os.path.join(original_repository_files, 'client', 'test_repository')
|
||||
original_keystore = os.path.join(original_repository_files, 'keystore')
|
||||
original_map_file = os.path.join(original_repository_files, 'map.json')
|
||||
|
||||
# Save references to the often-needed client repository directories.
|
||||
# Test cases need these references to access metadata and target files.
|
||||
|
|
@ -147,6 +148,7 @@ def setUp(self):
|
|||
self.client_directory2 = os.path.join(temporary_repository_root, repository_name2)
|
||||
|
||||
self.keystore_directory = os.path.join(temporary_repository_root, 'keystore')
|
||||
self.map_file = os.path.join(self.client_directory, 'map.json')
|
||||
|
||||
# Copy the original 'repository', 'client', and 'keystore' directories
|
||||
# to the temporary repository the test cases can use.
|
||||
|
|
@ -154,7 +156,7 @@ def setUp(self):
|
|||
shutil.copytree(original_repository, self.repository_directory2)
|
||||
shutil.copytree(original_client, self.client_directory)
|
||||
shutil.copytree(original_client, self.client_directory2)
|
||||
|
||||
shutil.copyfile(original_map_file, self.map_file)
|
||||
shutil.copytree(original_keystore, self.keystore_directory)
|
||||
|
||||
# Set the url prefix required by the 'tuf/client/updater.py' updater.
|
||||
|
|
@ -264,6 +266,8 @@ def test_repository_tool(self):
|
|||
|
||||
self.assertEqual(100, self.repository_updater2.metadata['current']['timestamp']['version'])
|
||||
|
||||
multi_repo_updater = updater.MultiRepoUpdater(self.map_file)
|
||||
targetinfo = multi_repo_updater.get_one_valid_targetinfo('file3.txt')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
|
|
@ -1549,7 +1549,6 @@ def setUp(self):
|
|||
'confined_target_dirs': ['']}}
|
||||
|
||||
self.map_file = os.path.join(self.client_directory, 'map.json')
|
||||
print('map_file: ' + repr(self.map_file))
|
||||
|
||||
# Creating a repository instance. The test cases will use this client
|
||||
# updater to refresh metadata, fetch target files, etc.
|
||||
|
|
@ -1572,83 +1571,25 @@ def tearDown(self):
|
|||
|
||||
|
||||
# UNIT TESTS.
|
||||
def test_get_one_valid_targetinfo(self):
|
||||
def test__init__(self):
|
||||
# The client's repository requires a metadata directory (and the 'current'
|
||||
# and 'previous' sub-directories), and at least the 'root.json' file.
|
||||
# setUp(), called before each test case, instantiates the required updater
|
||||
# objects and keys. The needed objects/data is available in
|
||||
# 'self.repository_updater', 'self.client_directory', etc.
|
||||
|
||||
|
||||
# Test: Invalid arguments.
|
||||
# Invalid 'updater_name' argument. String expected.
|
||||
self.assertRaises(securesystemslib.exceptions.FormatError,
|
||||
updater.MultiRepoUpdater, 8, self.repository_mirrors)
|
||||
updater.MultiRepoUpdater, 8)
|
||||
|
||||
# Invalid 'repository_mirrors' argument. 'tuf.formats.MIRRORDICT_SCHEMA'
|
||||
# expected.
|
||||
self.assertRaises(securesystemslib.exceptions.FormatError,
|
||||
updater.Updater, updater.Updater, 8)
|
||||
|
||||
|
||||
# 'tuf.client.updater.py' requires that the client's repositories directory
|
||||
# be configured in 'tuf.settings.py'.
|
||||
tuf.settings.repositories_directory = None
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
# Restore 'tuf.settings.repositories_directory' to the original client
|
||||
# directory.
|
||||
tuf.settings.repositories_directory = self.client_directory
|
||||
|
||||
|
||||
# Test: empty client repository (i.e., no metadata directory).
|
||||
metadata_backup = self.client_metadata + '.backup'
|
||||
shutil.move(self.client_metadata, metadata_backup)
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
# Restore the client's metadata directory.
|
||||
shutil.move(metadata_backup, self.client_metadata)
|
||||
|
||||
|
||||
# Test: repository with only a '{repository_directory}/metadata' directory.
|
||||
# (i.e., missing the required 'current' and 'previous' sub-directories).
|
||||
current_backup = self.client_metadata_current + '.backup'
|
||||
previous_backup = self.client_metadata_previous + '.backup'
|
||||
|
||||
shutil.move(self.client_metadata_current, current_backup)
|
||||
shutil.move(self.client_metadata_previous, previous_backup)
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
|
||||
# Restore the client's previous directory. The required 'current' directory
|
||||
# is still missing.
|
||||
shutil.move(previous_backup, self.client_metadata_previous)
|
||||
|
||||
# Test: repository with only a '{repository_directory}/metadata/previous'
|
||||
# directory.
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
# Restore the client's current directory.
|
||||
shutil.move(current_backup, self.client_metadata_current)
|
||||
|
||||
# Test: repository with a '{repository_directory}/metadata/current'
|
||||
# directory, but the 'previous' directory is missing.
|
||||
shutil.move(self.client_metadata_previous, previous_backup)
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
shutil.move(previous_backup, self.client_metadata_previous)
|
||||
|
||||
# Test: repository missing the required 'root.json' file.
|
||||
client_root_file = os.path.join(self.client_metadata_current, 'root.json')
|
||||
backup_root_file = client_root_file + '.backup'
|
||||
shutil.move(client_root_file, backup_root_file)
|
||||
self.assertRaises(tuf.exceptions.RepositoryError, updater.Updater, 'test_repository',
|
||||
self.repository_mirrors)
|
||||
# Restore the client's 'root.json file.
|
||||
shutil.move(backup_root_file, client_root_file)
|
||||
|
||||
# Test: Normal 'tuf.client.updater.Updater' instantiation.
|
||||
updater.Updater('test_repository', self.repository_mirrors)
|
||||
# Test for valid instantiation.
|
||||
map_file = os.path.join(self.client_directory, 'map.json')
|
||||
multi_repo_updater = updater.MultiRepoUpdater(map_file)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ def __init__(self, map_file):
|
|||
|
||||
|
||||
|
||||
def get_one_valid_targetinfo(target_filename):
|
||||
def get_one_valid_targetinfo(self, target_filename):
|
||||
"""
|
||||
<Purpose>
|
||||
Return the targetinfo, if any, for the given 'target_filename'.
|
||||
|
|
@ -226,8 +226,8 @@ def get_one_valid_targetinfo(target_filename):
|
|||
logger.debug('Found local directory for ' + repr(repository_name))
|
||||
|
||||
# The latest known root metadata file must already be on disk.
|
||||
root_file = os.path.isfile(os.path.join(repository_directory,
|
||||
'current', 'root.json'))
|
||||
root_file = os.path.join(repository_directory,
|
||||
'current', 'root.json')
|
||||
if not os.path.isfile(root_file):
|
||||
raise tuf.exceptions.Error('The Root file must exist at ' + repr(root_file))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue