1 #!/bin/sh 2 3 BACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32" 4 TESTS="test-eof 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 elif test -f "../../../sntp/libevent/test/check-dumpevents.py" 46 then 47 TEST_SRC_DIR="../../../sntp/libevent/test" 48 else 49 echo "### Can't find check-dumpevents.py" 50 fi 51 52 setup () { 53 for i in $BACKENDS; do 54 eval "EVENT_NO$i=yes; export EVENT_NO$i" 55 done 56 unset EVENT_EPOLL_USE_CHANGELIST 57 unset EVENT_PRECISE_TIMER 58 } 59 60 announce () { 61 echo "$@" 62 echo "$@" >>"$TEST_OUTPUT_FILE" 63 } 64 65 announce_n () { 66 $ECHO_N "$@" 67 echo "$@" >>"$TEST_OUTPUT_FILE" 68 } 69 70 71 run_tests () { 72 if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ; 73 then 74 true 75 else 76 announce Skipping test 77 return 78 fi 79 for i in $TESTS; do 80 announce_n " $i: " 81 if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ; 82 then 83 announce OKAY ; 84 else 85 announce FAILED ; 86 FAILED=yes 87 fi 88 done 89 announce_n " test-dumpevents: " 90 if python2 -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null; then 91 if $TEST_DIR/test-dumpevents | python2 $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ; 92 then 93 announce OKAY ; 94 else 95 announce FAILED ; 96 FAILED=yes 97 fi 98 else 99 # no python 100 if $TEST_DIR/test-dumpevents >/dev/null; then 101 announce "OKAY (output not checked)" ; 102 else 103 announce "FAILED (output not checked)" ; 104 FAILED=yes 105 fi 106 fi 107 test -x $TEST_DIR/regress || return 108 announce_n " regress: " 109 if test "$TEST_OUTPUT_FILE" = "/dev/null" ; 110 then 111 $TEST_DIR/regress --quiet $REGRESS_ARGS 112 else 113 $TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE" 114 fi 115 if test "$?" = "0" ; 116 then 117 announce OKAY ; 118 else 119 announce FAILED ; 120 FAILED=yes 121 fi 122 } 123 124 do_test() { 125 setup 126 announce "$1 $2" 127 unset EVENT_NO$1 128 if test "$2" = "(changelist)" ; then 129 EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST 130 elif test "$2" = "(timerfd)" ; then 131 EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER 132 elif test "$2" = "(timerfd+changelist)" ; then 133 EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST 134 EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER 135 fi 136 137 run_tests 138 } 139 140 announce "Running tests:" 141 142 do_test EPOLL "(timerfd)" 143 do_test EPOLL "(changelist)" 144 do_test EPOLL "(timerfd+changelist)" 145 for i in $BACKENDS; do 146 do_test $i 147 done 148 149 if test "$FAILED" = "yes"; then 150 exit 1 151 fi 152