diff --git a/.github/workflows/ubuntu-tests.yaml b/.github/workflows/ubuntu-tests.yaml index 06c590944..3e6da5390 100644 --- a/.github/workflows/ubuntu-tests.yaml +++ b/.github/workflows/ubuntu-tests.yaml @@ -42,6 +42,7 @@ jobs: bash-completion \ codespell \ fish \ + flatpak \ gcc \ go-md2man \ golang-1.20 \ @@ -156,7 +157,8 @@ jobs: test/system/108-completion.bats \ test/system/201-ipc.bats \ test/system/203-network.bats \ - test/system/220-environment-variables.bats + test/system/220-environment-variables.bats \ + test/system/501-create.bats env: SHELL: /bin/bash TMPDIR: /var/tmp diff --git a/src/pkg/utils/utils.go b/src/pkg/utils/utils.go index 1a95d77e2..965375106 100644 --- a/src/pkg/utils/utils.go +++ b/src/pkg/utils/utils.go @@ -247,7 +247,7 @@ func ForwardToHost() (int, error) { logrus.Debugf("%s", arg) } - exitCode, err := shell.RunWithExitCode("flatpak-spawn", os.Stdin, os.Stdout, nil, flatpakSpawnArgs...) + exitCode, err := shell.RunWithExitCode("flatpak-spawn", os.Stdin, os.Stdout, os.Stderr, flatpakSpawnArgs...) if err != nil { return exitCode, err } diff --git a/test/system/002-help.bats b/test/system/002-help.bats index 7fb55d3d6..7750013a9 100644 --- a/test/system/002-help.bats +++ b/test/system/002-help.bats @@ -20,6 +20,7 @@ load 'libs/bats-assert/load' load 'libs/helpers.bash' setup() { + bats_require_minimum_version 1.10.0 _setup_environment cleanup_all } @@ -104,12 +105,7 @@ teardown() { assert_line --index 4 "enter Enter an existing Toolbx container" assert_line --index 5 "list List all existing Toolbx containers and images" assert_line --index 7 "Go to https://github.com/containers/toolbox for further information." - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 8 ] - else - assert [ ${#lines[@]} -eq 9 ] - fi + assert [ ${#lines[@]} -eq 8 ] # shellcheck disable=SC2154 assert [ ${#stderr_lines[@]} -eq 0 ] diff --git a/test/system/101-create.bats b/test/system/101-create.bats index a5028144b..391206630 100644 --- a/test/system/101-create.bats +++ b/test/system/101-create.bats @@ -20,7 +20,7 @@ load 'libs/bats-assert/load' load 'libs/helpers' setup() { - bats_require_minimum_version 1.7.0 + bats_require_minimum_version 1.10.0 _setup_environment cleanup_all } @@ -234,13 +234,7 @@ teardown() { assert_success assert_line --index 0 "Created container: $image" assert_line --index 1 "Enter with: toolbox enter $image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] run $PODMAN ps --all @@ -257,13 +251,7 @@ teardown() { assert_success assert_line --index 0 "Created container: non-default" assert_line --index 1 "Enter with: toolbox enter non-default" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] run $PODMAN ps --all @@ -280,13 +268,7 @@ teardown() { assert_success assert_line --index 0 "Created container: non-default" assert_line --index 1 "Enter with: toolbox enter non-default" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] run $PODMAN ps --all diff --git a/test/system/102-list.bats b/test/system/102-list.bats index f5a2bd68a..397c7d05b 100644 --- a/test/system/102-list.bats +++ b/test/system/102-list.bats @@ -20,7 +20,7 @@ load 'libs/bats-assert/load' load 'libs/helpers' setup() { - bats_require_minimum_version 1.7.0 + bats_require_minimum_version 1.10.0 _setup_environment cleanup_all } @@ -97,13 +97,7 @@ teardown() { assert_success assert_line --index 1 --partial "$default_image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -121,13 +115,7 @@ teardown() { assert_success assert_line --index 1 --partial "$default_image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -142,13 +130,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/arch-toolbox:latest" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -163,13 +145,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/arch-toolbox:latest" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -184,13 +160,7 @@ teardown() { assert_success assert_line --index 1 --partial "registry.fedoraproject.org/fedora-toolbox:34" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -205,13 +175,7 @@ teardown() { assert_success assert_line --index 1 --partial "registry.fedoraproject.org/fedora-toolbox:34" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -226,13 +190,7 @@ teardown() { assert_success assert_line --index 1 --partial "registry.access.redhat.com/ubi8/toolbox:8.10" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -247,13 +205,7 @@ teardown() { assert_success assert_line --index 1 --partial "registry.access.redhat.com/ubi8/toolbox:8.10" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -268,13 +220,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:16.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -289,13 +235,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:16.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -310,13 +250,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:18.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -331,13 +265,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:18.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -352,13 +280,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:20.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -373,13 +295,7 @@ teardown() { assert_success assert_line --index 1 --partial "quay.io/toolbx/ubuntu-toolbox:20.04" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -394,13 +310,7 @@ teardown() { assert_success assert_line --index 1 --partial "" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -415,13 +325,7 @@ teardown() { assert_success assert_line --index 1 --partial "" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 2 ] - else - assert [ ${#lines[@]} -eq 3 ] - fi - + assert [ ${#lines[@]} -eq 2 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -440,13 +344,7 @@ teardown() { assert_success assert_line --index 1 --partial "$default_image" assert_line --index 2 --partial "$default_image-copy" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 3 ] - else - assert [ ${#lines[@]} -eq 4 ] - fi - + assert [ ${#lines[@]} -eq 3 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -465,13 +363,7 @@ teardown() { assert_success assert_line --index 1 --partial "$default_image" assert_line --index 2 --partial "$default_image-copy" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 3 ] - else - assert [ ${#lines[@]} -eq 4 ] - fi - + assert [ ${#lines[@]} -eq 3 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -501,13 +393,7 @@ teardown() { assert_success assert_line --index 1 --partial "registry.fedoraproject.org/fedora-toolbox:34" assert_line --index 2 --partial "$default_image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 3 ] - else - assert [ ${#lines[@]} -eq 4 ] - fi - + assert [ ${#lines[@]} -eq 3 ] assert [ ${#stderr_lines[@]} -eq 0 ] # Check containers @@ -517,13 +403,7 @@ teardown() { assert_line --index 1 --partial "$default_container" assert_line --index 2 --partial "non-default-one" assert_line --index 3 --partial "non-default-two" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 4 ] - else - assert [ ${#lines[@]} -eq 5 ] - fi - + assert [ ${#lines[@]} -eq 4 ] assert [ ${#stderr_lines[@]} -eq 0 ] # Check all together @@ -535,13 +415,7 @@ teardown() { assert_line --index 5 --partial "$default_container" assert_line --index 6 --partial "non-default-one" assert_line --index 7 --partial "non-default-two" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 8 ] - else - assert [ ${#lines[@]} -eq 9 ] - fi - + assert [ ${#lines[@]} -eq 8 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -563,13 +437,7 @@ teardown() { assert_line --index 1 --partial "" assert_line --index 2 --partial "registry.fedoraproject.org/fedora-toolbox:34" assert_line --index 3 --partial "$default_image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 4 ] - else - assert [ ${#lines[@]} -eq 5 ] - fi - + assert [ ${#lines[@]} -eq 4 ] assert [ ${#stderr_lines[@]} -eq 0 ] } @@ -587,13 +455,7 @@ teardown() { assert_line --index 1 --partial "" assert_line --index 2 --partial "registry.fedoraproject.org/fedora-toolbox:34" assert_line --index 3 --partial "$default_image" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 4 ] - else - assert [ ${#lines[@]} -eq 5 ] - fi - + assert [ ${#lines[@]} -eq 4 ] assert [ ${#stderr_lines[@]} -eq 0 ] } diff --git a/test/system/104-run.bats b/test/system/104-run.bats index ae2d57228..076e5828d 100644 --- a/test/system/104-run.bats +++ b/test/system/104-run.bats @@ -207,13 +207,7 @@ teardown() { assert_success assert_line --index 0 "uid=0(root) gid=0(root) groups=0(root)" - - if check_bats_version 1.10.0; then - assert [ ${#lines[@]} -eq 1 ] - else - assert [ ${#lines[@]} -eq 2 ] - fi - + assert [ ${#lines[@]} -eq 1 ] assert [ ${#stderr_lines[@]} -eq 0 ] } diff --git a/test/system/501-create.bats b/test/system/501-create.bats new file mode 100644 index 000000000..d67082bc3 --- /dev/null +++ b/test/system/501-create.bats @@ -0,0 +1,74 @@ +# shellcheck shell=bats +# +# Copyright © 2024 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +load 'libs/bats-support/load' +load 'libs/bats-assert/load' +load 'libs/helpers' + +setup() { + bats_require_minimum_version 1.7.0 + _setup_environment + cleanup_all +} + +teardown() { + cleanup_all +} + +@test "create: Try with an invalid custom name (using positional argument, forwarded to host)" { + create_default_container + + run --keep-empty-lines --separate-stderr "$TOOLBX" run toolbox create "ßpeci@l.N@m€" + + assert_success + assert [ ${#lines[@]} -eq 0 ] + lines=("${stderr_lines[@]}") + assert_line --index 0 "Error: invalid argument for 'CONTAINER'" + assert_line --index 1 "Container names must match '[a-zA-Z0-9][a-zA-Z0-9_.-]*'." + assert_line --index 2 "Run 'toolbox --help' for usage." + assert [ ${#lines[@]} -eq 3 ] +} + +@test "create: Try with an invalid custom name (using option --container, forwarded to host)" { + create_default_container + + run --keep-empty-lines --separate-stderr "$TOOLBX" run toolbox create --container "ßpeci@l.N@m€" + + assert_success + assert [ ${#lines[@]} -eq 0 ] + lines=("${stderr_lines[@]}") + assert_line --index 0 "Error: invalid argument for '--container'" + assert_line --index 1 "Container names must match '[a-zA-Z0-9][a-zA-Z0-9_.-]*'." + assert_line --index 2 "Run 'toolbox --help' for usage." + assert [ ${#lines[@]} -eq 3 ] +} + +@test "create: Try an unsupported distribution (forwarded to host)" { + create_default_container + + local distro="foo" + + run --keep-empty-lines --separate-stderr "$TOOLBX" run toolbox create --distro "$distro" + + assert_success + assert [ ${#lines[@]} -eq 0 ] + lines=("${stderr_lines[@]}") + assert_line --index 0 "Error: invalid argument for '--distro'" + assert_line --index 1 "Distribution $distro is unsupported." + assert_line --index 2 "Run 'toolbox --help' for usage." + assert [ ${#lines[@]} -eq 3 ] +} diff --git a/test/system/504-run.bats b/test/system/504-run.bats new file mode 100644 index 000000000..609b79909 --- /dev/null +++ b/test/system/504-run.bats @@ -0,0 +1,46 @@ +# shellcheck shell=bats +# +# Copyright © 2024 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +load 'libs/bats-support/load' +load 'libs/bats-assert/load' +load 'libs/helpers' + +setup() { + bats_require_minimum_version 1.7.0 + _setup_environment + cleanup_all +} + +teardown() { + cleanup_all +} + +@test "run: Try an unsupported distribution (forwarded to host)" { + create_default_container + + local distro="foo" + + run --keep-empty-lines --separate-stderr "$TOOLBX" run toolbox run --distro "$distro" ls + + assert_success + assert [ ${#lines[@]} -eq 0 ] + lines=("${stderr_lines[@]}") + assert_line --index 0 "Error: invalid argument for '--distro'" + assert_line --index 1 "Distribution $distro is unsupported." + assert_line --index 2 "Run 'toolbox --help' for usage." + assert [ ${#stderr_lines[@]} -eq 3 ] +} diff --git a/test/system/meson.build b/test/system/meson.build index 67edea854..30038018d 100644 --- a/test/system/meson.build +++ b/test/system/meson.build @@ -16,6 +16,8 @@ test_system = files( '211-dbus.bats', '220-environment-variables.bats', '230-cdi.bats', + '501-create.bats', + '504-run.bats', 'setup_suite.bash', 'libs/helpers.bash', )