Files
podman/hack/bats
Paul Holzinger 3f87f0765d hack/bats: port it to use the new remote support
The system tests can setup their own server now so just use that and
don't require the user to spawn its own.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-11-07 19:02:56 +01:00

146 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
#
# bats wrapper - invokes bats, root & rootless, on podman system tests
#
###############################################################################
# BEGIN usage message
usage="Usage: $0 [--root] [--rootless] [FILENAME-PATTERN[:TEST-PATTERN]]...
$0 is a wrapper for invoking podman system tests.
--root Run only as root
--rootless Run only as user (i.e. you)
--remote Run with podman-remote
FILENAME-PATTERN Run only test files that match 'test/system/*name*',
e.g. '500' or 'net' will match 500-networking.bats.
TEST-PATTERN When appended to a filename-pattern, and you have a
modern-enough version of bats installed (i.e. Fedora
but not RHEL), runs with '--filter TEST-PATTERN' which
runs only subtests within FILENAME-PATTERH whose names
match that string.
--tag=TAG Passed on to bats as '--filter-tags TAG'
As of 2025-09-01 the only tag used is 'ci:parallel'
-t, --tap Passed on to bats, which will format output in TAP format
-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:
\$ env PODMAN=/abs/path/to/podman $0 ....
Examples:
\$ $0 220:\"restart cleans up\"
... only the \"restart cleans up\" test in 220-healthcheck.bats
\$ $0 --root 160:\"ps -f\"
... runs all tests in 160-volumes.bats that match \"ps -f\" (root only)
"
# 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}
export QUADLET=${QUADLET:-$(pwd)/bin/quadlet}
# Directory in which
TESTS_DIR=test/system
REMOTE=
TEST_ROOT=1
TEST_ROOTLESS=1
declare -a bats_opts=()
declare -a bats_filter=()
declare -a TESTS
for i;do
value=`expr "$i" : '[^=]*=\(.*\)'`
case "$i" in
-h|--help) echo "$usage"; exit 0;;
--root) TEST_ROOTLESS= ;;
--rootless) TEST_ROOT= ;;
--remote) REMOTE=remote ;;
--tap|-t) bats_opts+=("-t") ;;
--ts|-T) bats_opts+=("-T") ;;
--tag=*) bats_filter=("--filter-tags" "$value")
if [[ "$value" = "ci:parallel" ]]; then
bats_opts+=("--jobs" $(nproc))
fi;;
*/*.bats) TESTS+=("$i") ;;
*)
if [[ $i =~ : ]]; then
tname=${i%:*} # network:localhost -> network
filt=${i#*:} # network:localhost -> localhost
TESTS+=($(echo $TESTS_DIR/*$tname*.bats))
bats_filter=("--filter" "$filt")
else
TESTS+=($(echo $TESTS_DIR/*$i*.bats))
fi
;;
esac
done
if [ ${#TESTS[@]} -eq 0 ] ; then
TESTS=("$TESTS_DIR")
fi
# With --remote, use correct binary and make sure daem--I mean server--is live
if [[ "$REMOTE" ]]; then
if ! [[ $PODMAN =~ -remote ]]; then
PODMAN=${PODMAN}-remote
fi
export REMOTESYSTEM_TRANSPORT=unix
fi
# 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
# Used in 120-load test to identify rootless destination for podman image scp
export PODMAN_ROOTLESS_USER=${PODMAN_ROOTLESS_USER:-$(id -un)}
# Make sure to always check for leaks when running locally
export PODMAN_BATS_LEAK_CHECK=1
# Root
if [[ "$TEST_ROOT" ]]; then
echo "# bats ${bats_opts[*]} ${bats_filter[*]} ${TESTS[*]}"
sudo --preserve-env=PODMAN \
--preserve-env=QUADLET \
--preserve-env=PODMAN_TEST_DEBUG \
--preserve-env=CONTAINERS_HELPER_BINARY_DIR \
--preserve-env=PODMAN_ROOTLESS_USER \
bats "${bats_opts[@]}" "${bats_filter[@]}" "${TESTS[@]}"
rc=$?
fi
# Rootless. (Only if we're not already root)
if [[ "$TEST_ROOTLESS" && "$(id -u)" != 0 ]]; then
echo "--------------------------------------------------"
echo "\$ bats ${bats_opts[*]} ${bats_filter[*]} ${TESTS[@]}"
bats "${bats_opts[@]}" "${bats_filter[@]}" "${TESTS[@]}"
rc=$((rc | $?))
fi
exit $rc