173 lines
3.9 KiB
Bash
Executable File
173 lines
3.9 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
RED="\033[31m"
|
|
GREEN="\033[32m"
|
|
YELLOW="\033[33m"
|
|
NORMAL="\033[0m"
|
|
IMPORTS=$(pwd)/imports
|
|
export IMPORTS
|
|
SOCKETMODES="unix tcp"
|
|
TIME_SERVER=0
|
|
REUSE_SERVER=0
|
|
EXTRA_ARGS=
|
|
EXTRA_TESTCASES=
|
|
|
|
# `--arguments` must come before test dirs!
|
|
while (( "$#" )); do
|
|
if [[ "$1" == "--tcp-only" ]]; then
|
|
# only test TCP sockets
|
|
SOCKETMODES="tcp"
|
|
elif [[ "$1" == "--unix-only" ]]; then
|
|
# only test unix domain sockets
|
|
SOCKETMODES="unix"
|
|
elif [[ "$1" == "--reuse-server" ]]; then
|
|
# reuse existing dcd-server (for example when debugging it)
|
|
REUSE_SERVER=1
|
|
elif [[ "$1" == "--time-server" ]]; then
|
|
# --time-server runs dcd-server through /usr/bin/time, for statistics
|
|
# implies `--unix-only` (since we only want a single mode to time)
|
|
# socket mode can still be overriden with `--tcp-only`
|
|
TIME_SERVER=1
|
|
SOCKETMODES="unix"
|
|
elif [[ "$1" == "--extra" ]]; then
|
|
# also include tests in the "extra" directory that long to complete
|
|
EXTRA_TESTCASES="extra/*/"
|
|
elif [[ "$1" == "--verbose" ]]; then
|
|
# also include tests in the "extra" directory that long to complete
|
|
EXTRA_ARGS="--logLevel=trace"
|
|
elif [[ "$1" =~ ^-- ]]; then
|
|
echo "Unrecognized test argument: $1"
|
|
exit 1
|
|
else
|
|
break
|
|
fi
|
|
|
|
shift
|
|
done
|
|
|
|
if [ -z "${1:-}" ];
|
|
then
|
|
TESTCASES="tc*"
|
|
else
|
|
TESTCASES="$1"
|
|
fi
|
|
|
|
fail_count=0
|
|
pass_count=0
|
|
client="../bin/dcd-client"
|
|
server="../bin/dcd-server"
|
|
tcp=""
|
|
server_pid=""
|
|
|
|
function startServer()
|
|
{
|
|
if [[ "$REUSE_SERVER" == "1" ]]; then
|
|
echo "Not starting server, since user wants to reuse existing server"
|
|
elif [[ "$TIME_SERVER" == "1" ]]; then
|
|
/usr/bin/time -v "$server" "$tcp" --ignoreConfig $EXTRA_ARGS -I $IMPORTS 2>stderr.txt > stdout.txt &
|
|
server_pid=$!
|
|
else
|
|
"$server" "$tcp" --ignoreConfig $EXTRA_ARGS -I $IMPORTS 2>stderr.txt > stdout.txt &
|
|
server_pid=$!
|
|
fi
|
|
sleep 1
|
|
}
|
|
|
|
function waitShutdown()
|
|
{
|
|
if [[ -z "$server_pid" ]]; then
|
|
sleep 0.5 # not owned by us
|
|
else
|
|
( sleep 15 ; echo 'Waiting for shutdown timed out'; kill $server_pid ) &
|
|
killerPid=$!
|
|
|
|
wait $server_pid
|
|
status=$?
|
|
(kill -0 $killerPid && kill $killerPid) || true
|
|
|
|
server_pid=""
|
|
|
|
return $status
|
|
fi
|
|
}
|
|
|
|
# Make sure that the server is shut down
|
|
if [[ "$REUSE_SERVER" == "1" ]]; then
|
|
echo "Not shutting down existing server due to --reuse-server"
|
|
else
|
|
echo "Shutting down currently-running server..."
|
|
"$client" --shutdown 2>/dev/null > /dev/null
|
|
"$client" --shutdown --tcp 2>/dev/null > /dev/null
|
|
fi
|
|
|
|
for socket in $SOCKETMODES; do # supported: unix tcp
|
|
# allow some time for server to shutdown
|
|
waitShutdown
|
|
|
|
if [[ $socket == "tcp" ]]; then
|
|
tcp="--tcp"
|
|
else
|
|
tcp=""
|
|
fi
|
|
|
|
echo "Running tests for $socket sockets"
|
|
|
|
# Start up the server
|
|
echo "Starting server..."
|
|
startServer
|
|
|
|
# make sure the server is up and running
|
|
for i in {0..4} ; do
|
|
if "$client" "$tcp" --status | grep "Server is running" ; then
|
|
break;
|
|
fi
|
|
sleepTime=$((1 << $i))
|
|
echo "Server isn't up yet. Sleeping for ${sleepTime}s"
|
|
sleep "${sleepTime}"
|
|
done
|
|
|
|
# Run tests
|
|
for testCase in $TESTCASES $EXTRA_TESTCASES; do
|
|
cd $testCase
|
|
|
|
./run.sh "$tcp"
|
|
if [[ $? -eq 0 ]]; then
|
|
echo -e "${YELLOW}$socket:$testCase:${NORMAL} ... ${GREEN}Pass${NORMAL}";
|
|
let pass_count=pass_count+1
|
|
else
|
|
echo -e "${YELLOW}$socket:$testCase:${NORMAL} ... ${RED}Fail${NORMAL}";
|
|
let fail_count=fail_count+1
|
|
fi
|
|
|
|
cd - > /dev/null;
|
|
|
|
if ! kill -0 $server_pid > /dev/null 2>&1; then
|
|
echo "Server no longer running."
|
|
echo -e "${RED}STDERR:${NORMAL}"
|
|
cat stderr.txt
|
|
echo -e "${RED}STDOUT:${NORMAL}"
|
|
cat stdout.txt
|
|
|
|
echo "Restarting server..."
|
|
startServer
|
|
fi
|
|
done
|
|
|
|
# Shut down
|
|
echo "Shutting down server..."
|
|
"$client" --shutdown "$tcp" 2>/dev/null > /dev/null
|
|
|
|
waitShutdown
|
|
|
|
# Report
|
|
if [[ $fail_count -eq 0 ]]; then
|
|
echo -e "${GREEN}${pass_count} tests passed and ${fail_count} failed.${NORMAL}"
|
|
else
|
|
echo -e "${RED}${pass_count} tests passed and ${fail_count} failed.${NORMAL}"
|
|
echo -e "${RED}STDERR:${NORMAL}"
|
|
cat stderr.txt
|
|
echo -e "${RED}STDOUT:${NORMAL}"
|
|
cat stdout.txt
|
|
exit 1
|
|
fi
|
|
done
|