source: branches/samba-3.5.x/source3/script/tests/selftest.sh

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 10.3 KB
Line 
1#!/bin/sh
2
3if [ $# -lt 2 ]; then
4 echo "$0 <directory> <all | quick> [-t <smbtorture4>] [-s <shrdir>] " \
5 "[-c <custom conf>]"
6 exit 1
7fi
8
9##
10## Setup the required args
11##
12DIRECTORY=$1; shift;
13SUBTESTS=$1; shift;
14
15##
16## Parse oprtional args
17##
18while getopts s:c:t: f
19do
20 case $f in
21 t) SMBTORTURE4=$OPTARG;;
22 s) ALT_SHRDIR_ARG=$OPTARG;;
23 c) CUSTOM_CONF_ARG=$OPTARG;;
24 esac
25done
26
27echo "Running selftest with the following"
28echo "Selftest Directory: $DIRECTORY"
29echo "Subtests to Run: $SUBTESTS"
30echo "smbtorture4 Path: $SMBTORTURE4"
31echo "Alternative Share Dir: $ALT_SHRDIR_ARG"
32echo "Custom Configuration: $CUSTOM_CONF_ARG"
33
34if [ $CUSTOM_CONF_ARG ]; then
35 INCLUDE_CUSTOM_CONF="include = $CUSTOM_CONF_ARG"
36fi
37
38##
39## create the test directory
40##
41PREFIX=`echo $DIRECTORY | sed s+//+/+`
42mkdir -p $PREFIX || exit $?
43OLD_PWD=`pwd`
44cd $PREFIX || exit $?
45PREFIX_ABS=`pwd`
46cd $OLD_PWD
47
48if [ -z "$TORTURE_MAXTIME" ]; then
49 TORTURE_MAXTIME=300
50fi
51export TORTURE_MAXTIME
52
53##
54## setup the various environment variables we need
55##
56
57WORKGROUP=SAMBA-TEST
58SERVER=localhost2
59SERVER_IP=127.0.0.2
60if [ ! "x$USER" = "x" ]; then
61 USERNAME=$USER
62else
63 if [ ! "x$LOGNAME" = "x" ]; then
64 USERNAME=$LOGNAME
65 else
66 USERNAME=`PATH=/usr/ucb:$PATH whoami || id -un`
67 fi
68fi
69USERID=`PATH=/usr/ucb:$PATH id | cut -d ' ' -f1 | sed -e 's/uid=\([0-9]*\).*/\1/g'`
70GROUPID=`PATH=/usr/ucb:$PATH id | cut -d ' ' -f2 | sed -e 's/gid=\([0-9]*\).*/\1/g'`
71PASSWORD=test
72
73SRCDIR="`dirname $0`/../.."
74BINDIR="`pwd`/bin"
75SCRIPTDIR=$SRCDIR/script/tests
76LIBDIR=$PREFIX_ABS/lib
77PIDDIR=$PREFIX_ABS/pid
78CONFFILE=$LIBDIR/client.conf
79SAMBA4CONFFILE=$LIBDIR/samba4client.conf
80SERVERCONFFILE=$LIBDIR/server.conf
81COMMONCONFFILE=$LIBDIR/common.conf
82PRIVATEDIR=$PREFIX_ABS/private
83LOCKDIR=$PREFIX_ABS/lockdir
84LOGDIR=$PREFIX_ABS/logs
85SOCKET_WRAPPER_DIR=$PREFIX/sw
86CONFIGURATION="--configfile $CONFFILE"
87SAMBA4CONFIGURATION="-s $SAMBA4CONFFILE"
88NSS_WRAPPER_PASSWD="$PRIVATEDIR/passwd"
89NSS_WRAPPER_GROUP="$PRIVATEDIR/group"
90WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbindd
91WINBINDD_PRIV_PIPE_DIR=$LOCKDIR/winbindd_privileged
92TEST_DIRECTORY=$DIRECTORY
93
94export PREFIX PREFIX_ABS
95export CONFIGURATION CONFFILE SAMBA4CONFIGURATION SAMBA4CONFFILE
96export PATH SOCKET_WRAPPER_DIR DOMAIN
97export PRIVATEDIR LIBDIR PIDDIR LOCKDIR LOGDIR SERVERCONFFILE
98export SRCDIR SCRIPTDIR BINDIR
99export USERNAME PASSWORD
100export WORKGROUP SERVER SERVER_IP
101export NSS_WRAPPER_PASSWD NSS_WRAPPER_GROUP
102export WINBINDD_SOCKET_DIR WINBINDD_PRIV_PIPE_DIR
103export TEST_DIRECTORY
104
105PATH=bin:$PATH
106export PATH
107
108if [ $SMBTORTURE4 ]; then
109 SAMBA4BINDIR=`dirname $SMBTORTURE4`
110fi
111
112SAMBA4SHAREDDIR="$SAMBA4BINDIR/shared"
113
114export SAMBA4SHAREDDIR
115export SMBTORTURE4
116
117if [ -z "$LIB_PATH_VAR" ] ; then
118 echo "Warning: LIB_PATH_VAR not set. Using best guess LD_LIBRARY_PATH." >&2
119 LIB_PATH_VAR=LD_LIBRARY_PATH
120 export LIB_PATH_VAR
121fi
122
123eval $LIB_PATH_VAR=$BINDIR:$SAMBA4SHAREDDIR:\$$LIB_PATH_VAR
124export $LIB_PATH_VAR
125
126##
127## verify that we were built with --enable-socket-wrapper
128##
129
130if test "x`smbd -b | grep SOCKET_WRAPPER`" = "x"; then
131 echo "***"
132 echo "*** You must include --enable-socket-wrapper when compiling Samba"
133 echo "*** in order to execute 'make test'. Exiting...."
134 echo "***"
135 exit 1
136fi
137
138if test "x`smbd -b | grep NSS_WRAPPER`" = "x"; then
139 echo "***"
140 echo "*** You must include --enable-nss-wrapper when compiling Samba"
141 echo "*** in order to execute 'make test'. Exiting...."
142 echo "***"
143 exit 1
144fi
145
146
147##
148## create the test directory layout
149##
150printf "%s" "CREATE TEST ENVIRONMENT IN '$PREFIX'"...
151/bin/rm -rf $PREFIX/*
152mkdir -p $PRIVATEDIR $LIBDIR $PIDDIR $LOCKDIR $LOGDIR
153mkdir -p $SOCKET_WRAPPER_DIR
154mkdir -p $WINBINDD_SOCKET_DIR
155chmod 755 $WINBINDD_SOCKET_DIR
156
157##
158## Create an alternate shrdir if one was specified.
159##
160if [ $ALT_SHRDIR_ARG ]; then
161 ALT_SHRDIR=`echo $ALT_SHRDIR_ARG | sed s+//+/+`
162 mkdir -p $ALT_SHRDIR || exit $?
163 OLD_PWD=`pwd`
164 cd $ALT_SHRDIR || exit $?
165 SHRDIR=`pwd`
166 cd $OLD_PWD
167 /bin/rm -rf $SHRDIR/*
168else
169 SHRDIR=$PREFIX_ABS/tmp
170 mkdir -p $SHRDIR
171fi
172chmod 777 $SHRDIR
173
174##
175## Create the common config include file with the basic settings
176##
177
178cat >$COMMONCONFFILE<<EOF
179 workgroup = $WORKGROUP
180
181 private dir = $PRIVATEDIR
182 pid directory = $PIDDIR
183 lock directory = $LOCKDIR
184 log file = $LOGDIR/log.%m
185 log level = 0
186
187 name resolve order = bcast
188EOF
189
190TORTURE_INTERFACES='127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8'
191
192cat >$CONFFILE<<EOF
193[global]
194 netbios name = TORTURE_6
195 interfaces = $TORTURE_INTERFACES
196 panic action = $SCRIPTDIR/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
197 include = $COMMONCONFFILE
198
199 passdb backend = tdbsam
200EOF
201
202cat >$SAMBA4CONFFILE<<EOF
203[global]
204 netbios name = TORTURE_6
205 interfaces = $TORTURE_INTERFACES
206 panic action = $SCRIPTDIR/gdb_backtrace %PID% %PROG%
207 include = $COMMONCONFFILE
208 modules dir = $SRCDIR/bin/modules
209EOF
210
211cat >$SERVERCONFFILE<<EOF
212[global]
213 netbios name = $SERVER
214 interfaces = $SERVER_IP/8
215 bind interfaces only = yes
216 panic action = $SCRIPTDIR/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
217 include = $COMMONCONFFILE
218
219 state directory = $LOCKDIR
220 cache directory = $LOCKDIR
221
222 passdb backend = tdbsam
223
224 domain master = yes
225 domain logons = yes
226 lanman auth = yes
227 time server = yes
228
229 add user script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --passwd_path $NSS_WRAPPER_PASSWD --type passwd --action add --name %u
230 add group script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --group_path $NSS_WRAPPER_GROUP --type group --action add --name %g
231 add user to group script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --group_path $NSS_WRAPPER_GROUP --type member --action add --name %g --member %u --passwd_path $NSS_WRAPPER_PASSWD
232 add machine script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --passwd_path $NSS_WRAPPER_PASSWD --type passwd --action add --name %u
233 delete user script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --passwd_path $NSS_WRAPPER_PASSWD --type passwd --action delete --name %u
234 delete group script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --group_path $NSS_WRAPPER_GROUP --type group --action delete --name %g
235 delete user from group script = $PERL $SRCDIR/../lib/nss_wrapper/nss_wrapper.pl --group_path $NSS_WRAPPER_GROUP --type member --action delete --name %g --member %u --passwd_path $NSS_WRAPPER_PASSWD
236
237 kernel oplocks = no
238 kernel change notify = no
239
240 syslog = no
241 printing = bsd
242 printcap name = /dev/null
243
244 winbindd:socket dir = $WINBINDD_SOCKET_DIR
245 idmap uid = 100000-200000
246 idmap gid = 100000-200000
247
248# min receivefile size = 4000
249
250 read only = no
251 smbd:sharedelay = 100000
252# smbd:writetimeupdatedelay = 500000
253 map hidden = no
254 map system = no
255 map readonly = no
256 store dos attributes = yes
257 create mask = 755
258 store create time = yes
259 vfs objects = $BINDIR/xattr_tdb.so $BINDIR/streams_depot.so
260
261 #Include user defined custom parameters if set
262 $INCLUDE_CUSTOM_CONF
263
264[tmp]
265 path = $SHRDIR
266[hideunread]
267 copy = tmp
268 hide unreadable = yes
269[tmpcase]
270 copy = tmp
271 case sensitive = yes
272[hideunwrite]
273 copy = tmp
274 hide unwriteable files = yes
275[print1]
276 copy = tmp
277 printable = yes
278 printing = vlp
279 print command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb print %p %s
280 lpq command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb lpq %p
281 lp rm command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb lprm %p %j
282 lp pause command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb lppause %p %j
283 lp resume command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb lpresume %p %j
284 queue pause command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb queuepause %p
285 queue resume command = $BINDIR/vlp tdbfile=$LOCKDIR/vlp.tdb queueresume %p
286
287[print2]
288 copy = print1
289[print3]
290 copy = print1
291[print4]
292 copy = print1
293EOF
294
295##
296## create a test account
297##
298
299cat >$NSS_WRAPPER_PASSWD<<EOF
300root:x:65533:65532:root gecos:$PREFIX_ABS:/bin/false
301nobody:x:65534:65533:nobody gecos:$PREFIX_ABS:/bin/false
302$USERNAME:x:$USERID:$GROUPID:$USERNAME gecos:$PREFIX_ABS:/bin/false
303EOF
304
305cat >$NSS_WRAPPER_GROUP<<EOF
306nobody:x:65533:
307nogroup:x:65534:nobody
308root:x:65532:
309$USERNAME-group:x:$GROUPID:
310EOF
311
312MAKE_TEST_BINARY="bin/smbpasswd"
313export MAKE_TEST_BINARY
314
315(echo $PASSWORD; echo $PASSWORD) | \
316 bin/smbpasswd -c $SERVERCONFFILE -L -s -a $USERNAME >/dev/null || exit 1
317
318echo "DONE";
319
320MAKE_TEST_BINARY=""
321
322SERVER_TEST_FIFO="$PREFIX/server_test.fifo"
323export SERVER_TEST_FIFO
324NMBD_TEST_LOG="$PREFIX/nmbd_test.log"
325export NMBD_TEST_LOG
326WINBINDD_TEST_LOG="$PREFIX/winbindd_test.log"
327export WINBINDD_TEST_LOG
328SMBD_TEST_LOG="$PREFIX/smbd_test.log"
329export SMBD_TEST_LOG
330
331# start off with 0 failures
332failed=0
333export failed
334
335. $SCRIPTDIR/test_functions.sh
336
337SOCKET_WRAPPER_DEFAULT_IFACE=2
338export SOCKET_WRAPPER_DEFAULT_IFACE
339samba3_check_or_start
340
341
342# ensure any one smbtorture call doesn't run too long
343# and smbtorture will use 127.0.0.6 as source address by default
344SOCKET_WRAPPER_DEFAULT_IFACE=6
345export SOCKET_WRAPPER_DEFAULT_IFACE
346TORTURE4_OPTIONS="$SAMBA4CONFIGURATION"
347TORTURE4_OPTIONS="$TORTURE4_OPTIONS --maximum-runtime=$TORTURE_MAXTIME"
348TORTURE4_OPTIONS="$TORTURE4_OPTIONS --target=samba3"
349TORTURE4_OPTIONS="$TORTURE4_OPTIONS --option=torture:localdir=$SHRDIR"
350export TORTURE4_OPTIONS
351
352if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
353 TORTURE4_OPTIONS="$TORTURE4_OPTIONS --option=torture:progress=no"
354fi
355
356
357##
358## ready to go...now loop through the tests
359##
360
361START=`date`
362(
363 # give time for nbt server to register its names
364 echo "delaying for nbt name registration"
365 sleep 10
366 # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init
367 MAKE_TEST_BINARY="bin/nmblookup"
368 bin/nmblookup $CONFIGURATION -U $SERVER_IP __SAMBA__
369 bin/nmblookup $CONFIGURATION __SAMBA__
370 bin/nmblookup $CONFIGURATION -U 127.255.255.255 __SAMBA__
371 bin/nmblookup $CONFIGURATION -U $SERVER_IP $SERVER
372 bin/nmblookup $CONFIGURATION $SERVER
373 # make sure smbd is also up set
374 echo "wait for smbd"
375 MAKE_TEST_BINARY="bin/smbclient"
376 bin/smbclient $CONFIGURATION -L $SERVER_IP -U% -p 139 | head -2
377 bin/smbclient $CONFIGURATION -L $SERVER_IP -U% -p 139 | head -2
378 MAKE_TEST_BINARY=""
379
380 failed=0
381
382 . $SCRIPTDIR/tests_$SUBTESTS.sh
383 exit $failed
384)
385failed=$?
386
387samba3_stop_sig_term
388
389END=`date`
390echo "START: $START ($0)";
391echo "END: $END ($0)";
392
393# if there were any valgrind failures, show them
394count=`find $PREFIX -name 'valgrind.log*' | wc -l`
395if [ "$count" != 0 ]; then
396 for f in $PREFIX/valgrind.log*; do
397 if [ -s $f ]; then
398 echo "VALGRIND FAILURE";
399 failed=`expr $failed + 1`
400 cat $f
401 fi
402 done
403fi
404
405sleep 2
406samba3_stop_sig_kill
407
408teststatus $0 $failed
Note: See TracBrowser for help on using the repository browser.