1275970Scy#!/bin/sh
2275970Scy
3275970ScyBACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32"
4275970ScyTESTS="test-eof test-closed test-weof test-time test-changelist test-fdleak"
5275970ScyFAILED=no
6275970ScyTEST_OUTPUT_FILE=${TEST_OUTPUT_FILE:-/dev/null}
7275970ScyREGRESS_ARGS=${REGRESS_ARGS:-}
8275970Scy
9275970Scy# /bin/echo is a little more likely to support -n than sh's builtin echo,
10275970Scy# printf is even more likely
11275970Scyif test "`printf %s hello 2>&1`" = "hello"
12275970Scythen
13275970Scy	ECHO_N="printf %s"
14275970Scyelse
15275970Scy	if test -x /bin/echo
16275970Scy	then
17275970Scy		ECHO_N="/bin/echo -n"
18275970Scy	else
19275970Scy		ECHO_N="echo -n"
20275970Scy	fi
21275970Scyfi
22275970Scy
23275970Scyif test "$TEST_OUTPUT_FILE" != "/dev/null"
24275970Scythen
25275970Scy	touch "$TEST_OUTPUT_FILE" || exit 1
26275970Scyfi
27275970Scy
28275970ScyTEST_DIR=.
29275970ScyTEST_SRC_DIR=.
30275970Scy
31275970ScyT=`echo "$0" | sed -e 's/test.sh$//' | sed -e 's/test-script.sh//' `
32275970Scyif test -x "$T/test-init"
33275970Scythen
34275970Scy	TEST_DIR="$T"
35275970Scyelif test -x "./test/test-init"
36275970Scythen
37275970Scy        TEST_DIR="./test"
38275970Scyfi
39275970Scyif test -f "$T/check-dumpevents.py"
40275970Scythen
41275970Scy	TEST_SRC_DIR="$T"
42275970Scyelif test -f "./test/check-dumpevents.py"
43275970Scythen
44275970Scy        TEST_SRC_DIR="./test"
45275970Scyfi
46275970Scy
47275970Scysetup () {
48275970Scy	for i in $BACKENDS; do
49275970Scy		eval "EVENT_NO$i=yes; export EVENT_NO$i"
50275970Scy	done
51275970Scy	unset EVENT_EPOLL_USE_CHANGELIST
52275970Scy	unset EVENT_PRECISE_TIMER
53275970Scy}
54275970Scy
55275970Scyannounce () {
56275970Scy	echo "$@"
57275970Scy	echo "$@" >>"$TEST_OUTPUT_FILE"
58275970Scy}
59275970Scy
60275970Scyannounce_n () {
61275970Scy	$ECHO_N "$@"
62275970Scy	echo "$@" >>"$TEST_OUTPUT_FILE"
63275970Scy}
64275970Scy
65275970Scy
66275970Scyrun_tests () {
67275970Scy	if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ;
68275970Scy	then
69275970Scy		true
70275970Scy	else
71275970Scy		announce Skipping test
72275970Scy		return
73275970Scy	fi
74275970Scy	for i in $TESTS; do
75275970Scy		announce_n " $i: "
76275970Scy		if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ;
77275970Scy		then
78275970Scy			announce OKAY ;
79275970Scy		else
80275970Scy			announce FAILED ;
81275970Scy			FAILED=yes
82275970Scy		fi
83275970Scy	done
84275970Scy	announce_n " test-dumpevents: "
85275970Scy	if python2 -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null && test -f $TEST_SRC_DIR/check-dumpevents.py; then
86275970Scy	    if $TEST_DIR/test-dumpevents | python2 $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ;
87275970Scy	    then
88275970Scy	        announce OKAY ;
89275970Scy	    else
90275970Scy	        announce FAILED ;
91275970Scy	    fi
92275970Scy	else
93275970Scy	    # no python
94275970Scy	    if $TEST_DIR/test-dumpevents >/dev/null; then
95275970Scy	        announce "OKAY (output not checked)" ;
96275970Scy	    else
97275970Scy	        announce "FAILED (output not checked)" ;
98275970Scy	    fi
99275970Scy	fi
100275970Scy	test -x $TEST_DIR/regress || return
101275970Scy	announce_n " regress: "
102275970Scy	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
103275970Scy	then
104275970Scy		$TEST_DIR/regress --quiet $REGRESS_ARGS
105275970Scy	else
106275970Scy		$TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
107275970Scy	fi
108275970Scy	if test "$?" = "0" ;
109275970Scy	then
110275970Scy		announce OKAY ;
111275970Scy	else
112275970Scy		announce FAILED ;
113275970Scy		FAILED=yes
114275970Scy	fi
115275970Scy}
116275970Scy
117275970Scydo_test() {
118275970Scy	setup
119275970Scy	announce "$1 $2"
120275970Scy	unset EVENT_NO$1
121275970Scy	if test "$2" = "(changelist)" ; then
122275970Scy	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
123275970Scy	elif test "$2" = "(timerfd)" ; then
124275970Scy	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
125275970Scy	elif test "$2" = "(timerfd+changelist)" ; then
126275970Scy	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
127275970Scy	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
128275970Scy        fi
129275970Scy
130275970Scy	run_tests
131275970Scy}
132275970Scy
133275970Scyannounce "Running tests:"
134275970Scy
135275970Scydo_test EPOLL "(timerfd)"
136275970Scydo_test EPOLL "(changelist)"
137275970Scydo_test EPOLL "(timerfd+changelist)"
138275970Scyfor i in $BACKENDS; do
139275970Scy	do_test $i
140275970Scydone
141275970Scy
142275970Scyif test "$FAILED" = "yes"; then
143275970Scy	exit 1
144275970Scyfi
145