At file:///home/jelmer/bzr.samba/4.0-envs/

------------------------------------------------------------
revno: 11691
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Jelmer Vernooij <[EMAIL PROTECTED]>
branch nick: 4.0-envs
timestamp: Wed 2007-03-21 01:14:56 +0100
message:
  Move more target-specific code into a separate Samba4 module.
modified:
  source/script/tests/Samba4.pm  svn-v2:[EMAIL PROTECTED]
  source/script/tests/selftest.pl svn-v2:[EMAIL PROTECTED]
=== modified file 'source/script/tests/Samba4.pm'
--- a/source/script/tests/Samba4.pm     2007-03-15 15:11:04 +0000
+++ b/source/script/tests/Samba4.pm     2007-03-21 00:14:56 +0000
@@ -13,17 +13,17 @@
 use FindBin qw($RealBin);
 use POSIX;
 
-sub new($$) {
-       my ($classname, $bindir) = @_;
-       my $self = { bindir => $bindir };
+sub new($$$$) {
+       my ($classname, $bindir, $ldap, $setupdir) = @_;
+       my $self = { ldap => $ldap, bindir => $bindir, setupdir => $setupdir };
        bless $self;
        return $self;
 }
 
 sub slapd_start($$$)
 {
-        my $count = 0;
-       my ($bindir, $conf, $uri) = @_;
+    my $count = 0;
+       my ($self, $conf, $uri) = @_;
        # running slapd in the background means it stays in the same process 
group, so it can be
        # killed by timelimit
        if (defined($ENV{FEDORA_DS_PREFIX})) {
@@ -34,10 +34,10 @@
                system("slapd -d$ENV{OPENLDAP_LOGLEVEL} -f $conf -h $uri > 
$ENV{LDAPDIR}/logs 2>&1 &");
                $ENV{PATH} = $oldpath;
        }
-       while (system("$bindir/ldbsearch -H $uri -s base -b \"\" 
supportedLDAPVersion > /dev/null") != 0) {
+       while (system("$self->{bindir}/ldbsearch -H $uri -s base -b \"\" 
supportedLDAPVersion > /dev/null") != 0) {
                $count++;
                if ($count > 10) {
-                   slapd_stop();
+                   $self->slapd_stop();
                    return 0;
                }
                sleep(1);
@@ -45,8 +45,9 @@
        return 1;
 }
 
-sub slapd_stop()
+sub slapd_stop($)
 {
+       my ($self) = @_;
        if (defined($ENV{FEDORA_DS_PREFIX})) {
                system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
        } else {
@@ -57,17 +58,26 @@
        }
 }
 
-sub smbd_check_or_start($$$$$$) 
+sub smbd_check_or_start($$$$) 
 {
-       my ($self, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, 
$conffile) = @_;
-       return 0 if ( -p $test_fifo );
+       my ($self, $env_vars, $socket_wrapper_dir, $max_time) = @_;
+       return 0 if ( -p $env_vars->{SMBD_TEST_FIFO});
+
+       # Start slapd before smbd
+       if ($self->{ldap}) {
+               $self->slapd_start($ENV{SLAPD_CONF}, $ENV{LDAP_URI}) or 
+                       die("couldn't start slapd");
+
+               print "LDAP PROVISIONING...";
+               $self->provision_ldap();
+       }
 
        warn("Not using socket wrapper, but also not running as root. Will not 
be able to listen on proper ports") unless
                defined($socket_wrapper_dir) or $< == 0;
 
-       unlink($test_fifo);
-       POSIX::mkfifo($test_fifo, 0700);
-       unlink($test_log);
+       unlink($env_vars->{SMBD_TEST_FIFO});
+       POSIX::mkfifo($env_vars->{SMBD_TEST_FIFO}, 0700);
+       unlink($env_vars->{SMBD_TEST_LOG});
        
        my $valgrind = "";
        if (defined($ENV{SMBD_VALGRIND})) {
@@ -77,19 +87,19 @@
        print "STARTING SMBD... $self->{bindir}";
        my $pid = fork();
        if ($pid == 0) {
-               open STDIN, $test_fifo;
-               open STDOUT, ">$test_log";
+               open STDIN, $env_vars->{SMBD_TEST_FIFO};
+               open STDOUT, ">$env_vars->{SMBD_TEST_LOG}";
                open STDERR, '>&STDOUT';
                my $optarg = "";
                if (defined($max_time)) {
                        $optarg = "--maximum-runtime=$max_time ";
                }
-               my $ret = system("$valgrind $self->{bindir}/smbd $optarg -s 
$conffile -M single -i --leak-report-full");
+               my $ret = system("$valgrind $self->{bindir}/smbd $optarg -s 
$env_vars->{CONFFILE} -M single -i --leak-report-full");
                if ($? == -1) {
                        print "Unable to start smbd: $ret: $!\n";
                        exit 1;
                }
-               unlink($test_fifo);
+               unlink($env_vars->{SMBD_TEST_FIFO});
                unlink(<$socket_wrapper_dir/*>) if 
(defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
                my $exit = $? >> 8;
                if ( $ret == 0 ) {
@@ -104,6 +114,8 @@
        }
        print "DONE\n";
 
+       open(DATA, ">$env_vars->{SMBD_TEST_FIFO}");
+
        return $pid;
 }
 
@@ -135,19 +147,43 @@
                $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_ldap($$)
+sub provision_ldap($)
 {
-       my ($self, $setupdir) = @_;
-    system("$self->{bindir}/smbscript $setupdir/provision 
$ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}") 
and
-               die("LDAP PROVISIONING failed: $self->{bindir}/smbscript 
$setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" 
--ldap-backend=$ENV{LDAP_URI}");
+       my ($self) = @_;
+    system("$self->{bindir}/smbscript $self->{setupdir}/provision 
$ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}") 
and
+               die("LDAP PROVISIONING failed: $self->{bindir}/smbscript 
$self->{setupdir}/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" 
--ldap-backend=$ENV{LDAP_URI}");
 }
 
 sub stop($)
 {
        my ($self) = @_;
+
+       close(DATA);
+
+       sleep(2);
+
+       my $failed = $? >> 8;
+
+       if (-f "$ENV{PIDDIR}/smbd.pid" ) {
+               open(IN, "<$ENV{PIDDIR}/smbd.pid") or die("unable to open smbd 
pid file");
+               kill 9, <IN>;
+               close(IN);
+       }
+
+       $self->slapd_stop() if ($self->{ldap});
+
+       return $failed;
+}
+
+sub setup_env($$)
+{
+       my ($self, $name) = @_;
 }
 
 1;

=== modified file 'source/script/tests/selftest.pl'
--- a/source/script/tests/selftest.pl   2007-03-15 15:11:04 +0000
+++ b/source/script/tests/selftest.pl   2007-03-21 00:14:56 +0000
@@ -90,8 +90,6 @@
 
 =item I<VALGRIND>
 
-=item I<TEST_LDAP>
-
 =item I<TLS_ENABLED>
 
 =item I<srcdir>
@@ -131,6 +129,7 @@
 my $opt_skip = undef;
 my $opt_verbose = 0;
 my $opt_testenv = 0;
+my $opt_ldap = undef;
 
 my $srcdir = ".";
 my $builddir = ".";
@@ -329,7 +328,8 @@
                'srcdir=s' => \$srcdir,
                'builddir=s' => \$builddir,
                'verbose' => \$opt_verbose,
-               'testenv' => \$opt_testenv
+               'testenv' => \$opt_testenv,
+               'ldap' => \$opt_ldap,
            );
 
 exit(1) if (not $result);
@@ -338,18 +338,25 @@
 
 my $tests = shift;
 
-my $torture_maxtime = $ENV{TORTURE_MAXTIME};
-unless (defined($torture_maxtime)) {
-       $torture_maxtime = 1200;
-}
-
 # quick hack to disable rpc validation when using valgrind - its way too slow
 unless (defined($ENV{VALGRIND})) {
        $ENV{VALIDATE} = "validate";
 }
 
 my $old_pwd = "$RealBin/../..";
-my $ldap = (defined($ENV{TEST_LDAP}) and ($ENV{TEST_LDAP} eq "yes"))?1:0;
+my $ldap = 0;
+if (defined($ENV{TEST_LDAP})) {
+       $ldap = ($ENV{TEST_LDAP} eq "yes");
+}
+if (defined($opt_ldap)) {
+       $ldap = $opt_ldap;
+}
+
+my $torture_maxtime = ($ENV{TORTURE_MAXTIME} or 1200);
+if ($ldap) {
+       # LDAP is slow
+       $torture_maxtime *= 2;
+}
 
 $prefix =~ s+//+/+;
 $ENV{PREFIX} = $prefix;
@@ -381,17 +388,13 @@
 my $target;
 
 if ($opt_target eq "samba4") {
-       $target = new Samba4("$srcdir/bin");
+       $target = new Samba4("$srcdir/bin", $ldap, "$srcdir/setup");
+} elsif ($opt_target eq "samba3") {
+       $target = new Samba3("$srcdir/bin", "$srcdir/setup");
 } elsif ($opt_target eq "win") {
        $target = new Windows();
 }
 
-my $testenv_vars;
-
-$testenv_vars = $target->provision("dc", "$prefix/dc");
-
-foreach (keys %$testenv_vars) { $ENV{$_} = $testenv_vars->{$_}; }
-
 if ($opt_socket_wrapper_pcap) {
        $ENV{SOCKET_WRAPPER_PCAP_FILE} = $opt_socket_wrapper_pcap;
        # Socket wrapper pcap implies socket wrapper
@@ -405,16 +408,10 @@
        print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n";
 }
 
-# Start slapd before smbd
-if ($ldap) {
-       Samba4::slapd_start($bindir, $ENV{SLAPD_CONF}, $ENV{LDAP_URI}) or 
die("couldn't start slapd");
-
-    print "LDAP PROVISIONING...";
-       $target->provision_ldap("$srcdir/setup");
-
-    # LDAP is slow
-       $torture_maxtime *= 2;
-}
+my $testenv_vars;
+$testenv_vars = $target->provision("dc", "$prefix/dc");
+
+foreach (keys %$testenv_vars) { $ENV{$_} = $testenv_vars->{$_}; }
 
 if (defined($opt_expected_failures)) {
        open(KNOWN, "<$opt_expected_failures") or die("unable to read known 
failures file: $!");
@@ -434,16 +431,9 @@
        close(SKIP);
 }
 
-$ENV{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo";
-$ENV{SMBD_TEST_LOG} = "$prefix/smbd_test.log";
-
 SocketWrapper::set_default_iface(1);
-my $max_time = 5400;
-if (defined($ENV{SMBD_MAX_TIME})) {
-       $max_time = $ENV{SMBD_MAX_TIME};
-}
-$target->smbd_check_or_start($ENV{SMBD_TEST_FIFO}, $ENV{SMBD_TEST_LOG}, 
-                       $socket_wrapper_dir, $max_time, $ENV{CONFFILE});
+$target->smbd_check_or_start($testenv_vars, $socket_wrapper_dir, 
+       ($ENV{SMBD_MAX_TIME} or 5400));
 
 SocketWrapper::set_default_iface(6);
 
@@ -466,8 +456,6 @@
 $ENV{TORTURE_OPTIONS} = join(' ', @torture_options);
 print "OPTIONS $ENV{TORTURE_OPTIONS}\n";
 
-open(DATA, ">$ENV{SMBD_TEST_FIFO}");
-
 my @todo = ();
 
 if ($opt_quick) {
@@ -503,7 +491,7 @@
 delete $ENV{DOMAIN};
 
 if ($opt_testenv) {
-       my $term = $ENV{TERM} or "xterm";
+       my $term = ($ENV{TERM} or "xterm");
        system("$term -e 'echo -e \"Welcome to the Samba4 Test environment
 This matches the client environment used in make test
 smbd is pid `cat \$PIDDIR/smbd.pid`
@@ -520,6 +508,7 @@
                my $cmd = $$_[2];
                $cmd =~ s/([\(\)])/\\$1/g;
                my $name = $$_[0];
+               my $envname = $$_[1];
                
                if (skip($name)) {
                        print "SKIPPED: $name\n";
@@ -527,6 +516,8 @@
                        next;
                }
 
+               $target->setup_env($envname);
+
                if ($from_build_farm) {
                        run_test_buildfarm($name, $cmd, $i, $suitestotal);
                } else {
@@ -537,21 +528,7 @@
 
 print "\n";
 
-$target->stop();
-
-close(DATA);
-
-sleep(2);
-
-my $failed = $? >> 8;
-
-if (-f "$ENV{PIDDIR}/smbd.pid" ) {
-       open(IN, "<$ENV{PIDDIR}/smbd.pid") or die("unable to open smbd pid 
file");
-       kill 9, <IN>;
-       close(IN);
-}
-
-Samba4::slapd_stop() if ($ldap);
+my $failed = $target->stop();
 
 my $end = time();
 my $duration = ($end-$start);

Reply via email to