xref: /freebsd/contrib/ntp/sntp/libevent/test/test.sh (revision a466cc55)
12b15cb3dSCy Schubert#!/bin/sh
22b15cb3dSCy Schubert
32b15cb3dSCy SchubertBACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32"
42b15cb3dSCy SchubertTESTS="test-eof test-closed test-weof test-time test-changelist test-fdleak"
52b15cb3dSCy SchubertFAILED=no
62b15cb3dSCy SchubertTEST_OUTPUT_FILE=${TEST_OUTPUT_FILE:-/dev/null}
72b15cb3dSCy SchubertREGRESS_ARGS=${REGRESS_ARGS:-}
82b15cb3dSCy Schubert
92b15cb3dSCy Schubert# /bin/echo is a little more likely to support -n than sh's builtin echo,
102b15cb3dSCy Schubert# printf is even more likely
112b15cb3dSCy Schubertif test "`printf %s hello 2>&1`" = "hello"
122b15cb3dSCy Schubertthen
132b15cb3dSCy Schubert	ECHO_N="printf %s"
142b15cb3dSCy Schubertelse
152b15cb3dSCy Schubert	if test -x /bin/echo
162b15cb3dSCy Schubert	then
172b15cb3dSCy Schubert		ECHO_N="/bin/echo -n"
182b15cb3dSCy Schubert	else
192b15cb3dSCy Schubert		ECHO_N="echo -n"
202b15cb3dSCy Schubert	fi
212b15cb3dSCy Schubertfi
222b15cb3dSCy Schubert
232b15cb3dSCy Schubertif test "$TEST_OUTPUT_FILE" != "/dev/null"
242b15cb3dSCy Schubertthen
252b15cb3dSCy Schubert	touch "$TEST_OUTPUT_FILE" || exit 1
262b15cb3dSCy Schubertfi
272b15cb3dSCy Schubert
282b15cb3dSCy SchubertTEST_DIR=.
292b15cb3dSCy SchubertTEST_SRC_DIR=.
302b15cb3dSCy Schubert
31*a466cc55SCy SchubertT=`echo "$0" | sed -e 's/test.sh$//'`
322b15cb3dSCy Schubertif test -x "$T/test-init"
332b15cb3dSCy Schubertthen
342b15cb3dSCy Schubert	TEST_DIR="$T"
352b15cb3dSCy Schubertelif test -x "./test/test-init"
362b15cb3dSCy Schubertthen
372b15cb3dSCy Schubert        TEST_DIR="./test"
382b15cb3dSCy Schubertfi
392b15cb3dSCy Schubertif test -f "$T/check-dumpevents.py"
402b15cb3dSCy Schubertthen
412b15cb3dSCy Schubert	TEST_SRC_DIR="$T"
422b15cb3dSCy Schubertelif test -f "./test/check-dumpevents.py"
432b15cb3dSCy Schubertthen
442b15cb3dSCy Schubert        TEST_SRC_DIR="./test"
452b15cb3dSCy Schubertfi
462b15cb3dSCy Schubert
472b15cb3dSCy Schubertsetup () {
482b15cb3dSCy Schubert	for i in $BACKENDS; do
492b15cb3dSCy Schubert		eval "EVENT_NO$i=yes; export EVENT_NO$i"
502b15cb3dSCy Schubert	done
512b15cb3dSCy Schubert	unset EVENT_EPOLL_USE_CHANGELIST
522b15cb3dSCy Schubert	unset EVENT_PRECISE_TIMER
532b15cb3dSCy Schubert}
542b15cb3dSCy Schubert
552b15cb3dSCy Schubertannounce () {
562b15cb3dSCy Schubert	echo "$@"
572b15cb3dSCy Schubert	echo "$@" >>"$TEST_OUTPUT_FILE"
582b15cb3dSCy Schubert}
592b15cb3dSCy Schubert
602b15cb3dSCy Schubertannounce_n () {
612b15cb3dSCy Schubert	$ECHO_N "$@"
622b15cb3dSCy Schubert	echo "$@" >>"$TEST_OUTPUT_FILE"
632b15cb3dSCy Schubert}
642b15cb3dSCy Schubert
652b15cb3dSCy Schubert
662b15cb3dSCy Schubertrun_tests () {
672b15cb3dSCy Schubert	if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ;
682b15cb3dSCy Schubert	then
692b15cb3dSCy Schubert		true
702b15cb3dSCy Schubert	else
712b15cb3dSCy Schubert		announce Skipping test
722b15cb3dSCy Schubert		return
732b15cb3dSCy Schubert	fi
742b15cb3dSCy Schubert	for i in $TESTS; do
752b15cb3dSCy Schubert		announce_n " $i: "
762b15cb3dSCy Schubert		if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ;
772b15cb3dSCy Schubert		then
782b15cb3dSCy Schubert			announce OKAY ;
792b15cb3dSCy Schubert		else
802b15cb3dSCy Schubert			announce FAILED ;
812b15cb3dSCy Schubert			FAILED=yes
822b15cb3dSCy Schubert		fi
832b15cb3dSCy Schubert	done
842b15cb3dSCy Schubert	announce_n " test-dumpevents: "
85*a466cc55SCy Schubert	if python -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null && test -f $TEST_SRC_DIR/check-dumpevents.py; then
86*a466cc55SCy Schubert	    if $TEST_DIR/test-dumpevents | $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ;
872b15cb3dSCy Schubert	    then
882b15cb3dSCy Schubert	        announce OKAY ;
892b15cb3dSCy Schubert	    else
902b15cb3dSCy Schubert	        announce FAILED ;
912b15cb3dSCy Schubert	    fi
922b15cb3dSCy Schubert	else
932b15cb3dSCy Schubert	    # no python
942b15cb3dSCy Schubert	    if $TEST_DIR/test-dumpevents >/dev/null; then
952b15cb3dSCy Schubert	        announce "OKAY (output not checked)" ;
962b15cb3dSCy Schubert	    else
972b15cb3dSCy Schubert	        announce "FAILED (output not checked)" ;
982b15cb3dSCy Schubert	    fi
992b15cb3dSCy Schubert	fi
100*a466cc55SCy Schubert
1012b15cb3dSCy Schubert	test -x $TEST_DIR/regress || return
1022b15cb3dSCy Schubert	announce_n " regress: "
1032b15cb3dSCy Schubert	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
1042b15cb3dSCy Schubert	then
1052b15cb3dSCy Schubert		$TEST_DIR/regress --quiet $REGRESS_ARGS
1062b15cb3dSCy Schubert	else
1072b15cb3dSCy Schubert		$TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
1082b15cb3dSCy Schubert	fi
1092b15cb3dSCy Schubert	if test "$?" = "0" ;
1102b15cb3dSCy Schubert	then
1112b15cb3dSCy Schubert		announce OKAY ;
1122b15cb3dSCy Schubert	else
1132b15cb3dSCy Schubert		announce FAILED ;
1142b15cb3dSCy Schubert		FAILED=yes
1152b15cb3dSCy Schubert	fi
116*a466cc55SCy Schubert
117*a466cc55SCy Schubert	announce_n " regress_debug: "
118*a466cc55SCy Schubert	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
119*a466cc55SCy Schubert	then
120*a466cc55SCy Schubert		EVENT_DEBUG_MODE=1 $TEST_DIR/regress --quiet $REGRESS_ARGS
121*a466cc55SCy Schubert	else
122*a466cc55SCy Schubert		EVENT_DEBUG_MODE=1 $TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
123*a466cc55SCy Schubert	fi
124*a466cc55SCy Schubert	if test "$?" = "0" ;
125*a466cc55SCy Schubert	then
126*a466cc55SCy Schubert		announce OKAY ;
127*a466cc55SCy Schubert	else
128*a466cc55SCy Schubert		announce FAILED ;
129*a466cc55SCy Schubert		FAILED=yes
130*a466cc55SCy Schubert	fi
1312b15cb3dSCy Schubert}
1322b15cb3dSCy Schubert
1332b15cb3dSCy Schubertdo_test() {
1342b15cb3dSCy Schubert	setup
1352b15cb3dSCy Schubert	announce "$1 $2"
1362b15cb3dSCy Schubert	unset EVENT_NO$1
1372b15cb3dSCy Schubert	if test "$2" = "(changelist)" ; then
1382b15cb3dSCy Schubert	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
1392b15cb3dSCy Schubert	elif test "$2" = "(timerfd)" ; then
1402b15cb3dSCy Schubert	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
1412b15cb3dSCy Schubert	elif test "$2" = "(timerfd+changelist)" ; then
1422b15cb3dSCy Schubert	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
1432b15cb3dSCy Schubert	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
1442b15cb3dSCy Schubert        fi
1452b15cb3dSCy Schubert
1462b15cb3dSCy Schubert	run_tests
1472b15cb3dSCy Schubert}
1482b15cb3dSCy Schubert
149*a466cc55SCy Schubertusage()
150*a466cc55SCy Schubert{
151*a466cc55SCy Schubert	cat <<EOL
152*a466cc55SCy Schubert  -b   - specify backends
153*a466cc55SCy Schubert  -t   - run timerfd test
154*a466cc55SCy Schubert  -c   - run changelist test
155*a466cc55SCy Schubert  -T   - run timerfd+changelist test
156*a466cc55SCy SchubertEOL
157*a466cc55SCy Schubert}
158*a466cc55SCy Schubertmain()
159*a466cc55SCy Schubert{
160*a466cc55SCy Schubert	backends=$BACKENDS
161*a466cc55SCy Schubert	timerfd=0
162*a466cc55SCy Schubert	changelist=0
163*a466cc55SCy Schubert	timerfd_changelist=0
164*a466cc55SCy Schubert
165*a466cc55SCy Schubert	while getopts "b:tcT" c; do
166*a466cc55SCy Schubert		case "$c" in
167*a466cc55SCy Schubert			b) backends="$OPTARG";;
168*a466cc55SCy Schubert			t) timerfd=1;;
169*a466cc55SCy Schubert			c) changelist=1;;
170*a466cc55SCy Schubert			T) timerfd_changelist=1;;
171*a466cc55SCy Schubert			?*) usage && exit 1;;
172*a466cc55SCy Schubert		esac
173*a466cc55SCy Schubert	done
174*a466cc55SCy Schubert
1752b15cb3dSCy Schubert	announce "Running tests:"
1762b15cb3dSCy Schubert
177*a466cc55SCy Schubert	[ $timerfd -eq 0 ] || do_test EPOLL "(timerfd)"
178*a466cc55SCy Schubert	[ $changelist -eq 0 ] || do_test EPOLL "(changelist)"
179*a466cc55SCy Schubert	[ $timerfd_changelist -eq 0 ] || do_test EPOLL "(timerfd+changelist)"
180*a466cc55SCy Schubert	for i in $backends; do
1812b15cb3dSCy Schubert		do_test $i
1822b15cb3dSCy Schubert	done
1832b15cb3dSCy Schubert
1842b15cb3dSCy Schubert	if test "$FAILED" = "yes"; then
1852b15cb3dSCy Schubert		exit 1
1862b15cb3dSCy Schubert	fi
187*a466cc55SCy Schubert}
188*a466cc55SCy Schubertmain "$@"
189