Factor tests/test-common.sh out of tests/smoke-test

For reuse by future tests.
This commit is contained in:
Markus Armbruster 2012-12-17 21:36:53 +01:00
parent 108c9408dc
commit d161b6d9e4
2 changed files with 73 additions and 57 deletions

View file

@ -7,12 +7,7 @@ fi
srcdir="$1" srcdir="$1"
export EMPIREHOST=127.0.0.1 LOGNAME=tester . "$srcdir"/tests/test-common.sh
if [ -x ./config.status ] && ./config.status --version | grep -q '^Wolfpack Empire'
then :
else echo "$0: Must be run in root of build tree" >&2; exit 1
fi
# #
# Currently expected to work only with thread package LWP and a # Currently expected to work only with thread package LWP and a
@ -33,32 +28,14 @@ elif [ `sed -n 's/empthread *:= *\(.*\)/\1/p' <GNUmakefile` != LWP ]
then echo "Warning: smoke test not expected to work with this thread package!" >&2 then echo "Warning: smoke test not expected to work with this thread package!" >&2
fi fi
# Create sandbox create_sandbox
rm -rf sandbox
mkdir -p sandbox/etc/empire sandbox/share/empire/builtin sandbox/var/empire
touch sandbox/etc/empire/schedule
cat >sandbox/etc/empire/econfig <<EOF
data "../../var/empire"
info "../../../../info.nr"
builtin "../../share/empire/builtin"
listen_addr "$EMPIREHOST"
keep_journal 1
EOF
cp "$srcdir"/src/lib/global/*.config sandbox/share/empire/builtin
exec 3>sandbox/smoke.out exec 3>sandbox/smoke.out
pid=
trap 'if [ "$pid" ]; then kill "$pid" 2>/dev/null || true; fi' EXIT
# Create world and start server # Create world and start server
src/util/files -e sandbox/etc/empire/econfig -f >&3 src/util/files -e sandbox/etc/empire/econfig -f >&3
src/util/fairland -e sandbox/etc/empire/econfig -q -s sandbox/newcap_script -R 1 10 30 src/util/fairland -e sandbox/etc/empire/econfig -q -s sandbox/newcap_script -R 1 10 30
src/server/emp_server -e sandbox/etc/empire/econfig -R 1 start_server
while src/client/empire red herring 2>&1 | grep -q "Connection refused"
do : # FIXME hangs here if server crashes on startup
done
pid=`cat sandbox/var/empire/server.pid`
src/client/empire POGO peter <sandbox/newcap_script >/dev/null src/client/empire POGO peter <sandbox/newcap_script >/dev/null
# Feed player input # Feed player input
@ -94,41 +71,11 @@ EOF
done done
# Stop server # Stop server
kill "$pid" stop_server
while kill -0 "$pid" 2>/dev/null
do : # FIXME hangs here if server fails to exit
done
exec 3>&- exec 3>&-
src/util/empdump -e sandbox/etc/empire/econfig -x >sandbox/smoke.xdump src/util/empdump -e sandbox/etc/empire/econfig -x >sandbox/smoke.xdump
# Smoke test completed; compare results # Smoke test completed; compare results
cmp_out()
{
local opt exp act nrm msg ret=0
for i
do
case "$i" in
*/journal.log) opt=-j ;;
*/server.log) opt=-s ;;
*) opt= ;;
esac
exp="$srcdir/tests/smoke/${i##*/}"
act="sandbox/$i"
nrm="sandbox/normalized-${i##*/}"
perl "$srcdir"/tests/normalize.pl $opt "$act" >"$nrm"
if msg=`diff -q "$exp" "$nrm"`
then
echo "$exp OK"
else
ret=$?
echo "$exp FAIL"
echo $msg
fi
done
return $ret
}
cmp_out smoke.out var/empire/server.log var/empire/journal.log smoke.xdump cmp_out smoke.out var/empire/server.log var/empire/journal.log smoke.xdump

69
tests/test-common.sh Normal file
View file

@ -0,0 +1,69 @@
export EMPIREHOST=127.0.0.1 LOGNAME=tester
if [ -x ./config.status ] && ./config.status --version | grep -q '^Wolfpack Empire'
then :
else echo "$0: Must be run in root of build tree" >&2; exit 1
fi
test=${0##*/}
test=${test%-test}
create_sandbox()
{
rm -rf sandbox
mkdir -p sandbox/etc/empire sandbox/share/empire/builtin sandbox/var/empire
touch sandbox/etc/empire/schedule
cat >sandbox/etc/empire/econfig <<EOF
data "../../var/empire"
info "../../../../info.nr"
builtin "../../share/empire/builtin"
listen_addr "$EMPIREHOST"
keep_journal 1
EOF
cp "$srcdir"/src/lib/global/*.config sandbox/share/empire/builtin
}
start_server()
{
pid=
trap 'if [ "$pid" ]; then kill "$pid" 2>/dev/null || true; fi' EXIT
src/server/emp_server -e sandbox/etc/empire/econfig -R 1
while src/client/empire red herring 2>&1 | grep -q "Connection refused"
do : # FIXME hangs here if server crashes on startup
done
pid=`cat sandbox/var/empire/server.pid`
}
stop_server()
{
kill "$pid"
while kill -0 "$pid" 2>/dev/null
do : # FIXME hangs here if server fails to exit
done
}
cmp_out()
{
local opt exp act nrm msg ret=0
for i
do
case "$i" in
*/journal.log) opt=-j ;;
*/server.log) opt=-s ;;
*) opt= ;;
esac
exp="$srcdir/tests/$test/${i##*/}"
act="sandbox/$i"
nrm="sandbox/normalized-${i##*/}"
perl "$srcdir"/tests/normalize.pl $opt "$act" >"$nrm"
if msg=`diff -q "$exp" "$nrm"`
then
echo "$exp OK"
else
ret=$?
echo "$exp FAIL"
echo $msg
fi
done
return $ret
}