mirror of
https://github.com/troglobit/finit.git
synced 2026-09-30 13:02:37 +07:00
test: new test, verify SysV start/stop daemon support
Install start-stop-daemon in test root. Add S01-service.sh, which uses start-stop-daemon to start service.sh. Modify service.sh to respect signals, and not exit immediately when sleep exits due to SIGTERM. Remove PID file in signal callback and make sure to exit OK The test itself is basically a copy of the start-stop-service.sh test. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
@@ -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 += start-stop-sysv.sh
|
||||
EXTRA_DIST += signal-service.sh
|
||||
|
||||
AM_TESTS_ENVIRONMENT = TENV_ROOT='$(abs_builddir)/tenv-root/';
|
||||
@@ -29,6 +30,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 += start-stop-sysv.sh
|
||||
TESTS += signal-service.sh
|
||||
|
||||
clean-local:
|
||||
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
# SysV style start script for service.sh
|
||||
|
||||
DAEMON="/test_assets/service.sh"
|
||||
PIDFILE="/var/run/service.pid"
|
||||
|
||||
start() {
|
||||
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
|
||||
return "$status"
|
||||
}
|
||||
|
||||
stop() {
|
||||
printf 'Stopping %s: ' "$DAEMON"
|
||||
start-stop-daemon -K -q -p "$PIDFILE"
|
||||
status=$?
|
||||
if [ "$status" -eq 0 ]; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "FAIL"
|
||||
fi
|
||||
return "$status"
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
sleep 1
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start|stop|restart)
|
||||
"$1";;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}, got $0 $1"
|
||||
exit 1
|
||||
esac
|
||||
+14
-5
@@ -1,15 +1,24 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
cleanup()
|
||||
{
|
||||
echo "Got signal, stopping ..."
|
||||
rm -f /run/service.pid
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Hook SIGUSR1 and dump trace to file system
|
||||
# shellcheck disable=SC2172
|
||||
trap 'echo USR1 > /tmp/usr1.log' 10
|
||||
trap 'echo USR1 > /tmp/usr1.log' USR1
|
||||
trap cleanup INT
|
||||
trap cleanup TERM
|
||||
trap cleanup QUIT
|
||||
trap cleanup EXIT
|
||||
|
||||
echo $$ > /run/service.pid
|
||||
|
||||
# sleep may exit on known signal, so
|
||||
# we cannot use 'set -e'
|
||||
while true; do
|
||||
sleep 5
|
||||
sleep 1
|
||||
done
|
||||
|
||||
rm /run/service.pid
|
||||
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
|
||||
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/
|
||||
cp "$TEST_DIR"/common/S01-service.sh "$TENV_ROOT"/test_assets/
|
||||
chmod +x "$TENV_ROOT"/test_assets/*.sh
|
||||
|
||||
say "Add sysv stanza in $FINIT_CONF"
|
||||
texec sh -c "echo 'sysv [2345] pid:!/run/service.pid name:service.sh /test_assets/S01-service.sh -- SysV test service' > $FINIT_CONF"
|
||||
|
||||
say 'Reload Finit'
|
||||
texec sh -c "initctl reload"
|
||||
|
||||
retry 'assert_num_children 1 service.sh'
|
||||
|
||||
say 'Stop the sysv service'
|
||||
texec sh -c "initctl stop service.sh"
|
||||
|
||||
retry 'assert_num_children 0 service.sh'
|
||||
|
||||
say 'Start the sysv service again'
|
||||
texec sh -c "initctl start service.sh"
|
||||
|
||||
retry 'assert_num_children 1 service.sh'
|
||||
|
||||
return 0
|
||||
+2
-1
@@ -53,7 +53,8 @@ binaries = $(DEST)/bin/awk \
|
||||
$(DEST)/bin/sleep \
|
||||
$(DEST)/bin/tail \
|
||||
$(DEST)/bin/top \
|
||||
$(DEST)/bin/touch
|
||||
$(DEST)/bin/touch \
|
||||
$(DEST)/bin/start-stop-daemon
|
||||
|
||||
dirs = $(DEST)/bin \
|
||||
$(DEST)/dev \
|
||||
|
||||
Reference in New Issue
Block a user