selftest: Provide a single bindir_path function across all targets
authorAndrew Bartlett <abartlet@samba.org>
Fri, 15 Apr 2011 02:27:30 +0000 (12:27 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Sat, 16 Apr 2011 09:43:04 +0000 (11:43 +0200)
This will allow a mapping to be made between things like smbtorture4
-> smbtorture that is correct for the different build environments.

Andrew Bartlett

selftest/selftest.pl
selftest/selftesthelpers.py
selftest/target/Samba3.pm
selftest/target/Samba4.pm
selftest/test_samba4.pl

index fbb36a2d58d8553f5fdf42e3ee2e3aef965282ad..4d7186a6dcb5c7011292c27e6083db9245a500fc 100755 (executable)
@@ -156,7 +156,7 @@ my $opt_testenv = 0;
 my $opt_list = 0;
 my $ldap = undef;
 my $opt_resetup_env = undef;
-my $opt_bindir = undef;
+my $opt_binary_mapping = "";
 my $opt_load_list = undef;
 my @testlists = ();
 
@@ -314,7 +314,6 @@ Target Specific:
  --socket-wrapper-keep-pcap keep all pcap files, not just those for tests that 
                             failed
  --socket-wrapper           enable socket wrapper
- --bindir=PATH              path to target binaries
 
 Samba4 Specific:
  --ldap=openldap|fedora-ds  back samba onto specified ldap server
@@ -351,10 +350,10 @@ my $result = GetOptions (
                'list' => \$opt_list,
                'ldap:s' => \$ldap,
                'resetup-environment' => \$opt_resetup_env,
-               'bindir:s' => \$opt_bindir,
                'image=s' => \$opt_image,
                'testlist=s' => \@testlists,
                'load-list=s' => \$opt_load_list,
+                'binary-mapping=s' => \$opt_binary_mapping
            );
 
 exit(1) if (not $result);
@@ -377,7 +376,7 @@ unless (defined($ENV{VALGRIND})) {
 # make all our python scripts unbuffered
 $ENV{PYTHONUNBUFFERED} = 1;
 
-my $bindir = ($opt_bindir or "$builddir/bin");
+my $bindir = "$builddir/bin";
 my $bindir_abs = abs_path($bindir);
 
 # Backwards compatibility:
@@ -462,17 +461,41 @@ if ($opt_socket_wrapper) {
 my $target;
 my $testenv_default = "none";
 
+my %binary_mapping = {};
+if ($opt_binary_mapping) {
+    my @binmapping_list = split(/,/, $opt_binary_mapping);
+    foreach my $mapping (@binmapping_list) {
+       my ($bin, $map) = split(/\:/, $mapping);
+       $binary_mapping{$bin} = $map;
+    }
+}
+
+$ENV{BINARY_MAPPING} = $opt_binary_mapping;
+
+sub bindir_path($$) {
+       my ($self, $path) = @_;
+
+       if (defined($self->{binary_mapping}->{$path})) {
+           $path = $self->{binary_mapping}->{$path};
+       }
+
+       my $valpath = "$self->{bindir}/$path$self->{exeext}";
+
+       return $valpath if (-f $valpath);
+       return $path;
+}
+
 if ($opt_target eq "samba4") {
        $testenv_default = "all";
        require target::Samba4;
-       $target = new Samba4($bindir, $ldap, $srcdir, $exeext);
+       $target = new Samba4($bindir, \%binary_mapping, \&bindir_path, $ldap, $srcdir, $exeext);
 } elsif ($opt_target eq "samba3") {
        if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") {
                die("You must include --enable-socket-wrapper when compiling Samba in order to execute 'make test'.  Exiting....");
        }
        $testenv_default = "member";
        require target::Samba3;
-       $target = new Samba3($bindir, $srcdir_abs);
+       $target = new Samba3($bindir, \%binary_mapping, \&bindir_path, $srcdir_abs, $exeext);
 } elsif ($opt_target eq "win") {
        die("Windows tests will not run with socket wrapper enabled.") 
                if ($opt_socket_wrapper);
index 781c8ccb9a82a3302d9606ce929b263034357e0d..5b6c5a53494b3d61d2f70590e9e24d355cff34af 100644 (file)
@@ -22,10 +22,10 @@ import os
 import subprocess
 
 def srcdir():
-    return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
+    return os.path.normpath(os.getenv("SRCDIR", os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")))
 
 def source4dir():
-    return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../source4"))
+    return os.path.normpath(os.path.join(srcdir(), "source4"))
 
 def bindir():
     return os.path.normpath(os.path.join(os.getenv("BUILDDIR", "."), "bin"))
index d2082f5b9160d68245cea004712ba539b1db06f4..75ede8739a96b2e538d7a889875fd29266f898ce 100644 (file)
@@ -10,23 +10,15 @@ use Cwd qw(abs_path);
 use FindBin qw($RealBin);
 use POSIX;
 
-sub binpath($$)
-{
-       my ($self, $binary) = @_;
-
-       if (defined($self->{bindir})) {
-               my $path = "$self->{bindir}/$binary";
-               -f $path or die("File $path doesn't exist");
-               return $path;
-       }
-
-       return $binary;
-}
-
 sub new($$) {
-       my ($classname, $bindir, $srcdir) = @_;
-       my $self = { bindir => $bindir,
-                    srcdir => $srcdir
+       my ($classname, $bindir, $binary_mapping, $bindir_path, $srcdir, $exeext) = @_;
+       $exeext = "" unless defined($exeext);
+       my $self = { vars => {},
+                    bindir => $bindir,
+                    binary_mapping => $binary_mapping,
+                    bindir_path => $bindir_path,
+                    srcdir => $srcdir,
+                    exeext => $exeext
        };
        bless $self;
        return $self;
@@ -180,7 +172,7 @@ sub setup_member($$$)
 
        $ret or return undef;
 
-       my $net = $self->binpath("net");
+       my $net = $self->{bindir_path}->($self, "net");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "$net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
@@ -411,14 +403,14 @@ sub check_or_start($$$$$) {
                        @optargs = split(/ /, $ENV{NMBD_OPTIONS});
                }
 
-               $ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd");
+               $ENV{MAKE_TEST_BINARY} = $self->{bindir_path}->($self, "nmbd");
 
-               my @preargs = ($self->binpath("timelimit"), $maxtime);
+               my @preargs = ($self->{bindir_path}->($self, "timelimit"), $maxtime);
                if(defined($ENV{NMBD_VALGRIND})) { 
                        @preargs = split(/ /, $ENV{NMBD_VALGRIND});
                }
 
-               exec(@preargs, $self->binpath("nmbd"), "-F", "--no-process-group", "-S", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");
+               exec(@preargs, $self->{bindir_path}->($self, "nmbd"), "-F", "--no-process-group", "-S", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");
        }
        write_pid($env_vars, "nmbd", $pid);
        print "DONE\n";
@@ -454,14 +446,14 @@ sub check_or_start($$$$$) {
                        @optargs = split(/ /, $ENV{WINBINDD_OPTIONS});
                }
 
-               $ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd");
+               $ENV{MAKE_TEST_BINARY} = $self->{bindir_path}->($self, "winbindd");
 
-               my @preargs = ($self->binpath("timelimit"), $maxtime);
+               my @preargs = ($self->{bindir_path}->($self, "timelimit"), $maxtime);
                if(defined($ENV{WINBINDD_VALGRIND})) {
                        @preargs = split(/ /, $ENV{WINBINDD_VALGRIND});
                }
 
-               exec(@preargs, $self->binpath("winbindd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!");
+               exec(@preargs, $self->{bindir_path}->($self, "winbindd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!");
        }
        write_pid($env_vars, "winbindd", $pid);
        print "DONE\n";
@@ -492,16 +484,16 @@ sub check_or_start($$$$$) {
                        exit 0;
                }
 
-               $ENV{MAKE_TEST_BINARY} = $self->binpath("smbd");
+               $ENV{MAKE_TEST_BINARY} = $self->{bindir_path}->($self, "smbd");
                my @optargs = ("-d0");
                if (defined($ENV{SMBD_OPTIONS})) {
                        @optargs = split(/ /, $ENV{SMBD_OPTIONS});
                }
-               my @preargs = ($self->binpath("timelimit"), $maxtime);
+               my @preargs = ($self->{bindir_path}->($self, "timelimit"), $maxtime);
                if(defined($ENV{SMBD_VALGRIND})) {
                        @preargs = split(/ /,$ENV{SMBD_VALGRIND});
                }
-               exec(@preargs, $self->binpath("smbd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!");
+               exec(@preargs, $self->{bindir_path}->($self, "smbd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!");
        }
        write_pid($env_vars, "smbd", $pid);
        print "DONE\n";
@@ -824,7 +816,7 @@ domusers:X:$gid_domusers:
        $ENV{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
        $ENV{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
 
-       open(PWD, "|".$self->binpath("smbpasswd")." -c $conffile -L -s -a $unix_name >/dev/null");
+       open(PWD, "|".$self->{bindir_path}->($self, "smbpasswd")." -c $conffile -L -s -a $unix_name >/dev/null");
        print PWD "$password\n$password\n";
        close(PWD) or die("Unable to set password for test account");
 
@@ -871,11 +863,11 @@ sub wait_for_start($$)
        print "delaying for nbt name registration\n";
        sleep(10);
        # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 
-       system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__");
-       system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} __SAMBA__");
-       system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__");
-       system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}");
-       system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} $envvars->{SERVER}");
+       system($self->{bindir_path}->($self, "nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__");
+       system($self->{bindir_path}->($self, "nmblookup") ." $envvars->{CONFIGURATION} __SAMBA__");
+       system($self->{bindir_path}->($self, "nmblookup") ." $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__");
+       system($self->{bindir_path}->($self, "nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}");
+       system($self->{bindir_path}->($self, "nmblookup") ." $envvars->{CONFIGURATION} $envvars->{SERVER}");
 
        # make sure smbd is also up set
        print "wait for smbd\n";
@@ -883,7 +875,7 @@ sub wait_for_start($$)
        my $count = 0;
        my $ret;
        do {
-           $ret = system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER} -U% -p 139");
+           $ret = system($self->{bindir_path}->($self, "smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER} -U% -p 139");
            if ($ret != 0) {
                sleep(2);
            }
@@ -895,7 +887,7 @@ sub wait_for_start($$)
            return 0;
        }
        # Ensure we have domain users mapped.
-       $ret = system($self->binpath("net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain");
+       $ret = system($self->{bindir_path}->($self, "net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain");
        if ($ret != 0) {
            return 1;
        }
index 07dcf3620654a5153d6b1d562b0d9c9a49a9e752..6f7807473d2efcf864e5c0c9362d87da51c4ef6e 100644 (file)
@@ -12,12 +12,15 @@ use POSIX;
 use SocketWrapper;
 
 sub new($$$$$) {
-       my ($classname, $bindir, $ldap, $srcdir, $exeext) = @_;
+       my ($classname, $bindir, $binary_mapping, $bindir_path, $ldap, $srcdir, $exeext) = @_;
        $exeext = "" unless defined($exeext);
+
        my $self = {
                vars => {},
                ldap => $ldap,
                bindir => $bindir,
+               binary_mapping => $binary_mapping,
+               bindir_path => $bindir_path,
                srcdir => $srcdir,
                exeext => $exeext
        };
@@ -25,15 +28,6 @@ sub new($$$$$) {
        return $self;
 }
 
-sub bindir_path($$) {
-       my ($self, $path) = @_;
-
-       my $valpath = "$self->{bindir}/$path$self->{exeext}";
-
-       return $valpath if (-f $valpath);
-       return $path;
-}
-
 sub scriptdir_path($$) {
        my ($self, $path) = @_;
        return "$self->{srcdir}/source4/scripting/$path";
@@ -46,7 +40,7 @@ sub slapd_start($$)
 {
        my $count = 0;
        my ($self, $env_vars) = @_;
-       my $ldbsearch = $self->bindir_path("ldbsearch");
+       my $ldbsearch = $self->bindir_path($self, "ldbsearch");
 
        my $uri = $env_vars->{LDAP_URI};
 
@@ -138,7 +132,7 @@ sub check_or_start($$$)
                if (defined($ENV{SAMBA_OPTIONS})) {
                        $optarg.= " $ENV{SAMBA_OPTIONS}";
                }
-               my $samba = $self->bindir_path("samba");
+               my $samba = $self->{bindir_path}->($self, "samba");
 
                # allow selection of the process model using
                # the environment varibale SAMBA_PROCESS_MODEL
@@ -186,7 +180,7 @@ sub wait_for_start($$)
 
        # This will return quickly when things are up, but be slow if we
        # need to wait for (eg) SSL init
-       my $nmblookup = $self->bindir_path("nmblookup");
+       my $nmblookup = $self->{bindir_path}->($self, "nmblookup");
        system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{SERVER}");
        system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{SERVER}");
        system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}");
@@ -207,7 +201,7 @@ sub write_ldb_file($$$)
 {
        my ($self, $file, $ldif) = @_;
 
-       my $ldbadd = $self->bindir_path("ldbadd");
+       my $ldbadd = $self->{bindir_path}->($self, "ldbadd");
        open(LDIF, "|$ldbadd -H $file >/dev/null");
        print LDIF $ldif;
        return(close(LDIF));
@@ -895,7 +889,7 @@ sub provision_member($$$)
                return undef;
        }
 
-       my $samba_tool = $self->bindir_path("samba-tool");
+       my $samba_tool = $self->{bindir_path}->($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
@@ -950,7 +944,7 @@ sub provision_rpc_proxy($$$)
                return undef;
        }
 
-       my $samba_tool = $self->bindir_path("samba-tool");
+       my $samba_tool = $self->{bindir_path}->($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
@@ -1013,7 +1007,7 @@ sub provision_vampire_dc($$$)
                return undef;
        }
 
-       my $samba_tool = $self->bindir_path("samba-tool");
+       my $samba_tool = $self->{bindir_path}->($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
@@ -1192,7 +1186,7 @@ sub provision_rodc($$$)
                return undef;
        }
 
-       my $samba_tool = $self->bindir_path("samba-tool");
+       my $samba_tool = $self->{bindir_path}->($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
@@ -1498,7 +1492,7 @@ sub setup_vampire_dc($$$)
 
                # force replicated DC to update repsTo/repsFrom
                # for vampired partitions
-               my $samba_tool = $self->bindir_path("samba-tool");
+               my $samba_tool = $self->{bindir_path}->($self, "samba-tool");
                my $cmd = "";
                $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
                $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
index 416bf1d1db93dab9a1431629ab569965c1204165..5bf39138557c441847d45bfd7eb685d0205a6e52 100755 (executable)
@@ -6,7 +6,7 @@ use lib $RealBin;
 use lib "$RealBin/target";
 use Samba4;
 
-my $s = new Samba4("bin", undef, $RealBin."/../setup");
+my $s = new Samba4("bin", undef, undef, undef, $RealBin."/../setup");
 
 ok($s);