Skip to content

Commit

Permalink
Improve integration test output on failure
Browse files Browse the repository at this point in the history
  • Loading branch information
Robyt3 committed Jul 19, 2023
1 parent c79fe02 commit 556a40d
Showing 1 changed file with 53 additions and 39 deletions.
92 changes: 53 additions & 39 deletions scripts/integration_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ function kill_all() {
fi

sleep 1
if [[ ! -f fail_server.txt ]]
if [[ ! -f fail_server.log ]]
then
echo "[*] shutting down server"
echo "shutdown" > server.fifo
fi
local i
for ((i=1;i<3;i++))
do
if [[ ! -f fail_client$i.txt ]]
if [[ ! -f fail_client$i.log ]]
then
echo "[*] shutting down client$i"
echo "quit" > "client$i.fifo"
Expand All @@ -80,9 +80,19 @@ trap cleanup EXIT
function fail()
{
sleep 1
tail -n2 "$1".log > fail_"$1".txt
echo "$1 exited with code $2" >> fail_"$1".txt
if [ -f "$1".log ]; then
cp "$1".log fail_"$1".log
fi
if [ -f stdout_"$1".log ]; then
cp stdout_"$1".log fail_stdout_"$1".log
fi
if [ -f stderr_"$1".log ]; then
cp stderr_"$1".log fail_stderr_"$1".log
fi
echo "$1 exited with code $2" >> fail_"$1".log
echo "[-] $1 exited with code $2"
print_results
exit 1
}

# TODO: check for open ports instead
Expand All @@ -100,18 +110,35 @@ export LSAN_OPTIONS=suppressions=../lsan.supp:print_suppressions=0

function print_results() {
if [ "$arg_valgrind_memcheck" == "1" ]; then
if grep "ERROR SUMMARY" server.log client1.log client2.log | grep -q -v "ERROR SUMMARY: 0"; then
grep "^==" server.log client1.log client2.log
return 1
if [ -f stderr_server.log ] && grep -q "ERROR SUMMARY" stderr_server.log && ! grep -q "ERROR SUMMARY: 0" stderr_server.log; then
grep "^==" stderr_server.log >> fail_valgrind.log
fi
if [ -f stderr_client1.log ] && grep -q "ERROR SUMMARY" stderr_client1.log && ! grep -q "ERROR SUMMARY: 0" stderr_client1.log; then
grep "^==" stderr_client1.log >> fail_valgrind.log
fi
if [ -f stderr_client2.log ] && grep -q "ERROR SUMMARY" stderr_client2.log && ! grep -q "ERROR SUMMARY: 0" stderr_client2.log; then
grep "^==" stderr_client2.log >> fail_valgrind.log
fi
else
if test -n "$(find . -maxdepth 1 -name 'SAN.*' -print -quit)"
then
cat SAN.*
return 1
cat SAN.* >> fail_san.log
fi
fi
return 0

if test -n "$(find . -maxdepth 1 -name 'fail_*' -print -quit)"
then
for fail in fail_*
do
echo "[-] $fail:"
cat "$fail"
done
echo "[-] Test failed. See errors above."
return 1
else
echo "[*] All tests passed."
return 0
fi
}

rm -rf integration_test
Expand Down Expand Up @@ -167,7 +194,7 @@ $tool ../DDNet-Server \
sv_sqlite_file ddnet-server.sqlite;
logfile server.log;
sv_register 0;
sv_port $port" > stdout_server.txt 2> stderr_server.txt || fail server "$?" &
sv_port $port" > stdout_server.log 2> stderr_server.log || fail server "$?" &

echo "[*] launch client 1"
$tool ../DDNet \
Expand All @@ -178,7 +205,7 @@ $tool ../DDNet \
snd_enable 0;
logfile client1.log;
$client_args
connect localhost:$port" > stdout_client1.txt 2> stderr_client1.txt || fail client1 "$?" &
connect localhost:$port" > stdout_client1.log 2> stderr_client1.log || fail client1 "$?" &

if [ "$arg_valgrind_memcheck" == "1" ]; then
wait_for_fifo client1.fifo 180
Expand All @@ -202,7 +229,7 @@ $tool ../DDNet \
snd_enable 0;
logfile client2.log;
$client_args
connect localhost:$port" > stdout_client2.txt 2> stderr_client2.txt || fail client2 "$?" &
connect localhost:$port" > stdout_client2.log 2> stderr_client2.log || fail client2 "$?" &

if [ "$arg_valgrind_memcheck" == "1" ]; then
wait_for_fifo client2.fifo 180
Expand Down Expand Up @@ -276,7 +303,7 @@ sleep 1

if ! grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2} ([0-9]{2}:){2}[0-9]{2} I chat: 0:-2:client1: hello world$' server.log
then
touch fail_chat.txt
touch fail_chat.log
echo "[-] Error: chat message not found in server log"
fi

Expand All @@ -285,40 +312,40 @@ if ! grep -q 'cmdlist' client1.log || \
! grep -q 'rank' client1.log || \
! grep -q 'points' client1.log
then
touch fail_chatcommand.txt
touch fail_chatcommand.log
echo "[-] Error: did not find output of /cmdlist command"
fi

if ! grep -q "hello from admin" server.log
then
touch fail_rcon.txt
touch fail_rcon.log
echo "[-] Error: admin message not found in server log"
fi

if ! grep -q "demo_player: Stopped playback" client1.log
then
touch fail_demo_server.txt
touch fail_demo_server.log
echo "[-] Error: demo playback of server demo in client 1 was not started/finished"
fi
if ! grep -q "demo_player: Stopped playback" client2.log
then
touch fail_demo_client.txt
touch fail_demo_client.log
echo "[-] Error: demo playback of client demo in client 2 was not started/finished"
fi

ranks="$(sqlite3 ddnet-server.sqlite < <(echo "select * from record_race;"))"
num_ranks="$(echo "$ranks" | wc -l | xargs)"
if [ "$ranks" == "" ]
then
touch fail_ranks.txt
touch fail_ranks.log
echo "[-] Error: no ranks found in database"
elif [ "$num_ranks" != "1" ]
then
touch fail_ranks.txt
touch fail_ranks.log
echo "[-] Error: expected 1 rank got $num_ranks"
elif ! echo "$ranks" | grep -q client1
then
touch fail_ranks.txt
touch fail_ranks.log
echo "[-] Error: expected a rank from client1 instead got:"
echo " $ranks"
fi
Expand All @@ -332,20 +359,20 @@ do
if [ ! -f "$logfile" ]
then
echo "[-] Error: logfile '$logfile' not found."
touch fail_logs.txt
touch fail_logs.log
continue
fi
logdiff="$(diff -u <(sort "$logfile") <(sort "stdout_$(basename "$logfile" .log).txt"))"
logdiff="$(diff -u <(sort "$logfile") <(sort "stdout_$(basename "$logfile" .log).log"))"
if [ "$logdiff" != "" ]
then
echo "[-] Error: logfile '$logfile' differs from stdout"
echo "$logdiff"
echo "[-] Error: logfile '$logfile' differs from stdout" >> fail_logs.txt
echo "$logdiff" >> fail_logs.txt
echo "[-] Error: logfile '$logfile' differs from stdout" >> fail_logs.log
echo "$logdiff" >> fail_logs.log
fi
done

for stderr in ./stderr_*.txt
for stderr in ./stderr_*.log
do
if [ ! -f "$stderr" ]
then
Expand All @@ -359,17 +386,4 @@ do
cat "$stderr"
done

if test -n "$(find . -maxdepth 1 -name 'fail_*' -print -quit)"
then
for fail in fail_*
do
cat "$fail"
done
print_results
echo "[-] Test failed. See errors above."
exit 1
else
echo "[*] all tests passed"
fi

print_results || exit 1

0 comments on commit 556a40d

Please sign in to comment.