Feature: Command to remove targets to the TUF repository.

Test results for features/commands/remove_targets.feature

Running behat features/commands/remove_targets.feature results in:

@rugged @commands @remove-targets
Feature: Command to remove targets to the TUF repository.
  In order to host TUF metadata
  As an administrator
  I need to remove targets to a TUF repo.

  Background:
    Given I reset Rugged
    And I initialize a Rugged repo
    And I am in the "/var/rugged/incoming_targets" directory

  Scenario: The 'remove-targets' Rugged command exists.
    When I try to run "sudo sudo -u rugged rugged remove-targets --help"
    Then I should not get:
      """
      Error: No such command 'remove-targets'.
      """
    And I should get:
      """
      Usage: rugged remove-targets [OPTIONS] [TARGETS]...
      
        Remove targets from a TUF repository.
      
      Options:
        --local  (For testing) Remove targets locally, rather than delegating to the
                 targets worker.
        --help   Show this message and exit.
      """

  Scenario: Fail when no target file to remove is specified.
    When I fail to run the Rugged command "rugged --debug remove-targets"
    Then I should not get:
      """
      Removed the following targets from the repository:
      """
    And I should get:
      """
      error: Missing argument '[TARGETS]...'.
      """

  Scenario: Fail when trying to remove a target file that is not in the repository.
    Given I try to run "grep -r test0.txt ../tuf_repo/metadata"
    And I should not get:
      """
      targets.json
      """
    When I fail to run the Rugged command "rugged --debug remove-targets test0.txt"
    Then I should not get:
      """
      Removed target 'test0.txt' from the 'targets' role.
      Removed the following targets from the repository:
      """
    And I should get:
      """
      error: Failed to remove one or more targets from TUF repository.
      Check the logs for more detailed error reporting.
      """

  Scenario: Remove a target file.
    Given file "test0.txt" contains "test0"
    And I run the Rugged command "rugged add-targets"
    And I run "grep -r test0.txt ../tuf_repo/metadata"
    And I should get:
      """
      targets.json
      """
    When I run the Rugged command "rugged --debug remove-targets test0.txt"
    Then I should get:
      """
      Removed the following targets from the repository:
      test0.txt
      """
    When I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    Then I should get:
      """
      Received remove-targets task.
      Removed target 'test0.txt' from the 'targets' role.
      Deleted target file '/var/rugged/tuf_repo/targets/test0.txt'.
      Signed 'targets' metadata with 'targets' key.
      Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
      """
    When I run the Rugged command "rugged logs --worker=snapshot-worker --limit=0"
    Then I should get:
      """
      Received update-snapshot task.
      Updated snapshot metadata.
      Signed 'snapshot' metadata with 'snapshot' key.
      Wrote 'snapshot' metadata to file '/var/rugged/tuf_repo/metadata/snapshot.json'.
      Updated snapshot metadata.
      """
    When I run the Rugged command "rugged logs --worker=timestamp-worker --limit=0"
    Then I should get:
      """
      Received update-timestamp task.
      Updated timestamp metadata.
      Signed 'timestamp' metadata with 'timestamp' key.
      Wrote 'timestamp' metadata to file '/var/rugged/tuf_repo/metadata/timestamp.json'.
      Updated timestamp metadata.
      """

  Scenario: Verify that metadata is updated.
    Given file "test0.txt" contains "test0"
    And I run the Rugged command "rugged add-targets"
    And I record a reference hash of "../tuf_repo/metadata/1.root.json"
    And the file "../tuf_repo/metadata/2.root.json" does not exist
    And I record a reference hash of "../tuf_repo/metadata/snapshot.json"
    And I record a reference hash of "../tuf_repo/metadata/targets.json"
    And I record a reference hash of "../tuf_repo/metadata/timestamp.json"
    When I run the Rugged command "rugged remove-targets test0.txt"
    Then file "../tuf_repo/metadata/1.root.json" has not changed
    And the file "../tuf_repo/metadata/2.root.json" does not exist
    And file "../tuf_repo/metadata/snapshot.json" has changed
    And file "../tuf_repo/metadata/targets.json" has changed
    And file "../tuf_repo/metadata/timestamp.json" has changed

  Scenario: Remove multiple target files, including one in a subdirectory.
    Given file "test0.txt" contains "test0"
    And file "test1.txt" contains "test1"
    And the directory "foo/bar" exists
    And file "foo/bar/test2.txt" contains "test2"
    And I run the Rugged command "rugged add-targets"
    When I run the Rugged command "rugged --debug remove-targets test0.txt foo/bar/test2.txt"
    Then I should get:
      """
      Removed the following targets from the repository:
      test0.txt
      foo/bar/test2.txt
      Updated targets metadata.
      Updated snapshot metadata.
      Updated timestamp metadata.
      """
    When I try to run "grep -r test0.txt ../tuf_repo/metadata"
    Then I should not get:
      """
      targets.json
      """
    When I run "grep -r test1.txt ../tuf_repo/metadata"
    Then I should get:
      """
      targets.json
      """
    When I try to run "grep -r foo/bar/test2.txt ../tuf_repo/metadata"
    Then I should not get:
      """
      targets.json
      """
    When I run the Rugged command "rugged logs --worker=targets-worker --limit=0"
    Then I should get:
      """
      Received remove-targets task.
      Removed target 'test0.txt' from the 'targets' role.
      Deleted target file '/var/rugged/tuf_repo/targets/test0.txt'.
      Removed target 'foo/bar/test2.txt' from the 'targets' role.
      Deleted target file '/var/rugged/tuf_repo/targets/foo/bar/test2.txt'.
      Cleaned up empty directory '/var/rugged/tuf_repo/targets/foo/bar'.
      Cleaned up empty directory '/var/rugged/tuf_repo/targets/foo'.
      Signed 'targets' metadata with 'targets' key.
      Wrote 'targets' metadata to file '/var/rugged/tuf_repo/metadata/targets.json'.
      """

6 scenarios (6 passed)
69 steps (69 passed)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Rugged TUF Server is a trademark of Consensus Enterprises.