s4:selftest Add infrastructure for testing against an RPC proxy
authorAndrew Bartlett <abartlet@samba.org>
Fri, 19 Feb 2010 04:56:30 +0000 (15:56 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 19 Feb 2010 05:32:49 +0000 (16:32 +1100)
This also changes the 'testenv' code to use a new environment 'all'
(we may wish to make other complex tests depend on this in future),
and exports more names in more namespaces.

Andrew Bartlett

selftest/selftest.pl
selftest/target/Samba4.pm

index ba6604961684eb0263afd2255c7d1e1cf8b31018..ea09c269e7e7ad1b77235ac7e25f36c885cbd14e 100755 (executable)
@@ -457,7 +457,7 @@ my $target;
 my $testenv_default = "none";
 
 if ($opt_target eq "samba4") {
-       $testenv_default = "member";
+       $testenv_default = "all";
        require target::Samba4;
        $target = new Samba4($bindir, $ldap, "$srcdir/setup", $exeext);
 } elsif ($opt_target eq "samba3") {
@@ -729,6 +729,18 @@ my @exported_envvars = (
        "DC_NETBIOSNAME",
        "DC_NETBIOSALIAS",
 
+       # domain controller stuff
+       "MEMBER_SERVER",
+       "MEMBER_SERVER_IP",
+       "MEMBER_NETBIOSNAME",
+       "MEMBER_NETBIOSALIAS",
+
+       # domain controller stuff
+       "RPC_PROXY_SERVER",
+       "RPC_PROXY_SERVER_IP",
+       "RPC_PROXY_NETBIOSNAME",
+       "RPC_PROXY_NETBIOSALIAS",
+
        # server stuff
        "SERVER",
        "SERVER_IP",
index b3f1e58814d64de9fc8a630e456a0ca6a0bfcc27..c1d6bec3a096fca31f67257d03003f4d758c516a 100644 (file)
@@ -715,7 +715,7 @@ sub provision_raw_step2($$$)
 
 sub provision($$$$$$$)
 {
-       my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, $swiface, $password, $kdc_ipv4) = @_;
+       my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, $swiface, $password, $kdc_ipv4, $extra_smbconf_options) = @_;
 
        my $ctx = $self->provision_raw_prepare($prefix, $server_role,
                                               $netbiosname, $netbiosalias,
@@ -730,6 +730,7 @@ sub provision($$$$$$$)
 
        max xmit = 32K
        server max protocol = SMB2
+        $extra_smbconf_options
 
 [tmp]
        path = $ctx->{tmpdir}
@@ -825,7 +826,8 @@ sub provision_member($$$)
                                   "localmember",
                                   3,
                                   "localmemberpass",
-                                  $dcvars->{SERVER_IP});
+                                  $dcvars->{SERVER_IP},
+                                  "");
 
        $ret or die("Unable to provision");
 
@@ -834,16 +836,63 @@ sub provision_member($$$)
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
-       $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}";
+       $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
 
        system($cmd) == 0 or die("Join failed\n$cmd");
 
-       $ret->{DC_SERVER} = $dcvars->{SERVER};
-       $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
-       $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
-       $ret->{DC_NETBIOSALIAS} = $dcvars->{NETBIOSALIAS};
-       $ret->{DC_USERNAME} = $dcvars->{USERNAME};
-       $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
+       $ret->{MEMBER_SERVER} = $ret->{SERVER};
+       $ret->{MEMBER_SERVER_IP} = $ret->{SERVER_IP};
+       $ret->{MEMBER_NETBIOSNAME} = $ret->{NETBIOSNAME};
+       $ret->{MEMBER_NETBIOSALIAS} = $ret->{NETBIOSALIAS};
+       $ret->{MEMBER_USERNAME} = $ret->{USERNAME};
+       $ret->{MEMBER_PASSWORD} = $ret->{PASSWORD};
+
+       $ret->{DC_SERVER} = $dcvars->{DC_SERVER};
+       $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP};
+       $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME};
+       $ret->{DC_NETBIOSALIAS} = $dcvars->{DC_NETBIOSALIAS};
+       $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME};
+       $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD};
+
+       return $ret;
+}
+
+sub provision_rpc_proxy($$$)
+{
+       my ($self, $prefix, $dcvars) = @_;
+       print "PROVISIONING RPC PROXY...";
+
+       my $extra_smbconf_options = "dcerpc_remote:binding = ncacn_ip_tcp:localdc1
+       dcerpc endpoint servers = epmapper, remote
+       dcerpc_remote:interfaces = rpcecho
+";
+
+       my $ret = $self->provision($prefix,
+                                  "member server",
+                                  "localrpcproxy4",
+                                  "localrpcproxy",
+                                  4,
+                                  "localrpcproxypass",
+                                  $dcvars->{SERVER_IP},
+                                  $extra_smbconf_options);
+
+       $ret or die("Unable to provision");
+
+       my $net = $self->bindir_path("net");
+       my $cmd = "";
+       $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+       $cmd .= "$net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
+       $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
+
+       system($cmd) == 0 or die("Join failed\n$cmd");
+
+       $ret->{RPC_PROXY_SERVER} = $ret->{SERVER};
+       $ret->{RPC_PROXY_SERVER_IP} = $ret->{SERVER_IP};
+       $ret->{RPC_PROXY_NETBIOSNAME} = $ret->{NETBIOSNAME};
+       $ret->{RPC_PROXY_NETBIOSALIAS} = $ret->{NETBIOSALIAS};
+       $ret->{RPC_PROXY_USERNAME} = $ret->{USERNAME};
+       $ret->{RPC_PROXY_PASSWORD} = $ret->{PASSWORD};
 
        return $ret;
 }
@@ -859,11 +908,18 @@ sub provision_dc($$)
                                   "localdc",
                                   1,
                                   "localdcpass",
-                                  "127.0.0.1");
+                                  "127.0.0.1", "");
 
        $self->add_wins_config("$prefix/private") or 
                die("Unable to add wins configuration");
 
+       $ret->{DC_SERVER} = $ret->{SERVER};
+       $ret->{DC_SERVER_IP} = $ret->{SERVER_IP};
+       $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME};
+       $ret->{DC_NETBIOSALIAS} = $ret->{NETBIOSALIAS};
+       $ret->{DC_USERNAME} = $ret->{USERNAME};
+       $ret->{DC_PASSWORD} = $ret->{PASSWORD};
+
        return $ret;
 }
 
@@ -942,11 +998,32 @@ sub setup_env($$$)
 
        if ($envname eq "dc") {
                return $self->setup_dc("$path/dc");
+       } elsif ($envname eq "rpc_proxy") {
+               if (not defined($self->{vars}->{dc})) {
+                       $self->setup_dc("$path/dc");
+               }
+               return $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{dc});
        } elsif ($envname eq "member") {
                if (not defined($self->{vars}->{dc})) {
                        $self->setup_dc("$path/dc");
                }
                return $self->setup_member("$path/member", $self->{vars}->{dc});
+       } elsif ($envname eq "all") {
+               if (not defined($self->{vars}->{dc})) {
+                       $self->setup_dc("$path/dc");
+               }
+               my $ret = $self->setup_member("$path/member", $self->{vars}->{dc});
+               if (not defined($self->{vars}->{rpc_proxy})) {
+                       my $rpc_proxy_ret = $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{dc});
+                       
+                       $ret->{RPC_PROXY_SERVER} = $rpc_proxy_ret->{SERVER};
+                       $ret->{RPC_PROXY_SERVER_IP} = $rpc_proxy_ret->{SERVER_IP};
+                       $ret->{RPC_PROXY_NETBIOSNAME} = $rpc_proxy_ret->{NETBIOSNAME};
+                       $ret->{RPC_PROXY_NETBIOSALIAS} = $rpc_proxy_ret->{NETBIOSALIAS};
+                       $ret->{RPC_PROXY_USERNAME} = $rpc_proxy_ret->{USERNAME};
+                       $ret->{RPC_PROXY_PASSWORD} = $rpc_proxy_ret->{PASSWORD};
+               }
+               return $ret;
        } else {
                die("Samba4 can't provide environment '$envname'");
        }
@@ -962,6 +1039,23 @@ sub setup_member($$$$)
 
        $self->wait_for_start($env);
 
+       $self->{vars}->{member} = $env;
+
+       return $env;
+}
+
+sub setup_rpc_proxy($$$$)
+{
+       my ($self, $path, $dc_vars) = @_;
+
+       my $env = $self->provision_rpc_proxy($path, $dc_vars);
+
+       $self->check_or_start($env, ($ENV{SMBD_MAXTIME} or 7500));
+
+       $self->wait_for_start($env);
+
+       $self->{vars}->{rpc_proxy} = $env;
+
        return $env;
 }