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