From 13dddb6912461686d7d994dd2a9145c9f22d391c Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 20 Mar 2023 18:03:44 +0100 Subject: [PATCH] test: new regression test for issue #351 Signed-off-by: Joachim Wiberg --- test/Makefile.am | 3 ++ test/lib/setup.sh | 5 ++++ test/run-restart-forever.sh | 60 +++++++++++++++++++++++++++++++++++++ test/skel/sbin/fail.sh | 5 ++++ 4 files changed, 73 insertions(+) create mode 100755 test/run-restart-forever.sh create mode 100755 test/skel/sbin/fail.sh diff --git a/test/Makefile.am b/test/Makefile.am index 01718b2f..366e8c7c 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -2,6 +2,7 @@ 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/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 \ @@ -34,6 +35,7 @@ EXTRA_DIST += pre-post-serv.sh EXTRA_DIST += ready-serv.sh EXTRA_DIST += restart-self.sh EXTRA_DIST += runlevel.sh +EXTRA_DIST += run-restart-forever.sh EXTRA_DIST += start-stop-service.sh EXTRA_DIST += start-stop-service-sub-config.sh EXTRA_DIST += start-kill-service.sh @@ -71,6 +73,7 @@ TESTS += pre-post-serv.sh TESTS += ready-serv.sh TESTS += restart-self.sh TESTS += runlevel.sh +TESTS += run-restart-forever.sh TESTS += start-stop-service.sh TESTS += start-stop-service-sub-config.sh TESTS += start-kill-service.sh diff --git a/test/lib/setup.sh b/test/lib/setup.sh index 1dad5544..2fb11242 100755 --- a/test/lib/setup.sh +++ b/test/lib/setup.sh @@ -57,6 +57,11 @@ assert_restarts() assert "Finit has registered restarts" "$(texec initctl status "$2" | awk '/Restarts/{print $3;}')" -ge "$1" } +assert_restart_cnt() +{ + assert "Finit restart cnt $1" "$(texec initctl status "$2" | awk '/Restarts/{print $4;}')" = "($1)" +} + assert_norestart() { assert "Service $1 is stable, no restarts" "$(texec initctl status "$1" | awk '/Restarts/{print $3;}')" -eq "0" diff --git a/test/run-restart-forever.sh b/test/run-restart-forever.sh new file mode 100755 index 00000000..c0decfea --- /dev/null +++ b/test/run-restart-forever.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Regression test for issue #351 - verify that a dirty run/task in +# runlevel S is not restarted forever jus because it exits with a +# non-zero error code. +set -eu + +#export DEBUG=true +TEST_DIR=$(dirname "$0") + +test_setup() +{ + say "Test start $(date)" + run "mkdir -p /etc/default" + export TEST_TIMEOUT=5 +} + +test_teardown() +{ + say "Test done $(date)" + + say "Running test teardown." + run "rm -f $FINIT_CONF" +} + +check_restarts() +{ + assert "serv restarts" "$(texec cat "$1" | awk '{print $1;}')" -ge "$2" +} + + +# shellcheck source=/dev/null +. "$TEST_DIR/lib/setup.sh" + +test_one() +{ + num=$1 + + say "Reloading Finit ..." + run "initctl reload" +# run "initctl status fail.sh" + + say "Reloading Finit ..." + run "initctl reload" +# run "initctl status fail.sh" + + assert_restart_cnt "$num/10" fail.sh +} + +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" +test_one 2 + +sep +say "Changing runlevel ..." +run "initctl runlevel 3" +test_one 4 + +return 0 diff --git a/test/skel/sbin/fail.sh b/test/skel/sbin/fail.sh new file mode 100755 index 00000000..fdc8fce6 --- /dev/null +++ b/test/skel/sbin/fail.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# This run/task always fails, it is used by the run-restart-forever test + +echo "Aiiee, I've failed!" >&2 +exit 1