diff --git a/test/Makefile.am b/test/Makefile.am index d71e4973..51f18baf 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -37,6 +37,7 @@ EXTRA_DIST += ready-serv.sh EXTRA_DIST += restart-self.sh EXTRA_DIST += runlevel.sh EXTRA_DIST += run-restart-forever.sh +EXTRA_DIST += run-task-tricks.sh EXTRA_DIST += start-stop-service.sh EXTRA_DIST += start-stop-service-sub-config.sh EXTRA_DIST += start-kill-service.sh @@ -77,6 +78,7 @@ TESTS += ready-serv.sh TESTS += restart-self.sh TESTS += runlevel.sh TESTS += run-restart-forever.sh +TESTS += run-task-tricks.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 68e85511..f8ea668a 100755 --- a/test/lib/setup.sh +++ b/test/lib/setup.sh @@ -52,6 +52,11 @@ assert_new_pid() assert "Finit has registered new PID" "$(texec initctl |grep $1 | awk '{print $1;}')" -eq "$(texec cat $2)" } +assert_pidiff() +{ + assert "PID has changed (old PID $2)" "$(texec initctl |awk -v svc="$1" '$0 ~ svc {print $1}')" -ne "$2" +} + assert_restarts() { assert "Finit has registered restarts" "$(texec initctl status "$2" | awk '/Restarts/{print $3;}')" -ge "$1" @@ -292,14 +297,17 @@ else fi set +u +rm -f "$SYSROOT$FINIT_CONF" +touch "$SYSROOT$FINIT_CONF" + if [ -n "$BOOTSTRAP" ]; then - say "Setting up bootstrap tasks ..." - echo "$BOOTSTRAP" > "$SYSROOT$FINIT_CONF" + say "Setting up bootstrap tasks ..." + echo "$BOOTSTRAP" >> "$SYSROOT$FINIT_CONF" fi if [ -n "$RCLOCAL" ]; then - say "Setting up /etc/rc.local ..." - echo "$RCLOCAL" > "$SYSROOT/etc/rc.local" - chmod +x "$SYSROOT/etc/rc.local" + say "Setting up /etc/rc.local ..." + echo "$RCLOCAL" > "$SYSROOT/etc/rc.local" + chmod +x "$SYSROOT/etc/rc.local" fi set -u diff --git a/test/run-task-tricks.sh b/test/run-task-tricks.sh new file mode 100755 index 00000000..b98463aa --- /dev/null +++ b/test/run-task-tricks.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# +# Verifies that a run task can call initctl at bootstrap and runlevel 2, +# without blocking, performing serveral tasks: +# +# 1. Query running services +# 2. Stop/Start a running service +# 3. Restart a service +# + +TEST_DIR=$(dirname "$0") +#DEBUG=1 + +# shellcheck disable=SC2034 +BOOTSTRAP="run [S] /bin/ready.sh -- Ready steady go\n\ +run [S] name:one initctl -- Query status\n\ +service [S234] /sbin/service.sh -- Background service\n\ +run [2] name:two initctl stop service.sh -- Stopping service\n\ +run [3] name:three initctl start service.sh -- Starting service again\n\ +run [4] name:four initctl restart service.sh -- Restart service" +# shellcheck disable=SC2034 +RCLOCAL="echo \"$0 ==============\" &1>2" + +# shellcheck source=/dev/null +. "$TEST_DIR/lib/setup.sh" + +test_setup() +{ + say "Test start $(date)" + } + +test_teardown() +{ + say "Test done $(date)" +} + +say "$FINIT_CONF:" +run "cat $FINIT_CONF" +say "/etc/rc.local:" +run "cat /etc/rc.local" + +say "Waiting for runlevel 2" +sleep 2 +assert_status "service.sh" "stopped" + +say "Changing to runlevel 3" +run "initctl runlevel 3" +sleep 2 +assert_status "service.sh" "running" +run "initctl" +oldpid=$(texec initctl |awk '/service.sh/{print $1}') + +say "Changing to runlevel 4" +run "initctl runlevel 4" +sleep 2 +assert_status "service.sh" "running" +assert_pidiff "service.sh" "$oldpid" + +run "initctl"