From bbc83eaa64ad227f2044c611bed13e72797230b0 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Tue, 11 Feb 2025 09:40:03 +0100 Subject: [PATCH] test: new test New test adds /bin/fail.sh to verify that a failing pre:script (that also takes too long to run) is detected: exit code and timeout. Ensure existing test pass full path to /sbin/fail.sh script. Signed-off-by: Joachim Wiberg --- test/Makefile.am | 48 +++++++++++++++++++------------------ test/lib/setup.sh | 8 +++++++ test/pre-fail.sh | 28 ++++++++++++++++++++++ test/run-restart-forever.sh | 4 ++-- test/skel/bin/fail.sh | 4 ++++ 5 files changed, 67 insertions(+), 25 deletions(-) create mode 100755 test/pre-fail.sh create mode 100755 test/skel/bin/fail.sh diff --git a/test/Makefile.am b/test/Makefile.am index 5d62d870..eab48d17 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,28 +1,28 @@ SUBDIRS = lib src -EXTRA_DIST = skel/bin/busybox-x86_64.sha256 skel/sbin/service.sh skel/etc/env \ - skel/bin/pre.sh skel/bin/post.sh skel/bin/ready.sh skel/bin/slay \ - skel/sbin/fail.sh skel/usr/share/runparts/ref.log \ - skel/usr/share/runparts/sysv.log \ - skel/etc/rc.d/foo.sh skel/etc/rc.d/S01abc.sh \ - skel/etc/rc.d/test.sh skel/etc/rc.d/S02def.sh \ - skel/etc/rcS.d/foo.sh skel/etc/rcS.d/test.sh \ - skel/etc/rcS.d/S01abc.sh skel/etc/rcS.d/S02def.sh \ - skel/cdrom/.empty skel/dev/shm/.empty skel/dev/pts/.empty \ - skel/etc/inittab skel/etc/hostname skel/etc/fstab \ - skel/etc/init.d/rcS skel/etc/init.d/rcK skel/tmp/.empty \ - skel/etc/finit.d/.empty skel/etc/finit.d/available/.empty \ - skel/etc/finit.d/enabled/.empty \ - skel/sbin/task.sh skel/bin/crasher.sh \ - skel/etc/init.d/S01-service.sh skel/etc/init.d/S02-serv.sh \ - skel/proc/.empty skel/root/.empty skel/run/.empty \ - skel/sbin/chrootsetup.sh skel/srv/.empty skel/sys/.empty \ - skel/usr/bin/.empty skel/usr/lib/.empty skel/usr/sbin/.empty \ - skel/home/.empty skel/usr/games/.empty skel/usr/src/.empty \ - skel/usr/share/.empty skel/usr/include/.empty \ - skel/usr/local/games/.empty skel/usr/local/sbin/.empty \ - skel/usr/local/share/.empty skel/usr/local/src/.empty \ - skel/usr/local/lib/.empty skel/usr/local/bin/.empty \ +EXTRA_DIST = skel/bin/busybox-x86_64.sha256 skel/sbin/service.sh skel/etc/env \ + skel/bin/pre.sh skel/bin/post.sh skel/bin/ready.sh skel/bin/slay \ + skel/sbin/fail.sh skel/usr/share/runparts/ref.log \ + skel/usr/share/runparts/sysv.log \ + skel/etc/rc.d/foo.sh skel/etc/rc.d/S01abc.sh \ + skel/etc/rc.d/test.sh skel/etc/rc.d/S02def.sh \ + skel/etc/rcS.d/foo.sh skel/etc/rcS.d/test.sh \ + skel/etc/rcS.d/S01abc.sh skel/etc/rcS.d/S02def.sh \ + skel/cdrom/.empty skel/dev/shm/.empty skel/dev/pts/.empty \ + skel/etc/inittab skel/etc/hostname skel/etc/fstab \ + skel/etc/init.d/rcS skel/etc/init.d/rcK skel/tmp/.empty \ + skel/etc/finit.d/.empty skel/etc/finit.d/available/.empty \ + skel/etc/finit.d/enabled/.empty \ + skel/sbin/task.sh skel/bin/crasher.sh skel/bin/fail.sh \ + skel/etc/init.d/S01-service.sh skel/etc/init.d/S02-serv.sh \ + skel/proc/.empty skel/root/.empty skel/run/.empty \ + skel/sbin/chrootsetup.sh skel/srv/.empty skel/sys/.empty \ + skel/usr/bin/.empty skel/usr/lib/.empty skel/usr/sbin/.empty \ + skel/home/.empty skel/usr/games/.empty skel/usr/src/.empty \ + skel/usr/share/.empty skel/usr/include/.empty \ + skel/usr/local/games/.empty skel/usr/local/sbin/.empty \ + skel/usr/local/share/.empty skel/usr/local/src/.empty \ + skel/usr/local/lib/.empty skel/usr/local/bin/.empty \ skel/usr/local/etc/.empty skel/var/.empty EXTRA_DIST += setup-sysroot.sh @@ -40,6 +40,7 @@ EXTRA_DIST += initctl-status-subset.sh EXTRA_DIST += notify.sh EXTRA_DIST += pidfile.sh EXTRA_DIST += pre-post-serv.sh +EXTRA_DIST += pre-fail.sh EXTRA_DIST += process-depends.sh EXTRA_DIST += rclocal.sh EXTRA_DIST += ready-serv.sh @@ -86,6 +87,7 @@ TESTS += initctl-status-subset.sh TESTS += notify.sh TESTS += pidfile.sh TESTS += pre-post-serv.sh +TESTS += pre-fail.sh TESTS += process-depends.sh TESTS += rclocal.sh TESTS += ready-serv.sh diff --git a/test/lib/setup.sh b/test/lib/setup.sh index 3b9fd7a4..98d652ad 100755 --- a/test/lib/setup.sh +++ b/test/lib/setup.sh @@ -84,6 +84,14 @@ assert_status() assert "Service $service $status" "$(texec initctl -p status "$service" | awk '/Status/{print $3}')" = "$status" } +# Used by, e.g., pre-fail.sh +assert_status_full() +{ + service=$1; shift + status="$*" + assert "Service $service status is: $status" "$(texec initctl -p status "$service" | awk '/Status/{sub("^ *Status : ", ""); print}')" = "$status" +} + assert_cond() { cond=$1 diff --git a/test/pre-fail.sh b/test/pre-fail.sh new file mode 100755 index 00000000..11109873 --- /dev/null +++ b/test/pre-fail.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# Verify Finit: +# - does not start main process when pre:script fails +# - times out and kills long running pre:script +set -eu + +#export DEBUG=true +TEST_DIR=$(dirname "$0") +# shellcheck source=/dev/null +. "$TEST_DIR/lib/setup.sh" + +vrfy() +{ + nm=serv + tmo=$1 + msg=$2 + err=$3 + + run "echo 'service [2345] pre:$tmo,fail.sh $nm -n -- $msg' > $FINIT_CONF" + run "initctl reload" + + retry "assert_status_full $nm 'crashed $err'" 50 +} + +#run "initctl debug" + +vrfy 5 "Failing pre: script" "(code=exited, status=42)" +vrfy 1 "Timeout pre: script" "(code=signal, status=9/KILL)" diff --git a/test/run-restart-forever.sh b/test/run-restart-forever.sh index b253b156..90c95638 100755 --- a/test/run-restart-forever.sh +++ b/test/run-restart-forever.sh @@ -42,8 +42,8 @@ test_one() sep say "Add stanza to $FINIT_CONF" -run "echo 'run fail.sh -- Failure' > $FINIT_RCSD/fail.conf" -run "echo 'run initctl touch fail' > $FINIT_RCSD/touch.conf" +run "echo 'run /sbin/fail.sh -- Failure' > $FINIT_RCSD/fail.conf" +run "echo 'run initctl touch fail' > $FINIT_RCSD/touch.conf" test_one 2 sep diff --git a/test/skel/bin/fail.sh b/test/skel/bin/fail.sh new file mode 100755 index 00000000..b1a1af15 --- /dev/null +++ b/test/skel/bin/fail.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +sleep 2 +exit 42