407d46aa9e29a4a774ff5019dc397ef9ec00ce26
[metze/samba/wip.git] / source3 / script / tests / test_functions.sh
1
2 samba3_stop_sig_term() {
3         RET=0
4         kill -USR1 `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1 || \
5                 kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` || RET=$?
6
7         kill -USR1 `cat $PIDDIR/timelimit.winbindd.pid` >/dev/null 2>&1 || \
8                 kill -ALRM `cat $PIDDIR/timelimit.winbindd.pid` || RET=$?
9
10         kill -USR1 `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1 || \
11                 kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` || RET=$?
12
13         return $RET;
14 }
15
16 samba3_stop_sig_kill() {
17         kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1
18         kill -ALRM `cat $PIDDIR/timelimit.winbindd.pid` >/dev/null 2>&1
19         kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1
20         return 0;
21 }
22
23 samba3_check_or_start() {
24         if [ -n "$SERVER_TEST_FIFO" ];then
25
26                 trap samba3_stop_sig_kill INT QUIT
27                 trap samba3_stop_sig_kill TERM
28
29                 if [ -p "$SERVER_TEST_FIFO" ];then
30                         return 0;
31                 fi
32
33                 if [ -n "$SOCKET_WRAPPER_DIR" ];then
34                         if [ -d "$SOCKET_WRAPPER_DIR" ]; then
35                                 rm -f $SOCKET_WRAPPER_DIR/*
36                         else
37                                 mkdir -p $SOCKET_WRAPPER_DIR
38                         fi
39                 fi
40
41                 rm -f $SERVER_TEST_FIFO
42                 mkfifo $SERVER_TEST_FIFO
43
44                 rm -f $NMBD_TEST_LOG
45                 printf "%s" "STARTING NMBD..."
46                 ((
47                         if test x"$NMBD_MAXTIME" = x; then
48                             NMBD_MAXTIME=2700
49                         fi
50                         MAKE_TEST_BINARY=$BINDIR/nmbd
51                         export MAKE_TEST_BINARY
52                         timelimit $NMBD_MAXTIME $NMBD_VALGRIND $BINDIR/nmbd -F -S --no-process-group -d0 -s $SERVERCONFFILE > $NMBD_TEST_LOG 2>&1 &
53                         TIMELIMIT_NMBD_PID=$!
54                         MAKE_TEST_BINARY=
55                         echo $TIMELIMIT_NMBD_PID > $PIDDIR/timelimit.nmbd.pid
56                         wait $TIMELIMIT_NMBD_PID
57                         ret=$?;
58                         rm -f $SERVER_TEST_FIFO
59                         if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
60                                 rm -f $SOCKET_WRAPPER_DIR/*
61                         fi
62                         if [ x"$ret" = x"0" ];then
63                                 echo "nmbd exits with status $ret";
64                                 echo "nmbd exits with status $ret" >>$NMBD_TEST_LOG;
65                         elif [ x"$ret" = x"137" ];then
66                                 echo "nmbd got SIGXCPU and exits with status $ret!"
67                                 echo "nmbd got SIGXCPU and exits with status $ret!">>$NMBD_TEST_LOG;
68                         else
69                                 echo "nmbd failed with status $ret!"
70                                 echo "nmbd failed with status $ret!">>$NMBD_TEST_LOG;
71                         fi
72                         exit $ret;
73                 ) || exit $? &) 2>/dev/null || exit $?
74                 echo  "DONE"
75
76                 rm -f $WINBINDD_TEST_LOG
77                 printf "%s" "STARTING WINBINDD..."
78                 ((
79                         if test x"$WINBINDD_MAXTIME" = x; then
80                             WINBINDD_MAXTIME=2700
81                         fi
82                         MAKE_TEST_BINARY=$BINDIR/winbindd
83                         export MAKE_TEST_BINARY
84                         timelimit $WINBINDD_MAXTIME $WINBINDD_VALGRIND $BINDIR/winbindd -F -S --no-process-group -d0 -s $SERVERCONFFILE > $WINBINDD_TEST_LOG 2>&1 &
85                         TIMELIMIT_WINBINDD_PID=$!
86                         MAKE_TEST_BINARY=
87                         echo $TIMELIMIT_WINBINDD_PID > $PIDDIR/timelimit.winbindd.pid
88                         wait $TIMELIMIT_WINBINDD_PID
89                         ret=$?;
90                         rm -f $SERVER_TEST_FIFO
91                         if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
92                                 rm -f $SOCKET_WRAPPER_DIR/*
93                         fi
94                         if [ x"$ret" = x"0" ];then
95                                 echo "winbindd exits with status $ret";
96                                 echo "winbindd exits with status $ret" >>$WINBINDD_TEST_LOG;
97                         elif [ x"$ret" = x"137" ];then
98                                 echo "winbindd got SIGXCPU and exits with status $ret!"
99                                 echo "winbindd got SIGXCPU and exits with status $ret!">>$WINBINDD_TEST_LOG;
100                         else
101                                 echo "winbindd failed with status $ret!"
102                                 echo "winbindd failed with status $ret!">>$WINBINDD_TEST_LOG;
103                         fi
104                         exit $ret;
105                 ) || exit $? &) 2>/dev/null || exit $?
106                 echo  "DONE"
107
108                 rm -f $SMBD_TEST_LOG
109                 printf "%s" "STARTING SMBD..."
110                 ((
111                         if test x"$SMBD_MAXTIME" = x; then
112                             SMBD_MAXTIME=2700
113                         fi
114                         MAKE_TEST_BINARY=$BINDIR/smbd
115                         export MAKE_TEST_BINARY
116                         timelimit $SMBD_MAXTIME $SMBD_VALGRIND $BINDIR/smbd -F -S --no-process-group -d0 -s $SERVERCONFFILE > $SMBD_TEST_LOG 2>&1 &
117                         TIMELIMIT_SMBD_PID=$!
118                         MAKE_TEST_BINARY=
119                         echo $TIMELIMIT_SMBD_PID > $PIDDIR/timelimit.smbd.pid
120                         wait $TIMELIMIT_SMBD_PID
121                         ret=$?;
122                         rm -f $SERVER_TEST_FIFO
123                         if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
124                                 rm -f $SOCKET_WRAPPER_DIR/*
125                         fi
126                         if [ x"$ret" = x"0" ];then
127                                 echo "smbd exits with status $ret";
128                                 echo "smbd exits with status $ret" >>$SMBD_TEST_LOG;
129                         elif [ x"$ret" = x"137" ];then
130                                 echo "smbd got SIGXCPU and exits with status $ret!"
131                                 echo "smbd got SIGXCPU and exits with status $ret!">>$SMBD_TEST_LOG;
132                         else
133                                 echo "smbd failed with status $ret!"
134                                 echo "smbd failed with status $ret!">>$SMBD_TEST_LOG;
135                         fi
136                         exit $ret;
137                 ) || exit $? &) 2>/dev/null || exit $?
138                 echo  "DONE"
139         fi
140         return 0;
141 }
142
143 samba3_nmbd_test_log() {
144         if [ -n "$NMBD_TEST_LOG" ];then
145                 if [ -r "$NMBD_TEST_LOG" ];then
146                         return 0;
147                 fi
148         fi
149         return 1;
150 }
151
152 samba3_winbindd_test_log() {
153         if [ -n "$WINBINDD_TEST_LOG" ];then
154                 if [ -r "$WINBINDD_TEST_LOG" ];then
155                         return 0;
156                 fi
157         fi
158         return 1;
159 }
160
161 samba3_smbd_test_log() {
162         if [ -n "$SMBD_TEST_LOG" ];then
163                 if [ -r "$SMBD_TEST_LOG" ];then
164                         return 0;
165                 fi
166         fi
167         return 1;
168 }
169
170 samba3_check_only() {
171         if [ -n "$SERVER_TEST_FIFO" ];then
172                 if [ -p "$SERVER_TEST_FIFO" ];then
173                         return 0;
174                 fi
175                 return 1;
176         fi
177         return 0;
178 }
179
180 testit() {
181         if [ -z "$PREFIX" ]; then
182             PREFIX=test_prefix
183             mkdir -p $PREFIX
184         fi
185         name=$1
186         shift 1
187         binary=$1
188         cmdline="$*"
189
190         SERVERS_ARE_UP="no"
191
192         shname=`echo $name | \
193         sed -e 's%[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-]%_%g'`
194
195         UNIQUE_PID=`/bin/sh -c 'echo $$'`
196         TEST_LOG="$PREFIX/test_log.${UNIQUE_PID}"
197         TEST_PCAP="$PREFIX/test_${shname}_${UNIQUE_PID}.pcap"
198         trap "rm -f $TEST_LOG $TEST_PCAP" EXIT
199
200         if [ -z "$nmbd_log_size" ]; then
201                 nmbd_log_size=`wc -l < $NMBD_TEST_LOG`;
202         fi
203         if [ -z "$winbindd_log_size" ]; then
204                 winbindd_log_size=`wc -l < $WINBINDD_TEST_LOG`;
205         fi
206         if [ -z "$smbd_log_size" ]; then
207                 smbd_log_size=`wc -l < $SMBD_TEST_LOG`;
208         fi
209
210         if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
211                 echo "--==--==--==--==--==--==--==--==--==--==--"
212                 echo "Running test $name (level 0 stdout)"
213                 echo "--==--==--==--==--==--==--==--==--==--==--"
214                 date
215                 echo "Testing $name"
216         else
217                 echo "Testing $name ($failed)"
218         fi
219
220         samba3_check_only && SERVERS_ARE_UP="yes"
221         if [ x"$SERVERS_ARE_UP" != x"yes" ];then
222                 if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
223                         echo "SERVERS are down! Skipping: $cmdline"
224                         echo "=========================================="
225                         echo "TEST SKIPPED: $name (reason SERVERS are down)"
226                         echo "=========================================="
227                 else
228                         echo "TEST SKIPPED: $name (reason SERVERS are down)"
229                 fi
230                 return 1
231         fi
232
233         if [ x"$MAKE_TEST_ENABLE_PCAP" = x"yes" ];then
234                 SOCKET_WRAPPER_PCAP_FILE=$TEST_PCAP
235                 export SOCKET_WRAPPER_PCAP_FILE
236         fi
237
238         MAKE_TEST_BINARY=$binary
239         export MAKE_TEST_BINARY
240         ( $cmdline > $TEST_LOG 2>&1 )
241         status=$?
242         MAKE_TEST_BINARY=
243         # show any additional output from smbd that has happened in this test
244         samba3_nmbd_test_log && {
245                 new_log_size=`wc -l < $NMBD_TEST_LOG`;
246                 test "$new_log_size" = "$nmbd_log_size" || {
247                         echo "NMBD OUTPUT:";
248                         incr_log_size=`expr $new_log_size - $nmbd_log_size`;
249                         tail -$incr_log_size $NMBD_TEST_LOG;
250                         nmbd_log_size=$new_log_size;
251                 }
252         }
253         samba3_winbindd_test_log && {
254                 new_log_size=`wc -l < $WINBINDD_TEST_LOG`;
255                 test "$new_log_size" = "$winbindd_log_size" || {
256                         echo "WINBINDD OUTPUT:";
257                         incr_log_size=`expr $new_log_size - $winbindd_log_size`;
258                         tail -$incr_log_size $WINBINDD_TEST_LOG;
259                         winbindd_log_size=$new_log_size;
260                 }
261         }
262         samba3_smbd_test_log && {
263                 new_log_size=`wc -l < $SMBD_TEST_LOG`;
264                 test "$new_log_size" = "$smbd_log_size" || {
265                         echo "SMBD OUTPUT:";
266                         incr_log_size=`expr $new_log_size - $smbd_log_size`;
267                         tail -$incr_log_size $SMBD_TEST_LOG;
268                         smbd_log_size=$new_log_size;
269                 }
270         }
271
272         if [ x"$status" != x"0" ]; then
273                 echo "TEST OUTPUT:"
274                 cat $TEST_LOG;
275                 rm -f $TEST_LOG;
276                 if [ x"$MAKE_TEST_ENABLE_PCAP" = x"yes" ];then
277                         echo "TEST PCAP: $TEST_PCAP"
278                 fi
279                 if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
280                         echo "=========================================="
281                         echo "TEST FAILED: $name (status $status)"
282                         echo "=========================================="
283                 else
284                         echo "TEST FAILED: $cmdline (status $status)"
285                 fi
286                 trap "" EXIT
287                 return 1;
288         fi
289         rm -f $TEST_LOG;
290         if [ x"$MAKE_TEST_KEEP_PCAP" = x"yes" ];then
291                 echo "TEST PCAP: $TEST_PCAP"
292         else
293                 rm -f $TEST_PCAP;
294         fi
295         if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
296                 echo "ALL OK: $cmdline"
297                 echo "=========================================="
298                 echo "TEST PASSED: $name"
299                 echo "=========================================="
300         fi
301         trap "" EXIT
302         return 0;
303 }
304
305 testok() {
306         name=`basename $1`
307         failed=$2
308
309         if [ x"$failed" = x"0" ];then
310                 :
311         else
312                 echo "$failed TESTS FAILED or SKIPPED ($name)";
313         fi
314         exit $failed
315 }
316
317 teststatus() {
318         name=`basename $1`
319         failed=$2
320
321         if [ x"$failed" = x"0" ];then
322                 echo "TEST STATUS: $failed";
323         else
324                 echo "TEST STATUS: $failed";
325         fi
326         exit $failed
327 }
328
329 if [ -z "$VALGRIND" ]; then
330     MALLOC_CHECK_=2
331     export MALLOC_CHECK_
332 fi
333