]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libevent/test/test.sh
ZFS: MFV 2.0-rc1-ga00c61
[FreeBSD/FreeBSD.git] / contrib / libevent / test / test.sh
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 "$@"