Add tests to run Mosh repeatedly.

This commit is contained in:
John Hood
2016-11-06 01:50:20 -05:00
parent 22f5d58144
commit 444eae1fc4
4 changed files with 112 additions and 9 deletions
+2
View File
@@ -24,6 +24,8 @@ displaytests = \
emulation-wrap-across-frames.test \ emulation-wrap-across-frames.test \
prediction-unicode.test \ prediction-unicode.test \
pty-deadlock.test \ pty-deadlock.test \
repeat.test \
repeat-with-input.test \
server-network-timeout.test \ server-network-timeout.test \
server-signal-timeout.test \ server-signal-timeout.test \
window-resize.test \ window-resize.test \
+11 -2
View File
@@ -174,6 +174,8 @@ for i in $test_args; do
tmux=1;; tmux=1;;
client) client)
client=1;; client=1;;
server)
server=1;;
post) post)
post=1;; post=1;;
mosh-args) mosh-args)
@@ -197,11 +199,17 @@ if [ -n "$client" ]; then
client_wrapper="${test_script} client" client_wrapper="${test_script} client"
fi fi
server_wrapper="\"${srcdir}/e2e-test-server\""
if [ -n "$server" ]; then
server_wrapper="\"${srcdir}/${test_script}\" server"
fi
tmux_stdin="${srcdir}/hold-stdin" tmux_stdin="${srcdir}/hold-stdin"
if [ -n "$tmux" ]; then if [ -n "$tmux" ]; then
tmux_stdin="${test_script} tmux" tmux_stdin="${test_script} tmux"
fi fi
for run in $server_tests; do for run in $server_tests; do
log "Running server test %s.\n" "$run" log "Running server test %s.\n" "$run"
# These three variables are for the benefit of the mosh-client and mosh-server wrappers. # These three variables are for the benefit of the mosh-client and mosh-server wrappers.
@@ -210,7 +218,6 @@ for run in $server_tests; do
export MOSH_E2E_TEST="$PWD/${test_dir}/${run}" export MOSH_E2E_TEST="$PWD/${test_dir}/${run}"
# XXX need to quote special chars in server pathname here somehow # XXX need to quote special chars in server pathname here somehow
sut="../../scripts/mosh --client=${srcdir}/mosh-client --server=${srcdir}/mosh-server --local --bind-server=127.0.0.1 ${mosh_args} 127.0.0.1" sut="../../scripts/mosh --client=${srcdir}/mosh-client --server=${srcdir}/mosh-server --local --bind-server=127.0.0.1 ${mosh_args} 127.0.0.1"
testarg=$run
if [ "$run" = "direct" ]; then if [ "$run" = "direct" ]; then
sut="" sut=""
fi fi
@@ -218,7 +225,7 @@ for run in $server_tests; do
# XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes # XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes
# XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X # XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X
tmux_socket="/tmp/.tmux-mosh-test-$$" tmux_socket="/tmp/.tmux-mosh-test-$$"
${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} \"${srcdir}/e2e-test-server\" \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${testarg}\"" > "${test_dir}/${run}.tmux.log" ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
rv=$? rv=$?
rm -f "${tmux_socket}" rm -f "${tmux_socket}"
if [ $rv -ne 0 ]; then if [ $rv -ne 0 ]; then
@@ -230,6 +237,7 @@ for run in $server_tests; do
fi fi
# Check for server harness failures # Check for server harness failures
if [ -z "$server" ]; then
if [ ! -s "${test_dir}/${run}.capture" ] \ if [ ! -s "${test_dir}/${run}.capture" ] \
|| [ ! -s "${test_dir}/${run}.exitstatus" ]; then || [ ! -s "${test_dir}/${run}.exitstatus" ]; then
test_error "server harness failure on test %s\n" "$run" test_error "server harness failure on test %s\n" "$run"
@@ -238,6 +246,7 @@ for run in $server_tests; do
if [ "$server_rv" -ne 0 ]; then if [ "$server_rv" -ne 0 ]; then
test_error "server harness exited with status %s\n" "$server_rv" test_error "server harness exited with status %s\n" "$server_rv"
fi fi
fi
# Check for "round-trip" failures # Check for "round-trip" failures
if grep -q "round-trip Instruction verification failed" "${test_dir}/${run}.server.stderr"; then if grep -q "round-trip Instruction verification failed" "${test_dir}/${run}.server.stderr"; then
test_error "Round-trip Instruction verification failed on server during %s\n" "$run" test_error "Round-trip Instruction verification failed on server during %s\n" "$run"
+1
View File
@@ -0,0 +1 @@
repeat.test
+91
View File
@@ -0,0 +1,91 @@
#!/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"; do
sleepf
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