df7e01df10
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
164 lines
4.4 KiB
Bash
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 ]
|
|
}
|