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>
76 lines
1.7 KiB
Bash
Executable file
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
|