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