podman/hack/bats
Ed Santiago e367f46147 hack/bats: deal with new bin helpers
Some time in the last month, podman started to depend on a bunch
of external helper binaries: rootlessport, pause, catatonit.
System tests fail without these.

Update the hack/bats script to pass $CONTAINERS_HELPER_BINARIES_DIR
(set to ./bin); podman will then use locally-built helpers. (This
requires https://github.com/containers/common/pull/823 , which as
of this PR is not yet vendored into podman. There is no harm in
merging this while we wait.)

Also: if bats helper is invoked as root, run only once; i.e.,
skip the "rootless" step.

Also (piggybacked): the name of the podman pause image has
changed, from pause to podman-pause. Adjust that in our
teardown so we don't leave droppings.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2021-11-16 12:51:17 -07:00

121 lines
3.8 KiB
Bash
Executable file

#!/bin/bash
#
# bats wrapper - invokes bats, root & rootless, on podman system tests
#
###############################################################################
# BEGIN usage message
usage="Usage: $0 [--root] [--rootless] [--filter=filename[:testname]]
$0 is a wrapper for invoking podman system tests.
--root Run only as root
--rootless Run only as user (i.e. you)
--filter=name Run only test files that match 'test/system/*name*',
e.g. '500' or 'net' will match 500-networking.bats.
If ':pattern' is appended, and you have a modern-enough
version of bats installed, runs with '--filter pattern'
which runs only subtests that match 'pattern'
-T Passed on to bats, which will then show timing data
--help display usage message
By default, tests ./bin/podman. To test a different podman, do:
\$ PODMAN=/abs/path/to/podman $0 ....
To test podman-remote, start your own servers (root and rootless) via:
/path/to/podman system service --timeout=0
...then invoke this script with PODMAN=\$(pwd)/bin/podman-remote
(You'd think Ed could be bothered to do all that in this script; but then
the flow would be 'sudo start-service; sudo run-bats; sudo stop-service'
and by the time we get to stop-service, the sudo timeout will have lapsed,
and the script will be hanging at the password prompt, and you, who left
your desk for coffee or a walk and expected to come back to completed
root and rootless tests, will be irked because only root tests ran and
now you have to wait for rootless).
$0 also passes through \$OCI_RUNTIME, should you need to test that.
"
# END usage message
###############################################################################
# BEGIN initialization and command-line arg checking
# By default, test the podman in our working directory.
# Some tests cd out of our workdir, so abs path is important
export PODMAN=${PODMAN:-$(pwd)/bin/podman}
# Because 'make' doesn't do this by default
chcon -t container_runtime_exec_t $PODMAN
# Directory in which
TESTS=test/system
REMOTE=
ROOT_ONLY=
ROOTLESS_ONLY=
declare -a bats_opts=()
declare -a bats_filter=()
for i;do
value=`expr "$i" : '[^=]*=\(.*\)'`
case "$i" in
-h|--help) echo "$usage"; exit 0;;
--root) ROOT_ONLY=1 ;;
--rootless) ROOTLESS_ONLY=1 ;;
--remote) REMOTE=remote; echo "--remote is TBI"; exit 1;;
--ts|-T) bats_opts+=("-T") ;;
*/*.bats) TESTS=$i ;;
*)
if [[ $i =~ : ]]; then
tname=${i%:*} # network:localhost -> network
filt=${i#*:} # network:localhost -> localhost
TESTS=$(echo $TESTS/*$tname*.bats)
bats_filter=("--filter" "$filt")
else
TESTS=$(echo $TESTS/*$i*.bats)
fi
;;
esac
done
# END initialization and command-line arg checking
###############################################################################
rc=0
# As of 2021-11 podman has a bunch of external helper binaries
if [[ -z "$CONTAINERS_HELPER_BINARY_DIR" ]]; then
export CONTAINERS_HELPER_BINARY_DIR=$(pwd)/bin
fi
# Root
if [ -z "$ROOTLESS_ONLY" ]; then
echo "# bats ${bats_filter[@]} $TESTS"
sudo --preserve-env=PODMAN \
--preserve-env=PODMAN_TEST_DEBUG \
--preserve-env=OCI_RUNTIME \
--preserve-env=CONTAINERS_HELPER_BINARY_DIR \
bats "${bats_opts[@]}" "${bats_filter[@]}" $TESTS
rc=$?
fi
# Rootless. (Only if we're not already root)
if [[ -z "$ROOT_ONLY" && "$(id -u)" != 0 ]]; then
echo "--------------------------------------------------"
echo "\$ bats ${bats_filter[@]} $TESTS"
bats "${bats_opts[@]}" "${bats_filter[@]}" $TESTS
rc=$((rc | $?))
fi
exit $rc