115 lines
2.6 KiB
Bash
Executable File
115 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
#
|
|
# This test checks for operation of the MOSH_SERVER_NETWORK_TMOUT variable.
|
|
# It does this by
|
|
# * setting the variable
|
|
# * killing the client (and its network traffic)
|
|
# * waiting server-side, for the server to die
|
|
# If it is killed, the test is successful.
|
|
# If it survives that long and the server is still around, the test fails.
|
|
# The client waits a bit longer than the server so that status can be collected
|
|
# properly.
|
|
#
|
|
|
|
TIMEOUT=10
|
|
|
|
fail()
|
|
{
|
|
printf "$@" 2>&1
|
|
exit 99
|
|
}
|
|
|
|
|
|
|
|
PATH=$PATH:.:$srcdir
|
|
# Top-level wrapper.
|
|
if [ $# -eq 0 ]; then
|
|
e2e-test $0 client baseline
|
|
exit
|
|
fi
|
|
|
|
# OK, we have arguments, we're one of the test hooks.
|
|
|
|
client()
|
|
{
|
|
case "$myname" in
|
|
server-network-timeout)
|
|
export MOSH_SERVER_NETWORK_TMOUT=$TIMEOUT;;
|
|
server-signal-timeout)
|
|
export MOSH_SERVER_SIGNAL_TMOUT=$TIMEOUT;;
|
|
*)
|
|
fail "unexpected test name %s\n" "$myname"
|
|
esac
|
|
shift
|
|
eval "$@"
|
|
# The client may be murdered. We need to expect that...
|
|
retval=$?
|
|
case $retval in
|
|
0|1)
|
|
fail "mosh-client had a normal exit\n";; # test condition failed
|
|
137)
|
|
# Aha, signal 9. Wait.
|
|
sleep $(( $TIMEOUT + 12 ))
|
|
exit 0
|
|
;;
|
|
*)
|
|
fail "unknown client wrapper failure, retval=%d\n" $retval
|
|
;;
|
|
esac
|
|
fail "client wrapper shouldnt get here\n"
|
|
}
|
|
baseline()
|
|
{
|
|
# check for our wonderful variable
|
|
if [ -z "$MOSH_SERVER_NETWORK_TMOUT" -a -z "$MOSH_SERVER_SIGNAL_TMOUT" ]; then
|
|
env
|
|
fail "Variable unset\n"
|
|
fi
|
|
# check for our client
|
|
if [ -z "$MOSH_CLIENT_PID" ]; then
|
|
env
|
|
fail "Client pid unavailable\n"
|
|
fi
|
|
if ! kill -0 $MOSH_CLIENT_PID; then
|
|
fail "mosh client is unexpectedly missing\n"
|
|
fi
|
|
# Set up for good return and cleanup on being killed
|
|
trap "echo got killed >&2; sleep 1; exit 0" SIGHUP SIGTERM
|
|
sleep 1
|
|
|
|
# Kill the client, to stop network traffic.
|
|
kill -KILL $MOSH_CLIENT_PID
|
|
case "$myname" in
|
|
server-network-timeout)
|
|
# Just wait. This is the hardest part.
|
|
sleep $(( $TIMEOUT + 7 ))
|
|
;;
|
|
server-signal-timeout)
|
|
# Wait for the timeout to expire.
|
|
sleep $(( $TIMEOUT + 2 ))
|
|
# Tell the server to go away.
|
|
kill -USR1 $MOSH_SERVER_PID
|
|
sleep 5
|
|
;;
|
|
*)
|
|
fail "unexpected test name %s\n" "$myname"
|
|
esac
|
|
# If we're still alive and the server is too, the test failed.
|
|
# XXX the server is getting killed and we're getting here anyway.
|
|
# Exit with error only if server is still around.
|
|
! kill -0 $MOSH_SERVER_PID
|
|
exit
|
|
}
|
|
|
|
myname="$(basename $0 .test)"
|
|
|
|
case $1 in
|
|
baseline|variant)
|
|
baseline;;
|
|
client)
|
|
client "$@";;
|
|
*)
|
|
fail "unknown test argument %s\n" $1;;
|
|
esac
|