Improve code coverage for repository_tool.py

This commit is contained in:
Vladimir Diaz 2016-09-21 09:17:37 -04:00
parent 402057e716
commit e1debf8ea9
2 changed files with 55 additions and 2 deletions

View file

@ -554,7 +554,7 @@ def test_compressions(self):
def test_add_verification_key(self):
# Add verification key and verify with keys() that it was added.
# Add verification key and verify that it was added via (role).keys.
key_path = os.path.join('repository_data',
'keystore', 'snapshot_key.pub')
key_object = repo_tool.import_ed25519_publickey_from_file(key_path)
@ -562,10 +562,42 @@ def test_add_verification_key(self):
keyid = key_object['keyid']
self.assertEqual([keyid], self.metadata.keys)
expiration = \
tuf.formats.unix_timestamp_to_datetime(int(time.time() + 86400))
expiration = expiration.isoformat() + 'Z'
roleinfo = {'keyids': [], 'signing_keyids': [], 'threshold': 1,
'signatures': [], 'version': 0,
'consistent_snapshot': False,
'compressions': [''], 'expires': expiration,
'partial_loaded': False}
tuf.roledb.add_role('Root', roleinfo)
tuf.roledb.add_role('Targets', roleinfo)
tuf.roledb.add_role('Snapshot', roleinfo)
tuf.roledb.add_role('Timestamp', roleinfo)
# Test for different top-level role names.
self.metadata._rolename = 'Targets'
self.metadata.add_verification_key(key_object)
self.metadata._rolename = 'Snapshot'
self.metadata.add_verification_key(key_object)
self.metadata._rolename = 'Timestamp'
self.metadata.add_verification_key(key_object)
# Test for a given 'expires' argument.
expires = datetime.datetime(2030, 1, 1, 12, 0)
self.metadata.add_verification_key(key_object, expires)
# Test for an expired 'expires'.
expired = datetime.datetime(1984, 1, 1, 12, 0)
self.assertRaises(tuf.Error,
self.metadata.add_verification_key, key_object, expired)
# Test improperly formatted key argument.
self.assertRaises(tuf.FormatError, self.metadata.add_verification_key, 3)
self.assertRaises(tuf.FormatError, self.metadata.add_verification_key, key_object, 3)
@ -662,13 +694,22 @@ def test_add_signature(self):
root_signable = tuf.util.load_json_file(root_filepath)
signatures = root_signable['signatures']
# Add the first signature from the list, as only need one is needed.
# Add the first signature from the list, as only one is needed.
self.metadata.add_signature(signatures[0])
self.assertEqual(signatures, self.metadata.signatures)
# Verify that a signature is added if a 'signatures' entry is not present.
tuf.roledb.create_roledb_from_root_metadata(root_signable['signed'])
del tuf.roledb._roledb_dict['default']['root']['signatures']
self.metadata._rolename = 'root'
self.metadata.add_signature(signatures[0])
# Add a duplicate signature.
self.metadata.add_signature(signatures[0])
# Test improperly formatted signature argument.
self.assertRaises(tuf.FormatError, self.metadata.add_signature, 3)
self.assertRaises(tuf.FormatError, self.metadata.add_signature, signatures[0], 3)
@ -1536,6 +1577,15 @@ def test_load_repository(self):
def test_dirty_roles(self):
original_repository_directory = os.path.join('repository_data',
'repository')
repository = repo_tool.load_repository(original_repository_directory)
# dirty_roles() only logs the list of dirty roles.
repository.dirty_roles()
# Run the test cases.
if __name__ == '__main__':
unittest.main()

View file

@ -897,6 +897,9 @@ def add_signature(self, signature, mark_role_as_dirty=True):
roleinfo['signatures'].append(signature)
tuf.roledb.update_roleinfo(self.rolename, roleinfo, mark_role_as_dirty)
else:
logger.debug('Signature already exists for role: ' + repr(self.rolename))
def remove_signature(self, signature):