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