[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Wed Feb 21 06:48:06 UTC 2018


The branch, master has been updated
       via  0b63f26 selftest: change technique for running specific envs
       via  962e8a0 selftest: move to declaratively specifying environments and their dependencies
       via  41085ad selftest: remove prototypes from some subroutine templates
      from  6f9c6d3 s3:auth: Pass mem_ctx to init_system_session_info()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 0b63f26bf72e5f5ce5ab6d052bc899375818a235
Author: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
Date:   Thu Feb 1 17:46:37 2018 +1300

    selftest: change technique for running specific envs
    
    Currently testsuites excluded with --exclude/--include-env are skipped when
    encountered in the middle of a run, so they are included in progress reporting,
    and the @todo list does not accurately show what will be done.
    
    This change skips them earlier, preventing them from being added to @todo, as is
    done with pattern-based including/excluding.
    
    As well as making the progress indicator more accurate, this means that
    selftest.pl can use @todo to determine when we are finished with an environment.
    
    Signed-off-by: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Wed Feb 21 07:47:58 CET 2018 on sn-devel-144

commit 962e8a0ea7db79b96dddec06a4bde211eea0d1d6
Author: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
Date:   Wed Feb 21 13:33:49 2018 +1300

    selftest: move to declaratively specifying environments and their dependencies
    
    This removes the tangle of code for starting up dependencies, and allows
    selftest.pl to query dependencies (hence it can know when things can be shut
    down early and how to order environments for optimal memory usage - that patch
    not yet submitted).
    
    It also removes the slightly hacky special-casing of the ad_members, and sets
    $target->{vars} centrally (so each setup_ function does not need to).
    
    Signed-off-by: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 41085ad37de56504467a0014b70f6a708dcde91b
Author: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
Date:   Thu Feb 8 16:51:23 2018 +1300

    selftest: remove prototypes from some subroutine templates
    
    Rationale, as sent to samba-technical:
    
      > Why do you remove the explicit argument declarations for so many functions?
      > These declarations help catch usage errors, i.e. wrong number of calling
      > arguments, especially when you add arguments to functions.
    
      My understanding is that because these are object methods, the prototypes
      actually were not providing the checking benefits [see PERLSUB(1) (section
      "Prototypes")] -- this is evidenced by the fact that some of the prototypes I
      removed actually had the wrong number of arguments!
    
      Now that the subroutines are being dynamically called by function references,
      the checking also appears not to apply [see the same source].
    
      There was also a more concrete reason: the setup code will automatically set
      up multiple environment dependencies and pass each of their vars as an
      individual parameter. Accomplishing this was [seemingly] impossible with the
      prototypes in place.
    
      Additionally, there seems to be a consensus among perl devs that prototypes
      are generally harmful: see this post (by my colleague) for example:
      http://www.perlmonks.org/?node_id=406231
    
    Signed-off-by: Jamie McClymont <jamiemcclymont at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 selftest/selftest.pl      |  50 ++++--------
 selftest/target/Samba.pm  |  72 ++++++++++++----
 selftest/target/Samba3.pm | 105 ++++++++----------------
 selftest/target/Samba4.pm | 203 +++++++++++++---------------------------------
 4 files changed, 159 insertions(+), 271 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/selftest.pl b/selftest/selftest.pl
index 0e56e6a..fad0191 100755
--- a/selftest/selftest.pl
+++ b/selftest/selftest.pl
@@ -83,9 +83,20 @@ sub find_in_list($$)
 	return undef;
 }
 
-sub skip($)
+sub skip
 {
-	my ($name) = @_;
+	my ($name, $envname) = @_;
+	my ($env_basename, $env_localpart) = split(/:/, $envname);
+
+	if ($opt_target eq "samba3" && $Samba::ENV_NEEDS_AD_DC{$env_basename}) {
+		return "environment $envname is disabled as this build does not include an AD DC";
+	}
+
+	if (@opt_include_env && !(grep {$_ eq $env_basename} @opt_include_env)) {
+		return "environment $envname is disabled (via --include-env command line option) in this test run - skipping";
+	} elsif (@opt_exclude_env && grep {$_ eq $env_basename} @opt_exclude_env) {
+		return "environment $envname is disabled (via --exclude-env command line option) in this test run - skipping";
+	}
 
 	return find_in_list(\@excludes, $name);
 }
@@ -449,15 +460,12 @@ if (defined($ENV{SMBD_MAXTIME}) and $ENV{SMBD_MAXTIME} ne "") {
     $server_maxtime = $ENV{SMBD_MAXTIME};
 }
 
+$target = new Samba($bindir, $ldap, $srcdir, $server_maxtime);
 unless ($opt_list) {
 	if ($opt_target eq "samba") {
 		$testenv_default = "ad_dc";
-		require target::Samba;
-		$target = new Samba($bindir, $ldap, $srcdir, $server_maxtime);
 	} elsif ($opt_target eq "samba3") {
 		$testenv_default = "nt4_member";
-		require target::Samba3;
-		$target = new Samba3($bindir, $srcdir_abs, $server_maxtime);
 	}
 }
 
@@ -725,7 +733,7 @@ $individual_tests = {};
 
 foreach my $testsuite (@available) {
 	my $name = $$testsuite[0];
-	my $skipreason = skip($name);
+	my $skipreason = skip(@$testsuite);
 	if (defined($restricted)) {
 		# Find the testsuite for this test
 		my $match = undef;
@@ -1100,39 +1108,13 @@ $envvarstr
 		my $cmd = $$_[2];
 		my $name = $$_[0];
 		my $envname = $$_[1];
-		my ($env_basename, $env_localpart) = split(/:/, $envname);
-		my $envvars = "SKIP";
+		my $envvars = setup_env($envname, $prefix);
 
-		if (@opt_include_env) {
-		    foreach my $env (@opt_include_env) {
-			if ($env_basename eq $env) {
-			    $envvars = setup_env($envname, $prefix);
-			}
-		    }
-		} elsif (@opt_exclude_env) {
-		    my $excluded = 0;
-		    foreach my $env (@opt_exclude_env) {
-			if ($env_basename eq $env) {
-			    $excluded = 1;
-			}
-		    }
-		    if ($excluded == 0) {
-			$envvars = setup_env($envname, $prefix);
-		    }
-		} else {
-		    $envvars = setup_env($envname, $prefix);
-		}
-		
 		if (not defined($envvars)) {
 			Subunit::start_testsuite($name);
 			Subunit::end_testsuite($name, "error",
 				"unable to set up environment $envname - exiting");
 			next;
-		} elsif ($envvars eq "SKIP") {
-			Subunit::start_testsuite($name);
-			Subunit::end_testsuite($name, "skip",
-				"environment $envname is disabled (via --exclude-env / --include-env command line options) in this test run - skipping");
-			next;
 		} elsif ($envvars eq "UNKNOWN") {
 			Subunit::start_testsuite($name);
 			Subunit::end_testsuite($name, "skip",
diff --git a/selftest/target/Samba.pm b/selftest/target/Samba.pm
index ba0cc7d..f25507f 100644
--- a/selftest/target/Samba.pm
+++ b/selftest/target/Samba.pm
@@ -22,33 +22,71 @@ sub new($$$$$) {
 	return $self;
 }
 
+%Samba::ENV_DEPS = (%Samba3::ENV_DEPS, %Samba4::ENV_DEPS);
+our %ENV_DEPS;
+
+%Samba::ENV_TARGETS = (
+	(map { $_ => "Samba3" } keys %Samba3::ENV_DEPS),
+	(map { $_ => "Samba4" } keys %Samba4::ENV_DEPS),
+);
+our %ENV_TARGETS;
+
+%Samba::ENV_NEEDS_AD_DC = (
+	(map { $_ => 1 } keys %Samba4::ENV_DEPS)
+);
+our %ENV_NEEDS_AD_DC;
+foreach my $env (keys %Samba3::ENV_DEPS) {
+    $ENV_NEEDS_AD_DC{$env} = ($env =~ /^ad_/);
+}
+
 sub setup_env($$$)
 {
 	my ($self, $envname, $path) = @_;
 
-	$ENV{ENVNAME} = $envname;
-
-	my $env = $self->{samba4}->setup_env($envname, $path);
-	if (defined($env) and $env ne "UNKNOWN") {
-	    if (not defined($env->{target})) {
-		$env->{target} = $self->{samba4};
-	    }
-	} elsif (defined($env) and $env eq "UNKNOWN") {
-	   	$env = $self->{samba3}->setup_env($envname, $path);
-		if (defined($env) and $env ne "UNKNOWN") {
-		    if (not defined($env->{target})) {
-			$env->{target} = $self->{samba3};
-		    }
-		}
-	}
-	if (defined($env) and ($env eq "UNKNOWN")) {
+	my $targetname = $ENV_TARGETS{$envname};
+	if (not defined($targetname)) {
 		warn("Samba can't provide environment '$envname'");
 		return "UNKNOWN";
 	}
-	if (not defined $env) {
+
+	my %targetlookup = (
+		"Samba3" => $self->{samba3},
+		"Samba4" => $self->{samba4}
+	);
+	my $target = $targetlookup{$targetname};
+
+	if (defined($target->{vars}->{$envname})) {
+		return $target->{vars}->{$envname};
+	}
+
+	my @dep_vars;
+	foreach(@{$ENV_DEPS{$envname}}) {
+		my $vars = $self->setup_env($_, $path);
+		if (defined($vars)) {
+			push(@dep_vars, $vars);
+		} else {
+			warn("Failed setting up $_ as a dependency of $envname");
+			return undef;
+		}
+	}
+
+	$ENV{ENVNAME} = $envname;
+	# Avoid hitting system krb5.conf -
+	# An env that needs Kerberos will reset this to the real value.
+	$ENV{KRB5_CONFIG} = "$path/no_krb5.conf";
+
+	my $setup_name = $ENV_TARGETS{$envname}."::setup_".$envname;
+	my $setup_sub = \&$setup_name;
+	my $env = &$setup_sub($target, "$path/$envname", @dep_vars);
+
+	if (not defined($env)) {
 		warn("failed to start up environment '$envname'");
 		return undef;
 	}
+
+	$target->{vars}->{$envname} = $env;
+	$target->{vars}->{$envname}->{target} = $target;
+
 	return $env;
 }
 
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index ee7c3be..e6c95fa 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -163,48 +163,28 @@ sub check_env($$)
 	return 1;
 }
 
-sub setup_env($$$)
-{
-	my ($self, $envname, $path) = @_;
-
-	$ENV{ENVNAME} = $envname;
-
-	if (defined($self->{vars}->{$envname})) {
-	        return $self->{vars}->{$envname};
-	}
-
-	#
-	# Avoid hitting system krb5.conf -
-	# An env that needs Kerberos will reset this to the real
-	# value.
-	#
-	$ENV{KRB5_CONFIG} = "$path/no_krb5.conf";
-
-	if ($envname eq "nt4_dc") {
-		return $self->setup_nt4_dc("$path/nt4_dc");
-	} elsif ($envname eq "nt4_dc_schannel") {
-		return $self->setup_nt4_dc_schannel("$path/nt4_dc_schannel");
-	} elsif ($envname eq "simpleserver") {
-		return $self->setup_simpleserver("$path/simpleserver");
-	} elsif ($envname eq "fileserver") {
-		return $self->setup_fileserver("$path/fileserver");
-	} elsif ($envname eq "maptoguest") {
-		return $self->setup_maptoguest("$path/maptoguest");
-	} elsif ($envname eq "ktest") {
-		return $self->setup_ktest("$path/ktest");
-	} elsif ($envname eq "nt4_member") {
-		if (not defined($self->{vars}->{nt4_dc})) {
-			if (not defined($self->setup_nt4_dc("$path/nt4_dc"))) {
-			        return undef;
-			}
-		}
-		return $self->setup_nt4_member("$path/nt4_member", $self->{vars}->{nt4_dc});
-	} else {
-		return "UNKNOWN";
-	}
-}
-
-sub setup_nt4_dc($$)
+# Declare the environments Samba3 makes available.
+# To be set up, they will be called as
+#   samba3->setup_$envname($self, $path, $dep_1_vars, $dep_2_vars, ...)
+%Samba3::ENV_DEPS = (
+	# name              => [dep_1, dep_2, ...],
+	nt4_dc              => [],
+	nt4_dc_schannel     => [],
+
+	simpleserver        => [],
+	fileserver          => [],
+	maptoguest          => [],
+	ktest               => [],
+
+	nt4_member          => ["nt4_dc"],
+
+	ad_member           => ["ad_dc"],
+	ad_member_rfc2307   => ["ad_dc_ntvfs"],
+	ad_member_idmap_rid => ["ad_dc"],
+	ad_member_idmap_ad  => ["ad_dc"],
+);
+
+sub setup_nt4_dc
 {
 	my ($self, $path) = @_;
 
@@ -252,12 +232,10 @@ sub setup_nt4_dc($$)
 	$vars->{DC_USERNAME} = $vars->{USERNAME};
 	$vars->{DC_PASSWORD} = $vars->{PASSWORD};
 
-	$self->{vars}->{nt4_dc} = $vars;
-
 	return $vars;
 }
 
-sub setup_nt4_dc_schannel($$)
+sub setup_nt4_dc_schannel
 {
 	my ($self, $path) = @_;
 
@@ -302,12 +280,10 @@ sub setup_nt4_dc_schannel($$)
 	$vars->{DC_USERNAME} = $vars->{USERNAME};
 	$vars->{DC_PASSWORD} = $vars->{PASSWORD};
 
-	$self->{vars}->{nt4_dc_schannel} = $vars;
-
 	return $vars;
 }
 
-sub setup_nt4_member($$$)
+sub setup_nt4_member
 {
 	my ($self, $prefix, $nt4_dc_vars) = @_;
 	my $count = 0;
@@ -381,7 +357,7 @@ sub setup_nt4_member($$$)
 	return $ret;
 }
 
-sub setup_admember($$$$)
+sub setup_ad_member
 {
 	my ($self, $prefix, $dcvars) = @_;
 
@@ -501,13 +477,10 @@ sub setup_admember($$$$)
 	$ret->{DC_USERNAME} = $dcvars->{USERNAME};
 	$ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-	# Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-	$ret->{target} = $self;
-
 	return $ret;
 }
 
-sub setup_admember_rfc2307($$$$)
+sub setup_ad_member_rfc2307
 {
 	my ($self, $prefix, $dcvars) = @_;
 
@@ -597,13 +570,10 @@ sub setup_admember_rfc2307($$$$)
 	$ret->{DC_USERNAME} = $dcvars->{USERNAME};
 	$ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-	# Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-	$ret->{target} = $self;
-
 	return $ret;
 }
 
-sub setup_ad_member_idmap_rid($$$$)
+sub setup_ad_member_idmap_rid
 {
 	my ($self, $prefix, $dcvars) = @_;
 
@@ -685,13 +655,10 @@ sub setup_ad_member_idmap_rid($$$$)
 	$ret->{DC_USERNAME} = $dcvars->{USERNAME};
 	$ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-	# Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-	$ret->{target} = $self;
-
 	return $ret;
 }
 
-sub setup_ad_member_idmap_ad($$$$)
+sub setup_ad_member_idmap_ad
 {
 	my ($self, $prefix, $dcvars) = @_;
 
@@ -774,13 +741,10 @@ sub setup_ad_member_idmap_ad($$$$)
 	$ret->{DC_USERNAME} = $dcvars->{USERNAME};
 	$ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-	# Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-	$ret->{target} = $self;
-
 	return $ret;
 }
 
-sub setup_simpleserver($$)
+sub setup_simpleserver
 {
 	my ($self, $path) = @_;
 
@@ -829,12 +793,10 @@ sub setup_simpleserver($$)
 	       return undef;
 	}
 
-	$self->{vars}->{simpleserver} = $vars;
-
 	return $vars;
 }
 
-sub setup_fileserver($$)
+sub setup_fileserver
 {
 	my ($self, $path) = @_;
 	my $prefix_abs = abs_path($path);
@@ -961,7 +923,6 @@ sub setup_fileserver($$)
 	       return undef;
 	}
 
-	$self->{vars}->{fileserver} = $vars;
 
 	mkdir($_, 0777) foreach(@dirs);
 
@@ -1013,7 +974,7 @@ sub setup_fileserver($$)
 	return $vars;
 }
 
-sub setup_ktest($$$)
+sub setup_ktest
 {
 	my ($self, $prefix) = @_;
 
@@ -1117,7 +1078,7 @@ $ret->{USERNAME} = KTEST\\Administrator
 	return $ret;
 }
 
-sub setup_maptoguest($$)
+sub setup_maptoguest
 {
 	my ($self, $path) = @_;
 
@@ -1139,8 +1100,6 @@ ntlm auth = yes
 	       return undef;
 	}
 
-	$self->{vars}->{s3maptoguest} = $vars;
-
 	return $vars;
 }
 
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index 123bf6c..fd4e4b6 100755
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -2063,113 +2063,39 @@ sub check_env($$)
 	} else {
 	    return 1;
 	}
-
-}
-
-sub setup_env($$$)
-{
-	my ($self, $envname, $path) = @_;
-	my $target3 = $self->{target3};
-
-	$ENV{ENVNAME} = $envname;
-
-	if (defined($self->{vars}->{$envname})) {
-	        return $self->{vars}->{$envname};
-	}
-
-	if ($envname eq "ad_dc_ntvfs") {
-		return $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-	} elsif ($envname eq "fl2000dc") {
-		return $self->setup_fl2000dc("$path/fl2000dc");
-	} elsif ($envname eq "vampire_2000_dc") {
-		if (not defined($self->{vars}->{fl2000dc})) {
-			$self->setup_fl2000dc("$path/fl2000dc");
-		}
-		return $self->setup_vampire_dc("$path/vampire_2000_dc", $self->{vars}->{fl2000dc}, "2000");
-	} elsif ($envname eq "fl2003dc") {
-		if (not defined($self->{vars}->{ad_dc})) {
-			$self->setup_ad_dc("$path/ad_dc");
-		}
-		return $self->setup_fl2003dc("$path/fl2003dc", $self->{vars}->{ad_dc});
-	} elsif ($envname eq "fl2008r2dc") {
-		if (not defined($self->{vars}->{ad_dc})) {
-			$self->setup_ad_dc("$path/ad_dc");
-		}
-		return $self->setup_fl2008r2dc("$path/fl2008r2dc", $self->{vars}->{ad_dc});
-	} elsif ($envname eq "rpc_proxy") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "vampire_dc") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_vampire_dc("$path/vampire_dc", $self->{vars}->{ad_dc_ntvfs}, "2008");
-	} elsif ($envname eq "promoted_dc") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_promoted_dc("$path/promoted_dc", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "subdom_dc") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_subdom_dc("$path/subdom_dc", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "s4member_dflt_domain") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_s4member_dflt_domain("$path/s4member_dflt_domain", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "s4member") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_s4member("$path/s4member", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "rodc") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");
-		}
-		return $self->setup_rodc("$path/rodc", $self->{vars}->{ad_dc_ntvfs});
-	} elsif ($envname eq "chgdcpass") {
-		return $self->setup_chgdcpass("$path/chgdcpass", $self->{vars}->{chgdcpass});
-	} elsif ($envname eq "ad_member") {
-		if (not defined($self->{vars}->{ad_dc})) {
-			$self->setup_ad_dc("$path/ad_dc");
-		}
-		return $target3->setup_admember("$path/ad_member", $self->{vars}->{ad_dc}, 29);
-	} elsif ($envname eq "ad_dc") {
-		return $self->setup_ad_dc("$path/ad_dc");
-	} elsif ($envname eq "ad_dc_no_nss") {
-		return $self->setup_ad_dc_no_nss("$path/ad_dc_no_nss");
-	} elsif ($envname eq "ad_dc_no_ntlm") {
-		return $self->setup_ad_dc_no_ntlm("$path/ad_dc_no_ntlm");
-	} elsif ($envname eq "ad_member_rfc2307") {
-		if (not defined($self->{vars}->{ad_dc_ntvfs})) {
-			$self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs");


-- 
Samba Shared Repository



More information about the samba-cvs mailing list