[WIP][PATCH] selftest: add clusteredmember (1-node) env

Michael Adam obnox at samba.org
Tue Jul 12 14:41:11 UTC 2016


Hi,

here is the current WIP state of my clusteredmember
selftest environment. It is something I have been
working on in the background since a couple of years
now, whenever time permitted...

The patches add the env, let the current member tests
run against this new env too, and call it in the
'samba-ctdb' autobuild target.

The environment currently implements a 1-node ctdb 'cluster'.
So adding this would make sure that the software stack
ctdb<->samba gets executed. Not testing for more complicated
multi-node failover scenarios. But I have an extension of
this env to a 3-node cluster in progress, but this needs a
little more work.

This env had some problems recently, in that the started
failing the ping-dc test or the smbclient -L test on the
started member randomly. This started somewhere between
sambaXP and now... Still trying to understand what goes wrong.

So I assume this is not for pushing yet.
But I appreciate any comments / hints!

Cheers - Michael

PS: Note you need the previously sent patch to fix
the lock-oder-violation g_lock vs xattr_tdb, in order
to run this successfully (if it gets across the
startup checks...)

-------------- next part --------------
From 1b1c1c352f2fe5d4f831cabed609b5ad7e655220 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 12 Jul 2016 13:12:24 +0200
Subject: [PATCH 1/3] selftest:Samba3: add a clusteredmember environment

This will allow running tests against a ctdb setup,
thereby covering the dbrwap_ctdb->ctdb stack in real
SMB tests.  For a start, just add a 1-node "cluster",
just to excercise the code.

Signed-off-by: Michael Adam <obnox at samba.org>
---
 selftest/target/Samba.pm  |   1 +
 selftest/target/Samba3.pm | 444 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 445 insertions(+)

diff --git a/selftest/target/Samba.pm b/selftest/target/Samba.pm
index bb33fb7..fcf2be3 100644
--- a/selftest/target/Samba.pm
+++ b/selftest/target/Samba.pm
@@ -298,6 +298,7 @@ sub get_interface($)
     $interfaces{"fileserver"} = 35;
     $interfaces{"fakednsforwarder1"} = 36;
     $interfaces{"fakednsforwarder2"} = 37;
+    $interfaces{"clusteredmember"} = 38;
 
     # update lib/socket_wrapper/socket_wrapper.c
     #  #define MAX_WRAPPED_INTERFACES 40
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index 4e3169d..2cb3e6e 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -62,6 +62,19 @@ sub new($$) {
 sub teardown_env($$)
 {
 	my ($self, $envvars) = @_;
+
+	$self->teardown_env_samba($envvars);
+
+	if (defined($envvars->{ctdb_vars})) {
+		$self->teardown_env_ctdb($envvars->{ctdb_vars});
+	}
+
+	return;
+}
+
+sub teardown_env_samba($$)
+{
+	my ($self, $envvars) = @_;
 	my $count = 0;
 
 	# This should cause smbd to terminate gracefully
@@ -119,6 +132,79 @@ sub teardown_env($$)
 	return 0;
 }
 
+sub teardown_env_ctdb($$)
+{
+	my ($self, $envvars) = @_;
+
+	my $ctdbd_pid = $envvars->{CTDBD_TL_PID};
+	#my $ctdbdpid = read_pid($envvars, "ctdbd");
+
+	$self->teardown_env_one_pid($ctdbd_pid, $envvars->{STDIN_PIPE}, "ctdbd");
+
+	# teardown via pipe does not work properly for ctdbd. why?
+	# getting the pid of the real ctdbd and tearing it down...
+
+	open(PID, "<$envvars->{CTDBD_PIDFILE}");
+	my $ctdbd_real_pid = <PID>;
+	close(PID);
+	chomp($ctdbd_real_pid);
+
+	$self->teardown_env_one_pid($ctdbd_real_pid, undef, "ctdbd_real");
+
+	return 0;
+}
+
+sub teardown_env_one_pid($$$)
+{
+	my ($self, $pid, $pipe, $name) = @_;
+	my $count = 0;
+
+	# This should cause the child to terminate gracefully
+	if (defined($pipe)) {
+		close($pipe);
+	}
+
+	until ($count > 20) {
+		my $child = Samba::cleanup_child($pid, $name);
+		print STDERR "$name child: '$child'\n";
+		if ($child == -1) {
+			last;
+		}
+		sleep(1);
+		$count++;
+	}
+
+	if ($count <= 20 && kill(0, $pid) == 0) {
+		print STDERR "kill $pid gave 0\n";
+		return;
+	}
+
+	printf STDERR "sig-term to $pid\n";
+	$self->stop_sig_term($pid);
+
+	$count = 0;
+	until ($count > 10) {
+		my $child = Samba::cleanup_child($pid, $name);
+		print STDERR "$name child: $child\n";
+		if ($child == -1) {
+			last;
+		}
+		sleep(1);
+		$count++;
+	}
+
+	if ($count <= 10 && kill(0, $pid) == 0) {
+		print STDERR "kill $pid gave 0\n";
+		return;
+	}
+
+	warn("timelimit process did not quit on SIGTERM, sending SIGKILL");
+	$self->stop_sig_kill($pid);
+
+	return 0;
+}
+
+
 sub getlog_env_app($$$)
 {
 	my ($self, $envvars, $name) = @_;
@@ -152,6 +238,14 @@ sub getlog_env($$)
 	return $ret;
 }
 
+sub getlog_env_ctdb($$)
+{
+	my ($self, $envvars) = @_;
+	my $ret = "";
+
+	$ret .= $self->getlog_env_app($envvars, "CTDBD");
+}
+
 sub check_env($$)
 {
 	my ($self, $envvars) = @_;
@@ -198,6 +292,13 @@ sub setup_env($$$)
 			}
 		}
 		return $self->setup_nt4_member("$path/nt4_member", $self->{vars}->{nt4_dc});
+	} elsif ($envname eq "clusteredmember") {
+		if (not defined($self->{vars}->{nt4_dc})) {
+			if (not defined($self->setup_nt4_dc("$path/nt4_dc"))) {
+			        return undef;
+			}
+		}
+		return $self->setup_clusteredmember("$path/clusteredmember", $self->{vars}->{nt4_dc});
 	} else {
 		return "UNKNOWN";
 	}
@@ -365,6 +466,93 @@ sub setup_nt4_member($$$)
 	return $ret;
 }
 
+sub setup_clusteredmember($$$$)
+{
+	my ($self, $prefix, $nt4_dc_vars) = @_;
+	my $count = 0;
+	my $rc;
+
+	print "PROVISIONING CLUSTEREDMEMBER...";
+
+	my $prefix_abs = abs_path($prefix);
+	mkdir($prefix_abs, 0777);
+
+	my $ctdbprefix = "$prefix/ctdb";
+	my $sambaprefix = "$prefix/samba";
+	my $server_name = "CLUSTEREDMEMBER";
+
+	my $ctdb_vars = $self->setup_ctdb($ctdbprefix, $server_name);
+
+	$ctdb_vars or return undef;
+
+	print "PROVISIONING CLUSTERED SAMBA...";
+
+	my $require_mutexes = "dbwrap_tdb_require_mutexes:* = yes";
+	$require_mutexes = "" if ($ENV{SELFTEST_DONT_REQUIRE_TDB_MUTEX_SUPPORT} eq "1");
+
+	my $member_options = "
+	security = domain
+	server signing = on
+	clustering = yes
+	ctdbd socket = $ctdb_vars->{SOCKET_FILE}
+	dbwrap_tdb_mutexes:* = yes
+	${require_mutexes}
+";
+
+	my $ret = $self->provision($sambaprefix,
+				   $server_name,
+				   "clustermember8pass",
+				   $member_options);
+
+	$ret or return undef;
+
+	$ret->{ctdb_vars} = $ctdb_vars;
+
+	my $nmblookup = Samba::bindir_path($self, "nmblookup");
+	do {
+		print "Waiting for the LOGON SERVER registration ...\n";
+		$rc = system("$nmblookup $ret->{CONFIGURATION} $ret->{DOMAIN}\#1c");
+		if ($rc != 0) {
+			sleep(1);
+		}
+		$count++;
+	} while ($rc != 0 && $count < 10);
+	if ($count == 10) {
+		print "NMBD not reachable after 10 retries\n";
+		teardown_env($self, $ret);
+		return 0;
+	}
+
+	my $net = Samba::bindir_path($self, "net");
+	my $cmd = "";
+	$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+	$cmd .= "SELFTEST_WINBINDD_SOCKET_DIR=\"$ret->{SELFTEST_WINBINDD_SOCKET_DIR}\" ";
+	$cmd .= "$net join $ret->{CONFIGURATION} $nt4_dc_vars->{DOMAIN} member";
+	$cmd .= " -U$nt4_dc_vars->{USERNAME}\%$nt4_dc_vars->{PASSWORD}";
+
+	if (system($cmd) != 0) {
+		warn("Join failed\n$cmd");
+		return undef;
+	}
+
+	if (not $self->check_or_start($ret, "yes", "yes", "yes")) {
+		return undef;
+	}
+
+	$ret->{DC_SERVER} = $nt4_dc_vars->{SERVER};
+	$ret->{DC_SERVER_IP} = $nt4_dc_vars->{SERVER_IP};
+	$ret->{DC_SERVER_IPV6} = $nt4_dc_vars->{SERVER_IPV6};
+	$ret->{DC_NETBIOSNAME} = $nt4_dc_vars->{NETBIOSNAME};
+	$ret->{DC_USERNAME} = $nt4_dc_vars->{USERNAME};
+	$ret->{DC_PASSWORD} = $nt4_dc_vars->{PASSWORD};
+
+	$ret->{SOCKET_FILE} = $ctdb_vars->{SOCKET_FILE};
+
+	$self->{vars}->{clusteredmember} = $ret;
+
+	return $ret;
+}
+
 sub setup_admember($$$$)
 {
 	my ($self, $prefix, $dcvars) = @_;
@@ -1961,4 +2149,260 @@ sub wait_for_start($$$$$)
 	return 1;
 }
 
+##
+## provision and start of ctdb
+##
+
+sub setup_ctdb($$$)
+{
+	my ($self, $prefix, $server_name) = @_;
+
+	print "PROVISIONING CTDB...";
+
+	my $vars = $self->provision_ctdb($prefix, $server_name);
+
+	$vars or return undef;
+
+	$self->check_or_start_ctdb($vars);
+
+	if (not $self->wait_for_start_ctdb($vars)) {
+		return undef;
+	}
+
+	return $vars;
+}
+
+sub check_or_start_ctdb($$) {
+	my ($self, $env_vars) = @_;
+
+	# use a pipe for stdin in the child processes. This allows
+	# those processes to monitor the pipe for EOF to ensure they
+	# exit when the test script exits
+	pipe(STDIN_READER, $env_vars->{STDIN_PIPE});
+
+	unlink($env_vars->{CTDBD_TEST_LOG});
+	print "STARTING CTDBD...";
+
+	my $ctdbd_cmd = "$env_vars->{BINDIR}/ctdbd";
+
+	return undef unless (-e "$ctdbd_cmd");
+
+	die("'$env_vars->{BINDIR}/ctdbd' is not executable!")
+		unless (-x "$ctdbd_cmd");
+
+	my $pid = fork();
+
+	if ($pid == 0) {
+		open STDOUT, ">$env_vars->{CTDBD_TEST_LOG}";
+		open STDERR, '>&STDOUT';
+
+		SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
+
+		my @preargs = ();
+
+		push @preargs, "CTDB_EVENT_HELPER=$env_vars->{BINDIR}/ctdb_event_helper";
+		push @preargs, "CTDB_LOCK_HELPER=$env_vars->{BINDIR}/ctdb_lock_helper";
+		push @preargs, "CTDB_CLUSTER_MUTEX_HELPER=$env_vars->{BINDIR}/ctdb_mutex_fcntl_helper";
+		push @preargs, "CTDB_RECOVERY_HELPER=$env_vars->{BINDIR}/ctdb_recovery_helper";
+
+		push @preargs, (Samba::bindir_path($self, "timelimit"), $self->{server_maxtime});
+
+		if(defined($ENV{CTDBD_VALGRIND})) {
+			push @preargs, split(/ /, $ENV{CTDBD_VALGRIND});
+		}
+
+		my @args = (
+			"--socket=$env_vars->{SOCKET_FILE}",
+			"--reclock=$env_vars->{RECLOCK_FILE}",
+			"--nlist=$env_vars->{NODES_FILE}",
+			"--nopublicipcheck",
+			"--nosetsched",
+			"--event-script-dir=$env_vars->{EVENT_SCRIPT_DIR}",
+			"--logging=file:$env_vars->{LOG_FILE}",
+			"-d $env_vars->{DEBUG_LEVEL}",
+			"--dbdir=$env_vars->{DB_DIR}",
+			"--dbdir-persistent=$env_vars->{DB_DIR_PERSISTENT}",
+			"--dbdir-state=$env_vars->{DB_DIR_STATE}",
+			"--listen=$env_vars->{CTDB_NODE_ADDRESS}",
+			"--pidfile=$env_vars->{CTDBD_PIDFILE}",
+		);
+
+		my $cmd = join(' ', @preargs, $ctdbd_cmd, @args);
+
+		close($env_vars->{STDIN_PIPE});
+		open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
+
+		exec($cmd) or die("Unable to start ctdbd: $!");
+	}
+
+	$env_vars->{CTDBD_TL_PID} = $pid;
+	write_pid($env_vars, "ctdbd", $pid);
+	print "DONE\n";
+
+	close(STDIN_READER);
+
+	return $self->wait_for_start_ctdb($env_vars);
+}
+
+sub provision_ctdb($$$$)
+{
+	my ($self, $prefix, $server_name, $no_delete_prefix) = @_;
+
+	my $pub_iface = Samba::get_interface($server_name);
+	my %ret = ();
+
+	# use the same address for internal and public:
+	my $internal_ip = "127.0.0.$pub_iface";
+	my $public_ip = "127.0.0.$pub_iface";
+
+	my @dirs = ();
+
+	my $prefix_abs = abs_path($prefix);
+
+	my $var_dir = "$prefix_abs/var";
+	push @dirs, $var_dir;
+
+	my $piddir="$prefix_abs/pid";
+	push @dirs, $piddir;
+
+	#my $run_dir = "$prefix_abs/run";
+	#push @dirs, $run_dir;
+
+	my $reclock_file = "$var_dir/rec.lock";
+	my $socket_file = "$var_dir/ctdb.socket";
+	my $log_file = "$var_dir/log.ctdb";
+	my $pid_file = "$var_dir/ctdbd.pid";
+
+	my $db_dir = "$var_dir/ctdb";
+	push @dirs, $db_dir;
+
+	my $db_dir_persistent = "$db_dir/persistent";
+	push @dirs, $db_dir_persistent;
+
+	my $db_dir_state = "$db_dir/state";
+	push @dirs, $db_dir_state;
+
+	my $etc_dir = "$prefix_abs/etc";
+	push @dirs, $etc_dir;
+
+	my $ctdb_dir = "$etc_dir/ctdb";
+	push @dirs, $ctdb_dir;
+
+	my $nodes_file = "$ctdb_dir/nodes";
+	my $public_addresses_file = "$ctdb_dir/public_addresses";
+
+	my $event_script_dir = "$ctdb_dir/events.d";
+	push @dirs, $event_script_dir;
+
+	#
+	# check / create directories:
+	#
+	die ("prefix_abs = ''") if $prefix_abs eq "";
+	die ("prefix_abs = '/'") if $prefix_abs eq "/";
+
+	mkdir ($prefix_abs, 0777);
+
+	print "CREATE CTDB TEST ENVIRONMENT in '$prefix_abs'...";
+
+	if (not defined($no_delete_prefix) or not $no_delete_prefix) {
+		system("rm -rf $prefix_abs/*");
+	}
+
+	mkdir($_, 0777) foreach(@dirs);
+
+	# - setup nodes
+	unless (open(NODES, ">$nodes_file")) {
+		warn("Unable to open nodesfile '$nodes_file'");
+		return undef;
+	}
+	print NODES "$internal_ip\n";
+	close(NODES);
+
+	# - setup public-addresses
+	unless(open(PUBLIC_ADDR, ">$public_addresses_file")) {
+		warn("Unable to open public addresses file '$public_addresses_file'");
+		return undef;
+	}
+	print PUBLIC_ADDR "$public_ip/32 swrap$pub_iface\n";
+	close(PUBLIC_ADDR);
+
+	my $event_script = "$event_script_dir/00.test";
+	unless(open(EVENTSCRIPT, ">$event_script")) {
+		warn("Unable to open event script '$event_script'");
+		return undef;
+	}
+	print EVENTSCRIPT "#!/bin/sh
+# event script for clustered samba selftest
+
+echo \"event script called: '\$0 \$\@'\"
+
+exit 0
+";
+	close(EVENTSCRIPT);
+	chmod 0777, "$event_script_dir/00.test";
+
+
+	$ret{CTDBD_TEST_LOG} = "$prefix/ctdbd_test.log";
+	$ret{CTDBD_TEST_LOG_POS} = 0;
+
+	$ret{CTDB_NODE_ADDRESS} = "$internal_ip";
+	$ret{NODES_FILE} = $nodes_file;
+	$ret{PUBLIC_ADDRESSES_FILE} = $public_addresses_file;
+	$ret{RECLOCK_FILE} = $reclock_file;
+	$ret{SOCKET_FILE} = $socket_file;
+	$ret{DB_DIR} = $db_dir;
+	$ret{DB_DIR_PERSISTENT} = $db_dir_persistent;
+	$ret{DB_DIR_STATE} = $db_dir_state;
+	$ret{LOG_FILE} = $log_file;
+	$ret{EVENT_SCRIPT_DIR} = $event_script_dir;
+	$ret{PUBLIC_INTERFACE} = "swrap$pub_iface";
+	$ret{DEBUG_LEVEL} = 4;
+	$ret{PIDDIR} = $piddir;
+	$ret{CTDBD_PIDFILE} = $pid_file;
+
+	$ret{NETBIOSNAME} = $server_name;
+
+	$ret{SOCKET_WRAPPER_DEFAULT_IFACE} = $pub_iface;
+
+	$ret{BINDIR} = "$self->{srcdir}/bin";
+
+	return \%ret;
+}
+
+sub wait_for_start_ctdb($$)
+{
+	my ($self, $envvars) = @_;
+	print "wait for ctdbd\n";
+
+	my $cmd = "";
+	$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$envvars->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+	$cmd .= "CTDB_NODES=\"$envvars->{NODES_FILE}\" ";
+	$cmd .= "$envvars->{BINDIR}/ctdb --socket=$envvars->{SOCKET_FILE} nodestatus all";
+
+	my $count = 0;
+	my $wait_seconds = 60;
+
+	until ($count > $wait_seconds) {
+		my $ret = system("$cmd");
+		if ($ret == 0) {
+			print STDERR "cluster became healthy\n";
+			last;
+		}
+		sleep(1);
+		$count++;
+	}
+
+	if ($count > $wait_seconds) {
+		print "giving up to wait for CTDB...\n";
+		teardown_env_ctdb($self, $envvars);
+		return 0;
+	}
+
+	print "CTDB initialized\n";
+
+	print $self->getlog_env_ctdb($envvars);
+
+	return 1;
+}
+
 1;
-- 
2.5.5


From 82cb23f5c4437ec84e8700b5b44327e03b95df77 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Thu, 22 May 2014 08:53:03 +0200
Subject: [PATCH 2/3] selftest: run the usual samba3 member tests also in the
 clustermember env

Signed-off-by: Michael Adam <obnox at samba.org>
---
 source3/selftest/tests.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index e4b185b..cb3243e 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -129,18 +129,18 @@ for options in ["--option=clientusespnego=no", " --option=clientntlmv2auth=no --
     env = "nt4_dc"
     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) %s" % (env, options), env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', smbclient3, configuration, options])
 
-for env in ["nt4_dc", "nt4_member", "ad_member", "ad_dc", "ad_dc_ntvfs", "s4member", "fl2000dc"]:
+for env in ["nt4_dc", "nt4_member", "ad_member", "ad_dc", "ad_dc_ntvfs", "s4member", "fl2000dc", "clusteredmember"]:
     plantestsuite("samba3.blackbox.smbclient_machine_auth.plain (%s:local)" % env, "%s:local" % env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_machine_auth.sh"), '$SERVER', smbclient3, configuration])
     plantestsuite("samba3.blackbox.smbclient_ntlm.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_ntlm.sh"), '$SERVER', '$DC_USERNAME', '$DC_PASSWORD', "never", smbclient3, configuration])
 
-for env in ["nt4_dc", "nt4_member", "ad_member"]:
+for env in ["nt4_dc", "nt4_member", "ad_member", "clusteredmember"]:
     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', smbclient3, configuration])
     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$SERVER/$USERNAME', '$PASSWORD', smbclient3, configuration])
 
 env="nt4_dc"
 plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) ipv6" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IPV6', '$SERVER/$USERNAME', '$PASSWORD', smbclient3, configuration])
 
-for env in ["nt4_member", "ad_member"]:
+for env in ["nt4_member", "ad_member", "clusteredmember"]:
     plantestsuite("samba3.blackbox.net_cred_change.(%s:local)" % env, "%s:local" % env, [os.path.join(samba3srcdir, "script/tests/test_net_cred_change.sh"), configuration])
 
 env = "ad_member"
@@ -166,13 +166,13 @@ plantestsuite("samba3.blackbox.smbclient_ntlm.plain (%s)" % env, env, [os.path.j
 for env in ["nt4_dc"]:
     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration])
 
-for env in ["nt4_member", "ad_member"]:
+for env in ["nt4_member", "ad_member", "clusteredmember"]:
     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER', '$SERVER/$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration])
 
 for env in ["nt4_dc"]:
     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration, "--signing=required"])
 
-for env in ["nt4_member", "ad_member"]:
+for env in ["nt4_member", "ad_member", "clusteredmember"]:
     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER', '$SERVER/$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration, "--signing=required"])
 
 for env in ["nt4_dc"]:
@@ -331,7 +331,7 @@ for t in tests:
     elif t == "unix.whoami":
         plansmbtorture4testsuite(t, "nt4_member:local", '//$SERVER/tmp --machine-pass', description="machine account")
         plansmbtorture4testsuite(t, "ad_member:local", '//$SERVER/tmp --machine-pass --option=torture:addc=$DC_SERVER', description="machine account")
-        for env in ["nt4_dc", "nt4_member"]:
+        for env in ["nt4_dc", "nt4_member", "clusteredmember"]:
             plansmbtorture4testsuite(t, env, '//$SERVER/tmp -U$DC_USERNAME%$DC_PASSWORD')
             plansmbtorture4testsuite(t, env, '//$SERVER/tmpguest -U%', description='anonymous connection')
         for env in ["ad_dc", "ad_member"]:
-- 
2.5.5


From cb07f0420ec271799681de8b7f3799a395807f9a Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Fri, 16 May 2014 14:44:25 +0200
Subject: [PATCH 3/3] autobuild: run clusteredmember tests in samba-ctdb target

Signed-off-by: Michael Adam <obnox at samba.org>
---
 script/autobuild.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/script/autobuild.py b/script/autobuild.py
index 0af8166..14eb0b3 100755
--- a/script/autobuild.py
+++ b/script/autobuild.py
@@ -100,6 +100,7 @@ tasks = {
                      # build samba with cluster support (also building ctdb):
                      ("samba-configure", "PYTHONPATH=${PYTHON_PREFIX}/site-packages:$PYTHONPATH PKG_CONFIG_PATH=${PREFIX_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH} ./configure.developer --picky-developer ${PREFIX} --with-selftest-prefix=./bin/ab --with-cluster-support --bundled-libraries=!tdb", "text/plain"),
                      ("samba-make", "make", "text/plain"),
+                     ("samba-test", "make test TESTS=\"samba3.\*clusteredmember\" FAIL_IMMEDIATELY=1", "text/plain"),
                      ("samba-check", "./bin/smbd -b | grep CLUSTER_SUPPORT", "text/plain"),
                      ("samba-install", "make install", "text/plain"),
                      ("ctdb-check", "test -e ${PREFIX_DIR}/sbin/ctdbd", "text/plain"),
-- 
2.5.5

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20160712/23d6ba8b/signature.sig>


More information about the samba-technical mailing list