| #!/bin/bash |
| . ./wvtest/wvtest.sh |
| |
| pid=$$ |
| TICK=tick.$pid.tmp |
| AM=./host-alivemonitor |
| |
| wait_until_contains() |
| { |
| for i in $(seq 100); do |
| [ "$(cat $1)" = "$2" ] && break |
| echo 'checking' |
| sleep 0.1 |
| done |
| WVPASSEQ "$(cat $1)" "$2" |
| } |
| |
| |
| WVSTART "alivemonitor test" |
| |
| # make sure return values are passed through correctly |
| WVPASS $AM $TICK 1 1 10 true |
| WVFAIL $AM $TICK 1 1 10 false |
| |
| # catch invalid parameters |
| WVPASS $AM $TICK 10 1 10 true |
| WVFAIL $AM $TICK 10.01 1 10 true |
| WVPASS $AM $TICK 1 1 1 true |
| WVFAIL $AM $TICK -1 1 1 true |
| WVFAIL $AM $TICK 1 -1 1 true |
| WVFAIL $AM $TICK 1 1 -1 true |
| |
| # make sure it kills after a timeout |
| YESLOG=killed.$pid.tmp |
| WVFAIL $AM $TICK 0.1 0.1 0.2 sleep 10 2>&1 | tee $YESLOG |
| # I don't usually like to look for specific output messages in tests, |
| # but since we had an actual bug where the output was lying, we should |
| # probably check that out. |
| WVPASS fgrep -q 'Timeout!' $YESLOG |
| |
| # make sure it sleeps for less than incr_timeout if it would go past timeout. |
| # We know it slept for a shorter interval if it kills the subtask. |
| WVFAIL $AM $TICK 0.1 100 0.2 sleep 10 |
| |
| # make sure it doesn't kill if no timeout occurs. |
| do_ticks() |
| { |
| while kill -0 $pid 2>/dev/null; do |
| echo "tick" >&2 && |
| touch $TICK && |
| sleep $1 || |
| break |
| done |
| rm -rf $TICK |
| } |
| do_ticks 0.1 & |
| dtpid=$! |
| NOTLOG=notkilled.$pid.tmp |
| WVPASS $AM $TICK 0.05 0.05 10 sleep 0.5 2>&1 | tee $NOTLOG |
| WVFAIL fgrep -q 'Timeout!' $NOTLOG |
| kill $dtpid |
| |
| # make sure log message doesn't talk about timeouts if the task |
| # is killed. |
| NOTLOG2=notkilled2.$pid.tmp |
| $AM $TICK 0.05 0.05 100 sh -c 'kill 0' 2>&1 | tee $NOTLOG2 |
| WVFAIL fgrep -q 'Timeout!' $NOTLOG2 |
| WVPASS grep -q 'signal [0-9]* received' $NOTLOG2 |
| |
| # test traplog that we will use for testing prekill |
| TMP=trap.$pid.tmp |
| : >$TMP |
| ./traplog $TMP & |
| tlpid=$! |
| wait_until_contains $TMP "START " |
| kill -HUP $tlpid |
| wait_until_contains $TMP "START HUP " |
| kill -HUP $tlpid |
| wait_until_contains $TMP "START HUP HUP " |
| kill -TERM $tlpid |
| wait_until_contains $TMP "START HUP HUP TERM " |
| WVPASS wait $tlpid |
| |
| # check prekill behaviour |
| # traplog does exit(0) on SIGTERM |
| : >$TMP |
| WVPASS $AM -S 15 -T 5 $TICK 0.1 0.1 1 ./traplog $TMP |
| WVPASSEQ "$(cat $TMP)" "START TERM " |
| # but it doesn't exit on SIGHUP, so we'll end up killing it |
| : >$TMP |
| WVFAIL $AM -S 1 -T 0.5 $TICK 0.1 0.1 1 ./traplog $TMP |
| WVPASSEQ "$(cat $TMP)" "START HUP " |
| |
| rm -f *.$pid.tmp |