Feature: Hashed bins.

Test results for features/tuf/hashed_bins.feature

Running behat features/tuf/hashed_bins.feature results in:

@rugged @cli @hashed-bins @gitlab-99
Feature: Hashed bins.
  In order to reduce the size of generated metadata files,
  As a Rugged operator,
  I need to be able to configure Rugged to use hashed bins.

  Background:
    Given I reset Rugged

  Scenario: Hashed bins are not used by default.
    Given I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should not get:
      """
      Initialized 'bins' metadata.
      Added top-level 'bins' delegated role to 'targets' metadata, in order to handle hashed bin delegation.
      Hashed bins is configured to use
      Based on
      hashed bins, the calculated bin prefix length is
      Based on a bin prefix length of
      the calculated number of prefixes is
      hashed bins, the calculated bin size is
      Delegated the following target file hash prefixes to
      """
    And the following files should not exist:
      """
      /var/rugged/tuf_repo/metadata/bins.json
      /var/rugged/tuf_repo/metadata/bin_0.json
      /var/rugged/tuf_repo/metadata/bin_1.json
      /var/rugged/tuf_repo/metadata/bin_f.json
      """
    And the file "/var/rugged/tuf_repo/metadata/targets.json" does not contain:
      """
      "delegations": {
      """

  Scenario: Hashed bins can be enabled on a new repo.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should get:
      """
      Initialized 'bins' metadata.
      Added top-level 'bins' delegated role to 'targets' metadata, in order to handle hashed bin delegation.
      Hashed bins is configured to use 16 bins.
      Based on 16 hashed bins, the calculated bin prefix length is 1.
      Based on a bin prefix length of 1, the calculated number of prefixes is 16.
      Based on 16 hashed bins, the calculated bin size is 1.
      Initialized 'bin_0' metadata.
      Delegated the following target file hash prefixes to 'bin_0': 0.
      Initialized 'bin_1' metadata.
      Delegated the following target file hash prefixes to 'bin_1': 1.
      Initialized 'bin_f' metadata.
      Delegated the following target file hash prefixes to 'bin_f': f.
      """
    And the following files should exist:
      """
      /var/rugged/tuf_repo/metadata/bins.json
      /var/rugged/tuf_repo/metadata/bin_0.json
      /var/rugged/tuf_repo/metadata/bin_1.json
      /var/rugged/tuf_repo/metadata/bin_f.json
      """
    When I run "ls /var/rugged/tuf_repo/metadata/bin_*.json | wc -w"
    Then I should get:
      """
      16
      """
    And the file "/var/rugged/tuf_repo/metadata/targets.json" contains:
      """
      "signed": {
       "_type": "targets",
       "delegations": {
        "keys": {
        },
        "roles": [
         {
          "keyids": [
          ],
          "name": "bins",
          "paths": [
           "*"
          ],
          "terminating": false,
          "threshold": 1
         }
        ]
       },
       "version": 1
      }
      """
    And the file "/var/rugged/tuf_repo/metadata/bins.json" contains:
      """
      "signatures": [
      "signed": {
      "_type": "targets",
      "delegations": {
      "keys": {
      "roles": [
      "keyids": [
      "name": "bin_0",
      "path_hash_prefixes": [
      "0"
      "terminating": true,
      "threshold": 1
      """
    And the file "/var/rugged/tuf_repo/metadata/bins.json" does not contain:
      """
      "signatures": [],
      """
    And the file "/var/rugged/tuf_repo/metadata/bin_0.json" contains:
      """
      "signatures": [
      "signed": {
      "_type": "targets",
      "targets": {},
      """
    And the file "/var/rugged/tuf_repo/metadata/bin_0.json" does not contain:
      """
      "signatures": [],
      """
    And the file "/var/rugged/tuf_repo/metadata/snapshot.json" contains:
      """
      "bins.json": {
      "bin_0.json": {
      "bin_1.json": {
      "bin_f.json": {
      """

  Scenario: The number of hashed bins can be configured on a new repo.
    Given I run "sudo cp features/fixtures/config/number_of_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should get:
      """
      Initialized 'bins' metadata.
      Hashed bins is configured to use 32 bins.
      Based on 32 hashed bins, the calculated bin prefix length is 2.
      Based on a bin prefix length of 2, the calculated number of prefixes is 256.
      Based on 32 hashed bins, the calculated bin size is 8.
      Initialized 'bin_00-07' metadata.
      Delegated the following target file hash prefixes to 'bin_00-07': 00, 01, 02, 03, 04, 05, 06, 07.
      Initialized 'bin_08-0f' metadata.
      Delegated the following target file hash prefixes to 'bin_08-0f': 08, 09, 0a, 0b, 0c, 0d, 0e, 0f.
      Initialized 'bin_f8-ff' metadata.
      Delegated the following target file hash prefixes to 'bin_f8-ff': f8, f9, fa, fb, fc, fd, fe, ff.
      """
    When I run "ls /var/rugged/tuf_repo/metadata/bin_*.json | wc -w"
    Then I should get:
      """
      32
      """

  Scenario: An unusual number of hashed bins can be configured on a new repo.
    Given I run "sudo cp features/fixtures/config/unusual_number_of_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should get:
      """
      Initialized 'bins' metadata.
      Hashed bins is configured to use 40 bins.
      Based on 40 hashed bins, the calculated bin prefix length is 2.
      Based on a bin prefix length of 2, the calculated number of prefixes is 256.
      Based on 40 hashed bins, the calculated bin size is 7.
      Initialized 'bin_00-06' metadata.
      Delegated the following target file hash prefixes to 'bin_00-06': 00, 01, 02, 03, 04, 05, 06.
      Initialized 'bin_07-0d' metadata.
      Delegated the following target file hash prefixes to 'bin_07-0d': 07, 08, 09, 0a, 0b, 0c, 0d.
      Initialized 'bin_fc-ff' metadata.
      Delegated the following target file hash prefixes to 'bin_fc-ff': fc, fd, fe, ff.
      Created 37 bins, whereas 'number_of_bins: 40' was configured.
      """
    When I run "ls /var/rugged/tuf_repo/metadata/bin_*.json | wc -w"
    Then I should get:
      """
      37
      """

  Scenario: Hashed bins role metadata can be validated.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    And I run the Rugged command "rugged --debug initialize --local"
    When I run the Rugged command "rugged --debug validate"
    Then I should not get:
      """
      error: UnsignedMetadataError thrown in validate_hashed_bins: bins was signed by 0/1 keys
      RuggedMetadataError: Failed to validate hashed-bins roles' metadata.
      error: Metadata for the 'bins' role is not valid.
      """
    And I should get:
      """
      Metadata for the 'targets' role is valid.
      Metadata for the 'bins' role is valid.
      Metadata for the 'bin_0' role is valid.
      Metadata for the 'bin_1' role is valid.
      Metadata for the 'bin_f' role is valid.
      """

  Scenario: The 'targets' key is used by default to sign hashed bins metadata.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should get:
      """
      debug: Signed 'bins' metadata with 'targets' key.
      debug: Signed 'bin_0' metadata with 'targets' key.
      debug: Signed 'bin_1' metadata with 'targets' key.
      debug: Signed 'bin_f' metadata with 'targets' key.
      """

  Scenario: A configured key can be used to sign hashed bins metadata.
    Given I run "sudo cp features/fixtures/config/hashed_bins_with_key.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then I should get:
      """
      debug: Signed 'bins' metadata with 'bins' key.
      debug: Signed 'bin_0' metadata with 'bins' key.
      debug: Signed 'bin_1' metadata with 'bins' key.
      debug: Signed 'bin_f' metadata with 'bins' key.
      """
    When I run the Rugged command "rugged --debug validate"
    Then I should get:
      """
      Metadata for the 'targets' role is valid.
      Metadata for the 'bins' role is valid.
      Metadata for the 'bin_0' role is valid.
      Metadata for the 'bin_1' role is valid.
      Metadata for the 'bin_f' role is valid.
      """

  Scenario Outline: Target files end up in the proper hashed bin metadata.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then the metadata version in "<bin_name>.json" is "1"
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" contains:
      """
      "targets": {},
      """
    Given I am in the "/var/rugged/incoming_targets" directory
    And file "<filename>" contains "<contents>"
    When I run the Rugged command "rugged --debug add-targets"
    And I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    Then I should get:
      """
      Hash of '<filename>': <hash>
      Added target '<filename>' to '<bin_name>' role.
      Updating hashed bin '<bin_name>' metadata to version '2'.
      """
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" does not contain:
      """
      "targets": {},
      """
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" contains:
      """
      "targets": {
      "<filename>"
      """

    Examples:
      | filename  | contents | bin_name | hash                                                             |
      | test0.txt | test0    | bin_2    | 23d5e8cadf33c45706d0572fd8b966388e18f5218848ba15cc4c7891c40e26c3 |
        Failed step: Then I should get:
        'Hash of 'test0.txt': 23d5e8cadf33c45706d0572fd8b966388e18f5218848ba15cc4c7891c40e26c3' was not found in command output:
        ------
        === Log for targets-worker: /var/log/rugged/rugged.log ===
        2026-06-08 18:19:25,069 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
        2026-06-08 18:19:25,069 INFO (targets-worker.add_targets_task): Received add-targets task.
        2026-06-08 18:19:25,069 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:25,070 DEBUG (target_files.get_inbound_targets): Found target: test0.txt
        2026-06-08 18:19:25,071 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
        2026-06-08 18:19:25,071 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
        2026-06-08 18:19:25,072 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
        2026-06-08 18:19:25,073 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
        2026-06-08 18:19:25,073 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
        2026-06-08 18:19:25,073 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
        2026-06-08 18:19:25,074 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
        2026-06-08 18:19:25,075 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
        2026-06-08 18:19:25,075 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
        2026-06-08 18:19:25,075 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
        2026-06-08 18:19:25,076 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
        2026-06-08 18:19:25,077 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
        2026-06-08 18:19:25,077 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
        2026-06-08 18:19:25,077 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
        2026-06-08 18:19:25,078 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
        2026-06-08 18:19:25,078 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
        2026-06-08 18:19:25,079 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
        2026-06-08 18:19:25,079 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
        2026-06-08 18:19:25,080 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
        2026-06-08 18:19:25,081 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:25,081 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
        2026-06-08 18:19:25,082 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
        2026-06-08 18:19:25,082 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
        2026-06-08 18:19:25,083 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
        2026-06-08 18:19:25,085 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
        2026-06-08 18:19:25,085 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
        2026-06-08 18:19:25,085 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 5863e211f40cedbecf21f682cac8c105e76f05eea0b54cba4ee435f96d564b0b
        2026-06-08 18:19:25,086 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: b9c1c74633a577d269d676b1043e0ac920b39e3850c80824cd0fb1d30fc6db7c
        2026-06-08 18:19:25,086 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 1a80b29adbe2bb893a21d96d670d9a36d8382c332ae918ad13c7345a92ab9e21
        2026-06-08 18:19:25,086 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 043cab00a1afdd1cf22b871693557755f7b92080a3411150ef9c4f3fe05e86a7
        2026-06-08 18:19:25,087 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: c6ee11e80057cbe40e89db25ac97ce2177fd4ebe285e59b1a339aa3524959bc9
        2026-06-08 18:19:25,087 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
        2026-06-08 18:19:25,088 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 5863e211f40cedbecf21f682cac8c105e76f05eea0b54cba4ee435f96d564b0b
        2026-06-08 18:19:25,088 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: b9c1c74633a577d269d676b1043e0ac920b39e3850c80824cd0fb1d30fc6db7c
        2026-06-08 18:19:25,088 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
        2026-06-08 18:19:25,089 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: 1a80b29adbe2bb893a21d96d670d9a36d8382c332ae918ad13c7345a92ab9e21
        2026-06-08 18:19:25,089 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
        2026-06-08 18:19:25,089 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: 043cab00a1afdd1cf22b871693557755f7b92080a3411150ef9c4f3fe05e86a7
        2026-06-08 18:19:25,089 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
        2026-06-08 18:19:25,090 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: c6ee11e80057cbe40e89db25ac97ce2177fd4ebe285e59b1a339aa3524959bc9
        2026-06-08 18:19:25,090 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
        2026-06-08 18:19:25,091 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
        2026-06-08 18:19:25,091 DEBUG (repo._init_root_role): Initialized 'root' metadata.
        2026-06-08 18:19:25,091 DEBUG (repo.__init__): Instantiated repository.
        2026-06-08 18:19:25,093 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
        2026-06-08 18:19:25,094 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:25,095 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
        2026-06-08 18:19:25,096 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
        2026-06-08 18:19:25,096 DEBUG (repo.load): Loaded all metadata.
        2026-06-08 18:19:25,097 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:25,097 DEBUG (target_files.get_inbound_targets): Found target: test0.txt
        2026-06-08 18:19:25,098 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test0.txt' to '/var/rugged/tuf_repo/targets/test0.txt'
        2026-06-08 18:19:25,099 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test0.txt' to targets directory.
        2026-06-08 18:19:25,099 INFO (repo.add_target_to_metadata): Added target 'test0.txt' to 'targets' role.
        2026-06-08 18:19:25,100 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:25,101 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
        2026-06-08 18:19:25,101 INFO (repo.update_targets): Updated targets metadata.
        2026-06-08 18:19:25,104 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:25,104 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
        2026-06-08 18:19:25,107 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
        2026-06-08 18:19:25,107 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 111.09KiB
        2026-06-08 18:19:25,107 DEBUG (base_worker.print_memory_usage): Final memory allocation: 15.07KiB
        
        ------
         (Exception)
      | test1.txt | test1    | bin_5    | 53387ed7b30d46708e40d0022cd0c0c0c8c812d77236c45e5c29a312e92ad848 |
        Failed step: Then I should get:
        'Hash of 'test1.txt': 53387ed7b30d46708e40d0022cd0c0c0c8c812d77236c45e5c29a312e92ad848' was not found in command output:
        ------
        === Log for targets-worker: /var/log/rugged/rugged.log ===
        2026-06-08 18:19:29,290 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
        2026-06-08 18:19:29,291 INFO (targets-worker.add_targets_task): Received add-targets task.
        2026-06-08 18:19:29,291 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:29,292 DEBUG (target_files.get_inbound_targets): Found target: test1.txt
        2026-06-08 18:19:29,293 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
        2026-06-08 18:19:29,293 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
        2026-06-08 18:19:29,293 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
        2026-06-08 18:19:29,294 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
        2026-06-08 18:19:29,295 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
        2026-06-08 18:19:29,295 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
        2026-06-08 18:19:29,295 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
        2026-06-08 18:19:29,296 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
        2026-06-08 18:19:29,297 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
        2026-06-08 18:19:29,297 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
        2026-06-08 18:19:29,297 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
        2026-06-08 18:19:29,297 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
        2026-06-08 18:19:29,298 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
        2026-06-08 18:19:29,298 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
        2026-06-08 18:19:29,298 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
        2026-06-08 18:19:29,298 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
        2026-06-08 18:19:29,299 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
        2026-06-08 18:19:29,299 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
        2026-06-08 18:19:29,299 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
        2026-06-08 18:19:29,299 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:29,300 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
        2026-06-08 18:19:29,300 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
        2026-06-08 18:19:29,300 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
        2026-06-08 18:19:29,301 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
        2026-06-08 18:19:29,301 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
        2026-06-08 18:19:29,301 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
        2026-06-08 18:19:29,302 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: b85e7ec45532793c21eb7383686ce6629b9b12345dd4e58848cedd43ed518fba
        2026-06-08 18:19:29,302 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 15909775e0102d1c4ee6bbfc9de0d0224efa5d3e0df8cf7d68b8e2fda712645b
        2026-06-08 18:19:29,302 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: e0470a8cd6ff573fbcb31bea652628288dd00aff073138f0fd7486cfce9e753e
        2026-06-08 18:19:29,302 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: d81181a5add0da18b469c89af7d423933790854df6dbd768471ef47bbd40f64e
        2026-06-08 18:19:29,302 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 43a3f009ff8f2588d50d7a7918b9ea73b0d0ed3caee0428c9d98e77be857b64e
        2026-06-08 18:19:29,302 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
        2026-06-08 18:19:29,303 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: b85e7ec45532793c21eb7383686ce6629b9b12345dd4e58848cedd43ed518fba
        2026-06-08 18:19:29,303 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 15909775e0102d1c4ee6bbfc9de0d0224efa5d3e0df8cf7d68b8e2fda712645b
        2026-06-08 18:19:29,303 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
        2026-06-08 18:19:29,303 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: e0470a8cd6ff573fbcb31bea652628288dd00aff073138f0fd7486cfce9e753e
        2026-06-08 18:19:29,303 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
        2026-06-08 18:19:29,304 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: d81181a5add0da18b469c89af7d423933790854df6dbd768471ef47bbd40f64e
        2026-06-08 18:19:29,304 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
        2026-06-08 18:19:29,304 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: 43a3f009ff8f2588d50d7a7918b9ea73b0d0ed3caee0428c9d98e77be857b64e
        2026-06-08 18:19:29,304 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
        2026-06-08 18:19:29,304 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
        2026-06-08 18:19:29,305 DEBUG (repo._init_root_role): Initialized 'root' metadata.
        2026-06-08 18:19:29,305 DEBUG (repo.__init__): Instantiated repository.
        2026-06-08 18:19:29,306 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
        2026-06-08 18:19:29,306 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:29,307 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
        2026-06-08 18:19:29,307 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
        2026-06-08 18:19:29,308 DEBUG (repo.load): Loaded all metadata.
        2026-06-08 18:19:29,308 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:29,308 DEBUG (target_files.get_inbound_targets): Found target: test1.txt
        2026-06-08 18:19:29,309 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test1.txt' to '/var/rugged/tuf_repo/targets/test1.txt'
        2026-06-08 18:19:29,309 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test1.txt' to targets directory.
        2026-06-08 18:19:29,309 INFO (repo.add_target_to_metadata): Added target 'test1.txt' to 'targets' role.
        2026-06-08 18:19:29,309 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:29,310 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
        2026-06-08 18:19:29,310 INFO (repo.update_targets): Updated targets metadata.
        2026-06-08 18:19:29,312 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:29,313 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
        2026-06-08 18:19:29,314 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
        2026-06-08 18:19:29,314 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 111.03KiB
        2026-06-08 18:19:29,314 DEBUG (base_worker.print_memory_usage): Final memory allocation: 15.01KiB
        
        ------
         (Exception)
      | test2.txt | test2    | bin_1    | 13e29841e34bc141f8f31eead2f50ce21fd3d09dcf406776d844f6e65b80527c |
        Failed step: Then I should get:
        'Hash of 'test2.txt': 13e29841e34bc141f8f31eead2f50ce21fd3d09dcf406776d844f6e65b80527c' was not found in command output:
        ------
        === Log for targets-worker: /var/log/rugged/rugged.log ===
        2026-06-08 18:19:33,791 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
        2026-06-08 18:19:33,792 INFO (targets-worker.add_targets_task): Received add-targets task.
        2026-06-08 18:19:33,792 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:33,793 DEBUG (target_files.get_inbound_targets): Found target: test2.txt
        2026-06-08 18:19:33,794 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
        2026-06-08 18:19:33,794 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
        2026-06-08 18:19:33,795 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
        2026-06-08 18:19:33,796 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
        2026-06-08 18:19:33,796 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
        2026-06-08 18:19:33,796 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
        2026-06-08 18:19:33,797 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
        2026-06-08 18:19:33,798 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
        2026-06-08 18:19:33,798 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
        2026-06-08 18:19:33,799 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
        2026-06-08 18:19:33,799 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
        2026-06-08 18:19:33,800 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
        2026-06-08 18:19:33,800 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
        2026-06-08 18:19:33,801 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
        2026-06-08 18:19:33,801 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
        2026-06-08 18:19:33,802 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
        2026-06-08 18:19:33,802 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
        2026-06-08 18:19:33,803 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
        2026-06-08 18:19:33,803 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
        2026-06-08 18:19:33,804 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:33,804 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
        2026-06-08 18:19:33,805 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
        2026-06-08 18:19:33,805 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
        2026-06-08 18:19:33,806 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
        2026-06-08 18:19:33,807 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
        2026-06-08 18:19:33,807 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
        2026-06-08 18:19:33,808 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 934cae19dfb19d0cb17f101461d94a7ecc9e6d84a4b2b63a681e40664bebc332
        2026-06-08 18:19:33,808 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 8feaf28e38628a206c74c5b79c081bb36c20ef0cc44a8b4a1749472ed55c7aef
        2026-06-08 18:19:33,809 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 084ad1f0aabd9dbc42acfaac24835d6133db51d08ea482cd9df0423f017497ab
        2026-06-08 18:19:33,809 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: ece170771839edae710f4557fb1a394f445b97c9871fc109c3688364e15940fb
        2026-06-08 18:19:33,809 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 05e0ad0cc08302d42afd96488af5e1919db610721f6d6076e474e83f795164a7
        2026-06-08 18:19:33,810 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
        2026-06-08 18:19:33,810 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 934cae19dfb19d0cb17f101461d94a7ecc9e6d84a4b2b63a681e40664bebc332
        2026-06-08 18:19:33,811 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 8feaf28e38628a206c74c5b79c081bb36c20ef0cc44a8b4a1749472ed55c7aef
        2026-06-08 18:19:33,811 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
        2026-06-08 18:19:33,811 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: 084ad1f0aabd9dbc42acfaac24835d6133db51d08ea482cd9df0423f017497ab
        2026-06-08 18:19:33,812 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
        2026-06-08 18:19:33,812 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: ece170771839edae710f4557fb1a394f445b97c9871fc109c3688364e15940fb
        2026-06-08 18:19:33,813 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
        2026-06-08 18:19:33,813 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: 05e0ad0cc08302d42afd96488af5e1919db610721f6d6076e474e83f795164a7
        2026-06-08 18:19:33,813 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
        2026-06-08 18:19:33,814 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
        2026-06-08 18:19:33,814 DEBUG (repo._init_root_role): Initialized 'root' metadata.
        2026-06-08 18:19:33,815 DEBUG (repo.__init__): Instantiated repository.
        2026-06-08 18:19:33,816 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
        2026-06-08 18:19:33,817 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:33,818 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
        2026-06-08 18:19:33,819 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
        2026-06-08 18:19:33,820 DEBUG (repo.load): Loaded all metadata.
        2026-06-08 18:19:33,820 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:33,821 DEBUG (target_files.get_inbound_targets): Found target: test2.txt
        2026-06-08 18:19:33,822 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test2.txt' to '/var/rugged/tuf_repo/targets/test2.txt'
        2026-06-08 18:19:33,823 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test2.txt' to targets directory.
        2026-06-08 18:19:33,823 INFO (repo.add_target_to_metadata): Added target 'test2.txt' to 'targets' role.
        2026-06-08 18:19:33,824 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:33,825 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
        2026-06-08 18:19:33,825 INFO (repo.update_targets): Updated targets metadata.
        2026-06-08 18:19:33,829 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:33,829 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
        2026-06-08 18:19:33,832 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
        2026-06-08 18:19:33,832 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 109.40KiB
        2026-06-08 18:19:33,832 DEBUG (base_worker.print_memory_usage): Final memory allocation: 12.45KiB
        
        ------
         (Exception)
      | test3.txt | test3    | bin_3    | 36e6fe047847ce478368a46cc151c5762ff461fddd68e2c2bb0250c499be3e97 |
        Failed step: Then I should get:
        'Hash of 'test3.txt': 36e6fe047847ce478368a46cc151c5762ff461fddd68e2c2bb0250c499be3e97' was not found in command output:
        ------
        === Log for targets-worker: /var/log/rugged/rugged.log ===
        2026-06-08 18:19:38,261 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
        2026-06-08 18:19:38,262 INFO (targets-worker.add_targets_task): Received add-targets task.
        2026-06-08 18:19:38,262 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:38,263 DEBUG (target_files.get_inbound_targets): Found target: test3.txt
        2026-06-08 18:19:38,263 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
        2026-06-08 18:19:38,263 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
        2026-06-08 18:19:38,264 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
        2026-06-08 18:19:38,266 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
        2026-06-08 18:19:38,266 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
        2026-06-08 18:19:38,266 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
        2026-06-08 18:19:38,266 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
        2026-06-08 18:19:38,267 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
        2026-06-08 18:19:38,267 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
        2026-06-08 18:19:38,268 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
        2026-06-08 18:19:38,268 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
        2026-06-08 18:19:38,270 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
        2026-06-08 18:19:38,270 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
        2026-06-08 18:19:38,271 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
        2026-06-08 18:19:38,271 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
        2026-06-08 18:19:38,272 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
        2026-06-08 18:19:38,272 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
        2026-06-08 18:19:38,272 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
        2026-06-08 18:19:38,272 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
        2026-06-08 18:19:38,273 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:38,273 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
        2026-06-08 18:19:38,273 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
        2026-06-08 18:19:38,274 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
        2026-06-08 18:19:38,274 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
        2026-06-08 18:19:38,275 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
        2026-06-08 18:19:38,275 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
        2026-06-08 18:19:38,275 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 297b5d7f238f53f2421f9b981831120fdd46a1ba2066013cbc658c6e073709f5
        2026-06-08 18:19:38,275 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: cf048dabb4dfc8e0c70bf4d465c0685a022ce127d787427f3991066868a5bf49
        2026-06-08 18:19:38,275 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 4fb32b2922b6b794e8b8b31d0f68907f9822c83779786de4cf7f55093d5b2d8a
        2026-06-08 18:19:38,276 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: c45d91dbacbcdcabbf1493b5b3dc150fa9211ab56677fd3f4d95d2f54746ae1c
        2026-06-08 18:19:38,276 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: e0432f0b8c0bf003307085b40a9ff460f19615ba5708841dec12a3bd61d9f43d
        2026-06-08 18:19:38,276 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
        2026-06-08 18:19:38,277 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 297b5d7f238f53f2421f9b981831120fdd46a1ba2066013cbc658c6e073709f5
        2026-06-08 18:19:38,277 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: cf048dabb4dfc8e0c70bf4d465c0685a022ce127d787427f3991066868a5bf49
        2026-06-08 18:19:38,277 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
        2026-06-08 18:19:38,277 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: 4fb32b2922b6b794e8b8b31d0f68907f9822c83779786de4cf7f55093d5b2d8a
        2026-06-08 18:19:38,278 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
        2026-06-08 18:19:38,278 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: c45d91dbacbcdcabbf1493b5b3dc150fa9211ab56677fd3f4d95d2f54746ae1c
        2026-06-08 18:19:38,278 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
        2026-06-08 18:19:38,278 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: e0432f0b8c0bf003307085b40a9ff460f19615ba5708841dec12a3bd61d9f43d
        2026-06-08 18:19:38,279 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
        2026-06-08 18:19:38,279 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
        2026-06-08 18:19:38,279 DEBUG (repo._init_root_role): Initialized 'root' metadata.
        2026-06-08 18:19:38,279 DEBUG (repo.__init__): Instantiated repository.
        2026-06-08 18:19:38,280 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
        2026-06-08 18:19:38,281 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:38,282 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
        2026-06-08 18:19:38,283 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
        2026-06-08 18:19:38,283 DEBUG (repo.load): Loaded all metadata.
        2026-06-08 18:19:38,283 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:38,283 DEBUG (target_files.get_inbound_targets): Found target: test3.txt
        2026-06-08 18:19:38,284 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test3.txt' to '/var/rugged/tuf_repo/targets/test3.txt'
        2026-06-08 18:19:38,285 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test3.txt' to targets directory.
        2026-06-08 18:19:38,285 INFO (repo.add_target_to_metadata): Added target 'test3.txt' to 'targets' role.
        2026-06-08 18:19:38,285 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:38,286 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
        2026-06-08 18:19:38,286 INFO (repo.update_targets): Updated targets metadata.
        2026-06-08 18:19:38,288 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:38,288 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
        2026-06-08 18:19:38,289 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
        2026-06-08 18:19:38,289 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 111.03KiB
        2026-06-08 18:19:38,289 DEBUG (base_worker.print_memory_usage): Final memory allocation: 15.01KiB
        
        ------
         (Exception)
      | test4.txt | test4    | bin_2    | 28abdea4bd1be487ef90bc9fba5667abea260d2009ca8ae5fd788757ded9ce39 |
        Failed step: Then I should get:
        'Hash of 'test4.txt': 28abdea4bd1be487ef90bc9fba5667abea260d2009ca8ae5fd788757ded9ce39' was not found in command output:
        ------
        === Log for targets-worker: /var/log/rugged/rugged.log ===
        2026-06-08 18:19:42,794 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
        2026-06-08 18:19:42,794 INFO (targets-worker.add_targets_task): Received add-targets task.
        2026-06-08 18:19:42,794 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:42,795 DEBUG (target_files.get_inbound_targets): Found target: test4.txt
        2026-06-08 18:19:42,796 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
        2026-06-08 18:19:42,796 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
        2026-06-08 18:19:42,797 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
        2026-06-08 18:19:42,798 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
        2026-06-08 18:19:42,798 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
        2026-06-08 18:19:42,798 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
        2026-06-08 18:19:42,799 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
        2026-06-08 18:19:42,800 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
        2026-06-08 18:19:42,800 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
        2026-06-08 18:19:42,800 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
        2026-06-08 18:19:42,801 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
        2026-06-08 18:19:42,801 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
        2026-06-08 18:19:42,802 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
        2026-06-08 18:19:42,802 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
        2026-06-08 18:19:42,802 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
        2026-06-08 18:19:42,803 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
        2026-06-08 18:19:42,804 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
        2026-06-08 18:19:42,804 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
        2026-06-08 18:19:42,804 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
        2026-06-08 18:19:42,805 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:42,805 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
        2026-06-08 18:19:42,806 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
        2026-06-08 18:19:42,806 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
        2026-06-08 18:19:42,806 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
        2026-06-08 18:19:42,807 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
        2026-06-08 18:19:42,808 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
        2026-06-08 18:19:42,808 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 26f81336ff5b7a625e1634b41248e391a6c4d42fa0295369bcef9ceb51c09ed7
        2026-06-08 18:19:42,808 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 7af68fb070292748314f8f33b742b495117d90c3e5ef50899b17a6c123790f68
        2026-06-08 18:19:42,809 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: ecddce38f91e7a838e8b3a9bc36db185ffbb4f637a532e72bef08a4b98198e21
        2026-06-08 18:19:42,809 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 4a1a6be6883773fcce53d1c635ff3b13613389099d979339927e8fc4bee7e7ab
        2026-06-08 18:19:42,810 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 1b57a88def8e0d474afad5200a4c788dd0e6df3aa3408629783a52f46e7f82d4
        2026-06-08 18:19:42,810 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
        2026-06-08 18:19:42,810 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 26f81336ff5b7a625e1634b41248e391a6c4d42fa0295369bcef9ceb51c09ed7
        2026-06-08 18:19:42,811 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 7af68fb070292748314f8f33b742b495117d90c3e5ef50899b17a6c123790f68
        2026-06-08 18:19:42,811 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
        2026-06-08 18:19:42,811 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: ecddce38f91e7a838e8b3a9bc36db185ffbb4f637a532e72bef08a4b98198e21
        2026-06-08 18:19:42,812 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
        2026-06-08 18:19:42,812 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: 4a1a6be6883773fcce53d1c635ff3b13613389099d979339927e8fc4bee7e7ab
        2026-06-08 18:19:42,812 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
        2026-06-08 18:19:42,813 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: 1b57a88def8e0d474afad5200a4c788dd0e6df3aa3408629783a52f46e7f82d4
        2026-06-08 18:19:42,813 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
        2026-06-08 18:19:42,813 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
        2026-06-08 18:19:42,814 DEBUG (repo._init_root_role): Initialized 'root' metadata.
        2026-06-08 18:19:42,814 DEBUG (repo.__init__): Instantiated repository.
        2026-06-08 18:19:42,816 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
        2026-06-08 18:19:42,817 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:42,818 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
        2026-06-08 18:19:42,819 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
        2026-06-08 18:19:42,819 DEBUG (repo.load): Loaded all metadata.
        2026-06-08 18:19:42,820 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
        2026-06-08 18:19:42,820 DEBUG (target_files.get_inbound_targets): Found target: test4.txt
        2026-06-08 18:19:42,821 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test4.txt' to '/var/rugged/tuf_repo/targets/test4.txt'
        2026-06-08 18:19:42,822 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test4.txt' to targets directory.
        2026-06-08 18:19:42,822 INFO (repo.add_target_to_metadata): Added target 'test4.txt' to 'targets' role.
        2026-06-08 18:19:42,823 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
        2026-06-08 18:19:42,824 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
        2026-06-08 18:19:42,824 INFO (repo.update_targets): Updated targets metadata.
        2026-06-08 18:19:42,828 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
        2026-06-08 18:19:42,828 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
        2026-06-08 18:19:42,830 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
        2026-06-08 18:19:42,830 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 111.03KiB
        2026-06-08 18:19:42,831 DEBUG (base_worker.print_memory_usage): Final memory allocation: 15.01KiB
        
        ------
         (Exception)

  Scenario Outline: Target files are removed from the proper hashed bin metadata.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    And I run the Rugged command "rugged initialize --local"
    And I am in the "/var/rugged/incoming_targets" directory
    And file "<filename>" contains "<contents>"
    And I run the Rugged command "rugged add-targets"
    And I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" contains:
      """
      "targets": {
      "<filename>"
      """
    When I run the Rugged command "rugged --debug remove-targets <filename>"
    And I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    Then I should get:
      """
      Hash of '<filename>': <hash>
      Removed target '<filename>' from the '<bin_name>' role.
      Updating hashed bin '<bin_name>' metadata to version '3'.
      Signed '<bin_name>' metadata with 'targets' key.
      Updated hashed bins '<bin_name>' metadata.
      """
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" should contain:
      """
      "targets": {},
      """
    And the file "/var/rugged/tuf_repo/metadata/<bin_name>.json" does not contain:
      """
      "<filename>"
      """

    Examples:
      | filename  | contents | bin_name | hash                                                             |
      | test0.txt | test0    | bin_2    | 23d5e8cadf33c45706d0572fd8b966388e18f5218848ba15cc4c7891c40e26c3 |
        Failed step: And the file "/var/rugged/tuf_repo/metadata/bin_2.json" contains:
        '"test0.txt"' was not found in '/var/rugged/tuf_repo/metadata/bin_2.json'. (RuntimeException)
      | test1.txt | test1    | bin_5    | 53387ed7b30d46708e40d0022cd0c0c0c8c812d77236c45e5c29a312e92ad848 |
        Failed step: And the file "/var/rugged/tuf_repo/metadata/bin_5.json" contains:
        '"test1.txt"' was not found in '/var/rugged/tuf_repo/metadata/bin_5.json'. (RuntimeException)
      | test2.txt | test2    | bin_1    | 13e29841e34bc141f8f31eead2f50ce21fd3d09dcf406776d844f6e65b80527c |
        Failed step: And the file "/var/rugged/tuf_repo/metadata/bin_1.json" contains:
        '"test2.txt"' was not found in '/var/rugged/tuf_repo/metadata/bin_1.json'. (RuntimeException)
      | test3.txt | test3    | bin_3    | 36e6fe047847ce478368a46cc151c5762ff461fddd68e2c2bb0250c499be3e97 |
        Failed step: And the file "/var/rugged/tuf_repo/metadata/bin_3.json" contains:
        '"test3.txt"' was not found in '/var/rugged/tuf_repo/metadata/bin_3.json'. (RuntimeException)
      | test4.txt | test4    | bin_2    | 28abdea4bd1be487ef90bc9fba5667abea260d2009ca8ae5fd788757ded9ce39 |
        Failed step: And the file "/var/rugged/tuf_repo/metadata/bin_2.json" contains:
        '"test4.txt"' was not found in '/var/rugged/tuf_repo/metadata/bin_2.json'. (RuntimeException)

  Scenario: Snapshot metadata reflects the correct version of hashed bin metadata.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged --debug initialize --local"
    Then the metadata version in "bin_2.json" is "1"
    And the snapshot metadata version for "bin_2.json" is "1"
    Given I am in the "/var/rugged/incoming_targets" directory
    And file "test0.txt" contains "test0"
    When I run the Rugged command "rugged --debug add-targets"
    When I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    Then I should get:
      """
      Updating hashed bin 'bin_2' metadata to version '2'.
      """
      'Updating hashed bin 'bin_2' metadata to version '2'.' was not found in command output:
      ------
      === Log for targets-worker: /var/log/rugged/rugged.log ===
      2026-06-08 18:20:09,209 DEBUG (base_worker.start_tracing_memory_usage): Starting trace of memory allocation.
      2026-06-08 18:20:09,209 INFO (targets-worker.add_targets_task): Received add-targets task.
      2026-06-08 18:20:09,209 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
      2026-06-08 18:20:09,210 DEBUG (target_files.get_inbound_targets): Found target: test0.txt
      2026-06-08 18:20:09,210 DEBUG (repo._add_key_to_keychain): Adding 'root' key to keychain.
      2026-06-08 18:20:09,211 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root'.
      2026-06-08 18:20:09,211 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root.pub'.
      2026-06-08 18:20:09,212 DEBUG (key_manager.load_keys): Loaded 'root' verification key for 'root' role.
      2026-06-08 18:20:09,212 DEBUG (repo._add_key_to_keychain): Adding 'root1' key to keychain.
      2026-06-08 18:20:09,212 DEBUG (key_manager.load_signing_key): Loading signing key for 'root' role from '/var/rugged/signing_keys/root/root1'.
      2026-06-08 18:20:09,212 DEBUG (key_manager.load_verification_key): Loading verification key for 'root' role from '/var/rugged/verification_keys/root/root1.pub'.
      2026-06-08 18:20:09,213 DEBUG (key_manager.load_keys): Loaded 'root1' verification key for 'root' role.
      2026-06-08 18:20:09,213 DEBUG (repo._add_key_to_keychain): Adding 'timestamp' key to keychain.
      2026-06-08 18:20:09,213 DEBUG (key_manager.load_signing_key): Loading signing key for 'timestamp' role from '/var/rugged/signing_keys/timestamp/timestamp'.
      2026-06-08 18:20:09,213 DEBUG (key_manager.load_verification_key): Loading verification key for 'timestamp' role from '/var/rugged/verification_keys/timestamp/timestamp.pub'.
      2026-06-08 18:20:09,214 DEBUG (key_manager.load_keys): Loaded 'timestamp' verification key for 'timestamp' role.
      2026-06-08 18:20:09,214 DEBUG (repo._add_key_to_keychain): Adding 'snapshot' key to keychain.
      2026-06-08 18:20:09,214 DEBUG (key_manager.load_signing_key): Loading signing key for 'snapshot' role from '/var/rugged/signing_keys/snapshot/snapshot'.
      2026-06-08 18:20:09,214 DEBUG (key_manager.load_verification_key): Loading verification key for 'snapshot' role from '/var/rugged/verification_keys/snapshot/snapshot.pub'.
      2026-06-08 18:20:09,215 DEBUG (key_manager.load_keys): Loaded 'snapshot' verification key for 'snapshot' role.
      2026-06-08 18:20:09,215 DEBUG (repo._add_key_to_keychain): Adding 'targets' key to keychain.
      2026-06-08 18:20:09,215 DEBUG (key_manager.load_signing_key): Loading signing key for 'targets' role from '/var/rugged/signing_keys/targets/targets'.
      2026-06-08 18:20:09,215 DEBUG (key_manager.load_keys): Loaded 'targets' signing key for 'targets' role.
      2026-06-08 18:20:09,215 DEBUG (repo._init_targets_role): Setting 'targets' metadata expiry to 604800.
      2026-06-08 18:20:09,216 DEBUG (repo._init_targets_role): Initialized 'targets' metadata.
      2026-06-08 18:20:09,216 DEBUG (repo._init_snapshot_role): Setting 'snapshot' metadata expiry to 604800.
      2026-06-08 18:20:09,216 DEBUG (repo._init_snapshot_role): Initialized 'snapshot' metadata.
      2026-06-08 18:20:09,216 DEBUG (repo._init_timestamp_role): Setting 'timestamp' metadata expiry to 86400.
      2026-06-08 18:20:09,217 DEBUG (repo._init_timestamp_role): Initialized 'timestamp' metadata.
      2026-06-08 18:20:09,217 DEBUG (repo._init_root_role): Collecting keys for 'root' metadata.
      2026-06-08 18:20:09,217 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 762c93990c444f9b55dce24916b7f02d55f8c81b3d47c29ff46fe09f4c8b73ae
      2026-06-08 18:20:09,217 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 94338d05e7bd17c6180bf71123fff90064a8ed843c5561ec64f2fa6b0b1f53f0
      2026-06-08 18:20:09,217 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 06320c8b3f7ff1d67d754ef93a29675143aa6c0cd5734b208db41199a1cae2c9
      2026-06-08 18:20:09,218 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: 07ad8df80ac4e129f4d48198881fc5faf51f19b6b05d7b8a6de276811e97b6cd
      2026-06-08 18:20:09,218 DEBUG (repo._get_repo_keys_for_root_role): Loading key with ID: d5ffa9f5cf1a1718a9cadfc163d2ad4800e85c5386de09a49ebaa28812a349f3
      2026-06-08 18:20:09,218 DEBUG (repo._init_root_role): Collecting roles for 'root' metadata.
      2026-06-08 18:20:09,218 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 762c93990c444f9b55dce24916b7f02d55f8c81b3d47c29ff46fe09f4c8b73ae
      2026-06-08 18:20:09,218 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'root' role with KeyID: 94338d05e7bd17c6180bf71123fff90064a8ed843c5561ec64f2fa6b0b1f53f0
      2026-06-08 18:20:09,218 DEBUG (repo._get_repo_roles_for_root_role): Setting 'root' signature threshold to 1.
      2026-06-08 18:20:09,219 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'timestamp' role with KeyID: 06320c8b3f7ff1d67d754ef93a29675143aa6c0cd5734b208db41199a1cae2c9
      2026-06-08 18:20:09,219 DEBUG (repo._get_repo_roles_for_root_role): Setting 'timestamp' signature threshold to 1.
      2026-06-08 18:20:09,219 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'snapshot' role with KeyID: 07ad8df80ac4e129f4d48198881fc5faf51f19b6b05d7b8a6de276811e97b6cd
      2026-06-08 18:20:09,219 DEBUG (repo._get_repo_roles_for_root_role): Setting 'snapshot' signature threshold to 1.
      2026-06-08 18:20:09,219 DEBUG (repo._get_repo_roles_for_root_role): Adding 'key_name' key to 'targets' role with KeyID: d5ffa9f5cf1a1718a9cadfc163d2ad4800e85c5386de09a49ebaa28812a349f3
      2026-06-08 18:20:09,220 DEBUG (repo._get_repo_roles_for_root_role): Setting 'targets' signature threshold to 1.
      2026-06-08 18:20:09,220 DEBUG (repo.update_metadata_expiry): Setting 'root' metadata expiry to 31536000.
      2026-06-08 18:20:09,220 DEBUG (repo._init_root_role): Initialized 'root' metadata.
      2026-06-08 18:20:09,220 DEBUG (repo.__init__): Instantiated repository.
      2026-06-08 18:20:09,221 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'root' role from '/var/rugged/tuf_repo/metadata/1.root.json'.
      2026-06-08 18:20:09,221 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'targets' role from '/var/rugged/tuf_repo/metadata/targets.json'.
      2026-06-08 18:20:09,222 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'snapshot' role from '/var/rugged/tuf_repo/metadata/snapshot.json'.
      2026-06-08 18:20:09,223 DEBUG (metadata_files.load_metadata_from_file): Loaded metadata for 'timestamp' role from '/var/rugged/tuf_repo/metadata/timestamp.json'.
      2026-06-08 18:20:09,223 DEBUG (repo.load): Loaded all metadata.
      2026-06-08 18:20:09,223 DEBUG (target_files.get_inbound_targets): Scanning for inbound targets in '/var/rugged/incoming_targets'
      2026-06-08 18:20:09,224 DEBUG (target_files.get_inbound_targets): Found target: test0.txt
      2026-06-08 18:20:09,225 DEBUG (target_files.move_inbound_target_to_targets_dir): Moved '/var/rugged/incoming_targets/test0.txt' to '/var/rugged/tuf_repo/targets/test0.txt'
      2026-06-08 18:20:09,225 INFO (target_files.move_inbound_target_to_targets_dir): Moved inbound target 'test0.txt' to targets directory.
      2026-06-08 18:20:09,225 INFO (repo.add_target_to_metadata): Added target 'test0.txt' to 'targets' role.
      2026-06-08 18:20:09,225 DEBUG (repo.update_metadata_expiry): Setting 'targets' metadata expiry to 604800.
      2026-06-08 18:20:09,226 DEBUG (repo.sign_metadata): Signed 'targets' metadata with 'targets' key.
      2026-06-08 18:20:09,226 INFO (repo.update_targets): Updated targets metadata.
      2026-06-08 18:20:09,229 DEBUG (metadata_files.write_metadata_to_file): Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
      2026-06-08 18:20:09,229 DEBUG (targets.delete_empty_inbound_target_dirs): Scanning for empty directories in inbound targets: '/var/rugged/incoming_targets'
      2026-06-08 18:20:09,230 DEBUG (base_worker.print_memory_usage): == Memory allocation for: add_targets_task ==
      2026-06-08 18:20:09,230 DEBUG (base_worker.print_memory_usage): Peak memory allocation: 110.97KiB
      2026-06-08 18:20:09,230 DEBUG (base_worker.print_memory_usage): Final memory allocation: 14.95KiB
      
      ------
       (Exception)
    Then I should not get:
      """
      Updating hashed bin 'bin_0' metadata to version '2'.
      """
    Then the metadata version in "targets.json" is "1"
    And the snapshot metadata version for "targets.json" is "1"
    And the metadata version in "bin_0.json" is "1"
    And the snapshot metadata version for "bin_0.json" is "1"
    And the metadata version in "bin_f.json" is "1"
    And the snapshot metadata version for "bin_f.json" is "1"
    And the metadata version in "bin_2.json" is "2"
    And the snapshot metadata version for "bin_2.json" is "2"
    When I run the Rugged command "rugged --debug validate"
    Then I should not get:
      """
      debug: Version in bin_2.json is '1'.
      debug: Expected version in snapshot.json for bin_2 is '1'.
      error: BadVersionNumberError thrown in validate_hashed_bins: Expected bin_2 v1, got v2.
      debug: RuggedMetadataError: Failed to validate hashed-bins roles' metadata.
      error: Metadata for the 'bin_2' role is not valid.
      error: Metadata for the 'bins' role is not valid.
      """
    And I should get:
      """
      debug: Updating bin_2 delegated by bins
      debug: Version in bin_2.json is '2'.
      debug: Expected version in snapshot.json for bin_2 is '2'.
      Metadata for the 'bin_2' role is valid.
      """

  Scenario: Status command works with hashed bins enabled.
    Given I run "sudo cp features/fixtures/config/enable_hashed_bins.yaml /var/rugged/.config/rugged/config.yaml"
    And I run the Rugged command "rugged generate-keys --local"
    When I run the Rugged command "rugged initialize --local"
    And I run the Rugged command "rugged status --local"

--- Failed scenarios:

    features/tuf/hashed_bins.feature:264
    features/tuf/hashed_bins.feature:265
    features/tuf/hashed_bins.feature:266
    features/tuf/hashed_bins.feature:267
    features/tuf/hashed_bins.feature:268
    features/tuf/hashed_bins.feature:303
    features/tuf/hashed_bins.feature:304
    features/tuf/hashed_bins.feature:305
    features/tuf/hashed_bins.feature:306
    features/tuf/hashed_bins.feature:307
    features/tuf/hashed_bins.feature:309

19 scenarios (8 passed, 11 failed)
216 steps (158 passed, 11 failed, 47 skipped)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Rugged TUF Server is a trademark of Consensus Enterprises.