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