xref: /aosp_15_r20/external/libevent/test/test.sh (revision 663afb9b963571284e0f0a60f257164ab54f64bf)
1*663afb9bSAndroid Build Coastguard Worker#!/bin/sh
2*663afb9bSAndroid Build Coastguard Worker
3*663afb9bSAndroid Build Coastguard WorkerBACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32"
4*663afb9bSAndroid Build Coastguard WorkerTESTS="test-eof test-closed test-weof test-time test-changelist test-fdleak"
5*663afb9bSAndroid Build Coastguard WorkerFAILED=no
6*663afb9bSAndroid Build Coastguard WorkerTEST_OUTPUT_FILE=${TEST_OUTPUT_FILE:-/dev/null}
7*663afb9bSAndroid Build Coastguard WorkerREGRESS_ARGS=${REGRESS_ARGS:-}
8*663afb9bSAndroid Build Coastguard Worker
9*663afb9bSAndroid Build Coastguard Worker# /bin/echo is a little more likely to support -n than sh's builtin echo,
10*663afb9bSAndroid Build Coastguard Worker# printf is even more likely
11*663afb9bSAndroid Build Coastguard Workerif test "`printf %s hello 2>&1`" = "hello"
12*663afb9bSAndroid Build Coastguard Workerthen
13*663afb9bSAndroid Build Coastguard Worker	ECHO_N="printf %s"
14*663afb9bSAndroid Build Coastguard Workerelse
15*663afb9bSAndroid Build Coastguard Worker	if test -x /bin/echo
16*663afb9bSAndroid Build Coastguard Worker	then
17*663afb9bSAndroid Build Coastguard Worker		ECHO_N="/bin/echo -n"
18*663afb9bSAndroid Build Coastguard Worker	else
19*663afb9bSAndroid Build Coastguard Worker		ECHO_N="echo -n"
20*663afb9bSAndroid Build Coastguard Worker	fi
21*663afb9bSAndroid Build Coastguard Workerfi
22*663afb9bSAndroid Build Coastguard Worker
23*663afb9bSAndroid Build Coastguard Workerif test "$TEST_OUTPUT_FILE" != "/dev/null"
24*663afb9bSAndroid Build Coastguard Workerthen
25*663afb9bSAndroid Build Coastguard Worker	touch "$TEST_OUTPUT_FILE" || exit 1
26*663afb9bSAndroid Build Coastguard Workerfi
27*663afb9bSAndroid Build Coastguard Worker
28*663afb9bSAndroid Build Coastguard WorkerTEST_DIR=.
29*663afb9bSAndroid Build Coastguard WorkerTEST_SRC_DIR=.
30*663afb9bSAndroid Build Coastguard Worker
31*663afb9bSAndroid Build Coastguard WorkerT=`echo "$0" | sed -e 's/test.sh$//'`
32*663afb9bSAndroid Build Coastguard Workerif test -x "$T/test-init"
33*663afb9bSAndroid Build Coastguard Workerthen
34*663afb9bSAndroid Build Coastguard Worker	TEST_DIR="$T"
35*663afb9bSAndroid Build Coastguard Workerelif test -x "./test/test-init"
36*663afb9bSAndroid Build Coastguard Workerthen
37*663afb9bSAndroid Build Coastguard Worker        TEST_DIR="./test"
38*663afb9bSAndroid Build Coastguard Workerfi
39*663afb9bSAndroid Build Coastguard Workerif test -f "$T/check-dumpevents.py"
40*663afb9bSAndroid Build Coastguard Workerthen
41*663afb9bSAndroid Build Coastguard Worker	TEST_SRC_DIR="$T"
42*663afb9bSAndroid Build Coastguard Workerelif test -f "./test/check-dumpevents.py"
43*663afb9bSAndroid Build Coastguard Workerthen
44*663afb9bSAndroid Build Coastguard Worker        TEST_SRC_DIR="./test"
45*663afb9bSAndroid Build Coastguard Workerfi
46*663afb9bSAndroid Build Coastguard Worker
47*663afb9bSAndroid Build Coastguard Workersetup () {
48*663afb9bSAndroid Build Coastguard Worker	for i in $BACKENDS; do
49*663afb9bSAndroid Build Coastguard Worker		eval "EVENT_NO$i=yes; export EVENT_NO$i"
50*663afb9bSAndroid Build Coastguard Worker	done
51*663afb9bSAndroid Build Coastguard Worker	unset EVENT_EPOLL_USE_CHANGELIST
52*663afb9bSAndroid Build Coastguard Worker	unset EVENT_PRECISE_TIMER
53*663afb9bSAndroid Build Coastguard Worker}
54*663afb9bSAndroid Build Coastguard Worker
55*663afb9bSAndroid Build Coastguard Workerannounce () {
56*663afb9bSAndroid Build Coastguard Worker	echo "$@"
57*663afb9bSAndroid Build Coastguard Worker	echo "$@" >>"$TEST_OUTPUT_FILE"
58*663afb9bSAndroid Build Coastguard Worker}
59*663afb9bSAndroid Build Coastguard Worker
60*663afb9bSAndroid Build Coastguard Workerannounce_n () {
61*663afb9bSAndroid Build Coastguard Worker	$ECHO_N "$@"
62*663afb9bSAndroid Build Coastguard Worker	echo "$@" >>"$TEST_OUTPUT_FILE"
63*663afb9bSAndroid Build Coastguard Worker}
64*663afb9bSAndroid Build Coastguard Worker
65*663afb9bSAndroid Build Coastguard Worker
66*663afb9bSAndroid Build Coastguard Workerrun_tests () {
67*663afb9bSAndroid Build Coastguard Worker	if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ;
68*663afb9bSAndroid Build Coastguard Worker	then
69*663afb9bSAndroid Build Coastguard Worker		true
70*663afb9bSAndroid Build Coastguard Worker	else
71*663afb9bSAndroid Build Coastguard Worker		announce Skipping test
72*663afb9bSAndroid Build Coastguard Worker		return
73*663afb9bSAndroid Build Coastguard Worker	fi
74*663afb9bSAndroid Build Coastguard Worker	for i in $TESTS; do
75*663afb9bSAndroid Build Coastguard Worker		announce_n " $i: "
76*663afb9bSAndroid Build Coastguard Worker		if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ;
77*663afb9bSAndroid Build Coastguard Worker		then
78*663afb9bSAndroid Build Coastguard Worker			announce OKAY ;
79*663afb9bSAndroid Build Coastguard Worker		else
80*663afb9bSAndroid Build Coastguard Worker			announce FAILED ;
81*663afb9bSAndroid Build Coastguard Worker			FAILED=yes
82*663afb9bSAndroid Build Coastguard Worker		fi
83*663afb9bSAndroid Build Coastguard Worker	done
84*663afb9bSAndroid Build Coastguard Worker	announce_n " test-dumpevents: "
85*663afb9bSAndroid Build Coastguard Worker	if python -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null && test -f $TEST_SRC_DIR/check-dumpevents.py; then
86*663afb9bSAndroid Build Coastguard Worker	    if $TEST_DIR/test-dumpevents | $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ;
87*663afb9bSAndroid Build Coastguard Worker	    then
88*663afb9bSAndroid Build Coastguard Worker	        announce OKAY ;
89*663afb9bSAndroid Build Coastguard Worker	    else
90*663afb9bSAndroid Build Coastguard Worker	        announce FAILED ;
91*663afb9bSAndroid Build Coastguard Worker	    fi
92*663afb9bSAndroid Build Coastguard Worker	else
93*663afb9bSAndroid Build Coastguard Worker	    # no python
94*663afb9bSAndroid Build Coastguard Worker	    if $TEST_DIR/test-dumpevents >/dev/null; then
95*663afb9bSAndroid Build Coastguard Worker	        announce "OKAY (output not checked)" ;
96*663afb9bSAndroid Build Coastguard Worker	    else
97*663afb9bSAndroid Build Coastguard Worker	        announce "FAILED (output not checked)" ;
98*663afb9bSAndroid Build Coastguard Worker	    fi
99*663afb9bSAndroid Build Coastguard Worker	fi
100*663afb9bSAndroid Build Coastguard Worker
101*663afb9bSAndroid Build Coastguard Worker	test -x $TEST_DIR/regress || return
102*663afb9bSAndroid Build Coastguard Worker	announce_n " regress: "
103*663afb9bSAndroid Build Coastguard Worker	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
104*663afb9bSAndroid Build Coastguard Worker	then
105*663afb9bSAndroid Build Coastguard Worker		$TEST_DIR/regress --quiet $REGRESS_ARGS
106*663afb9bSAndroid Build Coastguard Worker	else
107*663afb9bSAndroid Build Coastguard Worker		$TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
108*663afb9bSAndroid Build Coastguard Worker	fi
109*663afb9bSAndroid Build Coastguard Worker	if test "$?" = "0" ;
110*663afb9bSAndroid Build Coastguard Worker	then
111*663afb9bSAndroid Build Coastguard Worker		announce OKAY ;
112*663afb9bSAndroid Build Coastguard Worker	else
113*663afb9bSAndroid Build Coastguard Worker		announce FAILED ;
114*663afb9bSAndroid Build Coastguard Worker		FAILED=yes
115*663afb9bSAndroid Build Coastguard Worker	fi
116*663afb9bSAndroid Build Coastguard Worker
117*663afb9bSAndroid Build Coastguard Worker	announce_n " regress_debug: "
118*663afb9bSAndroid Build Coastguard Worker	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
119*663afb9bSAndroid Build Coastguard Worker	then
120*663afb9bSAndroid Build Coastguard Worker		EVENT_DEBUG_MODE=1 $TEST_DIR/regress --quiet $REGRESS_ARGS
121*663afb9bSAndroid Build Coastguard Worker	else
122*663afb9bSAndroid Build Coastguard Worker		EVENT_DEBUG_MODE=1 $TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE"
123*663afb9bSAndroid Build Coastguard Worker	fi
124*663afb9bSAndroid Build Coastguard Worker	if test "$?" = "0" ;
125*663afb9bSAndroid Build Coastguard Worker	then
126*663afb9bSAndroid Build Coastguard Worker		announce OKAY ;
127*663afb9bSAndroid Build Coastguard Worker	else
128*663afb9bSAndroid Build Coastguard Worker		announce FAILED ;
129*663afb9bSAndroid Build Coastguard Worker		FAILED=yes
130*663afb9bSAndroid Build Coastguard Worker	fi
131*663afb9bSAndroid Build Coastguard Worker}
132*663afb9bSAndroid Build Coastguard Worker
133*663afb9bSAndroid Build Coastguard Workerdo_test() {
134*663afb9bSAndroid Build Coastguard Worker	setup
135*663afb9bSAndroid Build Coastguard Worker	announce "$1 $2"
136*663afb9bSAndroid Build Coastguard Worker	unset EVENT_NO$1
137*663afb9bSAndroid Build Coastguard Worker	if test "$2" = "(changelist)" ; then
138*663afb9bSAndroid Build Coastguard Worker	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
139*663afb9bSAndroid Build Coastguard Worker	elif test "$2" = "(timerfd)" ; then
140*663afb9bSAndroid Build Coastguard Worker	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
141*663afb9bSAndroid Build Coastguard Worker	elif test "$2" = "(timerfd+changelist)" ; then
142*663afb9bSAndroid Build Coastguard Worker	    EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST
143*663afb9bSAndroid Build Coastguard Worker	    EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER
144*663afb9bSAndroid Build Coastguard Worker        fi
145*663afb9bSAndroid Build Coastguard Worker
146*663afb9bSAndroid Build Coastguard Worker	run_tests
147*663afb9bSAndroid Build Coastguard Worker}
148*663afb9bSAndroid Build Coastguard Worker
149*663afb9bSAndroid Build Coastguard Workerusage()
150*663afb9bSAndroid Build Coastguard Worker{
151*663afb9bSAndroid Build Coastguard Worker	cat <<EOL
152*663afb9bSAndroid Build Coastguard Worker  -b   - specify backends
153*663afb9bSAndroid Build Coastguard Worker  -t   - run timerfd test
154*663afb9bSAndroid Build Coastguard Worker  -c   - run changelist test
155*663afb9bSAndroid Build Coastguard Worker  -T   - run timerfd+changelist test
156*663afb9bSAndroid Build Coastguard WorkerEOL
157*663afb9bSAndroid Build Coastguard Worker}
158*663afb9bSAndroid Build Coastguard Workermain()
159*663afb9bSAndroid Build Coastguard Worker{
160*663afb9bSAndroid Build Coastguard Worker	backends=$BACKENDS
161*663afb9bSAndroid Build Coastguard Worker	timerfd=0
162*663afb9bSAndroid Build Coastguard Worker	changelist=0
163*663afb9bSAndroid Build Coastguard Worker	timerfd_changelist=0
164*663afb9bSAndroid Build Coastguard Worker
165*663afb9bSAndroid Build Coastguard Worker	while getopts "b:tcT" c; do
166*663afb9bSAndroid Build Coastguard Worker		case "$c" in
167*663afb9bSAndroid Build Coastguard Worker			b) backends="$OPTARG";;
168*663afb9bSAndroid Build Coastguard Worker			t) timerfd=1;;
169*663afb9bSAndroid Build Coastguard Worker			c) changelist=1;;
170*663afb9bSAndroid Build Coastguard Worker			T) timerfd_changelist=1;;
171*663afb9bSAndroid Build Coastguard Worker			?*) usage && exit 1;;
172*663afb9bSAndroid Build Coastguard Worker		esac
173*663afb9bSAndroid Build Coastguard Worker	done
174*663afb9bSAndroid Build Coastguard Worker
175*663afb9bSAndroid Build Coastguard Worker	announce "Running tests:"
176*663afb9bSAndroid Build Coastguard Worker
177*663afb9bSAndroid Build Coastguard Worker	[ $timerfd -eq 0 ] || do_test EPOLL "(timerfd)"
178*663afb9bSAndroid Build Coastguard Worker	[ $changelist -eq 0 ] || do_test EPOLL "(changelist)"
179*663afb9bSAndroid Build Coastguard Worker	[ $timerfd_changelist -eq 0 ] || do_test EPOLL "(timerfd+changelist)"
180*663afb9bSAndroid Build Coastguard Worker	for i in $backends; do
181*663afb9bSAndroid Build Coastguard Worker		do_test $i
182*663afb9bSAndroid Build Coastguard Worker	done
183*663afb9bSAndroid Build Coastguard Worker
184*663afb9bSAndroid Build Coastguard Worker	if test "$FAILED" = "yes"; then
185*663afb9bSAndroid Build Coastguard Worker		exit 1
186*663afb9bSAndroid Build Coastguard Worker	fi
187*663afb9bSAndroid Build Coastguard Worker}
188*663afb9bSAndroid Build Coastguard Workermain "$@"
189