Esempio n. 1
0
  def test_generate_snapshot_metadata(self):
    # Test normal case.
    temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory)
    original_repository_path = os.path.join('repository_data',
                                            'repository')
    repository_directory = os.path.join(temporary_directory, 'repository')
    shutil.copytree(original_repository_path, repository_directory)
    metadata_directory = os.path.join(repository_directory,
                                      repo_lib.METADATA_STAGED_DIRECTORY_NAME)
    targets_directory = os.path.join(repository_directory, repo_lib.TARGETS_DIRECTORY_NAME)
    targets_filename = os.path.join(metadata_directory,
                                    repo_lib.TARGETS_FILENAME)
    version = 1
    expiration_date = '1985-10-21T13:20:00Z'

    # Load a valid repository so that top-level roles exist in roledb and
    # generate_snapshot_metadata() has roles to specify in snapshot metadata.
    storage_backend = securesystemslib.storage.FilesystemBackend()
    repository = repo_tool.Repository(repository_directory, metadata_directory,
                                      targets_directory, storage_backend)

    repository_junk = repo_tool.load_repository(repository_directory)

    # For testing purposes, store an invalid metadata file in the metadata directory
    # to verify that it isn't loaded by generate_snapshot_metadata().  Unknown
    # metadata file extensions should be ignored.
    invalid_metadata_file = os.path.join(metadata_directory, 'role_file.xml')
    with open(invalid_metadata_file, 'w') as file_object:
      file_object.write('bad extension on metadata file')

    targets_filename = 'targets'

    snapshot_metadata = \
      repo_lib.generate_snapshot_metadata(metadata_directory, version,
                                          expiration_date,
                                          targets_filename,
                                          storage_backend,
                                          consistent_snapshot=False)
    self.assertTrue(tuf.formats.SNAPSHOT_SCHEMA.matches(snapshot_metadata))


    # Test improperly formatted arguments.
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_lib.generate_snapshot_metadata,
                      3, version, expiration_date,
                      targets_filename, consistent_snapshot=False, storage_backend=storage_backend)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_lib.generate_snapshot_metadata,
                      metadata_directory, '3', expiration_date,
                      targets_filename, storage_backend, consistent_snapshot=False)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_lib.generate_snapshot_metadata,
                      metadata_directory, version, '3',
                      targets_filename, storage_backend, consistent_snapshot=False)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_lib.generate_snapshot_metadata,
                      metadata_directory, version, expiration_date,
                      3, storage_backend, consistent_snapshot=False)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_lib.generate_snapshot_metadata,
                      metadata_directory, version, expiration_date,
                      targets_filename, 3, storage_backend)
Esempio n. 2
0
    def test_generate_timestamp_metadata(self):
        # Test normal case.
        repository_name = 'test_repository'
        temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory)
        original_repository_path = os.path.join('repository_data',
                                                'repository')
        repository_directory = os.path.join(temporary_directory, 'repository')
        shutil.copytree(original_repository_path, repository_directory)
        metadata_directory = os.path.join(
            repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME)
        targets_directory = os.path.join(repository_directory,
                                         repo_lib.TARGETS_DIRECTORY_NAME)

        snapshot_filename = os.path.join(metadata_directory,
                                         repo_lib.SNAPSHOT_FILENAME)

        # Set valid generate_timestamp_metadata() arguments.
        version = 1
        expiration_date = '1985-10-21T13:20:00Z'

        # Load a valid repository so that top-level roles exist in roledb and
        # generate_snapshot_metadata() has roles to specify in snapshot metadata.
        repository = repo_tool.Repository(repository_directory,
                                          metadata_directory,
                                          targets_directory, repository_name)

        repository_junk = repo_tool.load_repository(repository_directory,
                                                    repository_name)

        timestamp_metadata = repo_lib.generate_timestamp_metadata(
            snapshot_filename, version, expiration_date, repository_name)
        self.assertTrue(
            tuf.formats.TIMESTAMP_SCHEMA.matches(timestamp_metadata))

        # Test improperly formatted arguments.
        self.assertRaises(securesystemslib.exceptions.FormatError,
                          repo_lib.generate_timestamp_metadata, 3, version,
                          expiration_date, repository_name)
        self.assertRaises(securesystemslib.exceptions.FormatError,
                          repo_lib.generate_timestamp_metadata,
                          snapshot_filename, '3', expiration_date,
                          repository_name)
        self.assertRaises(securesystemslib.exceptions.FormatError,
                          repo_lib.generate_timestamp_metadata,
                          snapshot_filename, version, '3', repository_name)
  def test_init(self):
    # Test normal case.
    storage_backend = securesystemslib.storage.FilesystemBackend()
    repository = repo_tool.Repository('repository_directory/',
                                      'metadata_directory/',
                                      'targets_directory/',
                                      storage_backend)
    self.assertTrue(isinstance(repository.root, repo_tool.Root))
    self.assertTrue(isinstance(repository.snapshot, repo_tool.Snapshot))
    self.assertTrue(isinstance(repository.timestamp, repo_tool.Timestamp))
    self.assertTrue(isinstance(repository.targets, repo_tool.Targets))

    # Test improperly formatted arguments.
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_tool.Repository, 3,
                      'metadata_directory/', 'targets_directory', storage_backend)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_tool.Repository,
                      'repository_directory', 3, 'targets_directory', storage_backend)
    self.assertRaises(securesystemslib.exceptions.FormatError, repo_tool.Repository,
                      'repository_directory', 'metadata_directory', storage_backend, 3)