1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-30 20:23:49 +03:00

r14632: add basic 'make test' using samba4's smbtorture

I'll try to add some tests using samba3's smbtorture and smbclient
later.

can someone check if this would be save to run on the build-farm
without leaking child processes...

metze
This commit is contained in:
Stefan Metzmacher
2006-03-21 22:16:44 +00:00
committed by Gerald (Jerry) Carter
parent 7163c68605
commit 899fd6808e
9 changed files with 478 additions and 274 deletions

View File

@@ -1,82 +0,0 @@
##
## library file for test functions
##
##
## start/stop smbd daemon
##
check_smbd_running()
{
## the smbcontrol ping will return a 0 on success
smbcontrol $CONFIGURATION smbd ping 2>&1 > /dev/null
}
start_smbd()
{
echo "Starting smbd...."
smbd $CONFIGURATION || return $?
sleep 1
smbcontrol $CONFIGURATION `cat $PIDDIR/smbd.pid` ping 2>&1 > /dev/null || return $?
}
stop_smbd()
{
smbd_pid=`cat $PIDDIR/smbd.pid`
echo "Shutting down smbd (pid $smbd_pid)..."
## belt and braces; first kill and then send a shutdown message
kill -TERM $smbd_pid
smbcontrol $CONFIGURATION smbd shutdown
## check to see if smbd is already running
check_smbd_running
if test $? = 0; then
echo "Unable to stop smbd!"
exit 2
fi
}
##
## start/stop smbd daemon
##
check_nmbd_running()
{
## the smbcontrol ping will return a 0 on success
smbcontrol $CONFIGURATION nmbd ping 2>&1 > /dev/null
}
start_nmbd()
{
echo "Starting nmbd...."
nmbd $CONFIGURATION || return $?
sleep 1
# smbcontrol $CONFIGURATION `cat $PIDDIR/nmbd.pid` ping 2>&1 > /dev/null || return $?
kill -0 `cat $PIDDIR/nmbd.pid`
}
stop_nmbd()
{
nmbd_pid=`cat $PIDDIR/nmbd.pid`
echo "Shutting down nmbd (pid $nmbd_pid)..."
## belt and braces; first kill and then send a shutdown message
kill -TERM $nmbd_pid 2> /dev/null
sleep 1
## check to see if smbd is already running
kill -0 $nmbd_pid 2> /dev/null
if test $? = 0; then
echo "Unable to stop nmbd!"
exit 2
fi
}

View File

@@ -1,129 +0,0 @@
#!/bin/sh
if [ "x$1" = "x" ]; then
echo "$0 <directory>"
exit 1
fi
if [ $# = 2 ]; then
testnum=$2
fi
##
## create the test directory
##
PREFIX=`echo $1 | sed s+//+/+`
mkdir -p $PREFIX || exit $?
OLD_PWD=`pwd`
cd $PREFIX || exit $?
export PREFIX_ABS=`pwd`
cd $OLD_PWD
##
## setup the various environment variables we need
##
USERNAME=`whoami`
PASSWORD=test
SRCDIR=`pwd`
SCRIPTDIR=$SRCDIR/script/tests
SHRDIR=$PREFIX_ABS/tmp
LIBDIR=$PREFIX_ABS/lib
PIDDIR=$PREFIX_ABS/pid
CONFFILE=$LIBDIR/smb.conf
PRIVATEDIR=$PREFIX_ABS/private
LOCKDIR=$PREFIX_ABS/lockdir
LOGDIR=$PREFIX_ABS/logs
SOCKET_WRAPPER_DIR=$PREFIX_ABS/sockwrap
CONFIGURATION="-s $CONFFILE"
PATH=`pwd`/bin:$PATH
export PREFIX_ABS CONFIGURATION CONFFILE PATH SOCKET_WRAPPER_DIR DOMAIN
export PRIVATEDIR LIBDIR PIDDIR LOCKDIR LOGDIR
export SRCDIR SCRIPTDIR
export USERNAME PASSWORD
##
## verify that we were built with --enable-socket-wrapper
##
if test "x`smbd -b | grep SOCKET_WRAPPER`" = "x"; then
echo "***"
echo "*** You must include --enable-socket-wrapper when compiling Samba"
echo "*** in order to execute 'make test'. Exiting...."
echo "***"
exit 1
fi
##
## create the test directory layout
##
/bin/rm -rf $PREFIX/*
mkdir -p $PRIVATEDIR $LIBDIR $PIDDIR $LOCKDIR $LOGDIR $SOCKET_WRAPPER_DIR
##
## Create the common config include file with the basic settings
##
cat >$LIBDIR/common.conf<<EOF
netbios name = LOCALHOST
workgroup = SAMBA-TEST
private dir = $PRIVATEDIR
pid directory = $PIDDIR
lock directory = $LOCKDIR
log file = $LOGDIR/log.%m
log level = 0
passdb backend = tdbsam
interfaces = lo
bind interfaces only = yes
panic action = $SCRIPTDIR/gdb_backtrace %d
EOF
cat >$LIBDIR/smb.conf<<EOF
[global]
include = $LIBDIR/common.conf
EOF
##
## create a test account
##
(echo $PASSWORD; echo $PASSWORD) | smbpasswd -c $LIBDIR/smb.conf -L -s -a $USERNAME
##
## ready to go...now loop through the tests
##
if [ -f $SCRIPTDIR/t_$testnum.sh ]; then
testfile=$SCRIPTDIR/t_$testnum.sh
echo ">>>>>> Starting test driver `basename $testfile` <<<<<"
sh $testfile
if [ $? = 0 ]; then
echo ">>>>> test ok <<<<<"
else
echo ">>>>> test failed <<<<<"
fi
exit 0
fi
for testfile in `ls $SCRIPTDIR/t_*sh | sort`; do
echo " "
echo ">>>>>> Starting test driver `basename $testfile` <<<<<"
sh $testfile
if [ $? = 0 ]; then
echo ">>>>> test ok <<<<<"
else
echo ">>>>> test failed <<<<<"
fi
done

194
source/script/tests/selftest.sh Executable file
View File

@@ -0,0 +1,194 @@
#!/bin/sh
if [ $# != 3 ]; then
echo "$0 <directory> <all | quick> <smbtorture4>"
exit 1
fi
SMBTORTURE4=$3
TESTS=$2
##
## create the test directory
##
PREFIX=`echo $1 | sed s+//+/+`
mkdir -p $PREFIX || exit $?
OLD_PWD=`pwd`
cd $PREFIX || exit $?
export PREFIX_ABS=`pwd`
cd $OLD_PWD
if [ -z "$TORTURE_MAXTIME" ]; then
TORTURE_MAXTIME=300
fi
##
## setup the various environment variables we need
##
SERVER=localhost
USERNAME=`whoami`
PASSWORD=test
SRCDIR=`pwd`
SCRIPTDIR=$SRCDIR/script/tests
SHRDIR=$PREFIX_ABS/tmp
LIBDIR=$PREFIX_ABS/lib
PIDDIR=$PREFIX_ABS/pid
CONFFILE=$LIBDIR/smb.conf
COMMONCONFFILE=$LIBDIR/common.conf
PRIVATEDIR=$PREFIX_ABS/private
LOCKDIR=$PREFIX_ABS/lockdir
LOGDIR=$PREFIX_ABS/logs
SOCKET_WRAPPER_DIR=$PREFIX/sw
CONFIGURATION="-s $CONFFILE"
export PREFIX_ABS CONFIGURATION CONFFILE PATH SOCKET_WRAPPER_DIR DOMAIN
export PRIVATEDIR LIBDIR PIDDIR LOCKDIR LOGDIR
export SRCDIR SCRIPTDIR
export USERNAME PASSWORD
export SMBTORTURE4
PATH=bin:$PATH
export PATH
##
## verify that we were built with --enable-socket-wrapper
##
if test "x`smbd -b | grep SOCKET_WRAPPER`" = "x"; then
echo "***"
echo "*** You must include --enable-socket-wrapper when compiling Samba"
echo "*** in order to execute 'make test'. Exiting...."
echo "***"
exit 1
fi
##
## create the test directory layout
##
echo -n "CREATE TEST ENVIRONMENT IN '$PREFIX'"...
/bin/rm -rf $PREFIX/*
mkdir -p $PRIVATEDIR $LIBDIR $PIDDIR $LOCKDIR $LOGDIR $SOCKET_WRAPPER_DIR
mkdir -p $PREFIX_ABS/tmp
chmod 777 $PREFIX_ABS/tmp
##
## Create the common config include file with the basic settings
##
cat >$COMMONCONFFILE<<EOF
netbios name = LOCALHOST
workgroup = SAMBA-TEST
private dir = $PRIVATEDIR
pid directory = $PIDDIR
lock directory = $LOCKDIR
log file = $LOGDIR/log.%m
log level = 0
passdb backend = tdbsam
name resolve order = bcast
interfaces = 127.0.0.1/8
bind interfaces only = yes
panic action = $SCRIPTDIR/gdb_backtrace %d
EOF
cat >$CONFFILE<<EOF
[global]
include = $COMMONCONFFILE
[tmp]
path = $PREFIX_ABS/tmp
read only = no
EOF
##
## create a test account
##
(echo $PASSWORD; echo $PASSWORD) | \
smbpasswd -c $CONFFILE -L -s -a $USERNAME >/dev/null || exit 1
echo "DONE";
if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
CONFIGURATION="$CONFIGURATION --option=\"torture:progress=no\""
fi
SERVER_TEST_FIFO="$PREFIX/server_test.fifo"
export SERVER_TEST_FIFO
NMBD_TEST_LOG="$PREFIX/nmbd_test.log"
export NMBD_TEST_LOG
SMBD_TEST_LOG="$PREFIX/smbd_test.log"
export SMBD_TEST_LOG
# start off with 0 failures
failed=0
export failed
. $SCRIPTDIR/test_functions.sh
SOCKET_WRAPPER_DEFAULT_IFACE=1
export SOCKET_WRAPPER_DEFAULT_IFACE
samba3_check_or_start
# ensure any one smbtorture call doesn't run too long
# and smbtorture will use 127.0.0.26 as source address by default
SOCKET_WRAPPER_DEFAULT_IFACE=26
export SOCKET_WRAPPER_DEFAULT_IFACE
TORTURE4_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'
TORTURE4_OPTIONS="--maximum-runtime=$TORTURE_MAXTIME --option=interfaces=$TORTURE4_INTERFACES $CONFIGURATION"
export TORTURE4_OPTIONS
if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
TORTURE4_OPTIONS="$TORTURE4_OPTIONS --option=\"torture:progress=no\""
fi
##
## ready to go...now loop through the tests
##
START=`date`
(
# give time for nbt server to register its names
echo delaying for nbt name registration
sleep 4
# This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init
bin/nmblookup $CONFIGURATION -U $SERVER $SERVER
bin/nmblookup $CONFIGURATION -U $SERVER $SERVER
bin/nmblookup $CONFIGURATION -U $SERVER $SERVER
failed=0
. $SCRIPTDIR/tests_$TESTS.sh
exit $failed
)
failed=$?
samba3_stop_sig_term
END=`date`
echo "START: $START ($0)";
echo "END: $END ($0)";
# 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
echo "VALGRIND FAILURE";
failed=`expr $failed + 1`
cat $f
fi
done
fi
sleep 2
samba3_stop_sig_kill
teststatus $0 $failed

View File

@@ -1,30 +0,0 @@
#!/bin/sh
. $SCRIPTDIR/functions
cat >$CONFFILE<<EOF
[global]
include = $LIBDIR/common.conf
smb ports = 139
[test]
path = $PREFIX_ABS/tmp
read only = no
EOF
##
## Test code
##
/bin/rm -rf $PREFIX_ABS/tmp
mkdir $PREFIX_ABS/tmp
chmod 1777 $PREFIX_ABS/tmp
start_smbd || exit $?
smbclient $CONFIGURATION -L localhost -N -p 139
ret=$?
stop_smbd
exit $ret

View File

@@ -1,30 +0,0 @@
#!/bin/sh
. $SCRIPTDIR/functions
cat >$CONFFILE<<EOF
[global]
include = $LIBDIR/common.conf
[test]
path = $PREFIX_ABS/tmp
read only = no
EOF
##
## Test code
##
/bin/rm -rf $PREFIX_ABS/tmp
mkdir $PREFIX_ABS/tmp
chmod 1777 $PREFIX_ABS/tmp
start_smbd || exit $?
smbtorture //localhost/test -U${USERNAME}%${PASSWORD} FDPASS
ret=$?
stop_smbd
exit $ret

View File

@@ -0,0 +1,221 @@
samba3_stop_sig_term() {
RET=0
kill -USR1 `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1 || \
kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` || RET=$?
kill -USR1 `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1 || \
kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` || RET=$?
return $RET;
}
samba3_stop_sig_kill() {
kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1
kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1
return 0;
}
samba3_check_or_start() {
if [ -n "$SERVER_TEST_FIFO" ];then
trap samba3_stop_sig_kill SIGINT SIGQUIT
trap samba3_stop_sig_kill SIGTERM
if [ -p "$SERVER_TEST_FIFO" ];then
return 0;
fi
if [ -n "$SOCKET_WRAPPER_DIR" ];then
if [ -d "$SOCKET_WRAPPER_DIR" ]; then
rm -f $SOCKET_WRAPPER_DIR/*
else
mkdir -p $SOCKET_WRAPPER_DIR
fi
fi
rm -f $SERVER_TEST_FIFO
mkfifo $SERVER_TEST_FIFO
rm -f $NMBD_TEST_LOG
echo -n "STARTING NMBD..."
((
if [ -z "$NMBD_MAXTIME" ]; then
NMBD_MAXTIME=2700
fi
timelimit $NMBD_MAXTIME $SMBD_VALGRIND $SRCDIR/bin/nmbd -F -S --no-process-group -d1 -s $CONFFILE > $NMBD_TEST_LOG 2>&1 &
TIMELIMIT_NMBD_PID=$!
echo $TIMELIMIT_NMBD_PID > $PIDDIR/timelimit.nmbd.pid
wait $TIMELIMIT_NMBD_PID
ret=$?;
rm -f $SERVER_TEST_FIFO
if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
rm -f $SOCKET_WRAPPER_DIR/*
fi
if [ x"$ret" = x"0" ];then
echo "nmbd exits with status $ret";
echo "nmbd exits with status $ret" >>$NMBD_TEST_LOG;
elif [ x"$ret" = x"137" ];then
echo "nmbd got SIGXCPU and exits with status $ret!"
echo "nmbd got SIGXCPU and exits with status $ret!">>$NMBD_TEST_LOG;
else
echo "nmbd failed with status $ret!"
echo "nmbd failed with status $ret!">>$NMBD_TEST_LOG;
fi
exit $ret;
) || exit $? &) 2>/dev/null || exit $?
echo "DONE"
rm -f $SMBD_TEST_LOG
echo -n "STARTING SMBD..."
((
if [ -z "$SMBD_MAXTIME" ]; then
SMBD_MAXTIME=2700
fi
timelimit $SMBD_MAXTIME $SMBD_VALGRIND $SRCDIR/bin/smbd -F -S --no-process-group -d1 -s $CONFFILE > $SMBD_TEST_LOG 2>&1 &
TIMELIMIT_SMBD_PID=$!
echo $TIMELIMIT_SMBD_PID > $PIDDIR/timelimit.smbd.pid
wait $TIMELIMIT_SMBD_PID
ret=$?;
rm -f $SERVER_TEST_FIFO
if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
rm -f $SOCKET_WRAPPER_DIR/*
fi
if [ x"$ret" = x"0" ];then
echo "smbd exits with status $ret";
echo "smbd exits with status $ret" >>$SMBD_TEST_LOG;
elif [ x"$ret" = x"137" ];then
echo "smbd got SIGXCPU and exits with status $ret!"
echo "smbd got SIGXCPU and exits with status $ret!">>$SMBD_TEST_LOG;
else
echo "smbd failed with status $ret!"
echo "smbd failed with status $ret!">>$SMBD_TEST_LOG;
fi
exit $ret;
) || exit $? &) 2>/dev/null || exit $?
echo "DONE"
fi
return 0;
}
samba3_nmbd_test_log() {
if [ -n "$NMBD_TEST_LOG" ];then
if [ -r "$NMBD_TEST_LOG" ];then
return 0;
fi
fi
return 1;
}
samba3_smbd_test_log() {
if [ -n "$SMBD_TEST_LOG" ];then
if [ -r "$SMBD_TEST_LOG" ];then
return 0;
fi
fi
return 1;
}
samba3_check_only() {
if [ -n "$SERVER_TEST_FIFO" ];then
if [ -p "$SERVER_TEST_FIFO" ];then
return 0;
fi
return 1;
fi
return 0;
}
testit() {
if [ -z "$PREFIX" ]; then
PREFIX=test_prefix
mkdir -p $PREFIX
fi
name=$1
shift 1
SERVERS_ARE_UP="no"
TEST_LOG="$PREFIX/test_log.$$"
trap "rm -f $TEST_LOG" EXIT
cmdline="$*"
if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
echo "--==--==--==--==--==--==--==--==--==--==--"
echo "Running test $name (level 0 stdout)"
echo "--==--==--==--==--==--==--==--==--==--==--"
date
echo "Testing $name"
else
echo "Testing $name ($failed)"
fi
samba3_check_only && SERVERS_ARE_UP="yes"
if [ x"$SERVERS_ARE_UP" != x"yes" ];then
if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
echo "SERVERS are down! Skipping: $cmdline"
echo "=========================================="
echo "TEST SKIPPED: $name (reason SERVERS are down)"
echo "=========================================="
else
echo "TEST SKIPPED: $name (reason SERVERS are down)"
fi
return 1
fi
( $cmdline > $TEST_LOG 2>&1 )
status=$?
if [ x"$status" != x"0" ]; then
echo "TEST OUTPUT:"
cat $TEST_LOG;
samba3_nmbd_test_log && echo "NMBD OUTPUT:";
samba3_nmbd_test_log && cat $NMBD_TEST_LOG;
samba3_smbd_test_log && echo "SMBD OUTPUT:";
samba3_smbd_test_log && cat $SMBD_TEST_LOG;
rm -f $TEST_LOG;
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
return 1;
fi
rm -f $TEST_LOG;
if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
echo "ALL OK: $cmdline"
echo "=========================================="
echo "TEST PASSED: $name"
echo "=========================================="
fi
return 0;
}
testok() {
name=`basename $1`
failed=$2
if [ x"$failed" = x"0" ];then
:
else
echo "$failed TESTS FAILED or SKIPPED ($name)";
fi
exit $failed
}
teststatus() {
name=`basename $1`
failed=$2
if [ x"$failed" = x"0" ];then
echo "TEST STATUS: $failed";
else
echo "TEST STATUS: $failed";
fi
exit $failed
}
if [ -z "$VALGRIND" ]; then
MALLOC_CHECK_=2
export MALLOC_CHECK_
fi

View File

@@ -0,0 +1,52 @@
#!/bin/sh
# this runs the file serving tests that are expected to pass with samba3
if [ $# -lt 3 ]; then
cat <<EOF
Usage: test_posix_s3.sh UNC USERNAME PASSWORD <first> <smbtorture args>
EOF
exit 1;
fi
unc="$1"
username="$2"
password="$3"
start="$4"
shift 4
ADDARGS="$*"
incdir=`dirname $0`
. $incdir/test_functions.sh
tests="BASE-FDPASS BASE-LOCK1 BASE-LOCK2 BASE-LOCK3 BASE-LOCK4"
tests="$tests BASE-LOCK5 BASE-LOCK6 BASE-LOCK7 BASE-UNLINK BASE-ATTR"
tests="$tests BASE-DIR1 BASE-DIR2 BASE-VUID"
tests="$tests BASE-DENY1 BASE-DENY2 BASE-TCON BASE-TCONDEV BASE-RW1"
tests="$tests BASE-DENY3 BASE-XCOPY BASE-OPEN BASE-DENYDOS"
tests="$tests BASE-PROPERTIES BASE-MANGLE BASE-DELETE"
tests="$tests BASE-CHKPATH BASE-SECLEAK BASE-TRANS2 BASE-NEGNOWAIT"
tests="$tests BASE-NTDENY1 BASE-NTDENY2 BASE-RENAME BASE-OPENATTR BASE-DISCONNECT"
tests="$tests RAW-QFSINFO RAW-QFILEINFO RAW-SFILEINFO-BUG RAW-SFILEINFO"
tests="$tests RAW-LOCK RAW-MKDIR RAW-SEEK RAW-CONTEXT RAW-MUX RAW-OPEN RAW-WRITE"
tests="$tests RAW-UNLINK RAW-READ RAW-CLOSE RAW-IOCTL RAW-SEARCH RAW-CHKPATH RAW-RENAME"
tests="$tests RAW-EAS RAW-STREAMS RAW-ACLS"
soon="BASE-CHARSET RAW-OPLOCK RAW-NOTIFY BASE-DELAYWRITE"
#echo "WARNING: Skipping tests $soon"
#testit "my first samba3 test" $SRCDIR/bin/smbclient $CONFIGURATION -L 127.0.0.1 -N -p 139 || failed=`expr $failed + 1`
tests="BASE-FDPASS BASE-VUID BASE-UNLINK BASE-ATTR BASE-DIR2 BASE-TCON BASE-OPEN BASE-CHKPATH"
failed=0
for t in $tests; do
if [ ! -z "$start" -a "$start" != $t ]; then
continue;
fi
start=""
name="$t"
testit "$name" $VALGRIND $SMBTORTURE4 $TORTURE_OPTIONS $ADDARGS $unc -U"$username"%"$password" $t || failed=`expr $failed + 1`
done
testok $0 $failed

View File

@@ -0,0 +1,8 @@
if [ -n "$SMBTORTURE4" ];then
echo "Running Tests with Samba4's smbtorture"
$SMBTORTURE4 --version
$SCRIPTDIR/test_posix_s3.sh //$SERVER/tmp $USERNAME $PASSWORD "" || failed=`expr $failed + $?`
else
echo "Skip Tests with Samba4's smbtorture"
fi