From aad5c94b044f07fc65e51dca88c83a95a4546dde Mon Sep 17 00:00:00 2001 From: Vladimir Diaz Date: Tue, 25 Oct 2016 17:20:44 -0400 Subject: [PATCH] Add code coverage for load_repository --- tests/test_repository_tool.py | 17 ++++++++++++++--- tuf/repository_tool.py | 9 ++++++++- tuf/util.py | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/test_repository_tool.py b/tests/test_repository_tool.py index ce8d765f..3e80d8c2 100755 --- a/tests/test_repository_tool.py +++ b/tests/test_repository_tool.py @@ -1542,9 +1542,20 @@ def test_load_repository(self): temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) original_repository_directory = os.path.join('repository_data', 'repository') + repository_directory = os.path.join(temporary_directory, 'repository') + metadata_directory = os.path.join(repository_directory, 'metadata.staged') shutil.copytree(original_repository_directory, repository_directory) - + + # For testing purposes, add a metadata file with an extension that is + # not supported, and another with invalid JSON content. + invalid_metadata_file = os.path.join(metadata_directory, 'root.xml') + root_file = os.path.join(metadata_directory, 'root.json') + shutil.copyfile(root_file, invalid_metadata_file) + bad_root_content = os.path.join(metadata_directory, 'root_bad.json') + with open(bad_root_content, 'wb') as file_object: + file_object.write('bad') + repository = repo_tool.load_repository(repository_directory) self.assertTrue(isinstance(repository, repo_tool.Repository)) @@ -1561,8 +1572,8 @@ def test_load_repository(self): self.assertTrue(len(repository.timestamp.keys)) self.assertEqual(1, repository.targets('role1').version) - # Assumed the targets (tuf/tests/repository_data/) role contains 'file1.txt' - # and 'file2.txt'. + # It is assumed that the targets (tuf/tests/repository_data/) role contains + # 'file1.txt' and 'file2.txt'. self.assertTrue('/file1.txt' in repository.targets.target_files) self.assertTrue('/file2.txt' in repository.targets.target_files) self.assertTrue('/file3.txt' in repository.targets('role1').target_files) diff --git a/tuf/repository_tool.py b/tuf/repository_tool.py index 9e954e1c..2cd05b83 100755 --- a/tuf/repository_tool.py +++ b/tuf/repository_tool.py @@ -2887,6 +2887,8 @@ def load_repository(repository_directory): metadata_name = metadata_name[:-extension_length] else: + logger.debug('Skipping file with unsupported metadata' + ' extension: ' + repr(metadata_path)) continue # Skip top-level roles, only interested in delegated roles now that the @@ -2906,7 +2908,9 @@ def load_repository(repository_directory): try: signable = tuf.util.load_json_file(metadata_path) - except (ValueError, IOError): + except (tuf.Error, ValueError, IOError): + logger.debug('Tried to load metadata with invalid JSON' + ' content: ' + repr(metadata_path)) continue metadata_object = signable['signed'] @@ -2931,6 +2935,9 @@ def load_repository(repository_directory): if os.path.exists(metadata_path + '.gz'): roleinfo['compressions'].append('gz') + + else: + logger.debug('A compressed version does not exist.') tuf.roledb.add_role(metadata_name, roleinfo) loaded_metadata.append(metadata_name) diff --git a/tuf/util.py b/tuf/util.py index 7ce3485b..387ff0a2 100755 --- a/tuf/util.py +++ b/tuf/util.py @@ -917,7 +917,7 @@ def load_json_file(filepath): tuf.Error: If 'filepath' cannot be deserialized to a Python object. - IOError in case of runtime IO exceptions. + IOError: If there are runtime IO exceptions. None.