empserver/tests/smoke-test
Markus Armbruster 9ca3fa95b8 tests: Capture player output via journal instead of client
Capturing the client's output tests both client and server, which is
nice.  However, player input isn't visible in the resulting file,
which makes it more difficult to understand.

Route player output to journal (econfig key "keep_journal 2"), and
ignore client output.

Separate tests for the client would be useful.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2013-05-31 10:52:50 +02:00

76 lines
1.7 KiB
Bash
Executable file

#!/bin/sh -e
# Smoke test for Empire
if [ $# -ne 1 ]
then echo "Usage: $0 SRCDIR" >&2; exit 1
fi
srcdir="$1"
. "$srcdir"/tests/test-common.sh
#
# Currently expected to work only with thread package LWP, because:
#
# - Thread scheduling is reliably deterministic only with LWP
# - Shell builtin kill appears not to do the job in MinGW
# - The Windows server tries to run as service when -d isn't
# specified
#
# TODO address these shortcomings.
#
if [ `sed -n 's/empthread *:= *\(.*\)/\1/p' <GNUmakefile` != LWP ]
then echo "Warning: smoke test not expected to work with this thread package!" >&2
fi
create_sandbox
exec 3>sandbox/smoke.out
# Create world and start server
src/util/files -e sandbox/etc/empire/econfig -f >&3
src/util/empdump -e sandbox/etc/empire/econfig -i "$srcdir"/tests/smoke/fairland.xdump
start_server
src/client/empire POGO peter <"$srcdir"/tests/smoke/newcap_script >/dev/null
# Feed player input
need_update=
for i in "$srcdir"/tests/smoke/[0-9]*
do
t="${i##*/}"
if [ "$need_update" ]
then
echo "Update Turn $t starting" >&3
src/client/empire POGO peter <<EOF >/dev/null
power new
report *
cen * ?own#0
comm * ?own#0
reso * ?own#0
force
EOF
echo "Update Turn $t completed successfully" >&3
fi
for j in "$i"/*
do
p="${j##*/}"
echo "Player $p Turn $t starting" >&3
if [ $p -eq 0 ]
then c=POGO r=peter
else c="${p#0}"; r="$c"
fi
src/client/empire "$c" "$r" <$j >/dev/null
echo "Player $p Turn $t completed successfully" >&3
done
need_update=y
done
# Stop server
stop_server
exec 3>&-
src/util/empdump -e sandbox/etc/empire/econfig -x >sandbox/smoke.xdump
# Smoke test completed; compare results
cmp_out smoke.out var/empire/server.log var/empire/journal.log smoke.xdump