summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Santiago <santiago@redhat.com>2021-05-11 14:50:17 -0600
committerEd Santiago <santiago@redhat.com>2021-05-11 16:31:56 -0600
commitb18931cef3ea7d0debb7f427cba5efd179296766 (patch)
treed1a265e432408c1ae23cf1803fd13126b25b0741
parent59dd35750931547c66e34e999ab960c90f18f510 (diff)
downloadpodman-b18931cef3ea7d0debb7f427cba5efd179296766.tar.gz
podman-b18931cef3ea7d0debb7f427cba5efd179296766.tar.bz2
podman-b18931cef3ea7d0debb7f427cba5efd179296766.zip
[CI:DOCS] hack/bats - new helper for running system tests
Well, new to you. It's been something I've used for years. Simple, but it takes care of a lot of housekeeping, and makes it ever-so-much-more pleasant to invoke bats tests. And when it's easier to run tests, tests get run. Signed-off-by: Ed Santiago <santiago@redhat.com>
-rwxr-xr-xhack/bats109
1 files changed, 109 insertions, 0 deletions
diff --git a/hack/bats b/hack/bats
new file mode 100755
index 000000000..45b8cf6f2
--- /dev/null
+++ b/hack/bats
@@ -0,0 +1,109 @@
+#!/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'
+
+ --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_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;;
+ */*.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
+
+# Root
+if [ -z "$ROOTLESS_ONLY" ]; then
+ echo "# bats ${bats_filter[@]} $TESTS"
+ sudo --preserve-env=PODMAN \
+ --preserve-env=PODMAN_TEST_DEBUG \
+ --preserve-env=OCI_RUNTIME \
+ bats "${bats_filter[@]}" $TESTS
+ rc=$?
+fi
+
+# Rootless
+echo "--------------------------------------------------"
+if [ -z "$ROOT_ONLY" ]; then
+ echo "\$ bats ${bats_filter[@]} $TESTS"
+ bats "${bats_filter[@]}" $TESTS
+ rc=$((rc | $?))
+fi
+
+exit $rc