summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xselftest/selftest.pl14
-rw-r--r--selftest/target/Samba.pm72
-rwxr-xr-xselftest/target/Samba3.pm85
-rwxr-xr-xselftest/target/Samba4.pm163
4 files changed, 121 insertions, 213 deletions
diff --git a/selftest/selftest.pl b/selftest/selftest.pl
index 64fb9f85d3a..c48e1926520 100755
--- a/selftest/selftest.pl
+++ b/selftest/selftest.pl
@@ -85,7 +85,12 @@ sub find_in_list($$)
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";
+ }
return find_in_list(\@excludes, $name);
}
@@ -449,15 +454,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 +727,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;
diff --git a/selftest/target/Samba.pm b/selftest/target/Samba.pm
index ba0cc7d0adb..f25507f7201 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 fc18954d0fa..e6c95fa991a 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -163,46 +163,26 @@ 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";
- }
-}
+# 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
{
@@ -252,8 +232,6 @@ sub setup_nt4_dc
$vars->{DC_USERNAME} = $vars->{USERNAME};
$vars->{DC_PASSWORD} = $vars->{PASSWORD};
- $self->{vars}->{nt4_dc} = $vars;
-
return $vars;
}
@@ -302,8 +280,6 @@ sub setup_nt4_dc_schannel
$vars->{DC_USERNAME} = $vars->{USERNAME};
$vars->{DC_PASSWORD} = $vars->{PASSWORD};
- $self->{vars}->{nt4_dc_schannel} = $vars;
-
return $vars;
}
@@ -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,9 +570,6 @@ 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;
}
@@ -685,9 +655,6 @@ 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;
}
@@ -774,9 +741,6 @@ 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;
}
@@ -829,8 +793,6 @@ sub setup_simpleserver
return undef;
}
- $self->{vars}->{simpleserver} = $vars;
-
return $vars;
}
@@ -961,7 +923,6 @@ sub setup_fileserver
return undef;
}
- $self->{vars}->{fileserver} = $vars;
mkdir($_, 0777) foreach(@dirs);
@@ -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 0cd2cf84321..fd4e4b61984 100755
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -2063,111 +2063,37 @@ sub check_env($$)
} else {
return 1;
}
-
}
-sub setup_env($$$)
-{
- my ($self, $envname, $path) = @_;
- my $target3 = $self->{target3};
+# Declare the environments Samba4 makes available.
+# To be set up, they will be called as
+# samba4->setup_$envname($self, $path, $dep_1_vars, $dep_2_vars, ...)
+%Samba4::ENV_DEPS = (
+ # name => [dep_1, dep_2, ...],
+ ad_dc_ntvfs => [],
+ ad_dc => [],
+ ad_dc_no_nss => [],
+ ad_dc_no_ntlm => [],
+ ad_dc_ntvfs => [],
- $ENV{ENVNAME} = $envname;
+ fl2008r2dc => ["ad_dc"],
+ fl2003dc => ["ad_dc"],
+ fl2000dc => [],
- if (defined($self->{vars}->{$envname})) {
- return $self->{vars}->{$envname};
- }
+ vampire_2000_dc => ["fl2000dc"],
+ vampire_dc => ["ad_dc_ntvfs"],
+ promoted_dc => ["ad_dc_ntvfs"],
+ subdom_dc => ["ad_dc_ntvfs"],
- 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");
- }
- return $target3->setup_admember_rfc2307("$path/ad_member_rfc2307",
- $self->{vars}->{ad_dc_ntvfs}, 34);
- } elsif ($envname eq "ad_member_idmap_rid") {
- if (not defined($self->{vars}->{ad_dc})) {
- $self->setup_ad_dc("$path/ad_dc");
- }
- return $target3->setup_ad_member_idmap_rid("$path/ad_member_idmap_rid",
- $self->{vars}->{ad_dc});
- } elsif ($envname eq "ad_member_idmap_ad") {
- if (not defined($self->{vars}->{ad_dc})) {
- $self->setup_ad_dc("$path/ad_dc");
- }
- return $target3->setup_ad_member_idmap_ad("$path/ad_member_idmap_ad",
- $self->{vars}->{ad_dc});
- } elsif ($envname eq "none") {
- return $self->setup_none("$path/none");
- } else {
- return "UNKNOWN";
- }
-}
+ rodc => ["ad_dc_ntvfs"],
+ rpc_proxy => ["ad_dc_ntvfs"],
+ chgdcpass => [],
+
+ s4member_dflt_domain => ["ad_dc_ntvfs"],
+ s4member => ["ad_dc_ntvfs"],
+
+ none => [],
+);
sub setup_s4member
{
@@ -2179,8 +2105,6 @@ sub setup_s4member
if (not defined($self->check_or_start($env, "standard"))) {
return undef;
}
-
- $self->{vars}->{s4member} = $env;
}
return $env;
@@ -2197,8 +2121,6 @@ sub setup_s4member_dflt_domain
if (not defined($self->check_or_start($env, "standard"))) {
return undef;
}
-
- $self->{vars}->{s4member_dflt_domain} = $env;
}
return $env;
@@ -2214,8 +2136,6 @@ sub setup_rpc_proxy
if (not defined($self->check_or_start($env, "standard"))) {
return undef;
}
-
- $self->{vars}->{rpc_proxy} = $env;
}
return $env;
}
@@ -2230,8 +2150,6 @@ sub setup_ad_dc_ntvfs
warn("Failed to start ad_dc_ntvfs");
return undef;
}
-
- $self->{vars}->{ad_dc_ntvfs} = $env;
}
return $env;
}
@@ -2245,8 +2163,6 @@ sub setup_chgdcpass
if (not defined($self->check_or_start($env, "standard"))) {
return undef;
}
-
- $self->{vars}->{chgdcpass} = $env;
}
return $env;
}
@@ -2260,8 +2176,6 @@ sub setup_fl2000dc
if (not defined($self->check_or_start($env, "standard"))) {
return undef;
}
-
- $self->{vars}->{fl2000dc} = $env;
}
return $env;
@@ -2279,8 +2193,6 @@ sub setup_fl2003dc
}
$env = $self->setup_trust($env, $dc_vars, "external", "--no-aes-keys");
-
- $self->{vars}->{fl2003dc} = $env;
}
return $env;
}
@@ -2302,8 +2214,6 @@ sub setup_fl2008r2dc
$self->setup_namespaces($env, $upn_array, $spn_array);
$env = $self->setup_trust($env, $dc_vars, "forest", "");
-
- $self->{vars}->{fl2008r2dc} = $env;
}
return $env;
@@ -2311,6 +2221,16 @@ sub setup_fl2008r2dc
sub setup_vampire_dc
{
+ return setup_generic_vampire_dc(@_, "2008");
+}
+
+sub setup_vampire_2000_dc
+{
+ return setup_generic_vampire_dc(@_, "2000");
+}
+
+sub setup_generic_vampire_dc
+{
my ($self, $path, $dc_vars, $fl) = @_;
my $env = $self->provision_vampire_dc($path, $dc_vars, $fl);
@@ -2320,8 +2240,6 @@ sub setup_vampire_dc
return undef;
}
- $self->{vars}->{vampire_dc} = $env;
-
# force replicated DC to update repsTo/repsFrom
# for vampired partitions
my $samba_tool = Samba::bindir_path($self, "samba-tool");
@@ -2396,8 +2314,6 @@ sub setup_promoted_dc
return undef;
}
- $self->{vars}->{promoted_dc} = $env;
-
# force source and replicated DC to update repsTo/repsFrom
# for vampired partitions
my $samba_tool = Samba::bindir_path($self, "samba-tool");
@@ -2439,8 +2355,6 @@ sub setup_subdom_dc
return undef;
}
- $self->{vars}->{subdom_dc} = $env;
-
# force replicated DC to update repsTo/repsFrom
# for primary domain partitions
my $samba_tool = Samba::bindir_path($self, "samba-tool");
@@ -2509,8 +2423,6 @@ sub setup_rodc
return undef;
}
- $self->{vars}->{rodc} = $env;
-
return $env;
}
@@ -2538,7 +2450,6 @@ sub setup_ad_dc
$self->setup_namespaces($env, $upn_array, $spn_array);
- $self->{vars}->{ad_dc} = $env;
return $env;
}
@@ -2569,7 +2480,6 @@ sub setup_ad_dc_no_nss
$self->setup_namespaces($env, $upn_array, $spn_array);
- $self->{vars}->{ad_dc_no_nss} = $env;
return $env;
}
@@ -2598,7 +2508,6 @@ sub setup_ad_dc_no_ntlm
$self->setup_namespaces($env, $upn_array, $spn_array);
- $self->{vars}->{ad_dc_no_ntlm} = $env;
return $env;
}