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