Files
mosh/src/tests/repeat.test
T
2016-11-29 22:31:33 -05:00

92 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
#
# Run mosh many times. If run as repeat-with-stdin.test, also send
# input constantly, to try and trigger a bug where mosh-server would
# exit on OS X if input was received after the client session had
# exited.
#
# 100 iterations runs in comparable time to other tests.
: ${REPEAT_TEST_LOOPCOUNT:=100}
# shellcheck source=e2e-test-subrs
. "$(dirname "$0")/e2e-test-subrs"
PATH=$PATH:.:$srcdir
# Top-level wrapper.
if [ $# -eq 0 ]; then
do_tmux=
case $(basename "$0" .test) in
repeat-with-input)
do_tmux=tmux;;
esac
e2e-test "$0" baseline client server ${do_tmux}
exit
fi
# Run mosh repeatedly
client()
{
for i in $(seq 1 $REPEAT_TEST_LOOPCOUNT); do
(sleep 15; kill $$) &
killpid=$!
if ! "$@"; then
printf "### iteration %d failed\n" "$i"
kill $killpid
exit 1
fi
kill $killpid
done
}
# e2e-test-server is slow because of its screen capture; this simple
# wrapper is faster.
server()
{
shift
eval "$@"
}
# Constantly send keyboard input.
tmux_commands()
{
while printf "send-keys 0x0d\n" && sleepf; do
:
done
}
tmux_stdin()
{
tmux_commands | "$@"
exit
}
baseline()
{
printf "@@@ done\n"
}
post()
{
if [ "$(grep -c "@@@ done" "$(basename "$0").d/baseline.tmux.log")" -lt $REPEAT_TEST_LOOPCOUNT ]; then
exit 1
fi
}
case $1 in
tmux)
shift;
tmux_stdin "$@";;
baseline)
baseline;;
client)
shift
client "$@";;
server)
shift
server "$@";;
*)
fail "unknown test argument %s\n" "$1";;
esac