From e08f30fe771d065a4cde8f58dd71b6d4a358004d Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Wed, 28 Dec 2022 11:30:01 +0100 Subject: Extract ssh connection check to try-ssh.sh --- tests/create-and-run.sh | 21 ++++----------------- tests/try-ssh.sh | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 17 deletions(-) create mode 100755 tests/try-ssh.sh diff --git a/tests/create-and-run.sh b/tests/create-and-run.sh index aafd41d..6e8e075 100755 --- a/tests/create-and-run.sh +++ b/tests/create-and-run.sh @@ -1,9 +1,7 @@ #!/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 @@ -19,18 +17,7 @@ ssh-keygen -f ssh_id -N '' debvm-create -k ssh_id.pub -o test.ext4 -a "$1" -r "$2" 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 +SSHOPT="-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" +test "$2" = jessie && SSHOPT="${SSHOPT} -o PubkeyAcceptedKeyTypes=+ssh-rsa" +tests/try-ssh.sh "$SSHOPT -i ssh_id -p 2222 root@localhost" poweroff wait diff --git a/tests/try-ssh.sh b/tests/try-ssh.sh new file mode 100755 index 0000000..109299b --- /dev/null +++ b/tests/try-ssh.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# shellcheck disable=SC2086 + +if test "$#" -ne 2; then + echo "$(basename "$0") takes two positional arguments. options/host and command" 1>&2 + exit 1 +fi + +timeout=5 +ts=$(sleepenh 0 || [ $? -eq 1 ]) +for i in $(seq 30); do + rv=0 + ssh $1 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 $1 $2 -- cgit v1.2.3 From 941815d86114ed21523b10d4c3fddeb5de4282de Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Wed, 28 Dec 2022 11:30:33 +0100 Subject: Test dist-upgrades --- tests/dist-upgrades.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 tests/dist-upgrades.sh diff --git a/tests/dist-upgrades.sh b/tests/dist-upgrades.sh new file mode 100755 index 0000000..01bcb59 --- /dev/null +++ b/tests/dist-upgrades.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Copyright 2022 Jochen Sprickerhof +# SPDX-License-Identifier: MIT +# +# apt install e2fsprogs genext2fs mmdebstrap openssh-client qemu-kvm + +set -x + +cleanup() { + rm -f ssh_id ssh_id.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_id -N '' + +./debvm-create -k ssh_id.pub -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" + +for RELEASE in stretch buster bullseye bookworm sid; do + timeout 15m ./debvm-run -s 2222 & + SSHOPT="-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" + test "$RELEASE" = stretch && SSHOPT="${SSHOPT} -o PubkeyAcceptedKeyTypes=+ssh-rsa" + tests/try-ssh.sh "$SSHOPT -i ssh_id -p 2222 root@localhost" "upgrade $RELEASE" + wait +done + +timeout 5m ./debvm-run -s 2222 & +tests/try-ssh.sh "-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ssh_id -p 2222 root@localhost" poweroff +wait -- cgit v1.2.3 From b7af04e9262142e953e487e75d91b610f1001ab4 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sat, 31 Dec 2022 06:52:08 +0100 Subject: tests: discover tool under test from $PATH This enables use in autopkgtests and makes it consistent with the create-and-run.sh test. --- tests/dist-upgrades.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/dist-upgrades.sh b/tests/dist-upgrades.sh index 01bcb59..e531f1c 100755 --- a/tests/dist-upgrades.sh +++ b/tests/dist-upgrades.sh @@ -33,16 +33,16 @@ EOF chmod +x upgrade ssh-keygen -f ssh_id -N '' -./debvm-create -k ssh_id.pub -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" +debvm-create -k ssh_id.pub -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" for RELEASE in stretch buster bullseye bookworm sid; do - timeout 15m ./debvm-run -s 2222 & + timeout 15m debvm-run -s 2222 & SSHOPT="-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" test "$RELEASE" = stretch && SSHOPT="${SSHOPT} -o PubkeyAcceptedKeyTypes=+ssh-rsa" tests/try-ssh.sh "$SSHOPT -i ssh_id -p 2222 root@localhost" "upgrade $RELEASE" wait done -timeout 5m ./debvm-run -s 2222 & +timeout 5m debvm-run -s 2222 & tests/try-ssh.sh "-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ssh_id -p 2222 root@localhost" poweroff wait -- cgit v1.2.3 From 45a8428a30c2aebeb5163913c8167b318ff65c81 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sat, 31 Dec 2022 07:34:10 +0100 Subject: tests: rework common code Turn try-ssh.sh script into a shell function library. --- tests/create-and-run.sh | 21 ++++++++++++++------- tests/dist-upgrades.sh | 22 ++++++++++++++-------- tests/test_common.sh | 18 ++++++++++++++++++ tests/try-ssh.sh | 22 ---------------------- 4 files changed, 46 insertions(+), 37 deletions(-) create mode 100644 tests/test_common.sh delete mode 100755 tests/try-ssh.sh diff --git a/tests/create-and-run.sh b/tests/create-and-run.sh index 6e8e075..c92ce1f 100755 --- a/tests/create-and-run.sh +++ b/tests/create-and-run.sh @@ -4,8 +4,12 @@ if test "$#" -ne 2; then echo "$(basename "$0") takes two positional arguments. architecture and release" 1>&2 exit 1 fi +ARCHITECTURE=$1 +RELEASE=$2 -set -ex +set -eux + +. "$(dirname "$0")/test_common.sh" cleanup() { rm -f ssh_id ssh_id.pub test.ext4 @@ -13,11 +17,14 @@ cleanup() { 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_KEYPATH=ssh_id +ssh-keygen -f "$SSH_KEYPATH" -N '' +debvm-create -k "$SSH_KEYPATH.pub" -o test.ext4 -a "$ARCHITECTURE" -r "$RELEASE" -timeout 240s debvm-run -s 2222 -i test.ext4 & -SSHOPT="-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" -test "$2" = jessie && SSHOPT="${SSHOPT} -o PubkeyAcceptedKeyTypes=+ssh-rsa" -tests/try-ssh.sh "$SSHOPT -i ssh_id -p 2222 root@localhost" poweroff +SSH_PORT=2222 +timeout 240s debvm-run -s "$SSH_PORT" -i test.ext4 & +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 index e531f1c..b4d61dd 100755 --- a/tests/dist-upgrades.sh +++ b/tests/dist-upgrades.sh @@ -6,6 +6,8 @@ set -x +. "$(dirname "$0")/test_common.sh" + cleanup() { rm -f ssh_id ssh_id.pub upgrade } @@ -31,18 +33,22 @@ poweroff EOF chmod +x upgrade -ssh-keygen -f ssh_id -N '' +SSH_KEYPATH=ssh_id +ssh-keygen -f "$SSH_KEYPATH" -N '' -debvm-create -k ssh_id.pub -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" +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 2222 & - SSHOPT="-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" - test "$RELEASE" = stretch && SSHOPT="${SSHOPT} -o PubkeyAcceptedKeyTypes=+ssh-rsa" - tests/try-ssh.sh "$SSHOPT -i ssh_id -p 2222 root@localhost" "upgrade $RELEASE" + 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 2222 & -tests/try-ssh.sh "-o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ssh_id -p 2222 root@localhost" poweroff +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 +} diff --git a/tests/try-ssh.sh b/tests/try-ssh.sh deleted file mode 100755 index 109299b..0000000 --- a/tests/try-ssh.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -# shellcheck disable=SC2086 - -if test "$#" -ne 2; then - echo "$(basename "$0") takes two positional arguments. options/host and command" 1>&2 - exit 1 -fi - -timeout=5 -ts=$(sleepenh 0 || [ $? -eq 1 ]) -for i in $(seq 30); do - rv=0 - ssh $1 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 $1 $2 -- cgit v1.2.3 From 9b66c54486a58d334ccc697bddd9d40c7a236908 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Sat, 31 Dec 2022 08:05:27 +0100 Subject: Use more variables --- tests/create-and-run.sh | 11 ++++++----- tests/dist-upgrades.sh | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/create-and-run.sh b/tests/create-and-run.sh index c92ce1f..540e6c4 100755 --- a/tests/create-and-run.sh +++ b/tests/create-and-run.sh @@ -1,28 +1,29 @@ #!/bin/sh 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 . "$(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_KEYPATH=ssh_id ssh-keygen -f "$SSH_KEYPATH" -N '' -debvm-create -k "$SSH_KEYPATH.pub" -o test.ext4 -a "$ARCHITECTURE" -r "$RELEASE" +debvm-create -k "$SSH_KEYPATH.pub" -o "$IMAGE" -a "$ARCHITECTURE" -r "$RELEASE" SSH_PORT=2222 -timeout 240s debvm-run -s "$SSH_PORT" -i test.ext4 & +timeout 240s debvm-run -s "$SSH_PORT" -i "$IMAGE" & set -- localhost test "$RELEASE" = jessie && set -- -o PubkeyAcceptedKeyTypes=+ssh-rsa "$@" wait_ssh "$@" diff --git a/tests/dist-upgrades.sh b/tests/dist-upgrades.sh index b4d61dd..85c9f4a 100755 --- a/tests/dist-upgrades.sh +++ b/tests/dist-upgrades.sh @@ -8,8 +8,10 @@ set -x . "$(dirname "$0")/test_common.sh" +SSH_KEYPATH=ssh_id + cleanup() { - rm -f ssh_id ssh_id.pub upgrade + rm -f "$SSH_KEYPATH" "$SSH_KEYPATH.pub" upgrade } trap cleanup EXIT INT TERM QUIT @@ -33,7 +35,6 @@ poweroff EOF chmod +x upgrade -SSH_KEYPATH=ssh_id ssh-keygen -f "$SSH_KEYPATH" -N '' debvm-create -k "$SSH_KEYPATH.pub" -r jessie -z 3 -- --customize-hook="copy-in upgrade /usr/local/bin" -- cgit v1.2.3 From 2f6269b1b7bea50797594113797416862552aae5 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sat, 31 Dec 2022 08:03:56 +0100 Subject: gitlab-ci: also apply shellcheck and codespell to tests --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 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: -- cgit v1.2.3