10Sstevel@tonic-gate#!/bin/sh
20Sstevel@tonic-gate
30Sstevel@tonic-gateBACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32"
40Sstevel@tonic-gateTESTS="test-eof test-closed test-weof test-time test-changelist test-fdleak"
50Sstevel@tonic-gateFAILED=no
60Sstevel@tonic-gateTEST_OUTPUT_FILE=${TEST_OUTPUT_FILE:-/dev/null}
70Sstevel@tonic-gateREGRESS_ARGS=${REGRESS_ARGS:-}
80Sstevel@tonic-gate
90Sstevel@tonic-gate# /bin/echo is a little more likely to support -n than sh's builtin echo,
100Sstevel@tonic-gate# printf is even more likely
110Sstevel@tonic-gateif test "`printf %s hello 2>&1`" = "hello"
120Sstevel@tonic-gatethen
130Sstevel@tonic-gate	ECHO_N="printf %s"
140Sstevel@tonic-gateelse
150Sstevel@tonic-gate	if test -x /bin/echo
160Sstevel@tonic-gate	then
170Sstevel@tonic-gate		ECHO_N="/bin/echo -n"
180Sstevel@tonic-gate	else
190Sstevel@tonic-gate		ECHO_N="echo -n"
200Sstevel@tonic-gate	fi
210Sstevel@tonic-gatefi
220Sstevel@tonic-gate
230Sstevel@tonic-gateif test "$TEST_OUTPUT_FILE" != "/dev/null"
240Sstevel@tonic-gatethen
250Sstevel@tonic-gate	touch "$TEST_OUTPUT_FILE" || exit 1
260Sstevel@tonic-gatefi
270Sstevel@tonic-gate
280Sstevel@tonic-gateTEST_DIR=.
290Sstevel@tonic-gateTEST_SRC_DIR=.
300Sstevel@tonic-gate
310Sstevel@tonic-gateT=`echo "$0" | sed -e 's/test.sh$//' | sed -e 's/test-script.sh//' `
320Sstevel@tonic-gateif test -x "$T/test-init"
330Sstevel@tonic-gatethen
340Sstevel@tonic-gate	TEST_DIR="$T"
350Sstevel@tonic-gateelif test -x "./test/test-init"
360Sstevel@tonic-gatethen
370Sstevel@tonic-gate        TEST_DIR="./test"
380Sstevel@tonic-gatefi
390Sstevel@tonic-gateif test -f "$T/check-dumpevents.py"
400Sstevel@tonic-gatethen
410Sstevel@tonic-gate	TEST_SRC_DIR="$T"
420Sstevel@tonic-gateelif test -f "./test/check-dumpevents.py"
430Sstevel@tonic-gatethen
440Sstevel@tonic-gate        TEST_SRC_DIR="./test"
450Sstevel@tonic-gatefi
460Sstevel@tonic-gate
470Sstevel@tonic-gatesetup () {
480Sstevel@tonic-gate	for i in $BACKENDS; do
490Sstevel@tonic-gate		eval "EVENT_NO$i=yes; export EVENT_NO$i"
500Sstevel@tonic-gate	done
510Sstevel@tonic-gate	unset EVENT_EPOLL_USE_CHANGELIST
520Sstevel@tonic-gate	unset EVENT_PRECISE_TIMER
530Sstevel@tonic-gate}
540Sstevel@tonic-gate
550Sstevel@tonic-gateannounce () {
560Sstevel@tonic-gate	echo "$@"
570Sstevel@tonic-gate	echo "$@" >>"$TEST_OUTPUT_FILE"
580Sstevel@tonic-gate}
590Sstevel@tonic-gate
600Sstevel@tonic-gateannounce_n () {
610Sstevel@tonic-gate	$ECHO_N "$@"
620Sstevel@tonic-gate	echo "$@" >>"$TEST_OUTPUT_FILE"
630Sstevel@tonic-gate}
640Sstevel@tonic-gate
650Sstevel@tonic-gate
660Sstevel@tonic-gaterun_tests () {
670Sstevel@tonic-gate	if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ;
680Sstevel@tonic-gate	then
690Sstevel@tonic-gate		true
700Sstevel@tonic-gate	else
710Sstevel@tonic-gate		announce Skipping test
720Sstevel@tonic-gate		return
730Sstevel@tonic-gate	fi
740Sstevel@tonic-gate	for i in $TESTS; do
750Sstevel@tonic-gate		announce_n " $i: "
760Sstevel@tonic-gate		if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ;
770Sstevel@tonic-gate		then
780Sstevel@tonic-gate			announce OKAY ;
790Sstevel@tonic-gate		else
800Sstevel@tonic-gate			announce FAILED ;
810Sstevel@tonic-gate			FAILED=yes
820Sstevel@tonic-gate		fi
830Sstevel@tonic-gate	done
840Sstevel@tonic-gate	announce_n " test-dumpevents: "
850Sstevel@tonic-gate	if python2 -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null && test -f $TEST_SRC_DIR/check-dumpevents.py; then
860Sstevel@tonic-gate	    if $TEST_DIR/test-dumpevents | python2 $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ;
870Sstevel@tonic-gate	    then
880Sstevel@tonic-gate	        announce OKAY ;
890Sstevel@tonic-gate	    else
900Sstevel@tonic-gate	        announce FAILED ;
910Sstevel@tonic-gate	    fi
920Sstevel@tonic-gate	else
930Sstevel@tonic-gate	    # no python
940Sstevel@tonic-gate	    if $TEST_DIR/test-dumpevents >/dev/null; then
950Sstevel@tonic-gate	        announce "OKAY (output not checked)" ;
960Sstevel@tonic-gate	    else
970Sstevel@tonic-gate	        announce "FAILED (output not checked)" ;
980Sstevel@tonic-gate	    fi
990Sstevel@tonic-gate	fi
1000Sstevel@tonic-gate	test -x $TEST_DIR/regress || return
1010Sstevel@tonic-gate	announce_n " regress: "
1020Sstevel@tonic-gate	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
1030Sstevel@tonic-gate	then
1040Sstevel@tonic-gate		$TEST_DIR/regress --quiet $REGRESS_ARGS
1050Sstevel@tonic-gate	else
1060Sstevel@tonic-gate		$TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
1070Sstevel@tonic-gate	fi
1080Sstevel@tonic-gate	if test "$?" = "0" ;
1090Sstevel@tonic-gate	then
110		announce OKAY ;
111	else
112		announce FAILED ;
113		FAILED=yes
114	fi
115}
116
117do_test() {
118	setup
119	announce "$1 $2"
120	unset EVENT_NO$1
121	if test "$2" = "(changelist)" ; then
122	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
123	elif test "$2" = "(timerfd)" ; then
124	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
125	elif test "$2" = "(timerfd+changelist)" ; then
126	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
127	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
128        fi
129
130	run_tests
131}
132
133announce "Running tests:"
134
135do_test EPOLL "(timerfd)"
136do_test EPOLL "(changelist)"
137do_test EPOLL "(timerfd+changelist)"
138for i in $BACKENDS; do
139	do_test $i
140done
141
142if test "$FAILED" = "yes"; then
143	exit 1
144fi
145