From 45c780c06e5dede036df6afdba8ca6fc056ce77f Mon Sep 17 00:00:00 2001 From: Vladimir Diaz Date: Mon, 13 Feb 2017 17:44:30 -0500 Subject: [PATCH] Add more of implementation for MultiRepoUpdater --- .../test_multiple_repositories_integration.py | 6 +- tests/test_updater.py | 69 ++----------------- tuf/client/updater.py | 6 +- 3 files changed, 13 insertions(+), 68 deletions(-) diff --git a/tests/test_multiple_repositories_integration.py b/tests/test_multiple_repositories_integration.py index 39b34618..70823966 100755 --- a/tests/test_multiple_repositories_integration.py +++ b/tests/test_multiple_repositories_integration.py @@ -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__': diff --git a/tests/test_updater.py b/tests/test_updater.py index 1c6fd007..61f296a9 100755 --- a/tests/test_updater.py +++ b/tests/test_updater.py @@ -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) diff --git a/tuf/client/updater.py b/tuf/client/updater.py index 842248da..9d50b2be 100755 --- a/tuf/client/updater.py +++ b/tuf/client/updater.py @@ -189,7 +189,7 @@ def __init__(self, map_file): - def get_one_valid_targetinfo(target_filename): + def get_one_valid_targetinfo(self, target_filename): """ 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))