#! /bin/sh

usage () {
    cat <<'EOF' 1>&2
usage: test_bench [options] 
   or: test_bench [options] testname ...

Performs all or the enumerated tests and compares the result of the tests
with the expected results.

-init:            Initializes the file containing the expected result with the
	          actual result.
-help:            Print this message
EOF
}


run_test () {
    if [ -f specs/$1.sh ]; then
	echo -n "Running test $1..."
	rm -f client.out
	rm -f server.out
	touch client.out
	touch server.out
	h=`sh specs/$1.sh`
	if [ -f specs/$1.out ]; then
	    g=`cat specs/$1.out`
	    if [ "x$h" = "x$g" ]; then
		echo " successful"
	    else
		echo " failure"
		exitcode=1
	    fi
	else
	    if [ -n "$INIT" ]; then
		echo "$h" >specs/$1.out
		echo " initialized"
	    else
		echo " no result to check against"
		echo "Result: $h"
	    fi
	fi
	mkdir -p log
	cp server.out log/$1.server
	cp client.out log/$1.client
	echo "$h" >log/$1.out 
    else
	echo "Test $1 does not exist"
    fi
}

x=1
while [ -n "$x" ]; do
    case "$1" in
	-init)     INIT=1
	           shift
	           ;;
	-h|-help)  usage
		   exit 0
		   ;;
	-*)
		   usage
		   exit 2
		   ;;
	*)
		   x=""
		   ;;
    esac
done

exitcode=0

if [ "$#" = "0" ]; then
    # Run all tests...
    INIT=""
    run_test simple
    run_test simple-nocr
    run_test simple-ci
    run_test simple-extra-sp
    run_test simple-extra-tab
    run_test simple-cont-sp
    run_test simple-cont-tab
    run_test simple-cont-2sp
    run_test simple-cont-2tab
    run_test simple-cont-sptab
    run_test simple-cont-early
    run_test simple-multi
    run_test simple-phantasy
    run_test framed
    run_test framed-big
    run_test framed-8bitclean
    run_test chunked
    run_test chunked-ci
    run_test chunked-ext
    run_test chunked-big
    run_test chunked-footer
    run_test error-404
    run_test unframed-is-unframed
    run_test framed-basicauth
    run_test framed-basicauth-fails
    run_test framed-digestauth
    run_test framed-proxyauth
    run_test framed-proxy+basicauth
    run_test three-messages
    run_test three-messages-incl-simple
    run_test continue
    run_test continue-extra
    run_test continue-handshake
    run_test continue-handshake-timeout
    run_test three-continued-messages
    run_test three-very-continued-messages
    run_test three-big-messages
    run_test early-error
    run_test pipeline-phantasy
    run_test nopersistency-1.0
    run_test nopersistency-close
    run_test reconnect-1
    run_test framed-brokenpipe
    run_test pe-get11
    run_test pe-put11
    run_test pe-multiput11
    run_test pe-trashput11
    run_test pe-put10
    run_test illegal-status
    run_test too-many-errors
    run_test limited-drift
    run_test unix-error
    run_test framed-no-persistency
    run_test timeout
    run_test bad-request
    run_test head
    run_test head-extra
    run_test proxypersistency-1.0
else
    while [ "$#" -gt 0 ]; do
	run_test "$1"
	shift
    done
fi

# Exit with 1 only if a specified test fails.
exit $exitcode


