toolbox/test/system/104-run.bats
Debarshi Ray df7e01df10 pkg/utils: Ensure that the distro CLI and config file options are valid
Currently, if an invalid or unsupported string is specified as the
distro on the command line or in the configuration file, then it would
silently fallback to Fedora.  This shouldn't happen.

It should only fallback to Fedora when no distro was specified and
there's no supported Toolbox image matching the host operating system.
If a distro was explicitly specified then it should either be supported
or it should error out.

The test cases were resurrected from commit 8b6418d8aa.

https://github.com/containers/toolbox/issues/937
https://github.com/containers/toolbox/pull/1080
2022-09-01 17:43:20 +02:00

164 lines
4.4 KiB
Bash

#!/usr/bin/env bats
load 'libs/bats-support/load'
load 'libs/bats-assert/load'
load 'libs/helpers'
setup() {
_setup_environment
cleanup_containers
}
teardown() {
cleanup_containers
}
@test "run: Try to run a command in the default container with no containers created" {
local default_container_name="$(get_system_id)-toolbox-$(get_system_version)"
run $TOOLBOX run true
assert_failure
assert_line --index 0 "Error: container $default_container_name not found"
assert_line --index 1 "Use the 'create' command to create a toolbox."
assert_line --index 2 "Run 'toolbox --help' for usage."
}
@test "run: Try to run a command in the default container when 1 non-default container is present" {
local default_container_name="$(get_system_id)-toolbox-$(get_system_version)"
create_container other-container
run $TOOLBOX run true
assert_failure
assert_line --index 0 "Error: container $default_container_name not found"
assert_line --index 1 "Use the 'create' command to create a toolbox."
assert_line --index 2 "Run 'toolbox --help' for usage."
}
@test "run: Try to run a command in a specific non-existent container" {
create_container other-container
run $TOOLBOX run -c wrong-container true
assert_failure
assert_line --index 0 "Error: container wrong-container not found"
assert_line --index 1 "Use the 'create' command to create a toolbox."
assert_line --index 2 "Run 'toolbox --help' for usage."
}
@test "run: Try to run a command in a container based on unsupported distribution" {
local distro="foo"
run $TOOLBOX --assumeyes run --distro "$distro" ls
assert_failure
assert_line --index 0 "Error: distribution $distro is unsupported"
assert [ ${#lines[@]} -eq 1 ]
}
@test "run: Try to run a command in a container based on Fedora but with wrong version" {
run $TOOLBOX run -d fedora -r foobar ls
assert_failure
assert_line --index 0 "Error: invalid argument for '--release'"
assert_line --index 1 "Run 'toolbox --help' for usage."
assert [ ${#lines[@]} -eq 2 ]
}
@test "run: Try to run a command in a container based on non-default distro without providing a version" {
local distro="fedora"
local system_id="$(get_system_id)"
if [ "$system_id" = "fedora" ]; then
distro="rhel"
fi
run $TOOLBOX run -d "$distro" ls
assert_failure
assert_line --index 0 "Error: release not found for non-default distribution $distro"
assert [ ${#lines[@]} -eq 1 ]
}
@test "run: Run echo 'Hello World' inside of the default container" {
create_default_container
run $TOOLBOX --verbose run echo -n "Hello World"
assert_success
assert_line --index $((${#lines[@]}-1)) "Hello World"
}
@test "run: Run echo 'Hello World' inside a container after being stopped" {
create_container running
start_container running
stop_container running
run $TOOLBOX --verbose run --container running echo -n "Hello World"
assert_success
assert_line --index $((${#lines[@]}-1)) "Hello World"
}
@test "run: Run sudo id inside of the default container" {
create_default_container
output="$($TOOLBOX --verbose run sudo id 2>$BATS_TMPDIR/stderr)"
status="$?"
echo "# stderr"
cat $BATS_TMPDIR/stderr
echo "# stdout"
echo $output
assert_success
assert_output --partial "uid=0(root)"
}
@test "run: Run command exiting with zero code in the default container" {
create_default_container
run $TOOLBOX run /bin/sh -c 'exit 0'
assert_success
assert_output ""
}
@test "run: Run command exiting with non-zero code in the default container" {
create_default_container
run $TOOLBOX run /bin/sh -c 'exit 2'
assert_failure
assert [ $status -eq 2 ]
assert_output ""
}
@test "run: Try to run non-existent command in the default container" {
local cmd="non-existent-command"
create_default_container
run -127 $TOOLBOX run $cmd
assert_failure
assert [ $status -eq 127 ]
assert_line --index 0 "/bin/sh: line 1: exec: $cmd: not found"
assert_line --index 1 "Error: command $cmd not found in container $(get_latest_container_name)"
assert [ ${#lines[@]} -eq 2 ]
}
@test "run: Try to run /etc as a command in the deault container" {
create_default_container
run $TOOLBOX run /etc
assert_failure
assert [ $status -eq 126 ]
assert_line --index 0 "/bin/sh: line 1: /etc: Is a directory"
assert_line --index 1 "/bin/sh: line 1: exec: /etc: cannot execute: Is a directory"
assert_line --index 2 "Error: failed to invoke command /etc in container $(get_latest_container_name)"
assert [ ${#lines[@]} -eq 3 ]
}