Skip to content

Commit 77dfe0b

Browse files
committed
Support abstract storage for timestamp metadata
This was erroneously absent in PR 1024, which added support for abstract files and directories. Resolve by adding a storage_backend argument to generate_timestamp_metadata() and using it so that the fileinfo (hashes and length) for the snapshot file can be generated for a snapshot metadata file on any supported storage. Signed-off-by: Joshua Lock <[email protected]>
1 parent 3fe3fc5 commit 77dfe0b

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

tests/test_repository_lib.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ def test_generate_timestamp_metadata(self):
512512
version = 1
513513
expiration_date = '1985-10-21T13:20:00Z'
514514

515+
storage_backend = securesystemslib.storage.FilesystemBackend()
515516
# Load a valid repository so that top-level roles exist in roledb and
516517
# generate_snapshot_metadata() has roles to specify in snapshot metadata.
517518
repository = repo_tool.Repository(repository_directory, metadata_directory,
@@ -521,20 +522,20 @@ def test_generate_timestamp_metadata(self):
521522
repository_name)
522523

523524
timestamp_metadata = repo_lib.generate_timestamp_metadata(snapshot_filename,
524-
version, expiration_date, repository_name)
525+
version, expiration_date, storage_backend, repository_name)
525526
self.assertTrue(tuf.formats.TIMESTAMP_SCHEMA.matches(timestamp_metadata))
526527

527528

528529
# Test improperly formatted arguments.
529530
self.assertRaises(securesystemslib.exceptions.FormatError,
530531
repo_lib.generate_timestamp_metadata, 3, version, expiration_date,
531-
repository_name)
532+
storage_backend, repository_name)
532533
self.assertRaises(securesystemslib.exceptions.FormatError,
533534
repo_lib.generate_timestamp_metadata, snapshot_filename, '3',
534-
expiration_date, repository_name)
535+
expiration_date, storage_backend, repository_name)
535536
self.assertRaises(securesystemslib.exceptions.FormatError,
536537
repo_lib.generate_timestamp_metadata, snapshot_filename, version, '3',
537-
repository_name)
538+
storage_backend, repository_name)
538539

539540

540541

tuf/repository_lib.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _generate_and_write_metadata(rolename, metadata_filename,
135135
elif rolename == 'timestamp':
136136
snapshot_filename = filenames['snapshot']
137137
metadata = generate_timestamp_metadata(snapshot_filename, roleinfo['version'],
138-
roleinfo['expires'], repository_name)
138+
roleinfo['expires'], storage_backend, repository_name)
139139

140140
_log_warning_if_expires_soon(TIMESTAMP_FILENAME, roleinfo['expires'],
141141
TIMESTAMP_EXPIRES_WARN_SECONDS)
@@ -1486,7 +1486,7 @@ def generate_snapshot_metadata(metadata_directory, version, expiration_date,
14861486

14871487

14881488
def generate_timestamp_metadata(snapshot_filename, version, expiration_date,
1489-
repository_name):
1489+
storage_backend, repository_name):
14901490
"""
14911491
<Purpose>
14921492
Generate the timestamp metadata object. The 'snapshot.json' file must
@@ -1506,14 +1506,14 @@ def generate_timestamp_metadata(snapshot_filename, version, expiration_date,
15061506
The expiration date of the metadata file, conformant to
15071507
'securesystemslib.formats.ISO8601_DATETIME_SCHEMA'.
15081508
1509-
repository_name:
1510-
The name of the repository. If not supplied, 'rolename' is added to the
1511-
'default' repository.
1512-
15131509
storage_backend:
15141510
An object which implements
15151511
securesystemslib.storage.StorageBackendInterface.
15161512
1513+
repository_name:
1514+
The name of the repository. If not supplied, 'rolename' is added to the
1515+
'default' repository.
1516+
15171517
<Exceptions>
15181518
securesystemslib.exceptions.FormatError, if the generated timestamp metadata
15191519
object cannot be formatted correctly, or one of the arguments is improperly
@@ -1538,7 +1538,7 @@ def generate_timestamp_metadata(snapshot_filename, version, expiration_date,
15381538
# Retrieve the versioninfo of the Snapshot metadata file.
15391539
snapshot_fileinfo = {}
15401540
length, hashes = securesystemslib.util.get_file_details(snapshot_filename,
1541-
tuf.settings.FILE_HASH_ALGORITHMS)
1541+
tuf.settings.FILE_HASH_ALGORITHMS, storage_backend)
15421542
snapshot_version = get_metadata_versioninfo('snapshot', repository_name)
15431543
snapshot_fileinfo[SNAPSHOT_FILENAME] = \
15441544
tuf.formats.make_fileinfo(length, hashes, version=snapshot_version['version'])

0 commit comments

Comments
 (0)