From e49763d834564df382b8ffa894507c47fde4eb39 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 12:03:24 +0200 Subject: [PATCH] test: extend start-stop-sysv to verify reload:script support Signed-off-by: Joachim Wiberg --- test/skel/etc/init.d/S01-service.sh | 62 ++++++++++++++++------------- test/skel/sbin/service.sh | 20 +++++++--- test/start-stop-sysv.sh | 32 ++++++++++----- 3 files changed, 72 insertions(+), 42 deletions(-) diff --git a/test/skel/etc/init.d/S01-service.sh b/test/skel/etc/init.d/S01-service.sh index 23b0dde7..4211b842 100755 --- a/test/skel/etc/init.d/S01-service.sh +++ b/test/skel/etc/init.d/S01-service.sh @@ -6,46 +6,54 @@ PIDFILE="/var/run/service.pid" start() { - printf 'Starting %s: ' "$DAEMON" - start-stop-daemon -S -b -q -p "$PIDFILE" -x "$DAEMON" + printf 'Starting %s: ' "$DAEMON" + start-stop-daemon -S -b -q -p "$PIDFILE" -x "$DAEMON" - status=$? - if [ "$status" -eq 0 ]; then - echo "OK" - else - echo "FAIL" - fi + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi - return "$status" + return "$status" } stop() { - printf 'Stopping %s: ' "$DAEMON" - start-stop-daemon -K -q -p "$PIDFILE" + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" - status=$? - if [ "$status" -eq 0 ]; then - echo "OK" - else - echo "FAIL" - fi + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi - return "$status" + return "$status" +} + +reload() +{ + if [ -f "$PIDFILE" ]; then + PID=$(cat "$PIDFILE") + kill -HUP "$PID" + fi } restart() { - stop - sleep 1 - start + stop + sleep 1 + start } case "$1" in - start|stop|restart) - "$1" - ;; - *) - echo "Usage: $0 {start|stop|restart}, got $0 $1" - exit 1 + start|stop|reload|restart) + "$1" + ;; + *) + echo "Usage: $0 {start|stop|reload|restart}, got $0 $1" + exit 1 esac diff --git a/test/skel/sbin/service.sh b/test/skel/sbin/service.sh index 74898bea..1ad4df90 100755 --- a/test/skel/sbin/service.sh +++ b/test/skel/sbin/service.sh @@ -2,23 +2,33 @@ cleanup() { - echo "Got signal, stopping ..." - rm -f /run/service.pid - exit 0 + echo "Got signal, stopping ..." + rm -f /run/service.pid + exit 0 +} + +reload() +{ + echo + echo "Ready." + echo + sleep 1 + echo $$ > /run/service.pid } # Hook SIGUSR1 and dump trace to file system # shellcheck disable=SC2172 trap 'echo USR1 > /tmp/usr1.log' USR1 +trap reload HUP trap cleanup INT trap cleanup TERM trap cleanup QUIT trap cleanup EXIT -echo $$ > /run/service.pid +reload # sleep may exit on known signal, so # we cannot use 'set -e' while true; do - sleep 1 + sleep 1 done diff --git a/test/start-stop-sysv.sh b/test/start-stop-sysv.sh index f20300ee..9d5f7e63 100755 --- a/test/start-stop-sysv.sh +++ b/test/start-stop-sysv.sh @@ -1,38 +1,50 @@ #!/bin/sh +# shellcheck disable=2034 source=/dev/null set -eu +STANZA="sysv [2345] pid:!/run/service.pid name:service.sh log:stdout \ + reload:'/etc/init.d/S01-service.sh reload' \ + /etc/init.d/S01-service.sh -- SysV test service" TEST_DIR=$(dirname "$0") +#DEBUG=1 test_teardown() { - say "Test done $(date)" - - say "Running test teardown." - run "rm -f $FINIT_CONF" + sep "Test done $(date)" + assert "Running test teardown." "run rm -f $FINIT_RCSD/service.conf" } -# shellcheck source=/dev/null . "$TEST_DIR/lib/setup.sh" -say "Test start $(date)" +sep "Test start $(date)" say "Add sysv stanza in $FINIT_CONF" -run "echo 'sysv [2345] pid:!/run/service.pid name:service.sh /etc/init.d/S01-service.sh -- SysV test service' > $FINIT_CONF" +run "echo \"$STANZA\" > $FINIT_RCSD/service.conf" -say 'Reload Finit' +say "Reload Finit" run "initctl reload" retry 'assert_num_children 1 service.sh' +retry 'assert_cond service/service.sh/ready' -say 'Stop the sysv service' +sep 'Stop the sysv service' run "initctl stop service.sh" retry 'assert_num_children 0 service.sh' -say 'Start the sysv service again' +sep 'Start the sysv service again' run "initctl start service.sh" retry 'assert_num_children 1 service.sh' +retry 'assert_cond service/service.sh/ready' + +sep 'Touch the sysv service' +run "initctl touch service.conf" +run "initctl reload" +#run "initctl cond dump" + +retry 'assert_num_children 1 service.sh' +retry 'assert_cond service/service.sh/ready' return 0