diff options
-rw-r--r-- | .gitlab-ci.yml | 4 | ||||
-rwxr-xr-x | tests/create-and-run.sh | 39 | ||||
-rwxr-xr-x | tests/dist-upgrades.sh | 55 | ||||
-rw-r--r-- | tests/test_common.sh | 18 |
4 files changed, 92 insertions, 24 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6427330..d2a1bbf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,14 +5,14 @@ shellcheck: - apt-get update - apt-get dist-upgrade --yes - apt-get --no-install-recommends --yes install shellcheck - - shellcheck debvm-* + - shellcheck -P tests debvm-* tests/*.sh codespell: script: - apt-get update - apt-get dist-upgrade --yes - apt-get --no-install-recommends --yes install codespell - - codespell debvm-* + - codespell debvm-* tests/*.sh release_test: parallel: diff --git a/tests/create-and-run.sh b/tests/create-and-run.sh index aafd41d..540e6c4 100755 --- a/tests/create-and-run.sh +++ b/tests/create-and-run.sh @@ -1,36 +1,31 @@ #!/bin/sh -# shellcheck disable=SC2086 - if test "$#" -ne 2; then - echo "$(basename $0) takes two positional arguments. architecture and release" 1>&2 + echo "$(basename "$0") takes two positional arguments: architecture and release" 1>&2 exit 1 fi +ARCHITECTURE=$1 +RELEASE=$2 +SSH_KEYPATH=ssh_id +IMAGE=test.ext4 + +set -eux -set -ex +. "$(dirname "$0")/test_common.sh" cleanup() { - rm -f ssh_id ssh_id.pub test.ext4 + rm -f "$SSH_KEYPATH" "$SSH_KEYPATH.pub" "$IMAGE" } trap cleanup EXIT INT TERM QUIT -ssh-keygen -f ssh_id -N '' -debvm-create -k ssh_id.pub -o test.ext4 -a "$1" -r "$2" +ssh-keygen -f "$SSH_KEYPATH" -N '' +debvm-create -k "$SSH_KEYPATH.pub" -o "$IMAGE" -a "$ARCHITECTURE" -r "$RELEASE" -timeout 240s debvm-run -s 2222 -i test.ext4 & -timeout=5 -sshopt="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $(if test "$2" = jessie; then echo -o PubkeyAcceptedKeyTypes=+ssh-rsa; fi)" -ts=$(sleepenh 0 || [ $? -eq 1 ]) -for i in $(seq 30); do - rv=0 - ssh $sshopt -o ConnectTimeout="$timeout" -i ssh_id -p 2222 root@localhost echo success || rv=$? - test $rv -eq 0 && break - ts=$(sleepenh "$ts" "$timeout" || [ $? -eq 1 ]); - if test "$i" -eq 30; then - echo "timeout reached" >&2 - exit 1 - fi -done -ssh $sshopt -i ssh_id -p 2222 root@localhost poweroff +SSH_PORT=2222 +timeout 240s debvm-run -s "$SSH_PORT" -i "$IMAGE" & +set -- localhost +test "$RELEASE" = jessie && set -- -o PubkeyAcceptedKeyTypes=+ssh-rsa "$@" +wait_ssh "$@" +run_ssh "$@" poweroff wait diff --git a/tests/dist-upgrades.sh b/tests/dist-upgrades.sh new file mode 100755 index 0000000..85c9f4a --- /dev/null +++ b/tests/dist-upgrades.sh @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2022 Jochen Sprickerhof <debvm@jochen.sprickerhof.de> +# SPDX-License-Identifier: MIT +# +# apt install e2fsprogs genext2fs mmdebstrap openssh-client qemu-kvm + +set -x + +. "$(dirname "$0")/test_common.sh" + +SSH_KEYPATH=ssh_id + +cleanup() { + rm -f "$SSH_KEYPATH" "$SSH_KEYPATH.pub" upgrade +} + +trap cleanup EXIT INT TERM QUIT + +cat > upgrade << "EOF" +#!/bin/sh + +set -ex + +export DEBIAN_FRONTEND=noninteractive + +sed -i "s/\([^ ]*\) \([^ ]*\) [^ ]* \(.*\)/\1 \2 $1 \3/" /etc/apt/sources.list +apt update +apt dist-upgrade -y + +test "$1" = stretch && apt install libnss-resolve + +apt autoremove --purge -y +apt clean +poweroff +EOF + +chmod +x upgrade +ssh-keygen -f "$SSH_KEYPATH" -N '' + +debvm-create -k "$SSH_KEYPATH.pub" -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" + +SSH_PORT=2222 +for RELEASE in stretch buster bullseye bookworm sid; do + timeout 15m debvm-run -s "$SSH_PORT" & + set -- localhost + test "$RELEASE" = stretch && set -- -o PubkeyAcceptedKeyTypes=+ssh-rsa "$@" + wait_ssh "$@" + run_ssh "$@" "upgrade $RELEASE" + wait +done + +timeout 5m debvm-run -s "$SSH_PORT" & +wait_ssh localhost +run_ssh localhost poweroff +wait diff --git a/tests/test_common.sh b/tests/test_common.sh new file mode 100644 index 0000000..f42a26a --- /dev/null +++ b/tests/test_common.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +run_ssh() { + test -n "${SSH_KEYPATH:-}" && set -- -i "$SSH_KEYPATH" "$@" + test -n "${SSH_PORT:-}" && set -- -p "$SSH_PORT" "$@" + ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -l root "$@" +} + +wait_ssh() { + wait_ssh_timeout=5 + wait_ssh_ts=$(sleepenh 0 || [ $? -eq 1 ]) + for _ in $(seq 30); do + run_ssh -o ConnectTimeout="$wait_ssh_timeout" "$@" echo success && return 0 + wait_ssh_ts=$(sleepenh "$wait_ssh_ts" "$wait_ssh_timeout" || [ $? -eq 1 ]) + done + echo "timeout reached" >&2 + return 1 +} |