From 7bb48ece49a3e81d93fa5dc09b8a66b2173224f9 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Mon, 20 May 2024 12:24:33 +0000 Subject: [PATCH] test: Reinstate podman as default runner Partial revert of 23469bbe3b29. When running tests in a GitHub action, we do not want to run as host root user. Therefore, restore podman as the default runner, but make sure to prefer docker when attaching to the host network namespace. --- test/.env | 19 ++++++++++++++++++- test/env | 21 +++++++++++++++------ test/shell | 2 +- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/test/.env b/test/.env index 2621a34c..1c85c5fd 100644 --- a/test/.env +++ b/test/.env @@ -8,16 +8,33 @@ ixdir=$(readlink -f "$testdir/..") logdir=$(readlink -f "$testdir/.log") envdir="$HOME/.infix-test-venv" qeneth="$testdir/qeneth/qeneth" +runners="podman docker" build_ps1() { echo "\e[1m\$(date \"+%H:%M:%S\") \h$1\e[0m:\W # " } +# +# Figure out available container runner +# +runner() +{ + for r in $runners; do + which $r >/dev/null && { + echo $r + return + } + done + + echo "ERROR: No container manager found (tried \"$runners\")" >&2 + exit 1 +} + # # Returns the latest started infamy container # infamy() { - docker ps -f name='infamy.*' --format '{{.Names}}' |tail -1 + $(runner) ps -f name='infamy.*' --format '{{.Names}}' |tail -1 } diff --git a/test/env b/test/env index 71489bc8..7729bc8e 100755 --- a/test/env +++ b/test/env @@ -23,6 +23,11 @@ usage: test/env [] -f -q [...] Don't containerize the command, run it directly in the current namespaces + -D + Prefer Docker over podman. This is implied when -t is specified, + as podman does not allow the necessary network permissions to be + granted to the container + -f Specify images required for test, squashfs image is required if testing with kernel. bios and disk image is required if @@ -86,7 +91,7 @@ name() nm=infamy id=0 - names=$(docker ps -f name='infamy.*' --format '{{.Names}}') + names=$($(runner) ps -f name='infamy.*' --format '{{.Names}}') while true; do name="$nm$id" unset hit @@ -112,17 +117,20 @@ containerize=yes [ -c /dev/kvm ] && kvm="--device=/dev/kvm" files= -while getopts "cCf:hiKp:q:t:" opt; do +while getopts "cCDf:hiKp:q:t:" opt; do case ${opt} in c) - docker image prune -af - docker volume prune -f - docker container prune -f + $(runner) image prune -af + $(runner) volume prune -f + $(runner) container prune -f exit 0 ;; C) containerize= ;; + D) + runners="docker podman" + ;; f) files="$files $OPTARG" ;; @@ -145,6 +153,7 @@ while getopts "cCf:hiKp:q:t:" opt; do t) topology="$OPTARG" network="--network host --volume $topology:$topology:ro" + runners="docker podman" ;; *) >&2 echo "Unknown option -$opt" @@ -156,7 +165,7 @@ done if [ "$containerize" ]; then # shellcheck disable=SC2016 - exec docker run \ + exec $(runner) run \ --cap-add=NET_RAW \ --cap-add=NET_ADMIN \ --device=/dev/net/tun \ diff --git a/test/shell b/test/shell index e1307b9f..8ae6dfdc 100755 --- a/test/shell +++ b/test/shell @@ -17,4 +17,4 @@ usage() sys=$1 [ -n "$sys" ] || sys=$(infamy) -docker exec -it --workdir "$ixdir/test" "$sys" ./env -C sh +$(runner) exec -it --workdir "$ixdir/test" "$sys" ./env -C sh