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