Rev 11311: Seperate out the bits of the test infrastructure a bit more. in file:///home/jelmer/bzr.samba/4.0-perlselftest/

Jelmer Vernooij jelmer at samba.org
Sun Feb 4 13:00:07 GMT 2007


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

------------------------------------------------------------
revno: 11311
revision-id: jelmer at samba.org-20070204125956-xbmdp49ddnnfk8ta
parent: jelmer at samba.org-20070203190819-y3ks440ony3wlzxr
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 4.0-perlselftest
timestamp: Sun 2007-02-04 13:59:56 +0100
message:
  Seperate out the bits of the test infrastructure a bit more.
added:
  source/script/tests/Samba4.pm  samba4.pm-20070204113348-43jx6uba5ui2h4wd-1
  source/script/tests/SocketWrapper.pm socketwrapper.pm-20070204121117-e3xtgjirr3h3kq0k-1
modified:
  source/script/tests/selftest.pl svn-v2:20693 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscript%2ftests%2fselftest.pl
  source/script/tests/testenv.pl testenv.sh-20070201114140-yqamcl9g11yeseoc-1
=== added file 'source/script/tests/Samba4.pm'
--- a/source/script/tests/Samba4.pm	1970-01-01 00:00:00 +0000
+++ b/source/script/tests/Samba4.pm	2007-02-04 12:59:56 +0000
@@ -0,0 +1,132 @@
+#!/usr/bin/perl
+# Bootstrap Samba and run a number of tests against it.
+# Copyright (C) 2005-2007 Jelmer Vernooij <jelmer at samba.org>
+# Published under the GNU GPL, v3 or later.
+
+package Samba4;
+
+use Exporter;
+ at ISA = qw(Exporter);
+ at EXPORT_OK = qw(slapd_start slapd_stop smbd_check_or_start provision);
+
+use strict;
+use FindBin qw($RealBin);
+
+sub slapd_start($$)
+{
+	my ($conf, $uri) = @_;
+	if (defined($ENV{FEDORA_DS_PREFIX})) {
+		system("$ENV{FEDORA_DS_PREFIX}/lib/fedora-ds/ds_newinst.pl $ENV{FEDORA_DS_INF}") or die("Unable to provision fedora ds ldapd");
+	} else {
+		my $oldpath = $ENV{PATH};
+		$ENV{PATH} = "/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
+		# running slapd in the background means it stays in the same process group, so it can be
+		# killed by timelimit
+		system("slapd -d0 -f $conf -h $uri &");
+		$ENV{PATH} = $oldpath;
+	}
+    return $? >> 8;
+}
+
+sub slapd_stop()
+{
+	if (defined($ENV{FEDORA_DS_PREFIX})) {
+		system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
+	} else {
+		open(IN, "<$ENV{PIDDIR}/slapd.pid") or 
+			die("unable to open slapd pid file");
+		kill 9, <IN>;
+		close(IN);
+	}
+}
+
+sub smbd_check_or_start($$$$$$) 
+{
+	my ($bindir, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, $conffile) = @_;
+	return 0 if ( -p $test_fifo );
+
+	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;
+
+	if (defined($socket_wrapper_dir)) {
+		if ( -d $socket_wrapper_dir ) {
+			unlink <$socket_wrapper_dir/*>;
+		} else {
+			mkdir($socket_wrapper_dir);
+		}
+	}
+
+	unlink($test_fifo);
+	POSIX::mkfifo($test_fifo, 0700);
+	unlink($test_log);
+	
+	my $valgrind = "";
+	if (defined($ENV{SMBD_VALGRIND})) {
+		$valgrind = $ENV{SMBD_VALGRIND};
+	} 
+
+	print "STARTING SMBD...";
+	my $pid = fork();
+	if ($pid == 0) {
+		open STDIN, $test_fifo;
+		open STDOUT, ">$test_log";
+		open STDERR, '>&STDOUT';
+		my $ret = system("$valgrind $bindir/smbd --maximum-runtime=$max_time -s $conffile -M single -i --leak-report-full");
+		if ($? == -1) {
+			print "Unable to start smbd: $ret: $!\n";
+			exit 1;
+		}
+		unlink($test_fifo);
+		unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
+		my $exit = $? >> 8;
+		if ( $ret == 0 ) {
+			print "smbd exits with status $exit\n";
+		} elsif ( $ret & 127 ) {
+			print "smbd got signal ".($ret & 127)." and exits with $exit!\n";
+		} else {
+			$ret = $? >> 8;
+			print "smbd failed with status $exit!\n";
+		}
+		exit $exit;
+	}
+	print "DONE\n";
+
+	return $pid;
+}
+
+sub wait_for_start()
+{
+	# give time for nbt server to register its names
+	print "delaying for nbt name registration\n";
+	sleep(4);
+
+	# This will return quickly when things are up, but be slow if we 
+	# need to wait for (eg) SSL init 
+	system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
+	system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}");
+	system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
+	system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
+	system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
+	system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
+}
+
+sub provision($)
+{
+	my ($prefix) = @_;
+	print "PROVISIONING...";
+	open(IN, "$RealBin/mktestsetup.sh $prefix|") or die("Unable to setup");
+	while (<IN>) {
+		die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
+		$ENV{$1} = $2;
+	}
+	close(IN);
+}
+
+sub provision_ldap($$)
+{
+	my ($bindir, $setupdir) = @_;
+    system("$bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAPI}") or
+		die("LDAP PROVISIONING failed: $bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAPI}");
+}
+
+1;

=== added file 'source/script/tests/SocketWrapper.pm'
--- a/source/script/tests/SocketWrapper.pm	1970-01-01 00:00:00 +0000
+++ b/source/script/tests/SocketWrapper.pm	2007-02-04 12:59:56 +0000
@@ -0,0 +1,34 @@
+#!/usr/bin/perl
+# Bootstrap Samba and run a number of tests against it.
+# Copyright (C) 2005-2007 Jelmer Vernooij <jelmer at samba.org>
+# Published under the GNU GPL, v3 or later.
+
+package SocketWrapper;
+
+use Exporter;
+ at ISA = qw(Exporter);
+ at EXPORT_OK = qw(setup_dir setup_pcap set_default_iface);
+
+use strict;
+use FindBin qw($RealBin);
+
+sub setup_dir($)
+{
+	my ($dir) = @_;
+	$ENV{SOCKET_WRAPPER_DIR} = $dir;
+	return $dir;
+}
+
+sub setup_pcap($)
+{
+	my ($pcap_file) = @_;
+
+}
+
+sub set_default_iface($)
+{
+	my ($i) = @_;
+	$ENV{SOCKET_WRAPPER_DEFAULT_IFACE} = $i;
+}
+
+1;

=== modified file 'source/script/tests/selftest.pl'
--- a/source/script/tests/selftest.pl	2007-02-03 19:08:19 +0000
+++ b/source/script/tests/selftest.pl	2007-02-04 12:59:56 +0000
@@ -111,6 +111,9 @@
 use Getopt::Long;
 use POSIX;
 use Cwd;
+use lib "$RealBin";
+use Samba4;
+use SocketWrapper;
 
 my $opt_help = 0;
 my $opt_target = "samba4";
@@ -121,76 +124,11 @@
 my $opt_immediate = 0;
 my $opt_expected_failures = undef;
 my $opt_verbose = 0;
+
 my $srcdir = ".";
 my $builddir = ".";
 my $prefix = "st";
 
-sub slapd_start($$) {
-	my ($conf, $uri) = @_;
-    my $oldpath = $ENV{PATH};
-    $ENV{PATH} = "/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
-	# running slapd in the background means it stays in the same process group, so it can be
-	# killed by timelimit
-    system("slapd -d0 -f $conf -h $uri &");
-    $ENV{PATH} = $oldpath;
-    return $? >> 8;
-}
-
-sub smbd_check_or_start($$$$$$) 
-{
-	my ($bindir, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, $conffile) = @_;
-	return 0 if ( -p $test_fifo );
-
-	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;
-
-
-	if (defined($socket_wrapper_dir)) {
-		if ( -d $socket_wrapper_dir ) {
-			unlink <$socket_wrapper_dir/*>;
-		} else {
-			mkdir($socket_wrapper_dir);
-		}
-	}
-
-	unlink($test_fifo);
-	POSIX::mkfifo($test_fifo, 0700);
-	unlink($test_log);
-	
-	my $valgrind = "";
-	if (defined($ENV{SMBD_VALGRIND})) {
-		$valgrind = $ENV{SMBD_VALGRIND};
-	} 
-
-	print "STARTING SMBD...";
-	my $pid = fork();
-	if ($pid == 0) {
-		open STDIN, $test_fifo;
-		open STDOUT, ">$test_log";
-		open STDERR, '>&STDOUT';
-		my $ret = system("$valgrind $bindir/smbd --maximum-runtime=$max_time -s $conffile -M single -i --leak-report-full");
-		if ($? == -1) {
-			print "Unable to start smbd: $ret: $!\n";
-			exit 1;
-		}
-		unlink($test_fifo);
-		unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
-		my $exit = $? >> 8;
-		if ( $ret == 0 ) {
-			print "smbd exits with status $exit\n";
-		} elsif ( $ret & 127 ) {
-			print "smbd got signal ".($ret & 127)." and exits with $exit!\n";
-		} else {
-			$ret = $? >> 8;
-			print "smbd failed with status $exit!\n";
-		}
-		exit $exit;
-	}
-	print "DONE\n";
-
-	return $pid;
-}
-
 my $suitesfailed = [];
 my $start = time();
 my @expected_failures = ();
@@ -332,15 +270,6 @@
 	}
 }
 
-sub prepare_socket_wrapper($)
-{
-	my ($prefix) = @_;
-	my $socket_wrapper_dir = undef;
-	$socket_wrapper_dir = "$prefix/w";
-	$ENV{SOCKET_WRAPPER_DIR} = $socket_wrapper_dir;
-	return $socket_wrapper_dir;
-}
-
 sub ShowHelp()
 {
 	print "Samba test runner
@@ -371,7 +300,6 @@
 	exit(0);
 }
 
-
 my $result = GetOptions (
 	    'help|h|?' => \$opt_help,
 		'target=s' => \$opt_target,
@@ -387,9 +315,7 @@
 		'verbose' => \$opt_verbose
 	    );
 
-if (not $result) {
-	exit(1);
-}
+exit(1) if (not $result);
 
 ShowHelp() if ($opt_help);
 
@@ -400,11 +326,9 @@
 	$torture_maxtime = 1200;
 }
 
-# disable rpc validation when using valgrind - its way too slow
-my $valgrind = $ENV{VALGRIND};
-my $validate = undef;
-unless (defined($valgrind)) {
-	$validate = "validate";
+# quick hack to disable rpc validation when using valgrind - its way too slow
+unless (defined($ENV{VALGRIND})) {
+	$ENV{VALIDATE} = "validate";
 }
 
 my $old_pwd = "$RealBin/../..";
@@ -437,13 +361,7 @@
 my @torture_options = ();
 
 if ($opt_target eq "samba4") {
-	print "PROVISIONING...";
-	open(IN, "$RealBin/mktestsetup.sh $prefix|") or die("Unable to setup");
-	while (<IN>) {
-		die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
-		$ENV{$1} = $2;
-	}
-	close(IN);
+	Samba4::provision($prefix);
 } elsif ($opt_target eq "win") {
 	die ("Windows tests will not run without root privileges.") 
 		if (`whoami` ne "root");
@@ -471,22 +389,18 @@
 }
 
 my $socket_wrapper_dir;
-if ( $opt_socket_wrapper) 
+if ($opt_socket_wrapper) 
 {
-	$socket_wrapper_dir = prepare_socket_wrapper($prefix);
+	$socket_wrapper_dir = SocketWrapper::setup_dir("$prefix/w");
 	print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n";
 }
 
 # Start slapd before smbd
 if ($ldap) {
-	if (defined($ENV{FEDORA_DS_PREFIX})) {
-		system("$ENV{FEDORA_DS_PREFIX}/lib/fedora-ds/ds_newinst.pl $ENV{FEDORA_DS_INF}") or die("Unable to provision fedora ds ldapd");
-	} else {
-		slapd_start($ENV{SLAPD_CONF}, $ENV{LDAPI_ESCAPE}) or die("couldn't start slapd");
-	}
+	Samba4::slapd_start($ENV{SLAPD_CONF}, $ENV{LDAPI_ESCAPE}) or die("couldn't start slapd");
+
     print "LDAP PROVISIONING...";
-    system("$bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAPI}") or
-		die("LDAP PROVISIONING failed: $bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAPI}");
+	Samba4::provision_ldap($bindir, $setupdir);
 
     # LDAP is slow
 	$torture_maxtime *= 2;
@@ -506,17 +420,24 @@
 $ENV{SMBD_TEST_FIFO} = $test_fifo;
 $ENV{SMBD_TEST_LOG} = "$prefix/smbd_test.log";
 
-$ENV{SOCKET_WRAPPER_DEFAULT_IFACE} = 1;
+SocketWrapper::set_default_iface(1);
 my $max_time = 5400;
 if (defined($ENV{SMBD_MAX_TIME})) {
 	$max_time = $ENV{SMBD_MAX_TIME};
 }
-smbd_check_or_start($bindir, $test_fifo, $ENV{SMBD_TEST_LOG}, $socket_wrapper_dir, $max_time, $ENV{CONFFILE});
-
-$ENV{SOCKET_WRAPPER_DEFAULT_IFACE} = 6;
-$ENV{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';
-
-push (@torture_options, "--option=interfaces=$ENV{TORTURE_INTERFACES}");
+Samba4::smbd_check_or_start($bindir, $test_fifo, $ENV{SMBD_TEST_LOG}, 
+	                $socket_wrapper_dir, $max_time, $ENV{CONFFILE});
+
+SocketWrapper::set_default_iface(6);
+
+my $interfaces = join(',', ("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"));
+
+push (@torture_options, "--option=interfaces=$interfaces");
 push (@torture_options, $ENV{CONFIGURATION});
 # ensure any one smbtorture call doesn't run too long
 push (@torture_options, "--maximum-runtime=$torture_maxtime");
@@ -555,17 +476,7 @@
 	close(IN) or die("Error creating recipe");
 }
 
-# give time for nbt server to register its names
-print "delaying for nbt name registration\n";
-sleep(4);
-
-# This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 
-system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
-system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}");
-system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
-system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
-system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
-system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
+Samba4::wait_for_start();
 
 # start off with 0 failures
 $ENV{failed} = 0;
@@ -600,15 +511,7 @@
 	close(IN);
 }
 
-if ($ldap) {
-	if (defined($ENV{FEDORA_DS_PREFIX})) {
-		system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
-	} else {
-		open(IN, "<$ENV{PIDDIR}/slapd.pid") or die("unable to open slapd pid file");
-		kill 9, <IN>;
-		close(IN);
-	}
-}
+Samba4::slapd_stop() if ($ldap);
 
 my $end = time();
 my $duration = ($end-$start);

=== modified file 'source/script/tests/testenv.pl'
--- a/source/script/tests/testenv.pl	2007-02-01 14:06:46 +0000
+++ b/source/script/tests/testenv.pl	2007-02-04 12:59:56 +0000
@@ -1,5 +1,13 @@
 #!/usr/bin/perl
 
+use FindBin qw($RealBin);
+use lib "$RealBin";
+
+use Samba4;
+
+Samba4::provision();
+Samba4::smbd_check_or_start();
+
 my $prefix = "st";
 
 open(VARS, "./script/tests/mktestsetup.sh $prefix|") or die("Unable to run mktestsetup");



More information about the samba-cvs mailing list