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