示例#1
0
    def test_6_generate_release_metadata(self):
        """
    test_6_generate_release_metadata() uses previously tested
    singnerlib's build_root_file(), build_target_file()
    and get_metadata_file_info.  In order to use generate_release_metadata()
    we need to have root.txt and targets.txt in the metadata directory,
    plus we need to have targets directory (with target files/directories).
    """

        # SETUP
        original_get_key = tuf.repo.keystore.get_key

        #  Create root.txt and targets.txt as described above.
        meta_dir = self._create_root_and_targets_meta_files()

        # TESTS
        #  Test: Run generate_release_metadata().
        release_meta = signerlib.generate_release_metadata(meta_dir)

        #  Verify that created metadata dictionary corresponds to
        #  SIGNABLE_SCHEMA and its 'signed' value to RELEASE_SCHEMA.
        self.assertTrue(formats.SIGNABLE_SCHEMA.matches(release_meta))
        self.assertTrue(formats.RELEASE_SCHEMA.matches(release_meta["signed"]))

        #  Test: exceptions.
        self.assertRaises(tuf.Error, signerlib.generate_release_metadata, self.random_path())
        self.assertRaises(tuf.FormatError, signerlib.generate_release_metadata, ["junk"])

        # RESTORE
        tuf.repo.keystore.get_key = original_get_key
示例#2
0
  def test_6_generate_release_metadata(self):
    """
    test_6_generate_release_metadata() uses previously tested
    singnerlib's build_root_file(), build_targets_file()
    and get_metadata_file_info.  In order to use generate_release_metadata()
    we need to have root.txt and targets.txt in the metadata directory,
    plus we need to have targets directory (with target files/directories).
    """

    # SETUP
    original_get_key = tuf.repo.keystore.get_key
    version = 8
    expiration_date = '1985-10-26 01:20:00 UTC'
    
    #  Create root.txt and targets.txt as described above.
    meta_dir = self._create_root_and_targets_meta_files()


    # TESTS
    #  Test: Run generate_release_metadata().
    release_meta = signerlib.generate_release_metadata(meta_dir,
                                                       version, expiration_date)

    #  Verify that created metadata dictionary corresponds to
    #  SIGNABLE_SCHEMA and its 'signed' value to RELEASE_SCHEMA.
    self.assertTrue(formats.SIGNABLE_SCHEMA.matches(release_meta))
    self.assertTrue(formats.RELEASE_SCHEMA.matches(release_meta['signed']))

    #  Test: exceptions.
    self.assertRaises(tuf.Error, signerlib.generate_release_metadata,
                      self.random_path(), version, expiration_date)
    self.assertRaises(tuf.FormatError, signerlib.generate_release_metadata,
                      ['junk'], version, expiration_date)
    self.assertRaises(tuf.Error, signerlib.generate_release_metadata,
                      meta_dir, self.random_string(), expiration_date)
    self.assertRaises(tuf.Error, signerlib.generate_release_metadata,
                      meta_dir, version, self.random_string())


    # RESTORE
    tuf.repo.keystore.get_key = original_get_key
示例#3
0
  def test_6_generate_release_metadata(self):
    """
    test_6_generate_release_metadata() uses previously tested
    singnerlib's build_root_file(), build_target_file()
    and get_metadata_file_info.  In order to use generate_release_metadata()
    we need to have root.txt and targets.txt in the metadata directory,
    plus we need to have targets directory (with target files/directories).
    """

    # SETUP
    #  Create root.txt and targets.txt as described above.
    meta_dir = self._create_root_and_targets_meta_files()



    # TESTS
    #  Test: Run generate_release_metadata().
    try:
      release_meta = signerlib.generate_release_metadata(meta_dir)
    except Exception, e:
      raise
示例#4
0
    def _get_role_info(self, role, directory=None):
        """
    This method generates role's metadata dictionary, it uses previously
    tested signerlib's methods.  Note that at everything maintains the order.
    Nothing that has not been tested previously is used in any of the
    following conditions.

    <Arguments>
      directory:
        Directory of a config file.

    <Returns>
      Tuple (role's metadata(not signed), role's keyids, directory, optional)

    """

        if not directory:
            # Create a temp directory to hold a config file.
            directory = self.make_temp_directory()

        # Get role's keyids.
        role_keyids = self.top_level_role_info[role]["keyids"]

        if role == "root":
            #  Create config file using previously tested build_config_file().
            config_path = signerlib.build_config_file(directory, 365, self.top_level_role_info)

            #  Patch keystore's get_key method.
            tuf.repo.keystore.get_key = self.get_keystore_key

            #  Create root metadata.
            root_meta = signerlib.generate_root_metadata(config_path)
            return root_meta, role_keyids, directory, config_path

        elif role == "targets":
            # Generate target files.
            # 'repo_dir' represents repository base.
            # 'target_files' represents a list of relative target paths.
            repo_dir, target_files = self.make_temp_directory_with_data_files(directory=directory)

            #  Patch keystore's get_key method.
            tuf.repo.keystore.get_key = self.get_keystore_key

            # Run the 'signerlib.generate_targets_metadata'.  Test its return value.
            # Its return value should correspond to tuf.formats.SIGNABLE_SCHEMA
            targets_meta = signerlib.generate_targets_metadata(repo_dir, target_files)
            return targets_meta, role_keyids, repo_dir, target_files

        elif role == "release":
            # Generate 'root.txt' and 'targets.txt' with targets directory in
            # the repository containing files and directories.
            meta_dir = self._create_root_and_targets_meta_files()
            release_meta = signerlib.generate_release_metadata(meta_dir)
            return release_meta, role_keyids, meta_dir

        elif role == "timestamp":
            # Generate 'release.txt' which includes creation of 'root.txt',
            # 'targets.txt' and target files.
            junk, release_keyids, meta_dir = self._get_role_info("release")
            signerlib.build_release_file(release_keyids, meta_dir)
            release_filepath = os.path.join(meta_dir, "release.txt")

            # Generate timestamp metadata.
            timestamp_meta = signerlib.generate_timestamp_metadata(release_filepath)
            return timestamp_meta, role_keyids, meta_dir

        else:
            print "\nUnrecognized top-level role."
示例#5
0
  def _get_role_info(self, role, directory=None):
    """
    This method generates role's metadata dictionary, it uses previously
    tested signerlib's methods.  Note that at everything maintains the order.
    Nothing that has not been tested previously is used in any of the
    following conditions.

    <Arguments>
      directory:
        Directory of a config file.

    <Returns>
      Tuple (role's metadata(not signed), role's keyids, directory, optional)

    """
    
    # The version number and expiration date for metadata files created.
    version = 8
    expiration_date = '1985-10-26 01:20:00 UTC'


    if not directory:
      # Create a temp directory to hold a config file.
      directory = self.make_temp_directory()

    # Get role's keyids.
    role_keyids = self.top_level_role_info[role]['keyids']


    if role == 'root':
      #  Create config file using previously tested build_config_file().
      config_path = signerlib.build_config_file(directory, 365,
                                                self.top_level_role_info)

      #  Patch keystore's get_key method.
      tuf.repo.keystore.get_key = self.get_keystore_key

      #  Create root metadata.
      root_meta = signerlib.generate_root_metadata(config_path, version)
      return root_meta, role_keyids, directory, config_path

    elif role == 'targets':
      # Generate target files.
      # 'repo_dir' represents repository base.
      # 'target_files' represents a list of relative target paths.
      repo_dir, target_files = \
          self.make_temp_directory_with_data_files(directory=directory)

      #  Patch keystore's get_key method.
      tuf.repo.keystore.get_key = self.get_keystore_key
      
      # Run the 'signerlib.generate_targets_metadata'.  Test its return value.
      # Its return value should correspond to tuf.formats.SIGNABLE_SCHEMA
      targets_meta = signerlib.generate_targets_metadata(repo_dir, target_files,
                                                         version, 
                                                         expiration_date)
      return targets_meta, role_keyids, repo_dir, target_files

    elif role == 'release':
      # Generate 'root.txt' and 'targets.txt' with targets directory in
      # the repository containing files and directories.
      meta_dir = self._create_root_and_targets_meta_files()
      release_meta = signerlib.generate_release_metadata(meta_dir, version,
                                                         expiration_date)
      return release_meta, role_keyids, meta_dir

    elif role == 'timestamp':
      # Generate 'release.txt' which includes creation of 'root.txt',
      # 'targets.txt' and target files.
      junk, release_keyids, meta_dir = self._get_role_info('release')
      signerlib.build_release_file(release_keyids, meta_dir, version,
                                   expiration_date)
      release_filepath = os.path.join(meta_dir, 'release.txt')

      # Generate timestamp metadata.
      timestamp_meta = signerlib.generate_timestamp_metadata(release_filepath,
                                                             version,
                                                             expiration_date)
      return timestamp_meta, role_keyids, meta_dir

    else:
      logger.warning('\nUnrecognized top-level role.')