Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/selftest/selftest.pl

    r414 r740  
    11#!/usr/bin/perl
    22# Bootstrap Samba and run a number of tests against it.
    3 # Copyright (C) 2005-2009 Jelmer Vernooij <jelmer@samba.org>
     3# Copyright (C) 2005-2010 Jelmer Vernooij <jelmer@samba.org>
    44# Copyright (C) 2007-2009 Stefan Metzmacher <metze@samba.org>
    55
     
    126126use FindBin qw($RealBin $Script);
    127127use File::Spec;
     128use File::Temp qw(tempfile);
    128129use Getopt::Long;
    129130use POSIX;
    130131use Cwd qw(abs_path);
    131132use lib "$RealBin";
    132 use Subunit qw(parse_results);
    133 use Subunit::Filter;
     133use Subunit;
    134134use SocketWrapper;
     135
     136eval {
     137require Time::HiRes;
     138Time::HiRes->import("time");
     139};
     140if ($@) {
     141        print "You don't have Time::Hires installed !\n";
     142}
    135143
    136144my $opt_help = 0;
     
    146154my $opt_image = undef;
    147155my $opt_testenv = 0;
     156my $opt_list = 0;
    148157my $ldap = undef;
    149 my $opt_analyse_cmd = undef;
    150158my $opt_resetup_env = undef;
    151159my $opt_bindir = undef;
    152 my $opt_no_lazy_setup = undef;
     160my $opt_load_list = undef;
    153161my @testlists = ();
    154162
     
    161169my @excludes = ();
    162170
     171sub pipe_handler {
     172        my $sig = shift @_;
     173        print STDERR "Exiting early because of SIGPIPE.\n";
     174        exit(1);
     175}
     176
     177$SIG{PIPE} = \&pipe_handler;
     178
    163179sub find_in_list($$)
    164180{
     
    213229}
    214230
     231# expand strings from %ENV
     232sub expand_environment_strings($)
     233{
     234        my $s = shift;
     235        # we use a reverse sort so we do the longer ones first
     236        foreach my $k (sort { $b cmp $a } keys %ENV) {
     237                $s =~ s/\$$k/$ENV{$k}/g;
     238        }
     239        return $s;
     240}
     241
    215242sub run_testsuite($$$$$)
    216243{
     
    219246
    220247        Subunit::start_testsuite($name);
     248        Subunit::progress_push();
    221249        Subunit::report_time(time());
    222 
    223         open(RESULTS, "$cmd 2>&1|");
    224         my $statistics = {
    225                 TESTS_UNEXPECTED_OK => 0,
    226                 TESTS_EXPECTED_OK => 0,
    227                 TESTS_UNEXPECTED_FAIL => 0,
    228                 TESTS_EXPECTED_FAIL => 0,
    229                 TESTS_ERROR => 0,
    230                 TESTS_SKIP => 0,
    231         };
    232 
    233         my $msg_ops = new Subunit::Filter("$name\.", []);
    234 
    235         parse_results($msg_ops, $statistics, *RESULTS);
    236 
    237         my $ret = 0;
    238 
    239         unless (close(RESULTS)) {
    240                 if ($!) {
    241                         Subunit::end_testsuite($name, "error", "Unable to run $cmd: $!");
    242                         return 0;
    243                 } else {
    244                         $ret = $?;
    245                 }
    246         }
    247 
    248         if ($ret & 127) {
    249                 Subunit::end_testsuite($name, "error", sprintf("Testsuite died with signal %d, %s coredump", ($ret & 127), ($ret & 128) ? "with": "without"));
    250                 return 0;
    251         }
     250        system($cmd);
     251        Subunit::report_time(time());
     252        Subunit::progress_pop();
     253
     254        if ($? == -1) {
     255                Subunit::progress_pop();
     256                Subunit::end_testsuite($name, "error", "Unable to run $cmd: $!");
     257                exit(1);
     258        } elsif ($? & 127) {
     259                Subunit::end_testsuite($name, "error",
     260                        sprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127),  ($? & 128) ? 'with' : 'without'));
     261                exit(1);
     262        }
     263
     264        my $exitcode = $? >> 8;
     265
    252266        my $envlog = getlog_env($envname);
    253267        if ($envlog ne "") {
     
    256270
    257271        print "command: $cmd\n";
    258 
    259         my $exitcode = $ret >> 8;
    260 
    261         Subunit::report_time(time());
     272        printf "expanded command: %s\n", expand_environment_strings($cmd);
     273
    262274        if ($exitcode == 0) {
    263275                Subunit::end_testsuite($name, "success");
     
    315327 --one                      abort when the first test fails
    316328 --verbose                  be verbose
    317  --analyse-cmd CMD          command to run after each test
     329 --testenv                  run a shell in the requested test environment
     330 --list                     list available tests
    318331";
    319332        exit(0);
     
    336349                'verbose' => \$opt_verbose,
    337350                'testenv' => \$opt_testenv,
     351                'list' => \$opt_list,
    338352                'ldap:s' => \$ldap,
    339                 'analyse-cmd=s' => \$opt_analyse_cmd,
    340                 'no-lazy-setup' => \$opt_no_lazy_setup,
    341353                'resetup-environment' => \$opt_resetup_env,
    342354                'bindir:s' => \$opt_bindir,
    343355                'image=s' => \$opt_image,
    344                 'testlist=s' => \@testlists
     356                'testlist=s' => \@testlists,
     357                'load-list=s' => \$opt_load_list,
    345358            );
    346359
     
    348361
    349362ShowHelp() if ($opt_help);
     363
     364die("--list and --testenv are mutually exclusive") if ($opt_list and $opt_testenv);
     365
     366# we want unbuffered output
     367$| = 1;
    350368
    351369my @tests = @ARGV;
     
    356374        $ENV{MALLOC_CHECK_} = 2;
    357375}
     376
     377# make all our python scripts unbuffered
     378$ENV{PYTHONUNBUFFERED} = 1;
    358379
    359380my $bindir = ($opt_bindir or "$builddir/bin");
     
    385406
    386407my $prefix_abs = abs_path($prefix);
     408my $tmpdir_abs = abs_path("$prefix/tmp");
     409mkdir($tmpdir_abs, 0777) unless -d $tmpdir_abs;
     410
    387411my $srcdir_abs = abs_path($srcdir);
    388412my $builddir_abs = abs_path($builddir);
     
    398422$ENV{BUILDDIR} = $builddir;
    399423$ENV{BUILDDIR_ABS} = $builddir_abs;
     424$ENV{BINDIR} = $bindir_abs;
    400425$ENV{EXEEXT} = $exeext;
    401426
    402427my $tls_enabled = not $opt_quick;
    403428$ENV{TLS_ENABLED} = ($tls_enabled?"yes":"no");
    404 $ENV{LDB_MODULES_PATH} = "$bindir_abs/modules/ldb";
    405 $ENV{LD_SAMBA_MODULE_PATH} = "$bindir_abs/modules";
     429
    406430sub prefix_pathvar($$)
    407431{
     
    428452my $socket_wrapper_dir;
    429453if ($opt_socket_wrapper) {
    430         $socket_wrapper_dir = SocketWrapper::setup_dir("$prefix/w", $opt_socket_wrapper_pcap);
     454        $socket_wrapper_dir = SocketWrapper::setup_dir("$prefix_abs/w", $opt_socket_wrapper_pcap);
    431455        print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n";
    432456} else {
     
    440464
    441465if ($opt_target eq "samba4") {
    442         $testenv_default = "member";
     466        $testenv_default = "all";
    443467        require target::Samba4;
    444         $target = new Samba4($bindir, $ldap, "$srcdir/setup", $exeext);
     468        $target = new Samba4($bindir, $ldap, $srcdir, $exeext);
    445469} elsif ($opt_target eq "samba3") {
    446470        if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") {
     
    449473        $testenv_default = "member";
    450474        require target::Samba3;
    451         $target = new Samba3($bindir);
     475        $target = new Samba3($bindir, $srcdir_abs);
    452476} elsif ($opt_target eq "win") {
    453477        die("Windows tests will not run with socket wrapper enabled.")
     
    516540}
    517541
    518 my $interfaces = join(',', ("127.0.0.6/8",
    519                             "127.0.0.7/8",
    520                             "127.0.0.8/8",
    521                             "127.0.0.9/8",
    522                             "127.0.0.10/8",
    523                             "127.0.0.11/8"));
    524 
    525 my $conffile = "$prefix_abs/client/client.conf";
     542my $interfaces = join(',', ("127.0.0.11/8",
     543                            "127.0.0.12/8",
     544                            "127.0.0.13/8",
     545                            "127.0.0.14/8",
     546                            "127.0.0.15/8",
     547                            "127.0.0.16/8"));
     548
     549my $clientdir = "$prefix_abs/client";
     550
     551my $conffile = "$clientdir/client.conf";
    526552$ENV{SMB_CONF_PATH} = $conffile;
    527553
    528 sub write_clientconf($$)
    529 {
    530         my ($conffile, $vars) = @_;
    531 
    532         mkdir("$prefix/client", 0777) unless -d "$prefix/client";
    533        
    534         if ( -d "$prefix/client/private" ) {
    535                 unlink <$prefix/client/private/*>;
     554sub write_clientconf($$$)
     555{
     556        my ($conffile, $clientdir, $vars) = @_;
     557
     558        mkdir("$clientdir", 0777) unless -d "$clientdir";
     559
     560        if ( -d "$clientdir/private" ) {
     561                unlink <$clientdir/private/*>;
    536562        } else {
    537                 mkdir("$prefix/client/private", 0777);
    538         }
    539 
    540         if ( -d "$prefix/client/lockdir" ) {
    541                 unlink <$prefix/client/lockdir/*>;
     563                mkdir("$clientdir/private", 0777);
     564        }
     565
     566        if ( -d "$clientdir/lockdir" ) {
     567                unlink <$clientdir/lockdir/*>;
    542568        } else {
    543                 mkdir("$prefix/client/lockdir", 0777);
    544         }
    545 
    546         if ( -d "$prefix_abs/client/ncalrpcdir" ) {
    547                 unlink <$prefix/client/ncalrpcdir/*>;
     569                mkdir("$clientdir/lockdir", 0777);
     570        }
     571
     572        if ( -d "$clientdir/ncalrpcdir" ) {
     573                unlink <$clientdir/ncalrpcdir/*>;
    548574        } else {
    549                 mkdir("$prefix/client/ncalrpcdir", 0777);
     575                mkdir("$clientdir/ncalrpcdir", 0777);
    550576        }
    551577
     
    568594        }
    569595        print CF "
    570         private dir = $prefix_abs/client/private
    571         lock dir = $prefix_abs/client/lockdir
    572         ncalrpc dir = $prefix_abs/client/ncalrpcdir
    573         name resolve order = bcast
     596        private dir = $clientdir/private
     597        lock dir = $clientdir/lockdir
     598        ncalrpc dir = $clientdir/ncalrpcdir
     599        name resolve order = bcast file
    574600        panic action = $RealBin/gdb_backtrace \%PID\% \%PROG\%
    575601        max xmit = 32K
     
    578604        system:anonymous = true
    579605        client lanman auth = Yes
    580         torture:basedir = $prefix_abs/client
     606        log level = 1
     607        torture:basedir = $clientdir
    581608#We don't want to pass our self-tests if the PAC code is wrong
    582609        gensec:require_pac = true
    583         modules dir = $ENV{LD_SAMBA_MODULE_PATH}
     610        resolv:host file = $prefix_abs/dns_host_file
     611#We don't want to run 'speed' tests for very long
     612        torture:timelimit = 1
    584613";
    585614        close(CF);
     
    587616
    588617my @todo = ();
    589 
    590 my $testsdir = "$srcdir/selftest";
    591 
    592 my %required_envs = ();
    593618
    594619sub should_run_test($)
     
    614639
    615640        while (<IN>) {
    616                 if ($_ eq "-- TEST --\n") {
     641                if (/-- TEST(-LOADLIST|-IDLIST|) --\n/) {
     642                        my $supports_loadlist = (defined($1) and $1 eq "-LOADLIST");
     643                        my $supports_idlist = (defined($1) and $1 eq "-IDLIST");
    617644                        my $name = <IN>;
    618645                        $name =~ s/\n//g;
     
    622649                        $cmdline =~ s/\n//g;
    623650                        if (should_run_test($name) == 1) {
    624                                 $required_envs{$env} = 1;
    625                                 push (@ret, [$name, $env, $cmdline]);
     651                                push (@ret, [$name, $env, $cmdline, $supports_loadlist, $supports_idlist]);
    626652                        }
    627653                } else {
     
    638664
    639665$ENV{SELFTEST_PREFIX} = "$prefix_abs";
     666$ENV{SELFTEST_TMPDIR} = "$tmpdir_abs";
     667$ENV{TEST_DATA_PREFIX} = "$tmpdir_abs";
    640668if ($opt_socket_wrapper) {
    641669        $ENV{SELFTEST_INTERFACES} = $interfaces;
     
    665693}
    666694
    667 Subunit::testsuite_count($#available+1);
    668 Subunit::report_time(time());
    669 
    670 foreach (@available) {
    671         my $name = $$_[0];
     695my $restricted = undef;
     696my $restricted_used = {};
     697
     698if ($opt_load_list) {
     699        $restricted = [];
     700        open(LOAD_LIST, "<$opt_load_list") or die("Unable to open $opt_load_list");
     701        while (<LOAD_LIST>) {
     702                chomp;
     703                push (@$restricted, $_);
     704        }
     705        close(LOAD_LIST);
     706}
     707
     708my $individual_tests = undef;
     709$individual_tests = {};
     710
     711foreach my $testsuite (@available) {
     712        my $name = $$testsuite[0];
    672713        my $skipreason = skip($name);
    673         if (defined($skipreason)) {
     714        if (defined($restricted)) {
     715                # Find the testsuite for this test
     716                my $match = undef;
     717                foreach my $r (@$restricted) {
     718                        if ($r eq $name) {
     719                                $individual_tests->{$name} = [];
     720                                $match = $r;
     721                                $restricted_used->{$r} = 1;
     722                        } elsif (substr($r, 0, length($name)+1) eq "$name.") {
     723                                push(@{$individual_tests->{$name}}, $r);
     724                                $match = $r;
     725                                $restricted_used->{$r} = 1;
     726                        }
     727                }
     728                if ($match) {
     729                        if (defined($skipreason)) {
     730                                        Subunit::skip_testsuite($name, $skipreason);
     731                        } else {
     732                                push(@todo, $testsuite);
     733                        }
     734                }
     735        } elsif (defined($skipreason)) {
    674736                Subunit::skip_testsuite($name, $skipreason);
    675737        } else {
    676                 push(@todo, $_);
    677         }
    678 }
    679 
    680 if ($#todo == -1) {
     738                push(@todo, $testsuite);
     739        }
     740}
     741
     742if (defined($restricted)) {
     743        foreach (@$restricted) {
     744                unless (defined($restricted_used->{$_})) {
     745                        print "No test or testsuite found matching $_\n";
     746                }
     747        }
     748} elsif ($#todo == -1) {
    681749        print STDERR "No tests to run\n";
    682750        exit(1);
    683         }
     751}
    684752
    685753my $suitestotal = $#todo + 1;
     754
     755Subunit::progress($suitestotal);
     756Subunit::report_time(time());
     757
    686758my $i = 0;
    687759$| = 1;
     
    711783        "DC_NETBIOSALIAS",
    712784
     785        # domain member
     786        "MEMBER_SERVER",
     787        "MEMBER_SERVER_IP",
     788        "MEMBER_NETBIOSNAME",
     789        "MEMBER_NETBIOSALIAS",
     790
     791        # rpc proxy controller stuff
     792        "RPC_PROXY_SERVER",
     793        "RPC_PROXY_SERVER_IP",
     794        "RPC_PROXY_NETBIOSNAME",
     795        "RPC_PROXY_NETBIOSALIAS",
     796
     797        # domain controller stuff for Vampired DC
     798        "VAMPIRE_DC_SERVER",
     799        "VAMPIRE_DC_SERVER_IP",
     800        "VAMPIRE_DC_NETBIOSNAME",
     801        "VAMPIRE_DC_NETBIOSALIAS",
     802
    713803        # server stuff
    714804        "SERVER",
     
    719809        # user stuff
    720810        "USERNAME",
     811        "USERID",
    721812        "PASSWORD",
    722813        "DC_USERNAME",
     
    726817        "KRB5_CONFIG",
    727818        "WINBINDD_SOCKET_DIR",
    728         "WINBINDD_PRIV_PIPE_DIR"
     819        "WINBINDD_PRIV_PIPE_DIR",
     820        "NMBD_SOCKET_DIR",
     821        "LOCAL_PATH"
    729822);
    730823
     
    735828};
    736829
    737 sub setup_env($)
    738 {
    739         my ($name) = @_;
     830sub setup_env($$)
     831{
     832        my ($name, $prefix) = @_;
    740833
    741834        my $testenv_vars = undef;
     
    754847        } elsif (defined(get_running_env($envname))) {
    755848                $testenv_vars = get_running_env($envname);
    756                 if (not $target->check_env($testenv_vars)) {
     849                if (not $testenv_vars->{target}->check_env($testenv_vars)) {
     850                        print $testenv_vars->{target}->getlog_env($testenv_vars);
    757851                        $testenv_vars = undef;
    758852                }
    759853        } else {
    760854                $testenv_vars = $target->setup_env($envname, $prefix);
     855                if (defined($testenv_vars) && not defined($testenv_vars->{target})) {
     856                       $testenv_vars->{target} = $target;
     857                }
    761858        }
    762859
     
    769866                $ENV{SMB_CONF_PATH} = $testenv_vars->{SERVERCONFFILE};
    770867        } elsif ($option eq "client") {
    771                 SocketWrapper::set_default_iface(6);
    772                 write_clientconf($conffile, $testenv_vars);
     868                SocketWrapper::set_default_iface(11);
     869                write_clientconf($conffile, $clientdir, $testenv_vars);
    773870                $ENV{SMB_CONF_PATH} = $conffile;
    774871        } else {
     
    804901        my ($envname) = @_;
    805902        return "" if ($envname eq "none");
    806         return $target->getlog_env(get_running_env($envname));
     903        my $env = get_running_env($envname);
     904        return $env->{target}->getlog_env($env);
    807905}
    808906
     
    811909        my ($envname) = @_;
    812910        return 1 if ($envname eq "none");
    813         return $target->check_env(get_running_env($envname));
     911        my $env = get_running_env($envname);
     912        return $env->{target}->check_env($env);
    814913}
    815914
     
    818917        my ($envname) = @_;
    819918        return if ($envname eq "none");
    820         $target->teardown_env(get_running_env($envname));
     919        my $env = get_running_env($envname);
     920        $env->{target}->teardown_env($env);
    821921        delete $running_envs{$envname};
    822922}
    823923
    824 if ($opt_no_lazy_setup) {
    825         setup_env($_) foreach (keys %required_envs);
    826 }
     924# This 'global' file needs to be empty when we start
     925unlink("$prefix_abs/dns_host_file");
    827926
    828927if ($opt_testenv) {
     
    830929        $testenv_name = $testenv_default unless defined($testenv_name);
    831930
    832         my $testenv_vars = setup_env($testenv_name);
     931        my $testenv_vars = setup_env($testenv_name, $prefix);
     932
     933        die("Unable to setup environment $testenv_name") unless ($testenv_vars);
    833934
    834935        $ENV{PIDDIR} = $testenv_vars->{PIDDIR};
     936        $ENV{ENVNAME} = $testenv_name;
    835937
    836938        my $envvarstr = exported_envvars_str($testenv_vars);
    837939
    838         my $term = ($ENV{TERM} or "xterm");
    839         system("$term -e 'echo -e \"
     940        my $term = ($ENV{TERMINAL} or "xterm -e");
     941        system("$term 'echo -e \"
    840942Welcome to the Samba4 Test environment '$testenv_name'
    841943
     
    850952\" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash'");
    851953        teardown_env($testenv_name);
     954} elsif ($opt_list) {
     955        foreach (@todo) {
     956                my $cmd = $$_[2];
     957                my $name = $$_[0];
     958                my $envname = $$_[1];
     959
     960                unless($cmd =~ /\$LISTOPT/) {
     961                        warn("Unable to list tests in $name");
     962                        next;
     963                }
     964
     965                $cmd =~ s/\$LISTOPT/--list/g;
     966
     967                system($cmd);
     968
     969                if ($? == -1) {
     970                        die("Unable to run $cmd: $!");
     971                } elsif ($? & 127) {
     972                        die(snprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127),  ($? & 128) ? 'with' : 'without'));
     973                }
     974
     975                my $exitcode = $? >> 8;
     976                if ($exitcode != 0) {
     977                        die("$cmd exited with exit code $exitcode");
     978                }
     979        }
    852980} else {
    853981        foreach (@todo) {
    854982                $i++;
    855983                my $cmd = $$_[2];
    856                 $cmd =~ s/([\(\)])/\\$1/g;
    857984                my $name = $$_[0];
    858985                my $envname = $$_[1];
    859                
    860                 my $envvars = setup_env($envname);
     986
     987                my $envvars = setup_env($envname, $prefix);
    861988                if (not defined($envvars)) {
    862                         Subunit::skip_testsuite($name,
    863                                 "unable to set up environment $envname");
     989                        Subunit::start_testsuite($name);
     990                        Subunit::end_testsuite($name, "error",
     991                                "unable to set up environment $envname - exiting");
    864992                        next;
    865993                }
    866994
     995                # Generate a file with the individual tests to run, if the
     996                # test runner for this test suite supports it.
     997                if ($individual_tests and $individual_tests->{$name}) {
     998                        if ($$_[3]) {
     999                                my ($fh, $listid_file) = tempfile(UNLINK => 0);
     1000                                foreach my $test (@{$individual_tests->{$name}}) {
     1001                                        print $fh substr($test, length($name)+1) . "\n";
     1002                                }
     1003                                $cmd =~ s/\$LOADLIST/--load-list=$listid_file/g;
     1004                        } elsif ($$_[4]) {
     1005                                $cmd =~ s/\s+[^\s]+\s*$//;
     1006                                $cmd .= " " . join(' ', @{$individual_tests->{$name}});
     1007                        }
     1008                }
     1009
    8671010                run_testsuite($envname, $name, $cmd, $i, $suitestotal);
    8681011
    869                 if (defined($opt_analyse_cmd)) {
    870                         system("$opt_analyse_cmd \"$name\"");
    871                 }
    872 
    8731012                teardown_env($envname) if ($opt_resetup_env);
    8741013        }
     
    8781017
    8791018teardown_env($_) foreach (keys %running_envs);
    880 
    881 $target->stop();
    8821019
    8831020my $failed = 0;
     
    8861023foreach (<$prefix/valgrind.log*>) {
    8871024        next unless (-s $_);
    888         system("grep DWARF2.CFI.reader $_ > /dev/null");
    889         if ($? >> 8 == 0) {
    890             print "VALGRIND FAILURE\n";
    891             $failed++;
    892             system("cat $_");
    893         }
     1025        print "VALGRIND FAILURE\n";
     1026        $failed++;
     1027        system("cat $_");
    8941028}
    8951029exit 0;
Note: See TracChangeset for help on using the changeset viewer.