diff --git a/tests/unit/test_formats.py b/tests/unit/test_formats.py index 387c1a25..a20b57b1 100755 --- a/tests/unit/test_formats.py +++ b/tests/unit/test_formats.py @@ -18,6 +18,7 @@ """ import unittest +import datetime import tuf import tuf.formats @@ -39,7 +40,7 @@ def tearDown(self): def test_schemas(self): # Test conditions for valid schemas. valid_schemas = { - 'TIME_SCHEMA': (tuf.formats.TIME_SCHEMA, '2012-10-14 06:42:12 UTC'), + 'UNIX_TIMESTAMP_SCHEMA': (tuf.formats.UNIX_TIMESTAMP_SCHEMA, 499137720), 'HASH_SCHEMA': (tuf.formats.HASH_SCHEMA, 'A4582BCF323BCEF'), @@ -53,7 +54,7 @@ def test_schemas(self): 'KEYIDS_SCHEMA': (tuf.formats.KEYIDS_SCHEMA, ['123456789abcdef', '123456789abcdef']), - 'SIG_METHOD_SCHEMA': (tuf.formats.SIG_METHOD_SCHEMA, 'evp'), + 'SIG_METHOD_SCHEMA': (tuf.formats.SIG_METHOD_SCHEMA, 'ed25519'), 'RELPATH_SCHEMA': (tuf.formats.RELPATH_SCHEMA, 'metadata/root/'), @@ -184,7 +185,7 @@ def test_schemas(self): {'_type': 'Root', 'version': 8, 'consistent_snapshot': False, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'keys': {'123abc': {'keytype': 'rsa', 'keyval': {'public': 'pubkey', 'private': 'privkey'}}}, @@ -195,7 +196,7 @@ def test_schemas(self): 'TARGETS_SCHEMA': (tuf.formats.TARGETS_SCHEMA, {'_type': 'Targets', 'version': 8, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'targets': {'metadata/targets.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}}, @@ -209,7 +210,7 @@ def test_schemas(self): 'SNAPSHOT_SCHEMA': (tuf.formats.SNAPSHOT_SCHEMA, {'_type': 'Snapshot', 'version': 8, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'meta': {'metadata/snapshot.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}}}), @@ -217,7 +218,7 @@ def test_schemas(self): 'TIMESTAMP_SCHEMA': (tuf.formats.TIMESTAMP_SCHEMA, {'_type': 'Timestamp', 'version': 8, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'meta': {'metadata/timestamp.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}}}), @@ -239,7 +240,7 @@ def test_schemas(self): 'MIRRORLIST_SCHEMA': (tuf.formats.MIRRORLIST_SCHEMA, {'_type': 'Mirrors', 'version': 8, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'mirrors': [{'url_prefix': 'http://localhost:8001', 'metadata_path': 'metadata/', 'targets_path': 'targets/', @@ -289,7 +290,7 @@ def __init__(self, version, expires): def test_TimestampFile(self): # Test conditions for valid instances of 'tuf.formats.TimestampFile'. version = 8 - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 filedict = {'metadata/timestamp.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}} @@ -323,7 +324,7 @@ def test_RootFile(self): # Test conditions for valid instances of 'tuf.formats.RootFile'. version = 8 consistent_snapshot = False - expires = '2018-10-16 06:42:12 UTC' + expires = 499137720 keydict = {'123abc': {'keytype': 'rsa', 'keyval': {'public': 'pubkey', 'private': 'privkey'}}} @@ -373,7 +374,7 @@ def test_RootFile(self): def test_SnapshotFile(self): # Test conditions for valid instances of 'tuf.formats.SnapshotFile'. version = 8 - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 filedict = {'metadata/snapshot.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}} @@ -405,7 +406,7 @@ def test_SnapshotFile(self): def test_TargetsFile(self): # Test conditions for valid instances of 'tuf.formats.TargetsFile'. version = 8 - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 filedict = {'metadata/targets.json': {'length': 1024, 'hashes': {'sha256': 'ABCD123'}, 'custom': {'type': 'metadata'}}} @@ -444,27 +445,30 @@ def test_TargetsFile(self): - def test_format_time(self): + def test_unix_timestamp_to_datetime(self): # Test conditions for valid arguments. - TIME_SCHEMA = tuf.formats.TIME_SCHEMA - self.assertTrue(TIME_SCHEMA.matches(tuf.formats.format_time(499137720))) - self.assertEqual('1985-10-26 01:22:00 UTC', tuf.formats.format_time(499137720)) + UNIX_TIMESTAMP_SCHEMA = tuf.formats.UNIX_TIMESTAMP_SCHEMA + self.assertTrue(datetime.datetime, tuf.formats.unix_timestamp_to_datetime(499137720)) + datetime_object = datetime.datetime(1985, 10, 26, 01, 22) + self.assertEqual(datetime_object, tuf.formats.unix_timestamp_to_datetime(499137720)) # Test conditions for invalid arguments. - self.assertRaises(tuf.FormatError, tuf.formats.format_time, 'bad') - self.assertRaises(tuf.FormatError, tuf.formats.format_time, 1000000000000000000000) - self.assertRaises(tuf.FormatError, tuf.formats.format_time, ['5']) + self.assertRaises(tuf.FormatError, tuf.formats.unix_timestamp_to_datetime, 'bad') + self.assertRaises(tuf.FormatError, tuf.formats.unix_timestamp_to_datetime, 1000000000000000000000) + self.assertRaises(tuf.FormatError, tuf.formats.unix_timestamp_to_datetime, -1) + self.assertRaises(tuf.FormatError, tuf.formats.unix_timestamp_to_datetime, ['5']) - def test_parse_time(self): + def test_datetime_to_unix_timestamp(self): # Test conditions for valid arguments. - self.assertEqual(499137600, tuf.formats.parse_time('1985-10-26 01:20:00 UTC')) + datetime_object = datetime.datetime(2015, 10, 21, 19, 28) + self.assertEqual(1445455680, tuf.formats.datetime_to_unix_timestamp(datetime_object)) # Test conditions for invalid arguments. - self.assertRaises(tuf.FormatError, tuf.formats.parse_time, 'bad') - self.assertRaises(tuf.FormatError, tuf.formats.parse_time, 1000000000000000000000) - self.assertRaises(tuf.FormatError, tuf.formats.parse_time, ['1']) + self.assertRaises(tuf.FormatError, tuf.formats.datetime_to_unix_timestamp, 'bad') + self.assertRaises(tuf.FormatError, tuf.formats.datetime_to_unix_timestamp, 1000000000000000000000) + self.assertRaises(tuf.FormatError, tuf.formats.datetime_to_unix_timestamp, ['1']) @@ -498,7 +502,7 @@ def test_make_signable(self): root = {'_type': 'Root', 'version': 8, 'consistent_snapshot': False, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'keys': {'123abc': {'keytype': 'rsa', 'keyval': {'public': 'pubkey', 'private': 'privkey'}}}, @@ -625,7 +629,7 @@ def test_check_signable_object_format(self): root = {'_type': 'Root', 'version': 8, 'consistent_snapshot': False, - 'expires': '2012-10-16 06:42:12 UTC', + 'expires': 499137720, 'keys': {'123abc': {'keytype': 'rsa', 'keyval': {'public': 'pubkey', 'private': 'privkey'}}}, diff --git a/tests/unit/test_keydb.py b/tests/unit/test_keydb.py index 7fd0d293..0bd27ce2 100755 --- a/tests/unit/test_keydb.py +++ b/tests/unit/test_keydb.py @@ -171,7 +171,7 @@ def test_create_keydb_from_root_metadata(self): 'Targets': {'keyids': [keyid2], 'threshold': 1}} version = 8 consistent_snapshot = False - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 root_metadata = tuf.formats.RootFile.make_metadata(version, expires, @@ -208,7 +208,7 @@ def test_create_keydb_from_root_metadata(self): rsakey3['keytype'] = 'bad_keytype' keydict[keyid3] = rsakey3 version = 8 - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 root_metadata = tuf.formats.RootFile.make_metadata(version, expires, diff --git a/tests/unit/test_repository_tool.py b/tests/unit/test_repository_tool.py index 62dc92f4..eba82a77 100755 --- a/tests/unit/test_repository_tool.py +++ b/tests/unit/test_repository_tool.py @@ -17,6 +17,7 @@ import os import time +import datetime import unittest import logging import tempfile @@ -225,7 +226,7 @@ def test_write_and_write_partial(self): # is made to a role. repo_tool.load_repository(repository_directory) - repository.timestamp.expiration = '2084-01-01 12:00:00' + repository.timestamp.expiration = datetime.datetime(2030, 01, 01, 12, 00) self.assertRaises(tuf.UnsignedMetadataError, repository.write) # Verify that a write_partial() is allowed. @@ -300,7 +301,7 @@ def __init__(self): self._rolename = 'metadata_role' # Expire in 86400 seconds (1 day). - expiration = tuf.formats.format_time(time.time() + 86400) + expiration = int(time.time() + 86400) roleinfo = {'keyids': [], 'signing_keyids': [], 'threshold': 1, 'signatures': [], 'version': 0, @@ -354,31 +355,35 @@ def test_threshold(self): def test_expiration(self): # Test expiration getter. expiration = self.metadata.expiration - self.assertTrue(tuf.formats.TIME_SCHEMA.matches(expiration)) + self.assertTrue(isinstance(expiration, datetime.datetime)) # Test expiration setter. - self.metadata.expiration = '2088-01-01 12:00:00' + self.metadata.expiration = datetime.datetime(2030, 01, 01, 12, 00) expiration = self.metadata.expiration - self.assertTrue(tuf.formats.TIME_SCHEMA.matches(expiration)) + self.assertTrue(isinstance(expiration, datetime.datetime)) # Test improperly formatted datetime. try: self.metadata.expiration = '3' + except tuf.FormatError: pass + else: self.fail('Setter failed to detect improperly formatted datetime.') # Test invalid argument (i.e., expiration has already expired.) - expired_datetime = tuf.formats.format_time(time.time() - 1) + expired_datetime = tuf.formats.unix_timestamp_to_datetime(int(time.time() - 1)) try: self.metadata.expiration = expired_datetime - except tuf.FormatError: + + except tuf.Error: pass + else: - self.fail('Setter failted to detect an expired datetime.') + self.fail('Setter failed to detect an expired datetime.') @@ -1525,24 +1530,24 @@ def test_generate_root_metadata(self): tuf.roledb.create_roledb_from_root_metadata(root_signable['signed']) tuf.keydb.create_keydb_from_root_metadata(root_signable['signed']) - root_metadata = repo_tool.generate_root_metadata(1, '2088-01-01 12:00:00 UTC', + root_metadata = repo_tool.generate_root_metadata(1, 189345000, consistent_snapshot=False) self.assertTrue(tuf.formats.ROOT_SCHEMA.matches(root_metadata)) # Test improperly formatted arguments. self.assertRaises(tuf.FormatError, repo_tool.generate_root_metadata, - '3', '2088-01-01 12:00:00 UTC', False) + '3', 189345000, False) self.assertRaises(tuf.FormatError, repo_tool.generate_root_metadata, - 1, 3, False) + 1, '3', False) self.assertRaises(tuf.FormatError, repo_tool.generate_root_metadata, - 1, '2088-01-01 12:00:00 UTC', 3) + 1, 189345000, 3) # Test for missing required roles and keys. tuf.roledb.clear_roledb() tuf.keydb.clear_keydb() self.assertRaises(tuf.Error, repo_tool.generate_root_metadata, - 1, '2088-01-01 12:00:00 UTC', False) + 1, 189345000, False) @@ -1558,7 +1563,8 @@ def test_generate_targets_metadata(self): # Set valid generate_targets_metadata() arguments. version = 1 - expiration_date = '2088-01-01 12:00:00 UTC' + datetime_object = datetime.datetime(2030, 01, 01, 12, 00) + expiration_date = tuf.formats.datetime_to_unix_timestamp(datetime_object) target_files = ['file.txt'] delegations = {"keys": { @@ -1611,7 +1617,7 @@ def test_generate_targets_metadata(self): self.assertRaises(tuf.FormatError, repo_tool.generate_targets_metadata, targets_directory, target_files, '3', expiration_date) self.assertRaises(tuf.FormatError, repo_tool.generate_targets_metadata, - targets_directory, target_files, version, 3) + targets_directory, target_files, version, '3') # Improperly formatted 'delegations' and 'write_consistent_targets' self.assertRaises(tuf.FormatError, repo_tool.generate_targets_metadata, @@ -1643,7 +1649,7 @@ def test_generate_snapshot_metadata(self): targets_filename = os.path.join(metadata_directory, repo_tool.TARGETS_FILENAME) version = 1 - expiration_date = '2088-01-01 12:00:00 UTC' + expiration_date = 189345000 snapshot_metadata = \ repo_tool.generate_snapshot_metadata(metadata_directory, version, @@ -1661,7 +1667,7 @@ def test_generate_snapshot_metadata(self): metadata_directory, '3', expiration_date, root_filename, targets_filename, consistent_snapshot=False) self.assertRaises(tuf.FormatError, repo_tool.generate_snapshot_metadata, - metadata_directory, version, 3, + metadata_directory, version, '3', root_filename, targets_filename, consistent_snapshot=False) self.assertRaises(tuf.FormatError, repo_tool.generate_snapshot_metadata, metadata_directory, version, expiration_date, @@ -1689,7 +1695,7 @@ def test_generate_timestamp_metadata(self): # Set valid generate_timestamp_metadata() arguments. version = 1 - expiration_date = '2088-01-01 12:00:00 UTC' + expiration_date = 189345000 compressions = ['gz'] snapshot_metadata = \ @@ -1704,7 +1710,7 @@ def test_generate_timestamp_metadata(self): self.assertRaises(tuf.FormatError, repo_tool.generate_timestamp_metadata, snapshot_filename, '3', expiration_date, compressions) self.assertRaises(tuf.FormatError, repo_tool.generate_timestamp_metadata, - snapshot_filename, version, 3, compressions) + snapshot_filename, version, '3', compressions) self.assertRaises(tuf.FormatError, repo_tool.generate_timestamp_metadata, snapshot_filename, version, expiration_date, 3) self.assertRaises(tuf.FormatError, repo_tool.generate_timestamp_metadata, diff --git a/tests/unit/test_roledb.py b/tests/unit/test_roledb.py index 630ccaef..6df80df1 100755 --- a/tests/unit/test_roledb.py +++ b/tests/unit/test_roledb.py @@ -320,7 +320,7 @@ def test_create_roledb_from_root_metadata(self): 'targets': {'keyids': [keyid2], 'threshold': 1}} version = 8 consistent_snapshot = False - expires = '2012-10-16 06:42:12 UTC' + expires = 499137720 root_metadata = tuf.formats.RootFile.make_metadata(version, expires, diff --git a/tests/unit/test_updater.py b/tests/unit/test_updater.py index d8e1a5b4..2e362802 100755 --- a/tests/unit/test_updater.py +++ b/tests/unit/test_updater.py @@ -465,7 +465,7 @@ def test_2__ensure_not_expired(self): # 'tuf.ExpiredMetadataError' should be raised in this next test condition, # because the expiration_date has expired by 10 seconds. - expires = tuf.formats.format_time(time.time() - 10) + expires = int(time.time() - 10) self.repository_updater.metadata['current']['root']['expires'] = expires # Ensure the 'expires' value of the root file is valid by checking the