r22185: Initial work on a 'member' test environment'.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 12 Apr 2007 08:33:35 +0000 (08:33 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:49:59 +0000 (14:49 -0500)
source/script/tests/README
source/script/tests/Samba4.pm
source/script/tests/TODO
source/script/tests/mktestmember.sh [new file with mode: 0644]
source/script/tests/test_member.sh [new file with mode: 0755]

index bf7ff1842bd40c456c23d16f1f2ac4a3756955ea..1eb7e7943c9bcf1f74d3c82a4fce99ae88a8f5f3 100644 (file)
@@ -1,4 +1,13 @@
 This directory contains test scripts that are useful for running a
-bunch of tests all at once. I expect it will eventually be hooked into
-a "make test" framework.
+bunch of tests all at once. 
 
+The following environments are currently available:
+
+ - none: No server set up
+ - dc: Domain controller set up. The following environment variables will 
+   be set:
+     * USERNAME
+        * PASSWORD
+        * DOMAIN
+        * REALM
+        * SERVER
index 299bfb97e2d109cbd47189153b81611ac2eb617a..95eaf7f67e8e28980d31203a4cd31b0dd508933f 100644 (file)
@@ -11,7 +11,7 @@ use POSIX;
 
 sub new($$$$) {
        my ($classname, $bindir, $ldap, $setupdir) = @_;
-       my $self = { ldap => $ldap, bindir => $bindir, setupdir => $setupdir };
+       my $self = { vars => {}, ldap => $ldap, bindir => $bindir, setupdir => $setupdir };
        bless $self;
        return $self;
 }
@@ -135,7 +135,24 @@ sub wait_for_start($$)
        system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER} $testenv_vars->{NETBIOSNAME}");
 }
 
-sub provision($$)
+sub provision_member($$$)
+{
+       my ($self, $prefix, $dcvars) = @_;
+       my %ret = ();
+       print "PROVISIONING...";
+       open(IN, "$RealBin/mktestmember.sh $prefix $dcvars->{DOMAIN} $dcvars->{USERNAME} $dcvars->{PASSWORD}|") or die("Unable to setup");
+       while (<IN>) {
+               die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
+               $ret{$1} = $2;
+       }
+       close(IN);
+
+       $ret{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo";
+       $ret{SMBD_TEST_LOG} = "$prefix/smbd_test.log";
+       return \%ret;
+}
+
+sub provision_dc($$)
 {
        my ($self, $prefix) = @_;
        my %ret = ();
@@ -186,22 +203,42 @@ sub setup_env($$$)
        
        if ($envname eq "dc") {
                return $self->setup_dc("$path/dc");
+       } elsif ($envname eq "member") {
+               if (not defined($self->{vars}->{dc})) {
+                       $self->setup_dc("$path/dc");
+               }
+               return $self->setup_member("$path/member", $self->{vars}->{dc});
        } else {
-               die("Samba4 can't provide environment $envname");
+               die("Samba4 can't provide environment '$envname'");
        }
 }
 
+sub setup_member($$$$)
+{
+       my ($self, $path, $dc_vars) = @_;
+
+       my $env = $self->provision_member($path, $dc_vars);
+
+       $self->check_or_start($env, ($ENV{SMBD_MAX_TIME} or 5400));
+
+       $self->wait_for_start($env);
+
+       return $env;
+}
+
 sub setup_dc($$)
 {
        my ($self, $path) = @_;
 
-       my $env = $self->provision($path);
+       my $env = $self->provision_dc($path);
 
        $self->check_or_start($env, 
                ($ENV{SMBD_MAX_TIME} or 5400));
 
        $self->wait_for_start($env);
 
+       $self->{vars}->{dc} = $env;
+
        return $env;
 }
 
index 4d327ce1ea7191d2a2788c25cde94c0085a5edef..42f90188ed82808da3f7e1a47912da680ba84382 100644 (file)
@@ -1,5 +1,3 @@
 - warn about unexpected successes
-- support for environments
 - better way to detect that smbd has finished initialization
-- allow tests to specify what parameters they need
- - UNC / DCERPC binding strings
+- move ldap-specific code into mktestdc.sh
diff --git a/source/script/tests/mktestmember.sh b/source/script/tests/mktestmember.sh
new file mode 100644 (file)
index 0000000..b2d35d7
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+if [ $# -lt 4 ]
+then
+       echo "$0 PREFIX DOMAIN USERNAME PASSWORD"
+       exit 1
+fi
+
+PREFIX=$1
+DOMAIN=$2
+DC_USERNAME=$3
+DC_PASSWORD=$4
+shift 4
+USERNAME=administrator
+PASSWORD=humbolt
+
+SRCDIR=`pwd`
+oldpwd=`dirname $0`/../..
+mkdir -p $PREFIX 
+cd $PREFIX
+PREFIX_ABS=`pwd`
+ETCDIR=$PREFIX_ABS/etc
+NCALRPCDIR=$PREFIX_ABS/ncalrpc
+PIDDIR=$PREFIX_ABS/pid
+PRIVATEDIR=$PREFIX_ABS/private
+LOCKDIR=$PREFIX_ABS/lockdir
+WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbind_socket
+CONFFILE=$ETCDIR/smb.conf
+TMPDIR=$PREFIX_ABS/tmp
+NETBIOSNAME=localmember
+SMBD_LOGLEVEL=1
+
+mkdir -p $PRIVATEDIR $ETCDIR $PIDDIR $NCALRPCDIR $LOCKDIR $TMPDIR
+
+cat >$CONFFILE<<EOF
+[global]
+       netbios name = $NETBIOSNAME
+       workgroup = $DOMAIN
+       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.5/8
+       panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
+       wins support = yes
+       server role = domain member
+       max xmit = 32K
+       server max protocol = SMB2
+       notify:inotify = false
+       ldb:nosync = true
+       system:anonymous = true
+#We don't want to pass our self-tests if the PAC code is wrong
+       gensec:require_pac = true
+       log level = $SMBD_LOGLEVEL
+EOF
+
+PROVISION_OPTIONS="$CONFIGURATION --host-name=$NETBIOSNAME --host-ip=127.0.0.1"
+PROVISION_OPTIONS="$PROVISION_OPTIONS --quiet --domain $DOMAIN --realm $REALM"
+PROVISION_OPTIONS="$PROVISION_OPTIONS --adminpass $PASSWORD --root=$ROOT"
+PROVISION_OPTIONS="$PROVISION_OPTIONS --simple-bind-dn=cn=Manager,$BASEDN --password=$PASSWORD --root=$ROOT"
+$srcdir/bin/smbscript $srcdir/setup/provision $PROVISION_OPTIONS >&2
+
+$srcdir/bin/net join member $DOMAIN -U$DC_USERNAME%$DC_PASSWORD >&2 || {
+       echo "Join failed"
+       exit $?
+}
+
+echo "PREFIX_ABS=$PREFIX_ABS"
+echo "PIDDIR=$PIDDIR"
+echo "SERVER=$SERVER"
+echo "NETBIOSNAME=$NETBIOSNAME"
+echo "DOMAIN=$DOMAIN"
+echo "USERNAME=$USERNAME"
+echo "REALM=$REALM"
+echo "PASSWORD=$PASSWORD"
+echo "SRCDIR=$SRCDIR"
+echo "PREFIX=$PREFIX"
+echo "CONFFILE=$CONFFILE"
+echo "WINBINDD_SOCKET_DIR=$WINBINDD_SOCKET_DIR"
+echo "NCALRPCDIR=$NCALRPCDIR"
+echo "CONFIGURATION=$CONFIGURATION"
diff --git a/source/script/tests/test_member.sh b/source/script/tests/test_member.sh
new file mode 100755 (executable)
index 0000000..798da60
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# add tests to this list as they start passing, so we test
+# that they stay passing
+ncacn_np_tests="RPC-ECHO"
+
+incdir=`dirname $0`
+. $incdir/test_functions.sh
+
+plantest "RPC-ECHO against member server" member $VALGRIND bin/smbtorture $TORTURE_OPTIONS ncacn_np:"\$SERVER" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*"