Rev 11691: Move more target-specific code into a separate Samba4 module. in file:///home/jelmer/bzr.samba/4.0-envs/

Jelmer Vernooij jelmer at samba.org
Wed Mar 21 00:15:23 GMT 2007


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

------------------------------------------------------------
revno: 11691
revision-id: jelmer at samba.org-20070321001456-rgtd7i7d5jyx3cfe
parent: jelmer at samba.org-20070320223718-21apjlc6towj6rll
committer: Jelmer Vernooij <jelmer at samba.org>
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:21707 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscript%2ftests%2fSamba4.pm
  source/script/tests/selftest.pl svn-v2:20693 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscript%2ftests%2fselftest.pl
=== 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);



More information about the samba-cvs mailing list