blob: 73ad0a31c2c0f6a7d94231c87e974de271cb49f5 [file] [log] [blame]
#!/bin/bash
# This script wraps a call to lnt runtest with a local server
# instance. It is intended for testing full runtest invocations
# that need a real server instance to work. Starts a server at
# `http://localhost:9089`.
# ./server_wrapper <location of server files> <port> <command>
# Example:
# ./server_wrapper /tmp 9089 lnt runtest nt --submit "http://localhost:9089/db_default/submitRun" --cc /bin/clang --sandbox /tmp/sandbox
# First launch the server.
PROGRAM="$(basename $0)"
usage() {
echo "usage: $PROGRAM <location of server files> <runtest type> <submit-through-url> <portnr> [arguments for lnt runtest]"
echo "e.g: $PROGRAM /tmp/ nt yes --cc /bin/clang --sandbox /tmp/sandbox"
}
error() {
echo "error: $PROGRAM: $*" >&2
usage >&2
exit 1
}
main() {
[ $# -lt 2 ] &&
error "not enough arguments"
local fail_on_error=0
if [ "$1" = "--fail-on-error" ]; then
fail_on_error=1
shift
fi
local server_instance=$1
local port_number=$2
shift 2
lnt runserver ${server_instance} --hostname localhost --port ${port_number} >& ${server_instance}/server_wrapper_runserver.log &
local pid=$!
# Poll the server until it is up and running
while ! curl http://localhost:${port_number}/ping -m1 -o/dev/null -s ; do
# Maybe server is totally dead.
kill -0 ${pid} 2> /dev/null || { echo "Server exit detected"; cat ${server_instance}/server_wrapper_runserver.log; break; }
# If not sleep and keep trying.
sleep 0.1
done
# Execute command.
eval "$@"
local rc=$?
kill -15 ${pid}
local kill_rc=$?
[ ${kill_rc} -ne 0 ] &&
error "wha happen?? ${kill_rc}"
wait ${pid}
if [ "$fail_on_error" = "1" ]; then
if egrep "ERROR|FATAL|raise" "${server_instance}/server_wrapper_runserver.log"; then
echo 1>&2 "Logfile indicates problems: ${server_instance}/server_wrapper_runserver.log"
exit 1
fi
fi
exit ${rc}
}
main "$@"