Add more of implementation for MultiRepoUpdater

This commit is contained in:
Vladimir Diaz 2017-02-13 17:44:30 -05:00
parent 4672d51908
commit 45c780c06e
3 changed files with 13 additions and 68 deletions

View file

@ -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__':

View file

@ -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)

View 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))