Rev 11694: Initial work on support for a Samba3 target. in file:///home/jelmer/bzr.samba/4.0-envs/

Jelmer Vernooij jelmer at samba.org
Wed Mar 21 01:37:45 GMT 2007


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

------------------------------------------------------------
revno: 11694
revision-id: jelmer at samba.org-20070321013659-as0sp5dcnrq622fs
parent: jelmer at samba.org-20070321005230-eo7910ddp23nqubm
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 4.0-envs
timestamp: Wed 2007-03-21 02:36:59 +0100
message:
  Initial work on support for a Samba3 target.
added:
  source/script/tests/Samba3.pm  samba3.pm-20070321010054-iuaa65j1qcdh0i66-1
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
=== added file 'source/script/tests/Samba3.pm'
--- a/source/script/tests/Samba3.pm	1970-01-01 00:00:00 +0000
+++ b/source/script/tests/Samba3.pm	2007-03-21 01:36:59 +0000
@@ -0,0 +1,129 @@
+#!/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 Samba3;
+
+use strict;
+use FindBin qw($RealBin);
+use POSIX;
+
+sub new($$$) {
+	my ($classname, $bindir, $setupdir) = @_;
+	my $self = { bindir => $bindir, setupdir => $setupdir };
+	bless $self;
+	return $self;
+}
+
+sub check_or_start($$$$) 
+{
+	my ($self, $env_vars, $socket_wrapper_dir, $max_time) = @_;
+	return 0 if ( -p $env_vars->{SMBD_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;
+
+	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})) {
+		$valgrind = $ENV{SMBD_VALGRIND};
+	} 
+
+	print "STARTING SMBD... ";
+	my $pid = fork();
+	if ($pid == 0) {
+		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 $env_vars->{CONFFILE} -M single -i --leak-report-full");
+		if ($? == -1) {
+			print "Unable to start smbd: $ret: $!\n";
+			exit 1;
+		}
+		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 ) {
+			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";
+
+	open(DATA, ">$env_vars->{SMBD_TEST_FIFO}");
+
+	return $pid;
+}
+
+sub wait_for_start($)
+{
+	# give time for nbt server to register its names
+	print "delaying for nbt name registration\n";
+
+	# 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}");
+	system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
+	system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
+}
+
+sub provision($$$)
+{
+	my ($self, $environment, $prefix) = @_;
+	my %ret = ();
+	print "PROVISIONING...";
+	open(IN, "$RealBin/mktestdc.sh $prefix|") 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 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);
+	}
+
+	return $failed;
+}
+
+sub setup_env($$)
+{
+	my ($self, $name) = @_;
+}
+
+1;

=== modified file 'source/script/tests/Samba4.pm'
--- a/source/script/tests/Samba4.pm	2007-03-21 00:52:30 +0000
+++ b/source/script/tests/Samba4.pm	2007-03-21 01:36:59 +0000
@@ -5,10 +5,6 @@
 
 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);
 use POSIX;
@@ -58,7 +54,7 @@
 	}
 }
 
-sub smbd_check_or_start($$$$) 
+sub check_or_start($$$$) 
 {
 	my ($self, $env_vars, $socket_wrapper_dir, $max_time) = @_;
 	return 0 if ( -p $env_vars->{SMBD_TEST_FIFO});

=== modified file 'source/script/tests/selftest.pl'
--- a/source/script/tests/selftest.pl	2007-03-21 00:14:56 +0000
+++ b/source/script/tests/selftest.pl	2007-03-21 01:36:59 +0000
@@ -115,6 +115,7 @@
 use POSIX;
 use Cwd;
 use lib "$RealBin";
+use Samba3;
 use Samba4;
 use SocketWrapper;
 
@@ -432,7 +433,7 @@
 }
 
 SocketWrapper::set_default_iface(1);
-$target->smbd_check_or_start($testenv_vars, $socket_wrapper_dir, 
+$target->check_or_start($testenv_vars, $socket_wrapper_dir, 
 	($ENV{SMBD_MAX_TIME} or 5400));
 
 SocketWrapper::set_default_iface(6);



More information about the samba-cvs mailing list