diff --git a/test/Makefile.am b/test/Makefile.am index 32cd73b9..7b7e0b1d 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -8,6 +8,7 @@ EXTRA_DIST += add-remove-dynamic-service-sub-config.sh EXTRA_DIST += start-stop-service.sh EXTRA_DIST += start-stop-service-sub-config.sh EXTRA_DIST += start-kill-service.sh +EXTRA_DIST += signal-service.sh AM_TESTS_ENVIRONMENT = TENV_ROOT='$(abs_builddir)/tenv-root/'; AM_TESTS_ENVIRONMENT += export TENV_ROOT; @@ -28,6 +29,7 @@ TESTS += add-remove-dynamic-service-sub-config.sh TESTS += start-stop-service.sh TESTS += start-stop-service-sub-config.sh TESTS += start-kill-service.sh +TESTS += signal-service.sh clean-local: -rm -rf $(builddir)/tenv-root/ diff --git a/test/common/service.sh b/test/common/service.sh index 870a383c..08366777 100755 --- a/test/common/service.sh +++ b/test/common/service.sh @@ -2,6 +2,10 @@ set -eu +# Hook SIGUSR1 and dump trace to file system +# shellcheck disable=SC2172 +trap 'echo USR1 > /tmp/usr1.log' 10 + echo $$ > /run/service.pid while true; do diff --git a/test/signal-service.sh b/test/signal-service.sh new file mode 100755 index 00000000..a8998cc5 --- /dev/null +++ b/test/signal-service.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Verifies initctl can send arbitrary signals (USR1 in this case) to finit managed services + +set -eu + +TEST_DIR=$(dirname "$0") + +# shellcheck source=/dev/null +. "$TEST_DIR/tenv/lib.sh" + +test_teardown() { + say "Test done $(date)" + say "Running test teardown." + + texec rm -f "$FINIT_CONF" + texec rm -f /test_assets/service.sh +} + +say "Test start $(date)" + +cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ + +say 'Ensure file system is cleared' +texec rm -f /tmp/usr1.log + +say "Add service stanza in $FINIT_CONF" +texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Test service' > $FINIT_CONF" + +say 'Reload Finit' +texec sh -c "initctl reload" + +say 'Send SIGUSR1 to service...' +texec sh -c "initctl signal service.sh SIGUSR1" + +# shellcheck disable=SC2016 +retry 'assert "service.sh received SIGUSR" "$(texec cat /tmp/usr1.log)" = "USR1"' 10 1