#!/bin/sh
# Bootstrap Samba and run a number of tests against it.
-DOMAIN=SAMBADOMAIN
-USERNAME=administrator
-REALM=SAMBA.EXAMPLE.COM
-PASSWORD=penguin
-SRCDIR=`pwd`
-ROOT=$USER
-SERVER=localhost
-NETBIOSNAME=localtest
-if test -z "$ROOT"; then
- ROOT=$LOGNAME
-fi
-if test -z "$ROOT"; then
- ROOT=`whoami`
-fi
-
if [ $# -lt 1 ]
then
- echo "$0 PREFIX"
+ echo "$0 PREFIX TESTS"
exit
fi
+ARG0=$0
+ARG1=$1
+ARG2=$2
+ARG3=$3
+
if [ -z "$TORTURE_MAXTIME" ]; then
- TORTURE_MAXTIME=300
+ TORTURE_MAXTIME=1200
fi
+# disable rpc validation when using valgrind - its way too slow
+if [ -z "$VALGRIND" ]; then
+ VALIDATE="validate";
+else
+ VALIDATE="";
+fi
-PREFIX=$1
+OLD_PWD=`pwd`
+PREFIX=$ARG1
PREFIX=`echo $PREFIX | sed s+//+/+`
export PREFIX
# allow selection of the test lists
-TESTS=$2
+TESTS=$ARG2
if [ $TESTS = "all" ]; then
TLS_ENABLED="yes"
else
TLS_ENABLED="no"
fi
+export TLS_ENABLED
-mkdir -p $PREFIX || exit $?
-OLD_PWD=`pwd`
-cd $PREFIX || exit $?
-PREFIX_ABS=`pwd`
-export PREFIX_ABS
-cd $OLD_PWD
+LD_LDB_MODULE_PATH=$OLD_PWD/bin/modules/ldb
+export LD_LDB_MODULE_PATH
-TEST_DATA_PREFIX=$PREFIX_ABS
-export TEST_DATA_PREFIX
+LD_SAMBA_MODULE_PATH=$OLD_PWD/bin/modules
+export LD_SAMBA_MODULE_PATH
-LD_LIBRARY_PATH=$OLD_PWD/bin:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=$OLD_PWD/bin/shared:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
-TMPDIR=$PREFIX_ABS/tmp
-LIBDIR=$PREFIX_ABS/lib
-ETCDIR=$PREFIX_ABS/etc
-PIDDIR=$PREFIX_ABS/pid
-CONFFILE=$ETCDIR/smb.conf
-KRB5_CONFIG=$ETCDIR/krb5.conf
-PRIVATEDIR=$PREFIX_ABS/private
-NCALRPCDIR=$PREFIX_ABS/ncalrpc
-LOCKDIR=$PREFIX_ABS/lockdir
-TLSDIR=$PRIVATEDIR/tls
-WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbind_socket
-CONFIGURATION="--configfile=$CONFFILE"
+PKG_CONFIG_PATH=$OLD_PWD/bin/pkgconfig:$PKG_CONFIG_PATH
+export PKG_CONFIG_PATH
+
+incdir=`dirname $ARG0`
+echo -n "PROVISIONING..."
+eval `$incdir/mktestsetup.sh $PREFIX || exit 1`
+echo "DONE"
+
+export KRB5_CONFIG
+export PREFIX_ABS
+export TEST_DATA_PREFIX
export CONFIGURATION
export CONFFILE
+export PIDDIR
+export AUTH
+export SERVER
+export NETBIOSNAME
-SMBD_TEST_FIFO="$PREFIX/smbd_test.fifo"
-export SMBD_TEST_FIFO
-SMBD_TEST_LOG="$PREFIX/smbd_test.log"
-export SMBD_TEST_LOG
+PATH=bin:$PATH
+export PATH
-DO_SOCKET_WRAPPER=$3
+DO_SOCKET_WRAPPER=$ARG3
if [ x"$DO_SOCKET_WRAPPER" = x"SOCKET_WRAPPER" ];then
- SOCKET_WRAPPER_DIR="$PREFIX/sw"
+ SOCKET_WRAPPER_DIR="$PREFIX/w"
export SOCKET_WRAPPER_DIR
echo "SOCKET_WRAPPER_DIR=$SOCKET_WRAPPER_DIR"
+else
+ echo "NOT USING SOCKET_WRAPPER"
fi
-# start off with 0 failures
-failed=0
-export failed
-
-incdir=`dirname $0`
+incdir=`dirname $ARG0`
. $incdir/test_functions.sh
-PATH=bin:$PATH
-export PATH
+#Start slapd before smbd
+if [ x"$TEST_LDAP" = x"yes" ]; then
+ if test -z "$FEDORA_DS_PREFIX"; then
+ slapd_start || exit 1;
+ else
+ fedora_ds_start || exit 1;
+ fi
+ echo -n "LDAP PROVISIONING..."
+ $srcdir/bin/smbscript $srcdir/setup/provision $PROVISION_OPTIONS "$PROVISION_ACI" --ldap-backend=$LDAP_URI || {
+ echo "LDAP PROVISIONING failed: $srcdir/bin/smbscript $srcdir/setup/provision $PROVISION_OPTIONS $PROVISION_ACI --ldap-backend=$LDAP_URI"
+ exit 1;
+ }
+ #LDAP is slow
+ TORTURE_MAXTIME=`expr $TORTURE_MAXTIME '*' 2`
+fi
-rm -rf $PREFIX/*
-mkdir -p $PRIVATEDIR $ETCDIR $LIBDIR $PIDDIR $NCALRPCDIR $LOCKDIR $TMPDIR $TLSDIR
-
-cat >$PRIVATEDIR/wins_config.ldif<<EOF
-dn: name=TORTURE_26,CN=PARTNERS
-objectClass: wreplPartner
-name: TORTURE_26
-address: 127.0.0.26
-pullInterval: 0
-pushChangeCount: 0
-type: 0x3
-EOF
-
-cat >$CONFFILE<<EOF
-[global]
- netbios name = $NETBIOSNAME
- netbios aliases = $SERVER
- workgroup = $DOMAIN
- realm = $REALM
- private dir = $PRIVATEDIR
- pid directory = $PIDDIR
- ncalrpc dir = $NCALRPCDIR
- lock dir = $LOCKDIR
- setup directory = $SRCDIR/setup
- js include = $SRCDIR/scripting/libjs
- winbindd socket directory = $WINBINDD_SOCKET_DIR
- name resolve order = bcast
- interfaces = 127.0.0.1/8
- tls enabled = $TLS_ENABLED
- panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
- wins support = yes
- server role = pdc
- max xmit = 32K
-
-[tmp]
- path = $TMPDIR
- read only = no
- ntvfs handler = posix
- posix:sharedelay = 100000
- posix:eadb = $LOCKDIR/eadb.tdb
-
-[cifs]
- read only = no
- ntvfs handler = cifs
- cifs:server = $SERVER
- cifs:user = $USERNAME
- cifs:password = $PASSWORD
- cifs:domain = $DOMAIN
- cifs:share = tmp
-EOF
-
-cat >$KRB5_CONFIG<<EOF
-[libdefaults]
- default_realm = SAMBA.EXAMPLE.COM
- dns_lookup_realm = false
- dns_lookup_kdc = false
- ticket_lifetime = 24h
- forwardable = yes
-
-[realms]
- SAMBA.EXAMPLE.COM = {
- kdc = 127.0.0.1
- admin_server = 127.0.0.1
- default_domain = samba.example.com
- }
-[domain_realm]
- .samba.example.com = SAMBA.EXAMPLE.COM
-EOF
+SMBD_TEST_FIFO="$PREFIX/smbd_test.fifo"
+export SMBD_TEST_FIFO
+SMBD_TEST_LOG="$PREFIX/smbd_test.log"
+export SMBD_TEST_LOG
-export KRB5_CONFIG
+SOCKET_WRAPPER_DEFAULT_IFACE=1
+export SOCKET_WRAPPER_DEFAULT_IFACE
+smbd_check_or_start
-echo -n "PROVISIONING..."
+SOCKET_WRAPPER_DEFAULT_IFACE=6
+export SOCKET_WRAPPER_DEFAULT_IFACE
+TORTURE_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'
+TORTURE_OPTIONS="--option=interfaces=$TORTURE_INTERFACES $CONFIGURATION"
+# ensure any one smbtorture call doesn't run too long
+TORTURE_OPTIONS="$TORTURE_OPTIONS --maximum-runtime=$TORTURE_MAXTIME"
+TORTURE_OPTIONS="$TORTURE_OPTIONS --target=samba4"
+export TORTURE_OPTIONS
-./setup/provision $CONFIGURATION --host-name=$NETBIOSNAME --host-ip=127.0.0.1 \
- --quiet --domain $DOMAIN --realm $REALM \
- --adminpass $PASSWORD --root=$ROOT || exit 1
+if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
+ TORTURE_OPTIONS="$TORTURE_OPTIONS --option=torture:progress=no"
+fi
-./bin/ldbadd -H $PRIVATEDIR/wins_config.ldb < $PRIVATEDIR/wins_config.ldif >/dev/null || exit 1
+ runtest() {
+ if [ -z "$PREFIX" ]; then
+ PREFIX=test_prefix
+ mkdir -p $PREFIX
+ fi
+ name=$1
+ shift 1
+ cmdline="$*"
-echo "DONE"
+ SMBD_IS_UP="no"
-if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
- CONFIGURATION="$CONFIGURATION --option=torture:progress=no"
-fi
+ shname=`echo $name | \
+ sed -e 's%[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-]%_%g'`
-SOCKET_WRAPPER_DEFAULT_IFACE=1
-export SOCKET_WRAPPER_DEFAULT_IFACE
-smbd_check_or_start
+ UNIQUE_PID=`/bin/sh -c 'echo $$'`
+ TEST_LOG="$PREFIX/test_log.${UNIQUE_PID}"
+ TEST_PCAP="$PREFIX/test_${shname}_${UNIQUE_PID}.pcap"
+ trap "rm -f $TEST_LOG $TEST_PCAP" EXIT
-# ensure any one smbtorture call doesn't run too long
-SOCKET_WRAPPER_DEFAULT_IFACE=26
-export SOCKET_WRAPPER_DEFAULT_IFACE
-TORTURE_INTERFACES='127.0.0.26/8,127.0.0.27/8,127.0.0.28/8,127.0.0.29/8,127.0.0.30/8,127.0.0.31/8'
-TORTURE_OPTIONS="--maximum-runtime=$TORTURE_MAXTIME --option=interfaces=$TORTURE_INTERFACES $CONFIGURATION"
-export TORTURE_OPTIONS
+ if [ -n "$SMBD_TEST_LOG" -a -z "$smbd_log_size" ]; then
+ smbd_log_size=`wc -l < $SMBD_TEST_LOG`;
+ fi
+
+ if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
+ echo "--==--==--==--==--==--==--==--==--==--==--"
+ echo "Running test $name (level 0 stdout)"
+ echo "--==--==--==--==--==--==--==--==--==--==--"
+ date
+ echo "Testing $name"
+ else
+ nf="`expr $failed + $totalfailed`";
+ if [ "$nf" = "0" ]; then
+ echo "[$current/$total] Testing $name"
+ else
+ echo "[$current/$total, $nf failures] Testing $name"
+ fi
+ fi
+
+ smbd_check_only && SMBD_IS_UP="yes"
+ if [ x"$SMBD_IS_UP" != x"yes" ];then
+ if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
+ echo "SMBD is down! Skipping: $cmdline"
+ echo "=========================================="
+ echo "TEST SKIPPED: $name (reason SMBD is down)"
+ echo "=========================================="
+ else
+ echo "TEST SKIPPED: $name (reason SMBD is down)"
+ fi
+ return 1
+ fi
+
+ if [ x"$MAKE_TEST_ENABLE_PCAP" = x"yes" ];then
+ SOCKET_WRAPPER_PCAP_FILE=$TEST_PCAP
+ export SOCKET_WRAPPER_PCAP_FILE
+ fi
-TORTURE_OPTIONS="$TORTURE_OPTIONS --option=target:samba4=yes"
+ ( $cmdline > $TEST_LOG 2>&1 )
+ status=$?
+ # show any additional output from smbd that has happened in this test
+ smbd_have_test_log && {
+ new_log_size=`wc -l < $SMBD_TEST_LOG`;
+ test "$new_log_size" = "$smbd_log_size" || {
+ echo "SMBD OUTPUT:";
+ incr_log_size=`expr $new_log_size - $smbd_log_size`;
+ tail -$incr_log_size $SMBD_TEST_LOG;
+ smbd_log_size=$new_log_size;
+ }
+ }
+ if [ x"$status" != x"0" ]; then
+ echo "TEST OUTPUT:"
+ cat $TEST_LOG;
+ rm -f $TEST_LOG;
+ if [ x"$MAKE_TEST_ENABLE_PCAP" = x"yes" ];then
+ echo "TEST PCAP: $TEST_PCAP"
+ fi
+ if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
+ echo "=========================================="
+ echo "TEST FAILED: $name (status $status)"
+ echo "=========================================="
+ else
+ echo "TEST FAILED: $cmdline (status $status)"
+ fi
+ trap "" EXIT
+ return 1;
+ fi
+ rm -f $TEST_LOG;
+ if [ x"$MAKE_TEST_KEEP_PCAP" = x"yes" ];then
+ echo "TEST PCAP: $TEST_PCAP"
+ else
+ rm -f $TEST_PCAP;
+ fi
+ if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
+ echo "ALL OK: $cmdline"
+ echo "=========================================="
+ echo "TEST PASSED: $name"
+ echo "=========================================="
+ fi
+ trap "" EXIT
+ return 0;
+}
START=`date`
(
bin/nmblookup $CONFIGURATION $NETBIOSNAME
bin/nmblookup $CONFIGURATION -U $SERVER $NETBIOSNAME
- failed=0
-
- . script/tests/tests_$TESTS.sh
- exit $failed
+# start off with 0 failures
+totalfailed=0
+export totalfailed
+
+. script/tests/tests_$TESTS.sh > $PREFIX/recipe
+total=`grep "TEST --" $PREFIX/recipe | wc -l`
+current=0
+cat $PREFIX/recipe | (
+ while read LINE
+ do
+ if [ "$LINE" = "-- TEST --" ]; then
+ read NAME
+ read CMDLINE
+ current=`expr $current + 1`
+ runtest "$NAME" "$CMDLINE" || totalfailed=`expr $totalfailed + $?`
+ else
+ echo "$LINE"
+ fi
+ done
+ exit $totalfailed
+)
+exit $?
) 9>$SMBD_TEST_FIFO
-failed=$?
-
-kill `cat $PIDDIR/smbd.pid`
+totalfailed=$?
+
+smbd_PID=`cat $PIDDIR/smbd.pid`
+waitforpid $smbd_PID 20 || {
+ echo "smbd process $1 took more than 20 seconds to exit, killing"
+ kill -9 $smbd_PID
+}
+
+if [ "$TEST_LDAP"x = "yesx" ]; then
+ if test -z "$FEDORA_DS_PREFIX"; then
+ kill `cat $PIDDIR/slapd.pid`
+ else
+ $LDAPDIR/slapd-samba4/stop-slapd
+ fi
+fi
END=`date`
-echo "START: $START ($0)";
-echo "END: $END ($0)";
+echo "START: $START ($ARG0)";
+echo "END: $END ($ARG0)";
# if there were any valgrind failures, show them
count=`find $PREFIX -name 'valgrind.log*' | wc -l`
if [ "$count" != 0 ]; then
for f in $PREFIX/valgrind.log*; do
- if [ -s $f ]; then
+ if [ -s $f ] && grep -v DWARF2.CFI.reader $f > /dev/null; then
echo "VALGRIND FAILURE";
- failed=`expr $failed + 1`
+ totalfailed=`expr $totalfailed + 1`
cat $f
fi
done
fi
-teststatus $0 $failed
+teststatus $ARG0 $totalfailed