testing: wait for background daemon in wrappercheck

When starting a daemon via wrappercheck, optionally wait for the
daemon to write a certain message to its log file. The message is
searched for with "grep -e", so regular expressions matching one line
are acceptable. Only works in combination with writing that log file.

This will be used to wait for syncevo-http-server to confirm that it
is running and ready to accept connections.
This commit is contained in:
Patrick Ohly 2014-02-02 19:04:41 +01:00
parent 88ac5872a5
commit d747fc1e14

View file

@ -18,6 +18,7 @@ trap "kill -TERM $PIDS" TERM
trap "kill -INT $PIDS" INT
DAEMON_LOG=
WAIT_FOR_DAEMON_OUTPUT=
declare -a BACKGROUND
declare -a ENV
@ -28,6 +29,10 @@ while [ $# -gt 1 ] && [ "$1" != "--" ] ; do
shift
DAEMON_LOG="$1"
;;
--wait-for-daemon-output)
shift
WAIT_FOR_DAEMON_OUTPUT="$1"
;;
*=*)
ENV[${#ENV[*]}]="$1"
;;
@ -49,10 +54,26 @@ shift
BACKGROUND_PID=$!
PIDS+="$BACKGROUND_PID"
set +e
(set -x; "$@")
RET=$?
set -e
if [ "$DAEMON_LOG" ] && [ "$WAIT_FOR_DAEMON_OUTPUT" ]; then
( set +x; echo >&2 "*** waiting for daemon to write '$WAIT_FOR_DAEMON_OUTPUT' into $DAEMON_LOG"
while ! grep -q -e "$WAIT_FOR_DAEMON_OUTPUT" "$DAEMON_LOG"; do
if ! kill -0 $BACKGROUND_PID 2>/dev/null; then
break
fi
sleep 1
done
)
fi
if kill -0 $BACKGROUND_PID 2>/dev/null; then
set +e
(set -x; "$@")
RET=$?
set -e
else
echo >&2 "*** ${BACKGROUND[0]} terminated prematurely"
RET=1
fi
( set +x; echo >&2 "*** killing and waiting for ${BACKGROUND[0]}" )
kill -INT $BACKGROUND_PID && kill -TERM $BACKGROUND_PID || true