Skip to content

Commit

Permalink
New system tests for conflicting options
Browse files Browse the repository at this point in the history
...make sure podman rejects being called with incompatible options

Replaces: #16813

Which is stuck in CI and Ed is on break.

Signed-off-by: Ed Santiago <santiago@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
  • Loading branch information
edsantiago authored and rhatdan committed Dec 21, 2022
1 parent aecb5d3 commit 97f9d62
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
4 changes: 2 additions & 2 deletions cmd/podman/containers/cleanup.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ func cleanup(cmd *cobra.Command, args []string) error {
if cleanupOptions.Exec != "" {
switch {
case cleanupOptions.All:
return errors.New("exec and all options conflict")
return errors.New("--all and --exec cannot be set together")
case len(args) > 1:
return errors.New("cannot use exec option when more than one container is given")
case cleanupOptions.RemoveImage:
return errors.New("exec and rmi options conflict")
return errors.New("--exec and --rmi cannot be set together")
}
}

Expand Down
50 changes: 50 additions & 0 deletions test/system/620-option-conflicts.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env bats -*- bats -*-
#
# options that cannot be set together
#

load helpers


@test "options that cannot be set together" {
skip_if_remote "not much point testing remote, and container-cleanup fails anyway"

tests="
create,run | --cpu-period=1 | --cpus=2 | $IMAGE
create,run | --cpu-quota=1 | --cpus=2 | $IMAGE
create,run | --no-hosts | --add-host=foo:1.1.1.1 | $IMAGE
create,run | --userns=bar | --pod=foo | $IMAGE
container cleanup | --all | --exec=foo
container cleanup | --exec=foo | --rmi | foo
"

# FIXME: parse_table is what does all the work, giving us test cases.
while read subcommands opt1 opt2 args; do
opt1_name=${opt1%=*}
opt2_name=${opt2%=*}

readarray -d, -t subcommand_list <<<$subcommands
for subcommand in "${subcommand_list[@]}"; do
run_podman 125 $subcommand $opt1 $opt2 $args
is "$output" "Error: $opt1_name and $opt2_name cannot be set together" \
"podman $subcommand $opt1 $opt2"

# Reverse order
run_podman 125 $subcommand $opt2 $opt1 $args
is "$output" "Error: $opt1_name and $opt2_name cannot be set together" \
"podman $subcommand $opt2 $opt1"
done
done < <(parse_table "$tests")

# Different error message; cannot be tested with the other ones above
for opt in arch os; do
for cmd in create pull; do
run_podman 125 $cmd --platform=foo --$opt=bar sdfsdf
is "$output" "Error: --platform option can not be specified with --arch or --os" \
"podman $cmd --platform + --$opt"
done
done
}


# vim: filetype=sh

0 comments on commit 97f9d62

Please sign in to comment.