10Sstevel@tonic-gate#!/bin/sh 20Sstevel@tonic-gate 30Sstevel@tonic-gateBACKENDS="EVPORT KQUEUE EPOLL DEVPOLL POLL SELECT WIN32" 40Sstevel@tonic-gateTESTS="test-eof test-closed test-weof test-time test-changelist test-fdleak" 50Sstevel@tonic-gateFAILED=no 60Sstevel@tonic-gateTEST_OUTPUT_FILE=${TEST_OUTPUT_FILE:-/dev/null} 70Sstevel@tonic-gateREGRESS_ARGS=${REGRESS_ARGS:-} 80Sstevel@tonic-gate 90Sstevel@tonic-gate# /bin/echo is a little more likely to support -n than sh's builtin echo, 100Sstevel@tonic-gate# printf is even more likely 110Sstevel@tonic-gateif test "`printf %s hello 2>&1`" = "hello" 120Sstevel@tonic-gatethen 130Sstevel@tonic-gate ECHO_N="printf %s" 140Sstevel@tonic-gateelse 150Sstevel@tonic-gate if test -x /bin/echo 160Sstevel@tonic-gate then 170Sstevel@tonic-gate ECHO_N="/bin/echo -n" 180Sstevel@tonic-gate else 190Sstevel@tonic-gate ECHO_N="echo -n" 200Sstevel@tonic-gate fi 210Sstevel@tonic-gatefi 220Sstevel@tonic-gate 230Sstevel@tonic-gateif test "$TEST_OUTPUT_FILE" != "/dev/null" 240Sstevel@tonic-gatethen 250Sstevel@tonic-gate touch "$TEST_OUTPUT_FILE" || exit 1 260Sstevel@tonic-gatefi 270Sstevel@tonic-gate 280Sstevel@tonic-gateTEST_DIR=. 290Sstevel@tonic-gateTEST_SRC_DIR=. 300Sstevel@tonic-gate 310Sstevel@tonic-gateT=`echo "$0" | sed -e 's/test.sh$//' | sed -e 's/test-script.sh//' ` 320Sstevel@tonic-gateif test -x "$T/test-init" 330Sstevel@tonic-gatethen 340Sstevel@tonic-gate TEST_DIR="$T" 350Sstevel@tonic-gateelif test -x "./test/test-init" 360Sstevel@tonic-gatethen 370Sstevel@tonic-gate TEST_DIR="./test" 380Sstevel@tonic-gatefi 390Sstevel@tonic-gateif test -f "$T/check-dumpevents.py" 400Sstevel@tonic-gatethen 410Sstevel@tonic-gate TEST_SRC_DIR="$T" 420Sstevel@tonic-gateelif test -f "./test/check-dumpevents.py" 430Sstevel@tonic-gatethen 440Sstevel@tonic-gate TEST_SRC_DIR="./test" 450Sstevel@tonic-gatefi 460Sstevel@tonic-gate 470Sstevel@tonic-gatesetup () { 480Sstevel@tonic-gate for i in $BACKENDS; do 490Sstevel@tonic-gate eval "EVENT_NO$i=yes; export EVENT_NO$i" 500Sstevel@tonic-gate done 510Sstevel@tonic-gate unset EVENT_EPOLL_USE_CHANGELIST 520Sstevel@tonic-gate unset EVENT_PRECISE_TIMER 530Sstevel@tonic-gate} 540Sstevel@tonic-gate 550Sstevel@tonic-gateannounce () { 560Sstevel@tonic-gate echo "$@" 570Sstevel@tonic-gate echo "$@" >>"$TEST_OUTPUT_FILE" 580Sstevel@tonic-gate} 590Sstevel@tonic-gate 600Sstevel@tonic-gateannounce_n () { 610Sstevel@tonic-gate $ECHO_N "$@" 620Sstevel@tonic-gate echo "$@" >>"$TEST_OUTPUT_FILE" 630Sstevel@tonic-gate} 640Sstevel@tonic-gate 650Sstevel@tonic-gate 660Sstevel@tonic-gaterun_tests () { 670Sstevel@tonic-gate if $TEST_DIR/test-init 2>>"$TEST_OUTPUT_FILE" ; 680Sstevel@tonic-gate then 690Sstevel@tonic-gate true 700Sstevel@tonic-gate else 710Sstevel@tonic-gate announce Skipping test 720Sstevel@tonic-gate return 730Sstevel@tonic-gate fi 740Sstevel@tonic-gate for i in $TESTS; do 750Sstevel@tonic-gate announce_n " $i: " 760Sstevel@tonic-gate if $TEST_DIR/$i >>"$TEST_OUTPUT_FILE" ; 770Sstevel@tonic-gate then 780Sstevel@tonic-gate announce OKAY ; 790Sstevel@tonic-gate else 800Sstevel@tonic-gate announce FAILED ; 810Sstevel@tonic-gate FAILED=yes 820Sstevel@tonic-gate fi 830Sstevel@tonic-gate done 840Sstevel@tonic-gate announce_n " test-dumpevents: " 850Sstevel@tonic-gate if python2 -c 'import sys; assert(sys.version_info >= (2, 4))' 2>/dev/null && test -f $TEST_SRC_DIR/check-dumpevents.py; then 860Sstevel@tonic-gate if $TEST_DIR/test-dumpevents | python2 $TEST_SRC_DIR/check-dumpevents.py >> "$TEST_OUTPUT_FILE" ; 870Sstevel@tonic-gate then 880Sstevel@tonic-gate announce OKAY ; 890Sstevel@tonic-gate else 900Sstevel@tonic-gate announce FAILED ; 910Sstevel@tonic-gate fi 920Sstevel@tonic-gate else 930Sstevel@tonic-gate # no python 940Sstevel@tonic-gate if $TEST_DIR/test-dumpevents >/dev/null; then 950Sstevel@tonic-gate announce "OKAY (output not checked)" ; 960Sstevel@tonic-gate else 970Sstevel@tonic-gate announce "FAILED (output not checked)" ; 980Sstevel@tonic-gate fi 990Sstevel@tonic-gate fi 1000Sstevel@tonic-gate test -x $TEST_DIR/regress || return 1010Sstevel@tonic-gate announce_n " regress: " 1020Sstevel@tonic-gate if test "$TEST_OUTPUT_FILE" = "/dev/null" ; 1030Sstevel@tonic-gate then 1040Sstevel@tonic-gate $TEST_DIR/regress --quiet $REGRESS_ARGS 1050Sstevel@tonic-gate else 1060Sstevel@tonic-gate $TEST_DIR/regress $REGRESS_ARGS >>"$TEST_OUTPUT_FILE" 1070Sstevel@tonic-gate fi 1080Sstevel@tonic-gate if test "$?" = "0" ; 1090Sstevel@tonic-gate then 110 announce OKAY ; 111 else 112 announce FAILED ; 113 FAILED=yes 114 fi 115} 116 117do_test() { 118 setup 119 announce "$1 $2" 120 unset EVENT_NO$1 121 if test "$2" = "(changelist)" ; then 122 EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST 123 elif test "$2" = "(timerfd)" ; then 124 EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER 125 elif test "$2" = "(timerfd+changelist)" ; then 126 EVENT_EPOLL_USE_CHANGELIST=yes; export EVENT_EPOLL_USE_CHANGELIST 127 EVENT_PRECISE_TIMER=1; export EVENT_PRECISE_TIMER 128 fi 129 130 run_tests 131} 132 133announce "Running tests:" 134 135do_test EPOLL "(timerfd)" 136do_test EPOLL "(changelist)" 137do_test EPOLL "(timerfd+changelist)" 138for i in $BACKENDS; do 139 do_test $i 140done 141 142if test "$FAILED" = "yes"; then 143 exit 1 144fi 145