From 182a0e349082fd43ec410cd6ac512376748fa27d Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 18 Sep 2008 19:51:03 +0200 Subject: Move selftest code to top-level. --- source4/selftest/README | 119 ---- source4/selftest/SocketWrapper.pm | 66 --- source4/selftest/Subunit.pm | 97 ---- source4/selftest/TODO | 2 - source4/selftest/config.mk | 6 +- source4/selftest/knownfail | 52 ++ source4/selftest/output/buildfarm.pm | 120 ---- source4/selftest/output/html.pm | 354 ------------ source4/selftest/output/plain.pm | 195 ------- source4/selftest/output/testresults.css | 129 ----- source4/selftest/quick | 37 ++ source4/selftest/samba4_tests.sh | 363 ------------ source4/selftest/selftest.pl | 874 ----------------------------- source4/selftest/skip | 63 +++ source4/selftest/slow | 7 + source4/selftest/target/Kvm.pm | 167 ------ source4/selftest/target/Samba3.pm | 434 --------------- source4/selftest/target/Samba4.pm | 957 -------------------------------- source4/selftest/target/Windows.pm | 40 -- source4/selftest/test_samba4.pl | 20 - source4/selftest/test_subunit.pl | 7 - source4/selftest/test_w2k3.sh | 48 -- source4/selftest/tests.sh | 361 ++++++++++++ 23 files changed, 523 insertions(+), 3995 deletions(-) delete mode 100644 source4/selftest/README delete mode 100644 source4/selftest/SocketWrapper.pm delete mode 100644 source4/selftest/Subunit.pm delete mode 100644 source4/selftest/TODO create mode 100644 source4/selftest/knownfail delete mode 100644 source4/selftest/output/buildfarm.pm delete mode 100644 source4/selftest/output/html.pm delete mode 100644 source4/selftest/output/plain.pm delete mode 100644 source4/selftest/output/testresults.css create mode 100644 source4/selftest/quick delete mode 100755 source4/selftest/samba4_tests.sh delete mode 100755 source4/selftest/selftest.pl create mode 100644 source4/selftest/skip create mode 100644 source4/selftest/slow delete mode 100644 source4/selftest/target/Kvm.pm delete mode 100644 source4/selftest/target/Samba3.pm delete mode 100644 source4/selftest/target/Samba4.pm delete mode 100644 source4/selftest/target/Windows.pm delete mode 100755 source4/selftest/test_samba4.pl delete mode 100755 source4/selftest/test_subunit.pl delete mode 100755 source4/selftest/test_w2k3.sh create mode 100755 source4/selftest/tests.sh (limited to 'source4/selftest') diff --git a/source4/selftest/README b/source4/selftest/README deleted file mode 100644 index f8be20a569..0000000000 --- a/source4/selftest/README +++ /dev/null @@ -1,119 +0,0 @@ -# vim: ft=rst - -This directory contains test scripts that are useful for running a -bunch of tests all at once. - -Available testsuites -==================== -The available testsuites are obtained from a script, usually -selftest/samba{3,4}_tests.sh. This script should for each testsuite output -the name of the test, the command to run and the environment that should be -provided. Use the included "plantest" function to generate the required output. - -Testsuite behaviour -================================ - -Exit code ------------- -The testsuites should exit with a non-zero exit code if at least one -test failed. Skipped tests should not influence the exit code. - -Output format -------------- -Testsuites can simply use the exit code to indicate whether all of their -tests have succeeded or one or more have failed. It is also possible to -provide more granular information using the Subunit protocol. - -This protocol works by writing simple messages to standard output. Any -messages that can not be interpreted by this protocol are considered comments -for the last announced test. - -Accepted commands are: - -test -~~~~~~~~~~~~ -test: - -Announce that a new test with the specified name is starting - -success -~~~~~~~~~~~~~~~ -success: - -Announce that the test with the specified name is done and ran successfully. - -failure -~~~~~~~~~~~~~~~ -failure: -failure: [ REASON ] - -Announce that the test with the specified name failed. Optionally, it is -possible to specify a reason it failed. - -skip -~~~~~~~~~~~~ -skip: -skip: [ REASON ] - -Announce that the test with the specified name was skipped. Optionally a -reason can be specified. - -knownfail -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -knownfail: -knownfail: [ REASON ] - -Announce that the test with the specified name was run and failed as expected. -Alternatively it is also possible to simply return "failure:" here but -specify in the samba4-knownfailures file that it is failing. - -Environments -============ -Tests often need to run against a server with particular things set up, -a "environment". This environment is provided by the test "target": Samba 3, -Samba 4 or Windows. - -The following environments are currently available: - - - none: No server set up, no variables set. - - dc: Domain controller set up. The following environment variables will - be set: - - * USERNAME: Administrator user name - * PASSWORD: Administrator password - * DOMAIN: Domain name - * REALM: Realm name - * SERVER: DC host name - * SERVER_IP: DC IPv4 address - * NETBIOSNAME: DC NetBIOS name - * NETIOSALIAS: DC NetBIOS alias - - - member: Domain controller and member server that is joined to it set up. The - following environment variables will be set: - - * USERNAME: Domain administrator user name - * PASSWORD: Domain administrator password - * DOMAIN: Domain name - * REALM: Realm name - * SERVER: Name of the member server - - -Running tests -============= - -To run all the tests use:: - - make test - -To run a quick subset (aiming for about 1 minute of testing) run:: - - make quicktest - -To run a specific test, use this syntax:: - - make test TESTS=testname - -for example:: - - make test TESTS=samba4.BASE-DELETE - diff --git a/source4/selftest/SocketWrapper.pm b/source4/selftest/SocketWrapper.pm deleted file mode 100644 index e63605b8df..0000000000 --- a/source4/selftest/SocketWrapper.pm +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/perl -# Bootstrap Samba and run a number of tests against it. -# Copyright (C) 2005-2007 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -package SocketWrapper; - -use Exporter; -@ISA = qw(Exporter); -@EXPORT_OK = qw(setup_dir setup_pcap set_default_iface); - -use strict; -use FindBin qw($RealBin); - -sub setup_dir($$) -{ - my ($dir, $pcap) = @_; - my $pcap_dir = undef; - - if (defined($dir)) { - if ( -d $dir ) { - unlink <$dir/*>; - } else { - mkdir($dir, 0777); - } - - if ($pcap) { - $pcap_dir = $dir."/pcap"; - - if ( -d $pcap_dir ) { - unlink <$pcap_dir/*>; - } else { - mkdir($pcap_dir, 0777); - } - } - } - - if (defined($pcap_dir)) { - $ENV{SOCKET_WRAPPER_PCAP_DIR} = $pcap_dir; - } else { - delete $ENV{SOCKET_WRAPPER_PCAP_DIR}; - } - - if (defined($dir)) { - $ENV{SOCKET_WRAPPER_DIR} = $dir; - } else { - delete $ENV{SOCKET_WRAPPER_DIR}; - } - - return $dir; -} - -sub setup_pcap($) -{ - my ($pcap_file) = @_; - - $ENV{SOCKET_WRAPPER_PCAP_FILE} = $pcap_file; -} - -sub set_default_iface($) -{ - my ($i) = @_; - $ENV{SOCKET_WRAPPER_DEFAULT_IFACE} = $i; -} - -1; diff --git a/source4/selftest/Subunit.pm b/source4/selftest/Subunit.pm deleted file mode 100644 index 05e51da541..0000000000 --- a/source4/selftest/Subunit.pm +++ /dev/null @@ -1,97 +0,0 @@ -package Subunit; - -require Exporter; -@ISA = qw(Exporter); -@EXPORT_OK = qw(parse_results); - -use strict; - -sub parse_results($$$$$) -{ - my ($msg_ops, $statistics, $fh, $expecting_failure, $open_tests) = @_; - my $unexpected_ok = 0; - my $expected_fail = 0; - my $unexpected_fail = 0; - my $unexpected_err = 0; - my $orig_open_len = $#$open_tests; - - while(<$fh>) { - if (/^test: (.+)\n/) { - $msg_ops->control_msg($_); - $msg_ops->start_test($open_tests, $1); - push (@$open_tests, $1); - } elsif (/^(success|successful|failure|skip|knownfail|error): (.*?)( \[)?([ \t]*)\n/) { - $msg_ops->control_msg($_); - my $reason = undef; - if ($3) { - $reason = ""; - # reason may be specified in next lines - my $terminated = 0; - while(<$fh>) { - $msg_ops->control_msg($_); - if ($_ eq "]\n") { $terminated = 1; last; } else { $reason .= $_; } - } - - unless ($terminated) { - $statistics->{TESTS_ERROR}++; - $msg_ops->end_test($open_tests, $2, $1, 1, "reason interrupted"); - return 1; - } - } - my $result = $1; - if ($1 eq "success" or $1 eq "successful") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - if ($expecting_failure->(join(".", @$open_tests) . ".$2")) { - $statistics->{TESTS_UNEXPECTED_OK}++; - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_ok++; - } else { - $statistics->{TESTS_EXPECTED_OK}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } - } elsif ($1 eq "failure") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - if ($expecting_failure->(join(".", @$open_tests) . ".$2")) { - $statistics->{TESTS_EXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - $expected_fail++; - } else { - $statistics->{TESTS_UNEXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_fail++; - } - } elsif ($1 eq "knownfail") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - $statistics->{TESTS_EXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } elsif ($1 eq "skip") { - $statistics->{TESTS_SKIP}++; - pop(@$open_tests); #FIXME: Check that popped value == $2 - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } elsif ($1 eq "error") { - $statistics->{TESTS_ERROR}++; - pop(@$open_tests); #FIXME: Check that popped value == $2 - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_err++; - } - } else { - $msg_ops->output_msg($_); - } - } - - while ($#$open_tests > $orig_open_len) { - $msg_ops->end_test($open_tests, pop(@$open_tests), "error", 1, - "was started but never finished!"); - $statistics->{TESTS_ERROR}++; - $unexpected_err++; - } - - return 1 if $unexpected_err > 0; - return 1 if $unexpected_fail > 0; - return 1 if $unexpected_ok > 0 and $expected_fail > 0; - return 0 if $unexpected_ok > 0 and $expected_fail == 0; - return 0 if $expected_fail > 0; - return 1; -} - -1; diff --git a/source4/selftest/TODO b/source4/selftest/TODO deleted file mode 100644 index 67776ffc76..0000000000 --- a/source4/selftest/TODO +++ /dev/null @@ -1,2 +0,0 @@ -- warn about unexpected successes -- better way to detect that smbd has finished initialization diff --git a/source4/selftest/config.mk b/source4/selftest/config.mk index 5503a42cdd..9e5983d026 100644 --- a/source4/selftest/config.mk +++ b/source4/selftest/config.mk @@ -2,12 +2,12 @@ TEST_FORMAT = plain SELFTEST = $(LD_LIBPATH_OVERRIDE) $(PERL) $(selftestdir)/selftest.pl --prefix=${selftest_prefix} \ --builddir=$(builddir) --srcdir=$(srcdir) \ - --expected-failures=$(srcdir)/samba4-knownfail \ + --expected-failures=$(srcdir)/selftest/knownfail \ --format=$(TEST_FORMAT) \ - --exclude=$(srcdir)/samba4-skip --testlist="./selftest/samba4_tests.sh|" \ + --exclude=$(srcdir)/selftest/skip --testlist="./selftest/tests.sh|" \ $(TEST_OPTIONS) -SELFTEST_NOSLOW_OPTS = --exclude=$(srcdir)/samba4-slow +SELFTEST_NOSLOW_OPTS = --exclude=$(srcdir)/selftest/slow SELFTEST_QUICK_OPTS = $(SELFTEST_NOSLOW_OPTS) --quick slowtest:: everything diff --git a/source4/selftest/knownfail b/source4/selftest/knownfail new file mode 100644 index 0000000000..f99db4fb1b --- /dev/null +++ b/source4/selftest/knownfail @@ -0,0 +1,52 @@ +# This file contains a list of regular expressions matching the names of +# tests that are expected to fail. +# +# "make test" will not report failures for tests listed here and will consider +# a successful run for any of these tests an error. +local.resolve.*.async +local.iconv.*.next_codepoint() +base.delete.*.deltest20a +base.delete.*.deltest20b +rpc.winreg.*security +samba4.local.registry.(dir|ldb).check hive security +samba4.local.registry.local.security +rpc.wkssvc +rpc.handles.*.lsarpc-shared +rpc.handles.*.mixed-shared +rpc.epmapper.*.Insert +rpc.epmapper.*.InqObject +rpc.dfs.* +rpc.drsuapi.* +rpc.lsalookup +rpc.cracknames +rpc.netlogon.*.LogonUasLogon +rpc.netlogon.*.LogonUasLogoff +rpc.netlogon.*.DatabaseSync +rpc.netlogon.*.DatabaseSync2 +rpc.netlogon.*.GetDcName +rpc.netlogon.*.LogonControl +rpc.netlogon.*.LogonControl2 +rpc.netlogon.*.GetAnyDCName +rpc.netlogon.*.DsrEnumerateDomainTrusts +rpc.netlogon.*.NetrEnumerateTrustedDomains +rpc.netlogon.*.NetrEnumerateTrustedDomainsEx +rpc.netlogon.*.DsrGetDcSiteCoverageW +rpc.netlogon.*.DsRAddressToSitenamesW +rpc.netlogon.*.DsRAddressToSitenamesExW +rpc.netlogon.*.GetPassword +rpc.netlogon.*.GetTrustPasswords +base.charset.*.Testing partial surrogate +.*net.api.delshare.* # DelShare isn't implemented yet +rap.*netservergetinfo +smb2.persistent.handles1 +samba4.winbind.struct.*.LIST_GROUPS # Not yet working in winbind +samba4.winbind.struct.*.SHOW_SEQUENCE # Not yet working in winbind +samba4.winbind.struct.*.GETPWENT # Not yet working in winbind +samba4.winbind.struct.*.SETPWENT # Not yet working in winbind +samba4.winbind.struct.*.LOOKUP_NAME_SID # Not yet working in winbind +^samba4.*base.delaywrite.*update of write time and SMBwrite truncate$ +^samba4.*base.delaywrite.*update of write time and SMBwrite truncate expand$ +^samba4.*base.delaywrite.*delayed update of write time 3a$ +^samba4.*base.delaywrite.*delayed update of write time 3c$ +^samba4.*base.delaywrite.*update of write time using SET_END_OF_FILE$ +^samba4.*base.delaywrite.*update of write time using SET_ALLOCATION_SIZE$ diff --git a/source4/selftest/output/buildfarm.pm b/source4/selftest/output/buildfarm.pm deleted file mode 100644 index cee6c1e63a..0000000000 --- a/source4/selftest/output/buildfarm.pm +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/perl - -package output::buildfarm; - -use Exporter; -@ISA = qw(Exporter); - -use FindBin qw($RealBin); -use lib "$RealBin/.."; - -use Subunit qw(parse_results); - -use strict; - -sub new($$$) { - my ($class) = @_; - my $self = { - test_output => {}, - start_time => time() - }; - bless($self, $class); -} - -sub start_testsuite($$) -{ - my ($self, $name) = @_; - my $out = ""; - - $self->{NAME} = $name; - $self->{START_TIME} = time(); - - my $duration = $self->{START_TIME} - $self->{start_time}; - $out .= "--==--==--==--==--==--==--==--==--==--==--\n"; - $out .= "Running test $name (level 0 stdout)\n"; - $out .= "--==--==--==--==--==--==--==--==--==--==--\n"; - $out .= scalar(localtime())."\n"; - $out .= "SELFTEST RUNTIME: " . $duration . "s\n"; - $out .= "NAME: $name\n"; - - $self->{test_output}->{$name} = ""; - - print $out; -} - -sub output_msg($$) -{ - my ($self, $output) = @_; - - $self->{test_output}->{$self->{NAME}} .= $output; -} - -sub control_msg($$) -{ - my ($self, $output) = @_; - - $self->{test_output}->{$self->{NAME}} .= $output; -} - -sub end_testsuite($$$$$$) -{ - my ($self, $name, $result, $unexpected, $reason) = @_; - my $out = ""; - - $out .= "TEST RUNTIME: " . (time() - $self->{START_TIME}) . "s\n"; - - if (not $unexpected) { - $out .= "ALL OK\n"; - } else { - $out .= "ERROR: $reason\n"; - $out .= $self->{test_output}->{$name}; - } - - $out .= "==========================================\n"; - if (not $unexpected) { - $out .= "TEST PASSED: $name\n"; - } else { - $out .= "TEST FAILED: $name (status $reason)\n"; - } - $out .= "==========================================\n"; - - print $out; -} - -sub start_test($$$) -{ - my ($self, $parents, $testname) = @_; - - if ($#$parents == -1) { - $self->start_testsuite($testname); - } -} - -sub end_test($$$$$) -{ - my ($self, $parents, $testname, $result, $unexpected, $reason) = @_; - - if ($unexpected) { - $self->{test_output}->{$self->{NAME}} .= "UNEXPECTED($result): $testname\n"; - } - - if ($#$parents == -1) { - $self->end_testsuite($testname, $result, $unexpected, $reason); - } -} - -sub summary($) -{ - my ($self) = @_; - - print "DURATION: " . (time() - $self->{start_time}) . " seconds\n"; -} - -sub skip_testsuite($$$$) -{ - my ($self, $name, $reason) = @_; - - print "SKIPPED: $name\n"; -} - -1; diff --git a/source4/selftest/output/html.pm b/source4/selftest/output/html.pm deleted file mode 100644 index 1049527129..0000000000 --- a/source4/selftest/output/html.pm +++ /dev/null @@ -1,354 +0,0 @@ -#!/usr/bin/perl - -package output::html; -use Exporter; -@ISA = qw(Exporter); - -use strict; -use warnings; - -use FindBin qw($RealBin); -use lib "$RealBin/.."; - -use Subunit qw(parse_results); - -sub new($$$) { - my ($class, $dirname, $statistics) = @_; - my $self = { - dirname => $dirname, - active_test => undef, - local_statistics => {}, - statistics => $statistics, - msg => "", - error_summary => { - skip => [], - expected_success => [], - unexpected_success => [], - expected_failure => [], - unexpected_failure => [], - skip_testsuites => [], - error => [] - } - }; - - link("$RealBin/output/testresults.css", "$dirname/testresults.css"); - - open(INDEX, ">$dirname/index.html"); - - bless($self, $class); - - $self->print_html_header("Samba Testsuite Run", *INDEX); - - print INDEX "
"; - print INDEX " \n"; - print INDEX " \n"; - print INDEX " \n"; - print INDEX " \n"; - print INDEX " \n"; - - return $self; -} - -sub print_html_header($$$) -{ - my ($self, $title, $fh) = @_; - - print $fh "\n"; - print $fh "\n"; - print $fh " $title\n"; - print $fh " \n"; - print $fh "\n"; - print $fh "\n"; - print $fh "
TestResult
\n"; - print $fh " \n"; - print $fh " \n"; - print $fh "
$title
\n"; -} - -sub print_html_footer($$) -{ - my ($self, $fh) = @_; - - print $fh "
\n"; - print $fh "\n"; - print $fh "\n"; -} - -sub output_msg($$); - -sub start_testsuite($$) -{ - my ($self, $name) = @_; - - $self->{local_statistics} = { - success => 0, - skip => 0, - error => 0, - failure => 0 - }; - - $self->{NAME} = $name; - $self->{HTMLFILE} = "$name.html"; - $self->{HTMLFILE} =~ s/[:\t\n \/]/_/g; - - open(TEST, ">$self->{dirname}/$self->{HTMLFILE}") or die("Unable to open $self->{HTMLFILE} for writing"); - - $self->print_html_header("Test Results for $name", *TEST); - - print TEST "

Tests

\n"; - - print TEST " \n"; -} - -sub control_msg($$) -{ - my ($self, $output) = @_; - - $self->{msg} .= "$output
\n"; -} - -sub output_msg($$) -{ - my ($self, $output) = @_; - - unless (defined($self->{active_test})) { - print TEST "$output
"; - } else { - $self->{msg} .= "$output
"; - } -} - -sub end_testsuite($$$$) -{ - my ($self, $name, $result, $unexpected, $reason) = @_; - - print TEST "
\n"; - - print TEST "
Duration: " . (time() - $self->{START_TIME}) . "s
\n"; - - $self->print_html_footer(*TEST); - - close(TEST); - - print INDEX "\n"; - print INDEX " {HTMLFILE}\">$name\n"; - my $st = $self->{local_statistics}; - - if (not $unexpected) { - if ($result eq "failure") { - print INDEX " "; - } else { - print INDEX " "; - } - } else { - print INDEX " "; - } - - my $l = 0; - if ($st->{success} > 0) { - print INDEX "$st->{success} ok"; - $l++; - } - if ($st->{skip} > 0) { - print INDEX ", " if ($l); - print INDEX "$st->{skip} skipped"; - $l++; - } - if ($st->{failure} > 0) { - print INDEX ", " if ($l); - print INDEX "$st->{failure} failures"; - $l++; - } - if ($st->{error} > 0) { - print INDEX ", " if ($l); - print INDEX "$st->{error} errors"; - $l++; - } - - if ($l == 0) { - if (not $unexpected) { - print INDEX "OK"; - } else { - print INDEX "FAIL"; - } - } - - print INDEX ""; - - print INDEX "\n"; -} - -sub start_test($$) -{ - my ($self, $parents, $testname) = @_; - - if ($#$parents == -1) { - $self->{START_TIME} = time(); - $self->start_testsuite($testname); - return; - } - - $self->{active_test} = $testname; - $self->{msg} = ""; -} - -sub end_test($$$$$$) -{ - my ($self, $parents, $testname, $result, $unexpected, $reason) = @_; - - if ($#$parents == -1) { - $self->end_testsuite($testname, $result, $unexpected, $reason); - return; - } - - print TEST ""; - - $self->{local_statistics}->{$result}++; - - my $track_class; - - if ($result eq "skip") { - print TEST "\n"; - $track_class = "skip"; - } elsif ($unexpected) { - print TEST "\n"; - if ($result eq "error") { - $track_class = "error"; - } else { - $track_class = "unexpected_$result"; - } - } else { - if ($result eq "failure") { - print TEST "\n"; - } else { - print TEST "\n"; - } - $track_class = "expected_$result"; - } - - push(@{$self->{error_summary}->{$track_class}}, , - [$self->{HTMLFILE}, $testname, $self->{NAME}, - $reason]); - - print TEST "

$testname

\n"; - - print TEST $self->{msg}; - - if (defined($reason)) { - print TEST "
$reason
\n"; - } - - print TEST "\n"; - - $self->{active_test} = undef; -} - -sub summary($) -{ - my ($self) = @_; - - my $st = $self->{statistics}; - print INDEX "\n"; - print INDEX " Total\n"; - - if ($st->{TESTS_UNEXPECTED_OK} == 0 and - $st->{TESTS_UNEXPECTED_FAIL} == 0 and - $st->{TESTS_ERROR} == 0) { - print INDEX " "; - } else { - print INDEX " "; - } - print INDEX ($st->{TESTS_EXPECTED_OK} + $st->{TESTS_UNEXPECTED_OK}) . " ok"; - if ($st->{TESTS_UNEXPECTED_OK} > 0) { - print INDEX " ($st->{TESTS_UNEXPECTED_OK} unexpected)"; - } - if ($st->{TESTS_SKIP} > 0) { - print INDEX ", $st->{TESTS_SKIP} skipped"; - } - if (($st->{TESTS_UNEXPECTED_FAIL} + $st->{TESTS_EXPECTED_FAIL}) > 0) { - print INDEX ", " . ($st->{TESTS_UNEXPECTED_FAIL} + $st->{TESTS_EXPECTED_FAIL}) . " failures"; - if ($st->{TESTS_UNEXPECTED_FAIL} > 0) { - print INDEX " ($st->{TESTS_EXPECTED_FAIL} expected)"; - } - } - if ($st->{TESTS_ERROR} > 0) { - print INDEX ", $st->{TESTS_ERROR} errors"; - } - - print INDEX ""; - - print INDEX "\n"; - - print INDEX "\n"; - print INDEX "Summary\n"; - print INDEX "
\n"; - $self->print_html_footer(*INDEX); - close(INDEX); - - my $summ = $self->{error_summary}; - open(SUMMARY, ">$self->{dirname}/summary.html"); - $self->print_html_header("Summary", *SUMMARY); - sub print_table($$) { - my ($title, $list) = @_; - return if ($#$list == -1); - print SUMMARY "

$title

\n"; - print SUMMARY "\n"; - print SUMMARY "\n"; - print SUMMARY " \n"; - print SUMMARY " \n"; - print SUMMARY " \n"; - print SUMMARY "\n"; - - foreach (@$list) { - print SUMMARY "\n"; - print SUMMARY " \n"; - print SUMMARY " \n"; - if (defined($$_[3])) { - print SUMMARY " \n"; - } else { - print SUMMARY " \n"; - } - print SUMMARY "\n"; - } - - print SUMMARY "
TestsuiteTestReason
$$_[2]$$_[1]$$_[3]
"; - } - print_table("Errors", $summ->{error}); - print_table("Unexpected successes", $summ->{unexpected_success}); - print_table("Unexpected failures", $summ->{unexpected_failure}); - print_table("Skipped tests", $summ->{skip}); - print_table("Expected failures", $summ->{expected_failure}); - - print SUMMARY "

Skipped testsuites

\n"; - print SUMMARY "\n"; - print SUMMARY "\n"; - print SUMMARY " \n"; - print SUMMARY " \n"; - print SUMMARY "\n"; - - foreach (@{$summ->{skip_testsuites}}) { - print SUMMARY "\n"; - print SUMMARY " \n"; - if (defined($$_[1])) { - print SUMMARY " \n"; - } else { - print SUMMARY " \n"; - } - print SUMMARY "\n"; - } - - print SUMMARY "
TestsuiteReason
$$_[0]$$_[1]
"; - - $self->print_html_footer(*SUMMARY); - close(SUMMARY); -} - -sub skip_testsuite($$$$) -{ - my ($self, $name, $reason) = @_; - - push (@{$self->{error_summary}->{skip_testsuites}}, - [$name, $reason]); -} - -1; diff --git a/source4/selftest/output/plain.pm b/source4/selftest/output/plain.pm deleted file mode 100644 index 4bec4e0fdc..0000000000 --- a/source4/selftest/output/plain.pm +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/perl - -package output::plain; -use Exporter; -@ISA = qw(Exporter); - -use FindBin qw($RealBin); -use lib "$RealBin/.."; - -use strict; - -sub new($$$$$$$) { - my ($class, $summaryfile, $verbose, $immediate, $statistics, $totaltests) = @_; - my $self = { - verbose => $verbose, - immediate => $immediate, - statistics => $statistics, - start_time => time(), - test_output => {}, - suitesfailed => [], - suites_ok => 0, - skips => {}, - summaryfile => $summaryfile, - index => 0, - totalsuites => $totaltests, - }; - bless($self, $class); -} - -sub output_msg($$); - -sub start_testsuite($$) -{ - my ($self, $name) = @_; - - $self->{index}++; - $self->{NAME} = $name; - $self->{START_TIME} = time(); - - my $duration = $self->{START_TIME} - $self->{start_time}; - - $self->{test_output}->{$name} = "" unless($self->{verbose}); - - my $out = ""; - $out .= "[$self->{index}/$self->{totalsuites} in ".$duration."s"; - $out .= sprintf(", %d errors", ($#{$self->{suitesfailed}}+1)) if ($#{$self->{suitesfailed}} > -1); - $out .= "] $name"; - if ($self->{immediate}) { - print "$out\n"; - } else { - require Term::ReadKey; - my ($wchar, $hchar, $wpixels, $hpixels) = Term::ReadKey::GetTerminalSize(); - foreach (1..$wchar) { $out.= " "; } - print "\r".substr($out, 0, $wchar); - } -} - -sub output_msg($$) -{ - my ($self, $output) = @_; - - if ($self->{verbose}) { - require FileHandle; - print $output; - STDOUT->flush(); - } else { - $self->{test_output}->{$self->{NAME}} .= $output; - } -} - -sub control_msg($$) -{ - my ($self, $output) = @_; - - $self->output_msg($output); -} - -sub end_testsuite($$$$$) -{ - my ($self, $name, $result, $unexpected, $reason) = @_; - my $out = ""; - - if ($unexpected) { - if ($result eq "success" and not defined($reason)) { - $reason = "Expected negative exit code, got positive exit code"; - } - $self->output_msg("ERROR: $reason\n"); - push (@{$self->{suitesfailed}}, $name); - } else { - $self->{suites_ok}++; - } - - if ($unexpected and $self->{immediate} and not $self->{verbose}) { - $out .= $self->{test_output}->{$name}; - } - - - print $out; -} - -sub start_test($$$) -{ - my ($self, $parents, $testname) = @_; - - if ($#$parents == -1) { - $self->start_testsuite($testname); - } -} - -sub end_test($$$$$) -{ - my ($self, $parents, $testname, $result, $unexpected, $reason) = @_; - - if ($#$parents == -1) { - $self->end_testsuite($testname, $result, $unexpected, $reason); - return; - } - - my $append = ""; - - unless ($unexpected) { - $self->{test_output}->{$self->{NAME}} = ""; - return; - } - - my $fullname = join(".", @$parents).".$testname"; - - $append = "UNEXPECTED($result): $testname ($fullname)\n"; - - $self->{test_output}->{$self->{NAME}} .= $append; - - if ($self->{immediate} and not $self->{verbose}) { - print $self->{test_output}->{$self->{NAME}}; - $self->{test_output}->{$self->{NAME}} = ""; - } -} - -sub summary($) -{ - my ($self) = @_; - - open(SUMMARY, ">$self->{summaryfile}"); - - if ($#{$self->{suitesfailed}} > -1) { - print SUMMARY "= Failed tests =\n"; - - foreach (@{$self->{suitesfailed}}) { - print SUMMARY "== $_ ==\n"; - print SUMMARY $self->{test_output}->{$_}."\n\n"; - } - - print SUMMARY "\n"; - } - - if (not $self->{immediate} and not $self->{verbose}) { - foreach (@{$self->{suitesfailed}}) { - print "===============================================================================\n"; - print "FAIL: $_\n"; - print $self->{test_output}->{$_}; - print "\n"; - } - } - - print SUMMARY "= Skipped tests =\n"; - foreach my $reason (keys %{$self->{skips}}) { - print SUMMARY "$reason\n"; - foreach my $name (@{$self->{skips}->{$reason}}) { - print SUMMARY "\t$name\n"; - } - print SUMMARY "\n"; - } - close(SUMMARY); - - print "\nA summary with detailed informations can be found in:\n $self->{summaryfile}\n"; - - if ($#{$self->{suitesfailed}} == -1) { - my $ok = $self->{statistics}->{TESTS_EXPECTED_OK} + - $self->{statistics}->{TESTS_EXPECTED_FAIL}; - print "\nALL OK ($ok tests in $self->{suites_ok} testsuites)\n"; - } else { - print "\nFAILED ($self->{statistics}->{TESTS_UNEXPECTED_FAIL} failures and $self->{statistics}->{TESTS_ERROR} errors in ". ($#{$self->{suitesfailed}}+1) ." testsuites)\n"; - } - -} - -sub skip_testsuite($$) -{ - my ($self, $name, $reason) = @_; - - push (@{$self->{skips}->{$reason}}, $name); - - $self->{totalsuites}--; -} - -1; diff --git a/source4/selftest/output/testresults.css b/source4/selftest/output/testresults.css deleted file mode 100644 index 66d1d6b2ad..0000000000 --- a/source4/selftest/output/testresults.css +++ /dev/null @@ -1,129 +0,0 @@ -/* Stylesheet for Samba test results. - * - * Partially based on the CSS file from lcov. - */ - -/* All views: main title format */ -td.title -{ - text-align: center; - padding-bottom: 10px; - font-family: sans-serif; - font-size: 20pt; - font-style: italic; - font-weight: bold; -} - -/* Index table headers */ -td.tableHead -{ - text-align: center; - color: #FFFFFF; - background-color: #6688D4; - font-family: sans-serif; - font-size: 120%; - font-weight: bold; -} - -/* Testsuite names */ -td.testSuite -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284FA8; - background-color: #DAE7FE; - font-family: monospace; -} - -/* Successful */ -td.resultOk -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #A7FC9D; - font-weight: bold; -} - -/* Failure */ -td.resultFailure -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - font-weight: bold; -} - -/* Expected failure */ -td.resultExpectedFailure -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FFA500; - font-weight: bold; -} - -/* Skipped */ -td.resultSkipped -{ - text-align: center; - padding-left: 10px; - padding-right: 10px; - background-color: #FFEA20; - font-weight: bold; -} - -td.duration -{ - text-align: right; -} - -td.durationSkipped -{ - text-align: right; -} - -td.outputSkipped -{ - background-color: #FFEA20; -} - -td.outputOk -{ - background-color: #A7FC9D; -} - -td.outputFailure -{ - background-color: #FF0000; -} - -td.outputExpectedFailure -{ - background-color: #FFA500; -} - -div.reason -{ - text-align: center; - font-weight: bold; -} - -span.control -{ - display: none; -} - -div.duration -{ - text-align: right; - font-weight: bold; -} - -div.command -{ - background-color: gray; -} diff --git a/source4/selftest/quick b/source4/selftest/quick new file mode 100644 index 0000000000..3627a87bbe --- /dev/null +++ b/source4/selftest/quick @@ -0,0 +1,37 @@ +# This file contains regexes matching the tests that should be run +# when doing a "quicktest" - verifying whether the build is working +# rather than trying to see what exactly is broken. +# +# This should be as quick as possible but cover as much code as possible. +base.unlink +base.attr +base.delete +base.tcon +base.open +base.chkpath +raw.qfsinfo +raw.qfileinfo +raw.sfileinfo +raw.mkdir +raw.seek +raw.open +raw.write +raw.unlink +raw.read +raw.close +raw.ioctl +raw.rename +raw.eas +raw.streams +base.open +rpc.altercontext +rpc.join +rpc.echo +rpc.schannel +rpc.netlogon +rpc.unixinfo +rpc.handles +rpc.altercontext +rpc.join +rpc.handles +rpc.echo diff --git a/source4/selftest/samba4_tests.sh b/source4/selftest/samba4_tests.sh deleted file mode 100755 index 3c2bb134b0..0000000000 --- a/source4/selftest/samba4_tests.sh +++ /dev/null @@ -1,363 +0,0 @@ -#!/bin/sh -# This script generates a list of testsuites that should be run as part of -# the Samba 4 test suite. - -# The output of this script is parsed by selftest.pl, which then decides -# which of the tests to actually run. It will, for example, skip all tests -# listed in samba4-skip or only run a subset during "make quicktest". - -# The idea is that this script outputs all of the tests of Samba 4, not -# just those that are known to pass, and list those that should be skipped -# or are known to file in samba4-skip/samba4-knownfail. This makes it -# very easy to see what functionality is still missing in Samba 4 and makes -# it possible to run the testsuite against other servers, such as Samba 3 or -# Windows that have a different set of features. - -# The syntax for a testsuite is "-- TEST --" on a single line, followed -# by the name of the test, the environment it needs and the command to run, all -# three separated by newlines. All other lines in the output are considered -# comments. - -if [ ! -n "$PERL" ] -then - PERL=perl -fi - -incdir=`dirname $0` - -plantest() { - name=$1 - env=$2 - shift 2 - cmdline="$*" - echo "-- TEST --" - if [ "$env" = "none" ]; then - echo "samba4.$name" - else - echo "samba4.$name ($env)" - fi - echo $env - echo $cmdline -} - -normalize_testname() { - name=$1 - shift 1 - echo $name | tr "A-Z-" "a-z." -} - -plansmbtorturetest() { - name=$1 - env=$2 - shift 2 - other_args="$*" - modname=`normalize_testname $name` - cmdline="$VALGRIND $smb4torture $other_args $name" - plantest "$modname" "$env" $cmdline -} - -$incdir/../bin/smbtorture -V - -samba4srcdir=$incdir/.. -samba4bindir=$samba4srcdir/bin -SCRIPTDIR=$samba4srcdir/../testprogs/ejs -smb4torture="$samba4bindir/smbtorture $TORTURE_OPTIONS" - -plantest "js.base" dc "$SCRIPTDIR/base.js" $CONFIGURATION -plantest "js.ldb" none "$SCRIPTDIR/ldb.js" `pwd` $CONFIGURATION -d 10 - -# Simple tests for LDAP and CLDAP - -for options in "" "--option=socket:testnonblock=true" "-U\$USERNAME%\$PASSWORD --option=socket:testnonblock=true" "-U\$USERNAME%\$PASSWORD"; do - plantest "ldb.ldap with options $options" dc $samba4srcdir/../testprogs/blackbox/test_ldb.sh ldap \$SERVER_IP $options -done -# see if we support ldaps -if grep ENABLE_GNUTLS.1 include/config.h > /dev/null; then - for options in "" "-U\$USERNAME%\$PASSWORD"; do - plantest "ldb.ldaps with options $options" dc $samba4srcdir/../testprogs/blackbox/test_ldb.sh ldaps \$SERVER_IP $options - done -fi -plantest "ldb.ldapi with options $options" dc $samba4srcdir/../testprogs/blackbox/test_ldb.sh ldapi \$PREFIX_ABS/dc/private/ldapi $options -for t in LDAP-CLDAP LDAP-BASIC LDAP-SCHEMA LDAP-UPTODATEVECTOR -do - plansmbtorturetest "$t" dc "-U\$USERNAME%\$PASSWORD" //\$SERVER_IP/_none_ -done - -# only do the ldb tests when not in quick mode - they are quite slow, and ldb -# is now pretty well tested by the rest of the quick tests anyway -LDBDIR=$samba4srcdir/lib/ldb -export LDBDIR -plantest "ldb" none TEST_DATA_PREFIX=\$PREFIX $LDBDIR/tests/test-tdb.sh - -# Tests for RPC - -# add tests to this list as they start passing, so we test -# that they stay passing -ncacn_np_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-HANDLES RPC-SAMSYNC RPC-SAMBA3SESSIONKEY RPC-SAMBA3-GETUSERNAME RPC-SAMBA3-LSA RPC-BINDSAMBA3 RPC-NETLOGSAMBA3 RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" -ncalrpc_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-DRSUAPI RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" -ncacn_ip_tcp_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-HANDLES RPC-DSSYNC RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" -slow_ncacn_np_tests="RPC-SAMLOGON RPC-SAMR RPC-SAMR-USERS RPC-SAMR-PASSWORDS" -slow_ncalrpc_tests="RPC-SAMR RPC-SAMR-PASSWORDS" -slow_ncacn_ip_tcp_tests="RPC-SAMR RPC-SAMR-PASSWORDS RPC-CRACKNAMES" - -all_tests="$ncalrpc_tests $ncacn_np_tests $ncacn_ip_tcp_tests $slow_ncalrpc_tests $slow_ncacn_np_tests $slow_ncacn_ip_tcp_tests RPC-SECRETS RPC-SAMBA3-SHARESEC" - -# Make sure all tests get run -for t in `$smb4torture --list | grep "^RPC-"` -do - echo $all_tests | grep $t > /dev/null - if [ $? -ne 0 ] - then - auto_rpc_tests="$auto_rpc_tests $t" - fi -done - -for bindoptions in seal,padcheck $VALIDATE bigendian; do - for transport in ncalrpc ncacn_np ncacn_ip_tcp; do - case $transport in - ncalrpc) tests=$ncalrpc_tests ;; - ncacn_np) tests=$ncacn_np_tests ;; - ncacn_ip_tcp) tests=$ncacn_ip_tcp_tests ;; - esac - for t in $tests; do - plantest "`normalize_testname $t` on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" - done - plantest "rpc.samba3.sharesec on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN --option=torture:share=tmp RPC-SAMBA3-SHARESEC "$*" - done -done - -for bindoptions in "" $VALIDATE bigendian; do - for t in $auto_rpc_tests; do - plantest "`normalize_testname $t` with $bindoptions" dc $VALGRIND $smb4torture "\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" - done -done - -for bindoptions in connect $VALIDATE ; do - for transport in ncalrpc ncacn_np ncacn_ip_tcp; do - case $transport in - ncalrpc) tests=$slow_ncalrpc_tests ;; - ncacn_np) tests=$slow_ncacn_np_tests ;; - ncacn_ip_tcp) tests=$slow_ncacn_ip_tcp_tests ;; - esac - for t in $tests; do - plantest "`normalize_testname $t` on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" - done - done -done - - -# Tests for the NET API - -net=`$smb4torture --list | grep ^NET-` - -for t in $net; do - plansmbtorturetest "$t" dc "\$SERVER[$VALIDATE]" -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "$*" -done - -# Tests for session keys -# FIXME: Integrate these into a single smbtorture test - -bindoptions="" -transport="ncacn_np" -for ntlmoptions in \ - "-k no --option=usespnego=yes" \ - "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no" \ - "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=yes" \ - "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=no" \ - "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes" \ - "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=no" \ - "-k no --option=usespnego=yes --option=clientntlmv2auth=yes" \ - "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no" \ - "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes" \ - "-k no --option=usespnego=no --option=clientntlmv2auth=yes" \ - "-k no --option=gensec:spnego=no --option=clientntlmv2auth=yes" \ - "-k no --option=usespnego=no"; do - name="rpc.secrets on $transport with $bindoptions with $ntlmoptions" - plantest "$name" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN --option=gensec:target_hostname=\$NETBIOSNAME RPC-SECRETS "$*" -done -plantest "rpc.secrets on $transport with $bindoptions with Kerberos" dc $smb4torture $transport:"\$SERVER[$bindoptions]" -k yes -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN "--option=gensec:target_hostname=\$NETBIOSNAME" RPC-SECRETS "$*" -plantest "rpc.secrets on $transport with $bindoptions with Kerberos - use target principal" dc $smb4torture $transport:"\$SERVER[$bindoptions]" -k yes -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN "--option=clientusespnegoprincipal=yes" "--option=gensec:target_hostname=\$NETBIOSNAME" RPC-SECRETS "$*" -plantest "rpc.secrets on $transport with Kerberos - use Samba3 style login" dc $smb4torture $transport:"\$SERVER" -k yes -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "--option=gensec:fake_gssapi_krb5=yes" "--option=gensec:gssapi_krb5=no" "--option=gensec:target_hostname=\$NETBIOSNAME" "RPC-SECRETS-none*" "$*" -plantest "rpc.secrets on $transport with Kerberos - use Samba3 style login, use target principal" dc $smb4torture $transport:"\$SERVER" -k yes -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "--option=clientusespnegoprincipal=yes" "--option=gensec:fake_gssapi_krb5=yes" "--option=gensec:gssapi_krb5=no" "--option=gensec:target_hostname=\$NETBIOSNAME" "RPC-SECRETS-none*" "$*" - -# Echo tests -transports="ncacn_np ncacn_ip_tcp ncalrpc" - -for transport in $transports; do - for bindoptions in connect spnego spnego,sign spnego,seal $VALIDATE padcheck bigendian bigendian,seal; do - for ntlmoptions in \ - "--option=socket:testnonblock=True --option=torture:quick=yes"; do - plantest "rpc.echo on $transport with $bindoptions and $ntlmoptions" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" RPC-ECHO "$*" - done - done -done - -for transport in $transports; do - for bindoptions in sign seal; do - for ntlmoptions in \ - "--option=ntlmssp_client:ntlm2=yes --option=torture:quick=yes" \ - "--option=ntlmssp_client:ntlm2=no --option=torture:quick=yes" \ - "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:128bit=no --option=torture:quick=yes" \ - "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:128bit=no --option=torture:quick=yes" \ - "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ - "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ - "--option=clientntlmv2auth=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ - "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=yes --option=torture:quick=yes" \ - "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ - ; do - plantest "rpc.echo on $transport with $bindoptions and $ntlmoptions" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN RPC-ECHO "$*" - done - done -done - -plantest "rpc.echo on ncacn_np over smb2" dc $smb4torture ncacn_np:"\$SERVER[smb2]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN RPC-ECHO "$*" - -# Tests against the NTVFS POSIX backend -NTVFSARGS="" -NTVFSARGS="${NTVFSARGS} --option=torture:sharedelay=100000" -NTVFSARGS="${NTVFSARGS} --option=torture:oplocktimeout=3" -NTVFSARGS="${NTVFSARGS} --option=torture:writetimeupdatedelay=500000" - -smb2=`$smb4torture --list | grep "^SMB2-" | xargs` -#The QFILEINFO-IPC test needs to be on ipc$ -raw=`$smb4torture --list | grep "^RAW-" | grep -v "RAW-QFILEINFO-IPC"| xargs` -base=`$smb4torture --list | grep "^BASE-" | xargs` - -for t in $base $raw $smb2; do - plansmbtorturetest "$t" dc $ADDARGS //\$SERVER/tmp -U"\$USERNAME"%"\$PASSWORD" $NTVFSARGS -done - -plansmbtorturetest "RAW-QFILEINFO-IPC" dc $ADDARGS //\$SERVER/ipc$ -U"\$USERNAME"%"\$PASSWORD" - -rap=`$smb4torture --list | grep "^RAP-" | xargs` -for t in $rap; do - plansmbtorturetest "$t" dc $ADDARGS //\$SERVER/IPC\\\$ -U"\$USERNAME"%"\$PASSWORD" -done - -# Tests against the NTVFS CIFS backend -for t in $base $raw; do - plantest "ntvfs.cifs.`normalize_testname $t`" dc $VALGRIND $smb4torture //\$NETBIOSNAME/cifs -U"\$USERNAME"%"\$PASSWORD" $NTVFSARGS $t -done - -# Local tests - -for t in `$smb4torture --list | grep "^LOCAL-" | xargs`; do - plansmbtorturetest "$t" none ncalrpc: "$*" -done - -if test -f $samba4bindir/tdbtorture -then - plantest "tdb.stress" none $VALGRIND $samba4bindir/tdbtorture -fi - -# Pidl tests - -if test x"${PIDL_TESTS_SKIP}" = x"yes"; then - echo "Skipping pidl tests - PIDL_TESTS_SKIP=yes" -elif $PERL -e 'eval require Test::More;' > /dev/null 2>&1; then - for f in $samba4srcdir/../pidl/tests/*.pl; do - plantest "pidl.`basename $f .pl`" none $PERL $f "|" $samba4srcdir/script/harness2subunit.pl - done -else - echo "Skipping pidl tests - Test::More not installed" -fi - -# Blackbox Tests: -# tests that interact directly with the command-line tools rather than using -# the API. These mainly test that the various command-line options of commands -# work correctly. - -bbdir=$incdir/../../testprogs/blackbox - -plantest "blackbox.ndrdump" dc $samba4srcdir/librpc/tests/test_ndrdump.sh -plantest "blackbox.net" dc $samba4srcdir/utils/tests/test_net.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" -plantest "blackbox.kinit" dc $bbdir/test_kinit.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$REALM" "\$DOMAIN" "$PREFIX" $CONFIGURATION -plantest "blackbox.cifsdd" dc $samba4srcdir/client/tests/test_cifsdd.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" -plantest "blackbox.nmblookup" dc $samba4srcdir/utils/tests/test_nmblookup.sh "\$NETBIOSNAME" "\$NETBIOSALIAS" "\$SERVER" "\$SERVER_IP" -plantest "blackbox.nmblookup" member $samba4srcdir/utils/tests/test_nmblookup.sh "\$NETBIOSNAME" "\$NETBIOSALIAS" "\$SERVER" "\$SERVER_IP" -plantest "blackbox.locktest" dc $samba4srcdir/torture/tests/test_locktest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" -plantest "blackbox.masktest" dc $samba4srcdir/torture/tests/test_masktest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" -plantest "blackbox.gentest" dc $samba4srcdir/torture/tests/test_gentest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" -plantest "blackbox.wbinfo" dc $samba4srcdir/nsswitch/tests/test_wbinfo.sh "\$DOMAIN" "\$USERNAME" "\$PASSWORD" "dc" -plantest "blackbox.wbinfo" member $samba4srcdir/nsswitch/tests/test_wbinfo.sh "\$DOMAIN" "\$DC_USERNAME" "\$DC_PASSWORD" "member" - -# Tests using the "Simple" NTVFS backend - -for t in "BASE-RW1"; do - plantest "ntvfs.simple.`normalize_testname $t`" dc $VALGRIND $smb4torture $ADDARGS //\$SERVER/simple -U"\$USERNAME"%"\$PASSWORD" $t -done - -DATADIR=$samba4srcdir/../testdata - -plantest "js.samba3sam" none $samba4bindir/smbscript $SCRIPTDIR/samba3sam.js $CONFIGURATION `pwd` $DATADIR/samba3/ - -# Domain Member Tests - -plantest "rpc.echo against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" RPC-ECHO "$*" -plantest "rpc.echo against member server with domain creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$DOMAIN/\$DC_USERNAME"%"\$DC_PASSWORD" RPC-ECHO "$*" -plantest "rpc.samr against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR" "$*" -plantest "rpc.samr.users against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR-USERS" "$*" -plantest "rpc.samr.passwords against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR-PASSWORDS" "$*" -plantest "blackbox.smbclient against member server with local creds" member $samba4srcdir/client/tests/test_smbclient.sh "\$NETBIOSNAME" "\$USERNAME" "\$PASSWORD" "\$NETBIOSNAME" "$PREFIX" - -NBT_TESTS=`$smb4torture --list | grep "^NBT-" | xargs` - -for t in $NBT_TESTS; do - plansmbtorturetest "$t" dc //\$SERVER/_none_ -U\$USERNAME%\$PASSWORD -done - -WB_OPTS="--option=\"torture:strict mode=no\"" -WB_OPTS="${WB_OPTS} --option=\"torture:timelimit=1\"" -WB_OPTS="${WB_OPTS} --option=\"torture:winbindd separator=/\"" -WB_OPTS="${WB_OPTS} --option=\"torture:winbindd netbios name=\$SERVER\"" -WB_OPTS="${WB_OPTS} --option=\"torture:winbindd netbios domain=\$DOMAIN\"" - -WINBIND_STRUCT_TESTS=`$smb4torture --list | grep "^WINBIND-STRUCT" | xargs` -WINBIND_NDR_TESTS=`$smb4torture --list | grep "^WINBIND-NDR" | xargs` -for env in dc member; do - for t in $WINBIND_STRUCT_TESTS; do - plansmbtorturetest $t $env $WB_OPTS //_none_/_none_ - done - - for t in $WINBIND_NDR_TESTS; do - plansmbtorturetest $t $env $WB_OPTS //_none_/_none_ - done -done - -if test -f $samba4bindir/nsstest -then - plantest "nss.test using winbind" member $VALGRIND $samba4bindir/nsstest $samba4bindir/shared/libnss_winbind.so -fi - -PYTHON=/usr/bin/python -SUBUNITRUN="$PYTHON ./scripting/bin/subunitrun" -plantest "ldb.python" none PYTHONPATH="$PYTHONPATH:lib/ldb/tests/python/" $SUBUNITRUN api -plantest "credentials.python" none PYTHONPATH="$PYTHONPATH:auth/credentials/tests" $SUBUNITRUN bindings -plantest "registry.python" none PYTHONPATH="$PYTHONPATH:lib/registry/tests/" $SUBUNITRUN bindings -plantest "tdb.python" none PYTHONPATH="$PYTHONPATH:../lib/tdb/python/tests" $SUBUNITRUN simple -plantest "auth.python" none PYTHONPATH="$PYTHONPATH:auth/tests/" $SUBUNITRUN bindings -plantest "security.python" none PYTHONPATH="$PYTHONPATH:libcli/security/tests" $SUBUNITRUN bindings -plantest "param.python" none PYTHONPATH="$PYTHONPATH:param/tests" $SUBUNITRUN bindings -plantest "upgrade.python" none $SUBUNITRUN samba.tests.upgrade -plantest "samba.python" none $SUBUNITRUN samba.tests -plantest "provision.python" none $SUBUNITRUN samba.tests.provision -plantest "samba3.python" none $SUBUNITRUN samba.tests.samba3 -plantest "samr.python" dc $SUBUNITRUN samba.tests.dcerpc.sam -plantest "dcerpc.bare.python" dc $SUBUNITRUN samba.tests.dcerpc.bare -plantest "unixinfo.python" dc $SUBUNITRUN samba.tests.dcerpc.unix -plantest "samdb.python" none $SUBUNITRUN samba.tests.samdb -plantest "events.python" none PYTHONPATH="$PYTHONPATH:lib/events" $SUBUNITRUN tests -plantest "messaging.python" none PYTHONPATH="$PYTHONPATH:lib/messaging/tests" $SUBUNITRUN bindings -plantest "samba3sam.python" none PYTHONPATH="$PYTHONPATH:dsdb/samdb/ldb_modules/tests" $SUBUNITRUN samba3sam -plantest "rpcecho.python" dc $SUBUNITRUN samba.tests.dcerpc.rpcecho -plantest "winreg.python" dc $SUBUNITRUN -U\$USERNAME%\$PASSWORD samba.tests.dcerpc.registry -plantest "ldap.python" dc $PYTHON $samba4srcdir/lib/ldb/tests/python/ldap.py $CONFIGURATION \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN -plantest "blackbox.samba3dump" none $PYTHON scripting/bin/samba3dump $samba4srcdir/../testdata/samba3 -rm -rf $PREFIX/upgrade -plantest "blackbox.upgrade" none $PYTHON setup/upgrade $CONFIGURATION --targetdir=$PREFIX/upgrade ../testdata/samba3 ../testdata/samba3/smb.conf -rm -rf $PREFIX/provision -mkdir $PREFIX/provision -plantest "blackbox.provision.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_provision.sh "$PREFIX/provision" -plantest "blackbox.provision-backend.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_provision-backend.sh "$PREFIX/provision" -plantest "blackbox.setpassword.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_setpassword.sh "$PREFIX/provision" -plantest "blackbox.newuser.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_newuser.sh "$PREFIX/provision" diff --git a/source4/selftest/selftest.pl b/source4/selftest/selftest.pl deleted file mode 100755 index e86ccbe468..0000000000 --- a/source4/selftest/selftest.pl +++ /dev/null @@ -1,874 +0,0 @@ -#!/usr/bin/perl -# Bootstrap Samba and run a number of tests against it. -# Copyright (C) 2005-2008 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -=pod - -=head1 NAME - -selftest - Samba test runner - -=head1 SYNOPSIS - -selftest --help - -selftest [--srcdir=DIR] [--builddir=DIR] [--target=samba4|samba3|win|kvm] [--socket-wrapper] [--quick] [--exclude=FILE] [--include=FILE] [--one] [--prefix=prefix] [--immediate] [--testlist=FILE] [TESTS] - -=head1 DESCRIPTION - -A simple test runner. TESTS is a regular expression with tests to run. - -=head1 OPTIONS - -=over 4 - -=item I<--help> - -Show list of available options. - -=item I<--srcdir=DIR> - -Source directory. - -=item I<--builddir=DIR> - -Build directory. - -=item I<--prefix=DIR> - -Change directory to run tests in. Default is 'st'. - -=item I<--immediate> - -Show errors as soon as they happen rather than at the end of the test run. - -=item I<--target samba4|samba3|win|kvm> - -Specify test target against which to run. Default is 'samba4'. - -=item I<--quick> - -Run only a limited number of tests. Intended to run in about 30 seconds on -moderately recent systems. - -=item I<--socket-wrapper> - -Use socket wrapper library for communication with server. Only works -when the server is running locally. - -Will prevent TCP and UDP ports being opened on the local host but -(transparently) redirects these calls to use unix domain sockets. - -=item I<--expected-failures> - -Specify a file containing a list of tests that are expected to fail. Failures for -these tests will be counted as successes, successes will be counted as failures. - -The format for the file is, one entry per line: - -TESTSUITE-NAME.TEST-NAME - -The reason for a test can also be specified, by adding a hash sign (#) and the reason -after the test name. - -=item I<--exclude> - -Specify a file containing a list of tests that should be skipped. Possible -candidates are tests that segfault the server, flip or don't end. The format of this file is the same as -for the --expected-failures flag. - -=item I<--include> - -Specify a file containing a list of tests that should be run. Same format -as the --exclude flag. - -Not includes specified means all tests will be run. - -=item I<--one> - -Abort as soon as one test fails. - -=item I<--testlist> - -Load a list of tests from the specified location. - -=back - -=head1 ENVIRONMENT - -=over 4 - -=item I - -=item I - -=item I - -=item I - -=item I - -=back - -=head1 LICENSE - -selftest is licensed under the GNU General Public License L. - -=head1 AUTHOR - -Jelmer Vernooij - -=cut - -use strict; - -use FindBin qw($RealBin $Script); -use File::Spec; -use Getopt::Long; -use POSIX; -use Cwd qw(abs_path); -use lib "$RealBin"; -use Subunit qw(parse_results); -use SocketWrapper; - -my $opt_help = 0; -my $opt_target = "samba4"; -my $opt_quick = 0; -my $opt_socket_wrapper = 0; -my $opt_socket_wrapper_pcap = undef; -my $opt_socket_wrapper_keep_pcap = undef; -my $opt_one = 0; -my $opt_immediate = 0; -my $opt_expected_failures = undef; -my @opt_exclude = (); -my @opt_include = (); -my $opt_verbose = 0; -my $opt_image = undef; -my $opt_testenv = 0; -my $ldap = undef; -my $opt_analyse_cmd = undef; -my $opt_resetup_env = undef; -my $opt_bindir = undef; -my $opt_no_lazy_setup = undef; -my $opt_format = "plain"; -my @testlists = (); - -my $srcdir = "."; -my $builddir = "."; -my $prefix = "./st"; - -my @expected_failures = (); -my @includes = (); -my @excludes = (); - -my $statistics = { - SUITES_FAIL => 0, - - TESTS_UNEXPECTED_OK => 0, - TESTS_EXPECTED_OK => 0, - TESTS_UNEXPECTED_FAIL => 0, - TESTS_EXPECTED_FAIL => 0, - TESTS_ERROR => 0, - TESTS_SKIP => 0, -}; - -sub find_in_list($$) -{ - my ($list, $fullname) = @_; - - foreach (@$list) { - if ($fullname =~ /$$_[0]/) { - return ($$_[1]) if ($$_[1]); - return "NO REASON SPECIFIED"; - } - } - - return undef; -} - -sub expecting_failure($) -{ - my ($name) = @_; - return find_in_list(\@expected_failures, $name); -} - -sub skip($) -{ - my ($name) = @_; - - return find_in_list(\@excludes, $name); -} - -sub getlog_env($); - -sub setup_pcap($) -{ - my ($name) = @_; - - return unless ($opt_socket_wrapper_pcap); - return unless defined($ENV{SOCKET_WRAPPER_PCAP_DIR}); - - my $fname = $name; - $fname =~ s%[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-]%_%g; - - my $pcap_file = "$ENV{SOCKET_WRAPPER_PCAP_DIR}/$fname.pcap"; - - SocketWrapper::setup_pcap($pcap_file); - - return $pcap_file; -} - -sub cleanup_pcap($$$) -{ - my ($pcap_file, $expected_ret, $ret) = @_; - - return unless ($opt_socket_wrapper_pcap); - return if ($opt_socket_wrapper_keep_pcap); - return unless ($expected_ret == $ret); - return unless defined($pcap_file); - - unlink($pcap_file); -} - -sub run_testsuite($$$$$$) -{ - my ($envname, $name, $cmd, $i, $totalsuites, $msg_ops) = @_; - my $pcap_file = setup_pcap($name); - - $msg_ops->start_test([], $name); - - unless (open(RESULT, "$cmd 2>&1|")) { - $statistics->{TESTS_ERROR}++; - $msg_ops->end_test([], $name, "error", 1, "Unable to run $cmd: $!"); - $statistics->{SUITES_FAIL}++; - return 0; - } - - my $expected_ret = parse_results( - $msg_ops, $statistics, *RESULT, \&expecting_failure, [$name]); - - my $envlog = getlog_env($envname); - $msg_ops->output_msg("ENVLOG: $envlog\n") if ($envlog ne ""); - - $msg_ops->output_msg("CMD: $cmd\n"); - - my $ret = close(RESULT); - $ret = 0 unless $ret == 1; - - my $exitcode = $? >> 8; - - if ($ret == 1) { - $msg_ops->end_test([], $name, "success", $expected_ret != $ret, undef); - } else { - $msg_ops->end_test([], $name, "failure", $expected_ret != $ret, "Exit code was $exitcode"); - } - - cleanup_pcap($pcap_file, $expected_ret, $ret); - - if (not $opt_socket_wrapper_keep_pcap and defined($pcap_file)) { - $msg_ops->output_msg("PCAP FILE: $pcap_file\n"); - } - - if ($ret != $expected_ret) { - $statistics->{SUITES_FAIL}++; - exit(1) if ($opt_one); - } - - return ($ret == $expected_ret); -} - -sub ShowHelp() -{ - print "Samba test runner -Copyright (C) Jelmer Vernooij - -Usage: $Script [OPTIONS] PREFIX - -Generic options: - --help this help page - --target=samba[34]|win|kvm Samba version to target - --testlist=FILE file to read available tests from - -Paths: - --prefix=DIR prefix to run tests in [st] - --srcdir=DIR source directory [.] - --builddir=DIR output directory [.] - -Target Specific: - --socket-wrapper-pcap save traffic to pcap directories - --socket-wrapper-keep-pcap keep all pcap files, not just those for tests that - failed - --socket-wrapper enable socket wrapper - --expected-failures=FILE specify list of tests that is guaranteed to fail - -Samba4 Specific: - --ldap=openldap|fedora-ds back smbd onto specified ldap server - -Samba3 Specific: - --bindir=PATH path to binaries - -Kvm Specific: - --image=PATH path to KVM image - -Behaviour: - --quick run quick overall test - --one abort when the first test fails - --immediate print test output for failed tests during run - --verbose be verbose - --analyse-cmd CMD command to run after each test -"; - exit(0); -} - -my $result = GetOptions ( - 'help|h|?' => \$opt_help, - 'target=s' => \$opt_target, - 'prefix=s' => \$prefix, - 'socket-wrapper' => \$opt_socket_wrapper, - 'socket-wrapper-pcap' => \$opt_socket_wrapper_pcap, - 'socket-wrapper-keep-pcap' => \$opt_socket_wrapper_keep_pcap, - 'quick' => \$opt_quick, - 'one' => \$opt_one, - 'immediate' => \$opt_immediate, - 'expected-failures=s' => \$opt_expected_failures, - 'exclude=s' => \@opt_exclude, - 'include=s' => \@opt_include, - 'srcdir=s' => \$srcdir, - 'builddir=s' => \$builddir, - 'verbose' => \$opt_verbose, - 'testenv' => \$opt_testenv, - 'ldap:s' => \$ldap, - 'analyse-cmd=s' => \$opt_analyse_cmd, - 'no-lazy-setup' => \$opt_no_lazy_setup, - 'resetup-environment' => \$opt_resetup_env, - 'bindir:s' => \$opt_bindir, - 'format=s' => \$opt_format, - 'image=s' => \$opt_image, - 'testlist=s' => \@testlists - ); - -exit(1) if (not $result); - -ShowHelp() if ($opt_help); - -my $tests = shift; - -# quick hack to disable rpc validation when using valgrind - its way too slow -unless (defined($ENV{VALGRIND})) { - $ENV{VALIDATE} = "validate"; - $ENV{MALLOC_CHECK_} = 2; -} - -my $old_pwd = "$RealBin/.."; - -# Backwards compatibility: -if (defined($ENV{TEST_LDAP}) and $ENV{TEST_LDAP} eq "yes") { - if (defined($ENV{FEDORA_DS_ROOT})) { - $ldap = "fedora-ds"; - } else { - $ldap = "openldap"; - } -} - -my $torture_maxtime = ($ENV{TORTURE_MAXTIME} or 1200); -if ($ldap) { - # LDAP is slow - $torture_maxtime *= 2; -} - -$prefix =~ s+//+/+; -$prefix =~ s+/./+/+; -$prefix =~ s+/$++; - -die("using an empty prefix isn't allowed") unless $prefix ne ""; - -#Ensure we have the test prefix around -mkdir($prefix, 0777) unless -d $prefix; - -my $prefix_abs = abs_path($prefix); -my $srcdir_abs = abs_path($srcdir); - -die("using an empty absolute prefix isn't allowed") unless $prefix_abs ne ""; -die("using '/' as absolute prefix isn't allowed") unless $prefix_abs ne "/"; - -$ENV{PREFIX} = $prefix; -$ENV{KRB5CCNAME} = "$prefix/krb5ticket"; -$ENV{PREFIX_ABS} = $prefix_abs; -$ENV{SRCDIR} = $srcdir; -$ENV{SRCDIR_ABS} = $srcdir_abs; - -if (defined($ENV{RUN_FROM_BUILD_FARM}) and - ($ENV{RUN_FROM_BUILD_FARM} eq "yes")) { - $opt_format = "buildfarm"; -} - -my $tls_enabled = not $opt_quick; -$ENV{TLS_ENABLED} = ($tls_enabled?"yes":"no"); -$ENV{LDB_MODULES_PATH} = "$old_pwd/bin/modules/ldb"; -$ENV{LD_SAMBA_MODULE_PATH} = "$old_pwd/bin/modules"; -sub prefix_pathvar($$) -{ - my ($name, $newpath) = @_; - if (defined($ENV{$name})) { - $ENV{$name} = "$newpath:$ENV{$name}"; - } else { - $ENV{$name} = $newpath; - } -} -prefix_pathvar("PKG_CONFIG_PATH", "$old_pwd/bin/pkgconfig"); -# Required for smbscript: -prefix_pathvar("PATH", "$old_pwd/bin"); -prefix_pathvar("PYTHONPATH", "$old_pwd/bin/python"); - -if ($opt_socket_wrapper_keep_pcap) { - # Socket wrapper keep pcap implies socket wrapper pcap - $opt_socket_wrapper_pcap = 1; -} - -if ($opt_socket_wrapper_pcap) { - # Socket wrapper pcap implies socket wrapper - $opt_socket_wrapper = 1; -} - -my $socket_wrapper_dir; -if ($opt_socket_wrapper) { - $socket_wrapper_dir = SocketWrapper::setup_dir("$prefix/w", $opt_socket_wrapper_pcap); - print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n"; -} else { - warn("Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports") unless $< == 0; -} - -my $target; -my $testenv_default = "none"; - -if ($opt_target eq "samba4") { - $testenv_default = "member"; - require target::Samba4; - $target = new Samba4($opt_bindir or "$srcdir/bin", $ldap, "$srcdir/setup"); -} elsif ($opt_target eq "samba3") { - if ($opt_socket_wrapper and `$opt_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 = "dc"; - require target::Samba3; - $target = new Samba3($opt_bindir); -} elsif ($opt_target eq "win") { - die("Windows tests will not run with socket wrapper enabled.") - if ($opt_socket_wrapper); - $testenv_default = "dc"; - require target::Windows; - $target = new Windows(); -} elsif ($opt_target eq "kvm") { - die("Kvm tests will not run with socket wrapper enabled.") - if ($opt_socket_wrapper); - require target::Kvm; - die("No image specified") unless ($opt_image); - $target = new Kvm($opt_image, undef); -} - -# -# Start a Virtual Distributed Ethernet Switch -# Returns the pid of the switch. -# -sub start_vde_switch($) -{ - my ($path) = @_; - - system("vde_switch --pidfile $path/vde.pid --sock $path/vde.sock --daemon"); - - open(PID, "$path/vde.pid"); - =~ /([0-9]+)/; - my $pid = $1; - close(PID); - - return $pid; -} - -# Stop a Virtual Distributed Ethernet Switch -sub stop_vde_switch($) -{ - my ($pid) = @_; - kill 9, $pid; -} - -sub read_test_regexes($) -{ - my ($name) = @_; - my @ret = (); - open(LF, "<$name") or die("unable to read $name: $!"); - while () { - chomp; - next if (/^#/); - if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) { - push (@ret, [$1, $4]); - } else { - s/^(.*?)([ \t]+)\#([\t ]*)(.*?)$//; - push (@ret, [$_, undef]); - } - } - close(LF); - return @ret; -} - -if (defined($opt_expected_failures)) { - @expected_failures = read_test_regexes($opt_expected_failures); -} - -foreach (@opt_exclude) { - push (@excludes, read_test_regexes($_)); -} - -if ($opt_quick) { - push (@includes, read_test_regexes("samba4-quick")); -} - -foreach (@opt_include) { - push (@includes, read_test_regexes($_)); -} - -my $interfaces = join(',', ("127.0.0.6/8", - "127.0.0.7/8", - "127.0.0.8/8", - "127.0.0.9/8", - "127.0.0.10/8", - "127.0.0.11/8")); - -my $conffile = "$prefix_abs/client/client.conf"; - -sub write_clientconf($$) -{ - my ($conffile, $vars) = @_; - - mkdir("$prefix/client", 0777) unless -d "$prefix/client"; - - if ( -d "$prefix/client/private" ) { - unlink <$prefix/client/private/*>; - } else { - mkdir("$prefix/client/private", 0777); - } - - open(CF, ">$conffile"); - print CF "[global]\n"; - if (defined($ENV{VALGRIND})) { - print CF "\ticonv:native = true\n"; - } else { - print CF "\ticonv:native = false\n"; - } - print CF "\tnetbios name = client\n"; - if (defined($vars->{DOMAIN})) { - print CF "\tworkgroup = $vars->{DOMAIN}\n"; - } - if (defined($vars->{REALM})) { - print CF "\trealm = $vars->{REALM}\n"; - } - if (defined($vars->{NCALRPCDIR})) { - print CF "\tncalrpc dir = $vars->{NCALRPCDIR}\n"; - } - if (defined($vars->{PIDDIR})) { - print CF "\tpid directory = $vars->{PIDDIR}\n"; - } - if (defined($vars->{WINBINDD_SOCKET_DIR})) { - print CF "\twinbindd socket directory = $vars->{WINBINDD_SOCKET_DIR}\n"; - } - if ($opt_socket_wrapper) { - print CF "\tinterfaces = $interfaces\n"; - } - print CF " - private dir = $prefix_abs/client/private - js include = $srcdir_abs/scripting/libjs - name resolve order = bcast - panic action = $srcdir_abs/script/gdb_backtrace \%PID\% \%PROG\% - max xmit = 32K - notify:inotify = false - ldb:nosync = true - system:anonymous = true - torture:basedir = $prefix_abs/client -#We don't want to pass our self-tests if the PAC code is wrong - gensec:require_pac = true - modules dir = $ENV{LD_SAMBA_MODULE_PATH} -"; - close(CF); -} - -my @torture_options = (); -push (@torture_options, "--configfile=$conffile"); -# ensure any one smbtorture call doesn't run too long -push (@torture_options, "--maximum-runtime=$torture_maxtime"); -push (@torture_options, "--target=$opt_target"); -push (@torture_options, "--basedir=$prefix_abs"); -push (@torture_options, "--option=torture:progress=no") unless ($opt_verbose); -push (@torture_options, "--format=subunit"); -push (@torture_options, "--option=torture:quick=yes") if ($opt_quick); - -$ENV{TORTURE_OPTIONS} = join(' ', @torture_options); -print "OPTIONS $ENV{TORTURE_OPTIONS}\n"; - -my @todo = (); - -my $testsdir = "$srcdir/selftest"; -$ENV{SMB_CONF_PATH} = "$conffile"; -$ENV{CONFIGURATION} = "--configfile=$conffile"; - -my %required_envs = (); - -sub read_testlist($) -{ - my ($filename) = @_; - - my @ret = (); - open(IN, $filename) or die("Unable to open $filename: $!"); - - while () { - if ($_ eq "-- TEST --\n") { - my $name = ; - $name =~ s/\n//g; - my $env = ; - $env =~ s/\n//g; - my $cmdline = ; - $cmdline =~ s/\n//g; - if (not defined($tests) or $name =~ /$tests/) { - $required_envs{$env} = 1; - push (@ret, [$name, $env, $cmdline]); - } - } else { - print; - } - } - close(IN) or die("Error creating recipe"); - return @ret; -} - -if ($#testlists == -1) { - die("No testlists specified"); -} - -my @available = (); -foreach my $fn (@testlists) { - foreach (read_testlist($fn)) { - my $name = $$_[0]; - next if (@includes and not find_in_list(\@includes, $name)); - push (@available, $_); - } -} - -my $msg_ops; -if ($opt_format eq "buildfarm") { - require output::buildfarm; - $msg_ops = new output::buildfarm($statistics); -} elsif ($opt_format eq "plain") { - require output::plain; - $msg_ops = new output::plain("$prefix/summary", $opt_verbose, $opt_immediate, $statistics, $#available+1); -} elsif ($opt_format eq "html") { - require output::html; - mkdir("test-results", 0777); - $msg_ops = new output::html("test-results", $statistics); -} else { - die("Invalid output format '$opt_format'"); -} - - -foreach (@available) { - my $name = $$_[0]; - my $skipreason = skip($name); - if ($skipreason) { - $msg_ops->skip_testsuite($name, $skipreason); - } else { - push(@todo, $_); - } -} - -if ($#todo == -1) { - print STDERR "No tests to run\n"; - exit(1); - } - -my $suitestotal = $#todo + 1; -my $i = 0; -$| = 1; - -my %running_envs = (); - -my @exported_envvars = ( - # domain stuff - "DOMAIN", - "REALM", - - # domain controller stuff - "DC_SERVER", - "DC_SERVER_IP", - "DC_NETBIOSNAME", - "DC_NETBIOSALIAS", - - # server stuff - "SERVER", - "SERVER_IP", - "NETBIOSNAME", - "NETBIOSALIAS", - - # user stuff - "USERNAME", - "PASSWORD", - "DC_USERNAME", - "DC_PASSWORD", - - # misc stuff - "KRB5_CONFIG", - "WINBINDD_SOCKET_DIR", - "WINBINDD_PRIV_PIPE_DIR" -); - -$SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub { - my $signame = shift; - teardown_env($_) foreach(keys %running_envs); - die("Received signal $signame"); -}; - -sub setup_env($) -{ - my ($envname) = @_; - - my $testenv_vars; - if ($envname eq "none") { - $testenv_vars = {}; - } elsif (defined($running_envs{$envname})) { - $testenv_vars = $running_envs{$envname}; - if (not $target->check_env($testenv_vars)) { - $testenv_vars = undef; - } - } else { - $testenv_vars = $target->setup_env($envname, $prefix); - } - - return undef unless defined($testenv_vars); - - $running_envs{$envname} = $testenv_vars; - - SocketWrapper::set_default_iface(6); - write_clientconf($conffile, $testenv_vars); - - foreach (@exported_envvars) { - if (defined($testenv_vars->{$_})) { - $ENV{$_} = $testenv_vars->{$_}; - } else { - delete $ENV{$_}; - } - } - - return $testenv_vars; -} - -sub exported_envvars_str($) -{ - my ($testenv_vars) = @_; - my $out = ""; - - foreach (@exported_envvars) { - next unless defined($testenv_vars->{$_}); - $out .= $_."=".$testenv_vars->{$_}."\n"; - } - - return $out; -} - -sub getlog_env($) -{ - my ($envname) = @_; - return "" if ($envname eq "none"); - return $target->getlog_env($running_envs{$envname}); -} - -sub check_env($) -{ - my ($envname) = @_; - return 1 if ($envname eq "none"); - return $target->check_env($running_envs{$envname}); -} - -sub teardown_env($) -{ - my ($envname) = @_; - return if ($envname eq "none"); - $target->teardown_env($running_envs{$envname}); - delete $running_envs{$envname}; -} - -if ($opt_no_lazy_setup) { - setup_env($_) foreach (keys %required_envs); -} - -if ($opt_testenv) { - my $testenv_name = $ENV{SELFTEST_TESTENV}; - $testenv_name = $testenv_default unless defined($testenv_name); - - my $testenv_vars = setup_env($testenv_name); - - $ENV{PIDDIR} = $testenv_vars->{PIDDIR}; - - my $envvarstr = exported_envvars_str($testenv_vars); - - my $term = ($ENV{TERM} or "xterm"); - system("$term -e 'echo -e \" -Welcome to the Samba4 Test environment '$testenv_name' - -This matches the client environment used in make test -smbd is pid `cat \$PIDDIR/smbd.pid` - -Some useful environment variables: -TORTURE_OPTIONS=\$TORTURE_OPTIONS -CONFIGURATION=\$CONFIGURATION - -$envvarstr -\" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash'"); - teardown_env($testenv_name); -} else { - foreach (@todo) { - $i++; - my $cmd = $$_[2]; - $cmd =~ s/([\(\)])/\\$1/g; - my $name = $$_[0]; - my $envname = $$_[1]; - - my $envvars = setup_env($envname); - if (not defined($envvars)) { - $msg_ops->skip_testsuite($name, "unable to set up environment $envname"); - next; - } - - run_testsuite($envname, $name, $cmd, $i, $suitestotal, - $msg_ops); - - if (defined($opt_analyse_cmd)) { - system("$opt_analyse_cmd \"$name\""); - } - - teardown_env($envname) if ($opt_resetup_env); - } -} - -print "\n"; - -teardown_env($_) foreach (keys %running_envs); - -$target->stop(); - -$msg_ops->summary(); - -my $failed = 0; - -# if there were any valgrind failures, show them -foreach (<$prefix/valgrind.log*>) { - next unless (-s $_); - system("grep DWARF2.CFI.reader $_ > /dev/null"); - if ($? >> 8 == 0) { - print "VALGRIND FAILURE\n"; - $failed++; - system("cat $_"); - } -} - -if ($opt_format eq "buildfarm") { - print "TEST STATUS: $statistics->{SUITES_FAIL}\n"; -} - -exit $statistics->{SUITES_FAIL}; diff --git a/source4/selftest/skip b/source4/selftest/skip new file mode 100644 index 0000000000..b1313adea0 --- /dev/null +++ b/source4/selftest/skip @@ -0,0 +1,63 @@ +# This file contains a list of regular expressions matching testsuites that +# should be skipped during "make test". +# +# Possible reasons for adding a testsuite here: +# * Testsuite functionality not implemented on the server side +# * Testsuite crashes during run +# * Testsuite crashes server +# * Testsuite contains "flapping" tests (sometimes success, sometimes failure) +# * Testsuite hangs indefinitely +# +# If a testsuite is partially succeeding, please list the failing bits +# in the samba4-knownfail file rather than disabling the testsuite completely. +# +# If a testsuite is very slow, please add it to samba4-slow instead. +# +# Please add a comment for each testsuite you disable explaining why +# it is being skipped. +raw.composite +base.iometer +base.casetable +base.nttrans +base.scan.maxfid +raw.hold.oplock # Not a test, but a way to block other clients for a test +raw.ping.pong # Needs second server to test +rpc.samr_accessmask +raw.scan.eamax +samba4.ntvfs.cifs.raw.qfileinfo.ipc +smb2.notify +smb2.scan +ntvfs.cifs.base.charset +ntvfs.cifs.base.iometer +ntvfs.cifs.base.casetable +ntvfs.cifs.base.nttrans +ntvfs.cifs.base.scan-maxfid +ntvfs.cifs.base.utable +ntvfs.cifs.base.smb +ntvfs.cifs.raw.composite +ntvfs.cifs.raw.notify +ntvfs.cifs.raw.scan-eamax +ntvfs.cifs.raw.context +ntvfs.cifs.raw.qfileinfo.ipc +rpc.dssync +rpc.samsync +ldap.uptodatevector # Segfaults +rpc.remact # Not provided by Samba 4 +rpc.oxidresolve # Not provided by Samba 4 +rpc.eventlog # Not provided by Samba 4 +rpc.initshutdown # Not provided by Samba 4 +rpc.svcctl # Not provided by Samba 4 +rpc.atsvc # Not provided by Samba 4 +rpc.frsapi # Not provided by Samba 4 +^samba4.base.samba3.* # Samba3-specific test +^samba4.ntvfs.cifs.base.samba3.* # Samba3-specific test +^samba4.raw.samba3.* # Samba3-specific test +^samba4.ntvfs.cifs.raw.samba3.* # Samba3-specific test +samba4.ntvfs.cifs.raw. +^samba4.rpc..*samba3.* # Samba3-specific test +^samba4.net.domopen.*$ # Hangs for some reason +^samba4.net.api.become.dc.*$ # Fails +nss.test # Fails +samba4.samba3sam.python # Conversion from EJS not yet finished +raw.offline # Samba 4 doesn't have much offline support yet +winreg* #Does not authenticate against the target server diff --git a/source4/selftest/slow b/source4/selftest/slow new file mode 100644 index 0000000000..d414368de8 --- /dev/null +++ b/source4/selftest/slow @@ -0,0 +1,7 @@ +# This file contains regexes matching tests that are very slow and +# should be skipped during a normal test run. +.*base.bench.holdcon.* # Slow +raw.bench.lookup # Slow +base.utable # Slow +base.smb # Slow +rpc.scanner # Slow diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm deleted file mode 100644 index 3b17a2909c..0000000000 --- a/source4/selftest/target/Kvm.pm +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/perl -# Start a KVM machine and run a number of tests against it. -# Copyright (C) 2005-2008 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -package Kvm; - -use strict; -use Cwd qw(abs_path); -use FindBin qw($RealBin); -use POSIX; - -sub new($$$$) { - my ($classname, $dc_image, $vdesocket) = @_; - my $self = { - dc_image => $dc_image, - vdesocket => $vdesocket, - }; - bless $self; - return $self; -} - -sub write_kvm_ifup($$$) -{ - my ($self, $path, $ip_prefix) = @_; - open(SCRIPT, ">$path/kvm-ifup"); - - print SCRIPT <<__EOF__; -#!/bin/sh - -PREFIX=$ip_prefix - -/sbin/ifconfig \$1 \$PREFIX.1 up - -cat <$path/udhcpd.conf -interface \$1 -start \$PREFIX.20 -end \$PREFIX.20 -max_leases 1 -lease_file $path/udhcpd.leases -pidfile $path/udhcpd.pid -EOF - -touch $path/udhcpd.leases - -/usr/sbin/udhcpd $path/udhcpd.conf - -exit 0 -__EOF__ - close(SCRIPT); - chmod(0755, "$path/kvm-ifup"); - - return ("$path/kvm-ifup", "$path/udhcpd.pid", "$ip_prefix.20"); -} - -sub teardown_env($$) -{ - my ($self, $envvars) = @_; - - print "Killing kvm instance $envvars->{KVM_PID}\n"; - - kill 9, $envvars->{KVM_PID}; - - if (defined($envvars->{DHCPD_PID})) { - print "Killing dhcpd instance $envvars->{DHCPD_PID}\n"; - kill 9, $envvars->{DHCPD_PID}; - } - - return 0; -} - -sub getlog_env($$) -{ - my ($self, $envvars) = @_; - - return ""; -} - -sub check_env($$) -{ - my ($self, $envvars) = @_; - - # FIXME: Check whether $self->{pid} is still running - - return 1; -} - -sub read_pidfile($) -{ - my ($path) = @_; - - open(PID, $path); - =~ /([0-9]+)/; - my ($pid) = $1; - close(PID); - return $pid; -} - -sub start($$$) -{ - my ($self, $path, $image) = @_; - - my $pidfile = "$path/kvm.pid"; - - my $opts = (defined($ENV{KVM_OPTIONS})?$ENV{KVM_OPTIONS}:"-nographic"); - - if (defined($ENV{KVM_SNAPSHOT})) { - $opts .= " -loadvm $ENV{KVM_SNAPSHOT}"; - } - - my $netopts; - my $dhcp_pid; - my $ip_address; - - if ($self->{vdesocket}) { - $netopts = "vde,socket=$self->{vdesocket}"; - } else { - my $ifup_script, $dhcpd_pidfile; - ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); - $netopts = "tap,script=$ifup_script"; - $dhcp_pid = read_pidfile($dhcpd_pidfile); - } - - system("kvm -name \"Samba 4 Test Subject\" $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net $netopts"); - - return (read_pidfile($pidfile), $dhcp_pid, $ip_address); -} - -sub setup_env($$$) -{ - my ($self, $envname, $path) = @_; - - if ($envname eq "dc") { - ($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image}); - - sub choose_var($$) { - my ($name, $default) = @_; - return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default; - } - - if ($envname eq "dc") { - return { - KVM_PID => $self->{dc_pid}, - DHCPD_PID => $self->{dc_dhcpd_pid}, - USERNAME => choose_var("USERNAME", "Administrator"), - PASSWORD => choose_var("PASSWORD", "penguin"), - DOMAIN => choose_var("DOMAIN", "SAMBA"), - REALM => choose_var("REALM", "SAMBA"), - SERVER => choose_var("SERVER", "DC"), - SERVER_IP => $self->{dc_ip}, - NETBIOSNAME => choose_var("NETBIOSNAME", "DC"), - NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"), - }; - } else { - return undef; - } - } else { - return undef; - } -} - -sub stop($) -{ - my ($self) = @_; -} - -1; diff --git a/source4/selftest/target/Samba3.pm b/source4/selftest/target/Samba3.pm deleted file mode 100644 index b0c4eb22bd..0000000000 --- a/source4/selftest/target/Samba3.pm +++ /dev/null @@ -1,434 +0,0 @@ -#!/usr/bin/perl -# Bootstrap Samba and run a number of tests against it. -# Copyright (C) 2005-2007 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -package Samba3; - -use strict; -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) = @_; - my $self = { bindir => $bindir }; - bless $self; - return $self; -} - -sub teardown_env($$) -{ - my ($self, $envvars) = @_; - - my $smbdpid = read_pid($envvars, "smbd"); - my $nmbdpid = read_pid($envvars, "nmbd"); -# my $winbinddpid = read_pid($envvars, "winbindd"); - - $self->stop_sig_term($smbdpid); - $self->stop_sig_term($nmbdpid); -# $self->stop_sig_term($winbinddpid); - $self->stop_sig_kill($smbdpid); - $self->stop_sig_kill($nmbdpid); -# $self->stop_sig_kill($winbinddpid); - - return 0; -} - -sub getlog_env_app($$$) -{ - my ($self, $envvars, $name) = @_; - - my $title = "$name LOG of: $envvars->{NETBIOSNAME}\n"; - my $out = $title; - - open(LOG, "<".$envvars->{$name."_TEST_LOG"}); - - seek(LOG, $envvars->{$name."_TEST_LOG_POS"}, SEEK_SET); - while () { - $out .= $_; - } - $envvars->{$name."_TEST_LOG_POS"} = tell(LOG); - close(LOG); - - return "" if $out eq $title; - - return $out; -} - -sub getlog_env($$) -{ - my ($self, $envvars) = @_; - my $ret = ""; - - $ret .= $self->getlog_env_app($envvars, "SMBD"); - $ret .= $self->getlog_env_app($envvars, "NMBD"); -# $ret .= $self->getlog_env_app($envvars, "WINBINDD"); - - return $ret; -} - -sub check_env($$) -{ - my ($self, $envvars) = @_; - - # TODO ... - return 1; -} - -sub setup_env($$$) -{ - my ($self, $envname, $path) = @_; - - if ($envname eq "dc") { - return $self->setup_dc("$path/dc"); - } else { - return undef; - } -} - -sub setup_dc($$) -{ - my ($self, $path) = @_; - - my $vars = $self->provision($path, "dc"); - - $self->check_or_start($vars, - ($ENV{NMBD_MAXTIME} or 2700), - ($ENV{WINBINDD_MAXTIME} or 2700), - ($ENV{SMBD_MAXTIME} or 2700)); - - $self->wait_for_start($vars); - - return $vars; -} - -sub stop($) -{ - my ($self) = @_; -} - -sub stop_sig_term($$) { - my ($self, $pid) = @_; - kill("USR1", $pid) or kill("ALRM", $pid) or warn("Unable to kill $pid: $!"); -} - -sub stop_sig_kill($$) { - my ($self, $pid) = @_; - kill("ALRM", $pid) or warn("Unable to kill $pid: $!"); -} - -sub write_pid($$$) -{ - my ($env_vars, $app, $pid) = @_; - - open(PID, ">$env_vars->{PIDDIR}/timelimit.$app.pid"); - print PID $pid; - close(PID); -} - -sub read_pid($$) -{ - my ($env_vars, $app) = @_; - - open(PID, "<$env_vars->{PIDDIR}/timelimit.$app.pid"); - my $pid = ; - close(PID); - return $pid; -} - -sub check_or_start($$$$) { - my ($self, $env_vars, $nmbd_maxtime, $winbindd_maxtime, $smbd_maxtime) = @_; - - unlink($env_vars->{NMBD_TEST_LOG}); - print "STARTING NMBD..."; - my $pid = fork(); - if ($pid == 0) { - open STDOUT, ">$env_vars->{NMBD_TEST_LOG}"; - open STDERR, '>&STDOUT'; - - $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; - - my @optargs = ("-d0"); - if (defined($ENV{NMBD_OPTIONS})) { - @optargs = split(/ /, $ENV{NMBD_OPTIONS}); - } - - $ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd"); - - my @preargs = ($self->binpath("timelimit"), $nmbd_maxtime); - if(defined($ENV{NMBD_VALGRIND})) { - @preargs = split(/ /, $ENV{NMBD_VALGRIND}); - } - - exec(@preargs, $self->binpath("nmbd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!"); - } - write_pid($env_vars, "nmbd", $pid); - print "DONE\n"; - -# disable winbindd until the build-farm faked_users work with it -# unlink($env_vars->{WINBINDD_TEST_LOG}); -# print "STARTING WINBINDD..."; -# $pid = fork(); -# if ($pid == 0) { -# open STDOUT, ">$env_vars->{WINBINDD_TEST_LOG}"; -# open STDERR, '>&STDOUT'; -# -# $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; -# -# my @optargs = ("-d0"); -# if (defined($ENV{WINBINDD_OPTIONS})) { -# @optargs = split(/ /, $ENV{WINBINDD_OPTIONS}); -# } -# -# $ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd"); -# exec($self->binpath("timelimit"), $winbindd_maxtime, $ENV{WINBINDD_VALGRIND}, $self->binpath("winbindd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!"); -# } -# write_pid($env_vars, "winbindd", $pid); -# print "DONE\n"; - - unlink($env_vars->{SMBD_TEST_LOG}); - print "STARTING SMBD..."; - $pid = fork(); - if ($pid == 0) { - open STDOUT, ">$env_vars->{SMBD_TEST_LOG}"; - open STDERR, '>&STDOUT'; - - $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; - - $ENV{MAKE_TEST_BINARY} = $self->binpath("smbd"); - my @optargs = ("-d0"); - if (defined($ENV{SMBD_OPTIONS})) { - @optargs = split(/ /, $ENV{SMBD_OPTIONS}); - } - my @preargs = ($self->binpath("timelimit"), $smbd_maxtime); - if(defined($ENV{SMBD_VALGRIND})) { - @preargs = split(/ /,$ENV{SMBD_VALGRIND}); - } - exec(@preargs, $self->binpath("smbd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!"); - } - write_pid($env_vars, "smbd", $pid); - print "DONE\n"; - - return 0; -} - -sub create_clientconf($$$) -{ - my ($self, $prefix, $domain) = @_; - - my $lockdir = "$prefix/locks"; - my $logdir = "$prefix/logs"; - my $piddir = "$prefix/pid"; - my $privatedir = "$prefix/private"; - my $scriptdir = "$RealBin/.."; - my $conffile = "$prefix/smb.conf"; - - my $torture_interfaces='127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8'; - open(CONF, ">$conffile"); - print CONF " -[global] - workgroup = $domain - - private dir = $privatedir - pid directory = $piddir - lock directory = $lockdir - log file = $logdir/log.\%m - log level = 0 - - name resolve order = bcast - - netbios name = TORTURE_6 - interfaces = $torture_interfaces - panic action = $scriptdir/gdb_backtrace \%d %\$(MAKE_TEST_BINARY) - - passdb backend = tdbsam - "; - close(CONF); -} - -sub provision($$$) -{ - my ($self, $prefix, $role) = @_; - - ## - ## setup the various environment variables we need - ## - - my %ret = (); - my $server = "LOCALHOST2"; - my $server_ip = "127.0.0.2"; - my $domain = "SAMBA-TEST"; - - my $username = `PATH=/usr/ucb:$ENV{PATH} whoami`; - chomp $username; - my $password = "test"; - - my $srcdir="$RealBin/.."; - my $scriptdir="$srcdir/selftest"; - my $prefix_abs = abs_path($prefix); - - my @dirs = (); - - my $shrdir="$prefix_abs/share"; - push(@dirs,$shrdir); - - my $libdir="$prefix_abs/lib"; - push(@dirs,$libdir); - - my $piddir="$prefix_abs/pid"; - push(@dirs,$piddir); - - my $privatedir="$prefix_abs/private"; - push(@dirs,$privatedir); - - my $lockdir="$prefix_abs/lockdir"; - push(@dirs,$lockdir); - - my $logdir="$prefix_abs/logs"; - push(@dirs,$logdir); - - # this gets autocreated by winbindd - my $wbsockdir="$prefix_abs/winbindd"; - my $wbsockprivdir="$lockdir/winbindd_privileged"; - - ## - ## create the test directory layout - ## - mkdir($prefix_abs, 0777); - print "CREATE TEST ENVIRONMENT IN '$prefix'..."; - system("rm -rf $prefix_abs/*"); - mkdir($_, 0777) foreach(@dirs); - - my $conffile="$libdir/server.conf"; - - open(CONF, ">$conffile") or die("Unable to open $conffile"); - print CONF " -[global] - workgroup = $domain - - private dir = $privatedir - pid directory = $piddir - lock directory = $lockdir - log file = $logdir/log.\%m - log level = 0 - - name resolve order = bcast - - netbios name = $server - interfaces = $server_ip/8 - bind interfaces only = yes - panic action = $scriptdir/gdb_backtrace %d %\$(MAKE_TEST_BINARY) - - passdb backend = tdbsam - - ; Necessary to add the build farm hacks - add user script = /bin/false - add machine script = /bin/false - - kernel oplocks = no - kernel change notify = no - - syslog = no - printing = bsd - printcap name = /dev/null - -"; - - if ($role eq "dc") { - print CONF "\tdomain logons = yes\n"; - print CONF "\tdomain master = yes\n"; - } - -print CONF " - - winbindd:socket dir = $wbsockdir - -[tmp] - path = $shrdir - read only = no - smbd:sharedelay = 100000 - map hidden = yes - map system = yes - create mask = 755 -[hideunread] - copy = tmp - hide unreadable = yes -[hideunwrite] - copy = tmp - hide unwriteable files = yes -[print1] - copy = tmp - printable = yes - printing = test -[print2] - copy = print1 -[print3] - copy = print1 -[print4] - copy = print1 - "; - close(CONF); - - ## - ## create a test account - ## - - open(PWD, "|".$self->binpath("smbpasswd")." -c $conffile -L -s -a $username"); - print PWD "$password\n$password\n"; - close(PWD) or die("Unable to set password for test account"); - - print "DONE\n"; - - $ret{SERVER_IP} = $server_ip; - $ret{NMBD_TEST_LOG} = "$prefix/nmbd_test.log"; - $ret{WINBINDD_TEST_LOG} = "$prefix/winbindd_test.log"; - $ret{SMBD_TEST_LOG} = "$prefix/smbd_test.log"; - $ret{SERVERCONFFILE} = $conffile; - $ret{CONFIGURATION} ="-s $conffile"; - $ret{SERVER} = $server; - $ret{USERNAME} = $username; - $ret{DOMAIN} = $domain; - $ret{NETBIOSNAME} = $server; - $ret{PASSWORD} = $password; - $ret{PIDDIR} = $piddir; - $ret{WINBINDD_SOCKET_DIR} = $wbsockdir; - $ret{WINBINDD_PRIV_PIPE_DIR} = $wbsockprivdir; - return \%ret; -} - -sub wait_for_start($$) -{ - my ($self, $envvars) = @_; - - # give time for nbt server to register its names - 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}"); - # make sure smbd is also up set - print "wait for smbd\n"; - system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2"); - system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2"); - - print $self->getlog_env($envvars); -} - -1; diff --git a/source4/selftest/target/Samba4.pm b/source4/selftest/target/Samba4.pm deleted file mode 100644 index 8835f69c6c..0000000000 --- a/source4/selftest/target/Samba4.pm +++ /dev/null @@ -1,957 +0,0 @@ -#!/usr/bin/perl -# Bootstrap Samba and run a number of tests against it. -# Copyright (C) 2005-2007 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -package Samba4; - -use strict; -use Cwd qw(abs_path); -use FindBin qw($RealBin); -use POSIX; - -sub new($$$$) { - my ($classname, $bindir, $ldap, $setupdir) = @_; - my $self = { - vars => {}, - ldap => $ldap, - bindir => $bindir, - setupdir => $setupdir - }; - bless $self; - return $self; -} - -sub openldap_start($$$) { - my ($slapd_conf, $uri, $logs) = @_; - my $oldpath = $ENV{PATH}; - my $olroot = ""; - my $olpath = ""; - if (defined $ENV{OPENLDAP_ROOT}) { - $olroot = "$ENV{OPENLDAP_ROOT}"; - $olpath = "$olroot/libexec:$olroot/sbin:"; - } - $ENV{PATH} = "$olpath/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}"; - system("slapd -d63 -f $slapd_conf -h $uri > $logs 2>&1 &"); - $ENV{PATH} = $oldpath; -} - -sub slapd_start($$) -{ - my $count = 0; - my ($self, $env_vars) = @_; - - my $uri = $env_vars->{LDAP_URI}; - - # running slapd in the background means it stays in the same process group, so it can be - # killed by timelimit - if ($self->{ldap} eq "fedora-ds") { - system("$ENV{FEDORA_DS_ROOT}/sbin/ns-slapd -D $env_vars->{FEDORA_DS_DIR} -d0 -i $env_vars->{FEDORA_DS_PIDFILE}> $env_vars->{LDAPDIR}/logs 2>&1 &"); - } elsif ($self->{ldap} eq "openldap") { - openldap_start($env_vars->{SLAPD_CONF}, $uri, "$env_vars->{LDAPDIR}/logs"); - } - while (system("$self->{bindir}/ldbsearch -H $uri -s base -b \"\" supportedLDAPVersion > /dev/null") != 0) { - $count++; - if ($count > 40) { - $self->slapd_stop($env_vars); - return 0; - } - sleep(1); - } - return 1; -} - -sub slapd_stop($$) -{ - my ($self, $envvars) = @_; - if ($self->{ldap} eq "fedora-ds") { - system("$envvars->{LDAPDIR}/slapd-samba4/stop-slapd"); - } elsif ($self->{ldap} eq "openldap") { - open(IN, "<$envvars->{OPENLDAP_PIDFILE}") or - die("unable to open slapd pid file: $envvars->{OPENLDAP_PIDFILE}"); - kill 9, ; - close(IN); - } - return 1; -} - -sub check_or_start($$$) -{ - my ($self, $env_vars, $max_time) = @_; - return 0 if ( -p $env_vars->{SMBD_TEST_FIFO}); - - unlink($env_vars->{SMBD_TEST_FIFO}); - POSIX::mkfifo($env_vars->{SMBD_TEST_FIFO}, 0700); - unlink($env_vars->{SMBD_TEST_LOG}); - - print "STARTING SMBD... "; - my $pid = fork(); - if ($pid == 0) { - open STDIN, $env_vars->{SMBD_TEST_FIFO}; - open STDOUT, ">$env_vars->{SMBD_TEST_LOG}"; - open STDERR, '>&STDOUT'; - - SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); - - my $valgrind = ""; - if (defined($ENV{SMBD_VALGRIND})) { - $valgrind = $ENV{SMBD_VALGRIND}; - } - - $ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; - - $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD}; - $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP}; - - # Start slapd before smbd, but with the fifo on stdin - if (defined($self->{ldap})) { - $self->slapd_start($env_vars) or - die("couldn't start slapd (2nd time)"); - } - - my $optarg = ""; - if (defined($max_time)) { - $optarg = "--maximum-runtime=$max_time "; - } - if (defined($ENV{SMBD_OPTIONS})) { - $optarg.= " $ENV{SMBD_OPTIONS}"; - } - my $ret = system("$valgrind $self->{bindir}/smbd $optarg $env_vars->{CONFIGURATION} -M single -i --leak-report-full"); - if ($? == -1) { - print "Unable to start smbd: $ret: $!\n"; - exit 1; - } - unlink($env_vars->{SMBD_TEST_FIFO}); - my $exit = $? >> 8; - if ( $ret == 0 ) { - print "smbd exits with status $exit\n"; - } elsif ( $ret & 127 ) { - print "smbd got signal ".($ret & 127)." and exits with $exit!\n"; - } else { - $ret = $? >> 8; - print "smbd failed with status $exit!\n"; - } - exit $exit; - } - print "DONE\n"; - - open(DATA, ">$env_vars->{SMBD_TEST_FIFO}"); - - return $pid; -} - -sub wait_for_start($$) -{ - my ($self, $testenv_vars) = @_; - # give time for nbt server to register its names - print "delaying for nbt name registration\n"; - sleep 2; - - # This will return quickly when things are up, but be slow if we - # need to wait for (eg) SSL init - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{SERVER}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{SERVER}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSALIAS}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSALIAS}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{SERVER}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{SERVER}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSALIAS}"); - system("bin/nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSALIAS}"); - - print $self->getlog_env($testenv_vars); -} - -sub write_ldb_file($$$) -{ - my ($self, $file, $ldif) = @_; - - open(LDIF, "|$self->{bindir}/ldbadd -H $file >/dev/null"); - print LDIF $ldif; - return close(LDIF); -} - -sub add_wins_config($$) -{ - my ($self, $privatedir) = @_; - - return $self->write_ldb_file("$privatedir/wins_config.ldb", " -dn: name=TORTURE_6,CN=PARTNERS -objectClass: wreplPartner -name: TORTURE_6 -address: 127.0.0.6 -pullInterval: 0 -pushChangeCount: 0 -type: 0x3 -"); -} - -sub mk_fedora_ds($$$) -{ - my ($self, $ldapdir, $configuration) = @_; - - my $fedora_ds_inf = "$ldapdir/fedorads.inf"; - my $fedora_ds_extra_ldif = "$ldapdir/fedorads-partitions.ldif"; - - #Make the subdirectory be as fedora DS would expect - my $fedora_ds_dir = "$ldapdir/slapd-samba4"; - - my $pidfile = "$fedora_ds_dir/logs/slapd-samba4.pid"; - -my $dir = getcwd(); -chdir "$ENV{FEDORA_DS_ROOT}/bin" || die; - if (system("perl $ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl --silent --file=$fedora_ds_inf >&2") != 0) { - chdir $dir; - die("perl $ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl --silent --file=$fedora_ds_inf FAILED: $?"); - } - chdir $dir || die; - - return ($fedora_ds_dir, $pidfile); -} - -sub mk_openldap($$$) -{ - my ($self, $ldapdir, $configuration) = @_; - - my $slapd_conf = "$ldapdir/slapd.conf"; - my $pidfile = "$ldapdir/slapd.pid"; - my $modconf = "$ldapdir/modules.conf"; - - my $oldpath = $ENV{PATH}; - my $olpath = ""; - my $olroot = ""; - if (defined $ENV{OPENLDAP_ROOT}) { - $olroot = "$ENV{OPENLDAP_ROOT}"; - $olpath = "$olroot/libexec:$olroot/sbin:"; - } - $ENV{PATH} = "$olpath/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}"; - - unlink($modconf); - open(CONF, ">$modconf"); close(CONF); - - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules - print CONF " -modulepath $olroot/libexec/openldap -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules - print CONF " -modulepath $olroot/libexec/openldap -moduleload back_hdb -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules - print CONF " -moduleload back_hdb -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules - print CONF " -modulepath /usr/lib/ldap -moduleload back_hdb -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules (Fedora layout) - print CONF " -modulepath /usr/lib/openldap -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - - if (system("slaptest -u -f $slapd_conf >&2") != 0) { - open(CONF, ">$modconf"); - # enable slapd modules (Fedora x86_64 layout) - print CONF " -modulepath /usr/lib64/openldap -moduleload syncprov -moduleload memberof -moduleload refint -"; - close(CONF); - } - - system("slaptest -u -f $slapd_conf") == 0 or die("slaptest still fails after adding modules"); - - - $ENV{PATH} = $oldpath; - - return ($slapd_conf, $pidfile); -} - -sub mk_keyblobs($$) -{ - my ($self, $tlsdir) = @_; - - #TLS and PKINIT crypto blobs - my $dhfile = "$tlsdir/dhparms.pem"; - my $cafile = "$tlsdir/ca.pem"; - my $certfile = "$tlsdir/cert.pem"; - my $reqkdc = "$tlsdir/req-kdc.der"; - my $kdccertfile = "$tlsdir/kdc.pem"; - my $keyfile = "$tlsdir/key.pem"; - my $adminkeyfile = "$tlsdir/adminkey.pem"; - my $reqadmin = "$tlsdir/req-admin.der"; - my $admincertfile = "$tlsdir/admincert.pem"; - - mkdir($tlsdir, 0777); - - #This is specified here to avoid draining entropy on every run - open(DHFILE, ">$dhfile"); - print DHFILE <$keyfile"); - print KEYFILE <$adminkeyfile"); - - print ADMINKEYFILE <$cafile"); - print CAFILE <$certfile"); - print CERTFILE <$kdccertfile"); - print KDCCERTFILE <$admincertfile"); - print ADMINCERTFILE <; - my $unix_gids_str = $); - my @unix_gids = split(" ", $unix_gids_str); - my $srcdir="$RealBin/.."; - -d $prefix or mkdir($prefix, 0777) or die("Unable to create $prefix"); - my $prefix_abs = abs_path($prefix); - my $tmpdir = "$prefix_abs/tmp"; - my $etcdir = "$prefix_abs/etc"; - my $piddir = "$prefix_abs/pid"; - my $conffile = "$etcdir/smb.conf"; - my $krb5_config = "$etcdir/krb5.conf"; - my $privatedir = "$prefix_abs/private"; - my $ncalrpcdir = "$prefix_abs/ncalrpc"; - my $lockdir = "$prefix_abs/lockdir"; - my $winbindd_socket_dir = "$prefix_abs/winbindd_socket"; - my $winbindd_privileged_socket_dir = "$prefix_abs/winbindd_privileged_socket"; - my $ntp_signd_socket_dir = "$prefix_abs/ntp_signd_socket"; - my $nsswrap_passwd = "$etcdir/passwd"; - my $nsswrap_group = "$etcdir/group"; - - my $configuration = "--configfile=$conffile"; - my $ldapdir = "$privatedir/ldap"; - - my $tlsdir = "$privatedir/tls"; - - my $ifaceipv4 = "127.0.0.$swiface"; - my $interfaces = "$ifaceipv4/8"; - - (system("rm -rf $prefix/*") == 0) or die("Unable to clean up"); - mkdir($_, 0777) foreach ($privatedir, $etcdir, $piddir, $ncalrpcdir, $lockdir, - $tmpdir, "$tmpdir/test1", "$tmpdir/test2"); - - - my $localbasedn = $basedn; - $localbasedn = "CN=$netbiosname" if $server_role eq "member server"; - - open(CONFFILE, ">$conffile"); - print CONFFILE " -[global] - netbios name = $netbiosname - netbios aliases = $netbiosalias - workgroup = $domain - realm = $realm - private dir = $privatedir - pid directory = $piddir - ncalrpc dir = $ncalrpcdir - lock dir = $lockdir - setup directory = $self->{setupdir} - modules dir = $self->{bindir}/modules - js include = $srcdir/scripting/libjs - winbindd socket directory = $winbindd_socket_dir - winbindd privileged socket directory = $winbindd_privileged_socket_dir - ntp signd socket directory = $ntp_signd_socket_dir - winbind separator = / - name resolve order = bcast - interfaces = $interfaces - tls dh params file = $tlsdir/dhparms.pem - panic action = $srcdir/script/gdb_backtrace \%PID% \%PROG% - wins support = yes - server role = $server_role - max xmit = 32K - server max protocol = SMB2 - notify:inotify = false - ldb:nosync = true -#We don't want to pass our self-tests if the PAC code is wrong - gensec:require_pac = true - log level = $smbd_loglevel - -[tmp] - path = $tmpdir - read only = no - ntvfs handler = posix - posix:sharedelay = 100000 - posix:eadb = $lockdir/eadb.tdb - posix:oplocktimeout = 3 - posix:writetimeupdatedelay = 500000 - -[test1] - path = $tmpdir/test1 - read only = no - ntvfs handler = posix - posix:sharedelay = 100000 - posix:eadb = $lockdir/eadb.tdb - posix:oplocktimeout = 3 - posix:writetimeupdatedelay = 500000 - -[test2] - path = $tmpdir/test2 - read only = no - ntvfs handler = posix - posix:sharedelay = 100000 - posix:eadb = $lockdir/eadb.tdb - posix:oplocktimeout = 3 - posix:writetimeupdatedelay = 500000 - -[cifs] - read only = no - ntvfs handler = cifs - cifs:server = $netbiosname - cifs:share = tmp -#There is no username specified here, instead the client is expected -#to log in with kerberos, and smbd will used delegated credentials. - -[simple] - path = $tmpdir - read only = no - ntvfs handler = simple - -[sysvol] - path = $lockdir/sysvol - read only = yes - -[netlogon] - path = $lockdir/sysvol/$dnsname/scripts - read only = no - -[cifsposix] - copy = simple - ntvfs handler = cifsposix -"; - close(CONFFILE); - - $self->mk_keyblobs($tlsdir); - - open(KRB5CONF, ">$krb5_config"); - print KRB5CONF " -#Generated krb5.conf for $realm - -[libdefaults] - default_realm = $realm - dns_lookup_realm = false - dns_lookup_kdc = false - ticket_lifetime = 24h - forwardable = yes - -[realms] - $realm = { - kdc = 127.0.0.1:88 - admin_server = 127.0.0.1:88 - default_domain = $dnsname - } - $dnsname = { - kdc = 127.0.0.1:88 - admin_server = 127.0.0.1:88 - default_domain = $dnsname - } - $domain = { - kdc = 127.0.0.1:88 - admin_server = 127.0.0.1:88 - default_domain = $dnsname - } - -[appdefaults] - pkinit_anchors = FILE:$tlsdir/ca.pem - -[kdc] - enable-pkinit = true - pkinit_identity = FILE:$tlsdir/kdc.pem,$tlsdir/key.pem - pkinit_anchors = FILE:$tlsdir/ca.pem - -[domain_realm] - .$dnsname = $realm -"; - close(KRB5CONF); - - open(PWD, ">$nsswrap_passwd"); - print PWD " -root:x:0:0:root gecos:$prefix_abs:/bin/false -$unix_name:x:$unix_uid:$unix_gids[0]:$unix_name gecos:$prefix_abs:/bin/false -nobody:x:65534:65533:nobody gecos:$prefix_abs:/bin/false -"; - close(PWD); - - open(GRP, ">$nsswrap_group"); - print GRP " -root:x:0: -wheel:x:10: -users:x:100: -nobody:x:65533: -nogroup:x:65534:nobody -"; - close(GRP); - -#Ensure the config file is valid before we start - if (system("$self->{bindir}/testparm $configuration -v --suppress-prompt >/dev/null 2>&1") != 0) { - system("$self->{bindir}/testparm -v --suppress-prompt $configuration >&2"); - die("Failed to create a valid smb.conf configuration!"); - } - - (system("($self->{bindir}/testparm $configuration -v --suppress-prompt --parameter-name=\"netbios name\" --section-name=global 2> /dev/null | grep -i \"^$netbiosname\" ) >/dev/null 2>&1") == 0) or die("Failed to create a valid smb.conf configuration! $self->{bindir}/testparm $configuration -v --suppress-prompt --parameter-name=\"netbios name\" --section-name=global"); - - my @provision_options = (); - push (@provision_options, "NSS_WRAPPER_PASSWD=\"$nsswrap_passwd\""); - push (@provision_options, "NSS_WRAPPER_GROUP=\"$nsswrap_group\""); - if (defined($ENV{GDB_PROVISION})) { - push (@provision_options, "gdb --args python"); - } - if (defined($ENV{VALGRIND_PROVISION})) { - push (@provision_options, "valgrind"); - } - push (@provision_options, "$self->{setupdir}/provision"); - push (@provision_options, split(' ', $configuration)); - push (@provision_options, "--host-name=$netbiosname"); - push (@provision_options, "--host-ip=$ifaceipv4"); - push (@provision_options, "--quiet"); - push (@provision_options, "--domain=$domain"); - push (@provision_options, "--realm=$realm"); - push (@provision_options, "--adminpass=$password"); - push (@provision_options, "--krbtgtpass=krbtgt$password"); - push (@provision_options, "--machinepass=machine$password"); - push (@provision_options, "--root=$unix_name"); - - push (@provision_options, "--server-role=\"$server_role\""); - - my $ldap_uri= "$ldapdir/ldapi"; - $ldap_uri =~ s|/|%2F|g; - $ldap_uri = "ldapi://$ldap_uri"; - - my $ret = { - KRB5_CONFIG => $krb5_config, - PIDDIR => $piddir, - SERVER => $netbiosname, - SERVER_IP => $ifaceipv4, - NETBIOSNAME => $netbiosname, - NETBIOSALIAS => $netbiosalias, - LDAP_URI => $ldap_uri, - DOMAIN => $domain, - USERNAME => $username, - REALM => $realm, - PASSWORD => $password, - LDAPDIR => $ldapdir, - WINBINDD_SOCKET_DIR => $winbindd_socket_dir, - NCALRPCDIR => $ncalrpcdir, - LOCKDIR => $lockdir, - CONFIGURATION => $configuration, - SOCKET_WRAPPER_DEFAULT_IFACE => $swiface, - NSS_WRAPPER_PASSWD => $nsswrap_passwd, - NSS_WRAPPER_GROUP => $nsswrap_group, - }; - - if (defined($self->{ldap})) { - - push (@provision_options, "--ldap-backend=$ldap_uri"); - system("$self->{setupdir}/provision-backend $configuration --ldap-admin-pass=$password --root=$unix_name --realm=$realm --domain=$domain --host-name=$netbiosname --ldap-backend-type=$self->{ldap}>&2") == 0 or die("backend provision failed"); - - push (@provision_options, "--password=$password"); - - if ($self->{ldap} eq "openldap") { - push (@provision_options, "--username=samba-admin"); - ($ret->{SLAPD_CONF}, $ret->{OPENLDAP_PIDFILE}) = $self->mk_openldap($ldapdir, $configuration) or die("Unable to create openldap directories"); - push (@provision_options, "--ldap-backend-type=openldap"); - } elsif ($self->{ldap} eq "fedora-ds") { - push (@provision_options, "--simple-bind-dn=cn=Manager,$localbasedn"); - ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ldapdir, $configuration) or die("Unable to create fedora ds directories"); - push (@provision_options, "--ldap-backend-type=fedora-ds"); - } - - $self->slapd_start($ret) or - die("couldn't start slapd"); - } - - my $provision_cmd = join(" ", @provision_options); - (system($provision_cmd) == 0) or die("Unable to provision: \n$provision_cmd\n"); - - if (defined($self->{ldap})) { - $self->slapd_stop($ret) or - die("couldn't stop slapd"); - } - - return $ret; -} - -sub provision_member($$$) -{ - my ($self, $prefix, $dcvars) = @_; - print "PROVISIONING MEMBER..."; - - my $ret = $self->provision($prefix, - "member server", - "localmember3", - "localmember", - 3, - "localmemberpass"); - - $ret or die("Unable to provision"); - - my $cmd = ""; - $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; - $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; - $cmd .= "$self->{bindir}/net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member"; - $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}"; - - system($cmd) == 0 or die("Join failed\n$cmd"); - - $ret->{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo"; - $ret->{SMBD_TEST_LOG} = "$prefix/smbd_test.log"; - $ret->{SMBD_TEST_LOG_POS} = 0; - - $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}; - - return $ret; -} - -sub provision_dc($$) -{ - my ($self, $prefix) = @_; - - print "PROVISIONING DC..."; - my $ret = $self->provision($prefix, - "domain controller", - "localdc1", - "localdc", - 1, - "localdcpass"); - - $self->add_wins_config("$prefix/private") or - die("Unable to add wins configuration"); - - $ret->{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo"; - $ret->{SMBD_TEST_LOG} = "$prefix/smbd_test.log"; - $ret->{SMBD_TEST_LOG_POS} = 0; - return $ret; -} - -sub teardown_env($$) -{ - my ($self, $envvars) = @_; - my $pid; - - close(DATA); - - if (-f "$envvars->{PIDDIR}/smbd.pid" ) { - open(IN, "<$envvars->{PIDDIR}/smbd.pid") or die("unable to open smbd pid file"); - $pid = ; - close(IN); - - # Give the process 20 seconds to exit. gcov needs - # this time to write out the covarge data - my $count = 0; - until (kill(0, $pid) == 0) { - # if no process sucessfully signalled, then we are done - sleep(1); - $count++; - last if $count > 20; - } - - # If it is still around, kill it - if ($count > 20) { - print "smbd process $pid took more than $count seconds to exit, killing\n"; - kill 9, $pid; - } - } - - my $failed = $? >> 8; - - $self->slapd_stop($envvars) if ($self->{ldap}); - - print $self->getlog_env($envvars); - - return $failed; -} - -sub getlog_env($$) -{ - my ($self, $envvars) = @_; - my $title = "SMBD LOG of: $envvars->{NETBIOSNAME}\n"; - my $out = $title; - - open(LOG, "<$envvars->{SMBD_TEST_LOG}"); - - seek(LOG, $envvars->{SMBD_TEST_LOG_POS}, SEEK_SET); - while () { - $out .= $_; - } - $envvars->{SMBD_TEST_LOG_POS} = tell(LOG); - close(LOG); - - return "" if $out eq $title; - - return $out; -} - -sub check_env($$) -{ - my ($self, $envvars) = @_; - - return 1 if (-p $envvars->{SMBD_TEST_FIFO}); - - print $self->getlog_env($envvars); - - return 0; -} - -sub setup_env($$$) -{ - my ($self, $envname, $path) = @_; - - if ($envname eq "dc") { - return $self->setup_dc("$path/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}); - } else { - die("Samba4 can't provide environment '$envname'"); - } -} - -sub setup_member($$$$) -{ - my ($self, $path, $dc_vars) = @_; - - my $env = $self->provision_member($path, $dc_vars); - - $self->check_or_start($env, ($ENV{SMBD_MAXTIME} or 7500)); - - $self->wait_for_start($env); - - return $env; -} - -sub setup_dc($$) -{ - my ($self, $path) = @_; - - my $env = $self->provision_dc($path); - - $self->check_or_start($env, - ($ENV{SMBD_MAXTIME} or 7500)); - - $self->wait_for_start($env); - - $self->{vars}->{dc} = $env; - - return $env; -} - -sub stop($) -{ - my ($self) = @_; -} - -1; diff --git a/source4/selftest/target/Windows.pm b/source4/selftest/target/Windows.pm deleted file mode 100644 index d0c90d7f7b..0000000000 --- a/source4/selftest/target/Windows.pm +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/perl -# Bootstrap Samba and run a number of tests against it. -# Copyright (C) 2005-2007 Jelmer Vernooij -# Published under the GNU GPL, v3 or later. - -package Windows; - -use strict; -use FindBin qw($RealBin); -use POSIX; - -sub new($) -{ - my ($classname) = @_; - my $self = { }; - bless $self; - return $self; -} - -sub provision($$$) -{ - my ($self, $environment, $prefix) = @_; - - die ("Windows tests will not run without root privileges.") - if (`whoami` ne "root"); - - die("Environment variable WINTESTCONF has not been defined.\n". - "Windows tests will not run unconfigured.") if (not defined($ENV{WINTESTCONF})); - - die ("$ENV{WINTESTCONF} could not be read.") if (! -r $ENV{WINTESTCONF}); - - $ENV{WINTEST_DIR}="$ENV{SRCDIR}/selftest/win"; -} - -sub setup_env($$) -{ - my ($self, $name) = @_; -} - -1; diff --git a/source4/selftest/test_samba4.pl b/source4/selftest/test_samba4.pl deleted file mode 100755 index f2935be66b..0000000000 --- a/source4/selftest/test_samba4.pl +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/perl - -use Test::More tests => 3; -use FindBin qw($RealBin); -use lib $RealBin; -use Samba4; - -my $s = new Samba4($RealBin."/../bin", undef, $RealBin."/../setup"); - -ok($s); - -is($RealBin."/../bin", $s->{bindir}); - -ok($s->write_ldb_file("tmpldb", " -dn: a=b -a: b -c: d -")); - -unlink("tmpldb"); diff --git a/source4/selftest/test_subunit.pl b/source4/selftest/test_subunit.pl deleted file mode 100755 index 28522ed49f..0000000000 --- a/source4/selftest/test_subunit.pl +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/perl - -use Test::More tests => 0; -use FindBin qw($RealBin); -use lib $RealBin; -use Subunit qw(parse_results); - diff --git a/source4/selftest/test_w2k3.sh b/source4/selftest/test_w2k3.sh deleted file mode 100755 index 3cd034d000..0000000000 --- a/source4/selftest/test_w2k3.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh - -# tests that should pass against a w2k3 DC, as administrator - -# add tests to this list as they start passing, so we test -# that they stay passing -ncacn_np_tests="RPC-SCHANNEL RPC-DSSETUP RPC-EPMAPPER RPC-SAMR RPC-WKSSVC RPC-SRVSVC RPC-EVENTLOG RPC-NETLOGON RPC-LSA RPC-SAMLOGON RPC-SAMSYNC RPC-MULTIBIND RPC-WINREG RPC-SPOOLSS RPC-SPOOLSS-WIN" -ncacn_ip_tcp_tests="RPC-SCHANNEL RPC-EPMAPPER RPC-SAMR RPC-NETLOGON RPC-LSA RPC-SAMLOGON RPC-SAMSYNC RPC-MULTIBIND" - -if [ $# -lt 4 ]; then -cat < /dev/null; then + for options in "" "-U\$USERNAME%\$PASSWORD"; do + plantest "ldb.ldaps with options $options" dc $samba4srcdir/../testprogs/blackbox/test_ldb.sh ldaps \$SERVER_IP $options + done +fi +plantest "ldb.ldapi with options $options" dc $samba4srcdir/../testprogs/blackbox/test_ldb.sh ldapi \$PREFIX_ABS/dc/private/ldapi $options +for t in LDAP-CLDAP LDAP-BASIC LDAP-SCHEMA LDAP-UPTODATEVECTOR +do + plansmbtorturetest "$t" dc "-U\$USERNAME%\$PASSWORD" //\$SERVER_IP/_none_ +done + +# only do the ldb tests when not in quick mode - they are quite slow, and ldb +# is now pretty well tested by the rest of the quick tests anyway +LDBDIR=$samba4srcdir/lib/ldb +export LDBDIR +plantest "ldb" none TEST_DATA_PREFIX=\$PREFIX $LDBDIR/tests/test-tdb.sh + +# Tests for RPC + +# add tests to this list as they start passing, so we test +# that they stay passing +ncacn_np_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-HANDLES RPC-SAMSYNC RPC-SAMBA3SESSIONKEY RPC-SAMBA3-GETUSERNAME RPC-SAMBA3-LSA RPC-BINDSAMBA3 RPC-NETLOGSAMBA3 RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" +ncalrpc_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-DRSUAPI RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" +ncacn_ip_tcp_tests="RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-HANDLES RPC-DSSYNC RPC-ASYNCBIND RPC-LSALOOKUP RPC-LSA-GETUSER RPC-SCHANNEL2 RPC-AUTHCONTEXT" +slow_ncacn_np_tests="RPC-SAMLOGON RPC-SAMR RPC-SAMR-USERS RPC-SAMR-PASSWORDS" +slow_ncalrpc_tests="RPC-SAMR RPC-SAMR-PASSWORDS" +slow_ncacn_ip_tcp_tests="RPC-SAMR RPC-SAMR-PASSWORDS RPC-CRACKNAMES" + +all_tests="$ncalrpc_tests $ncacn_np_tests $ncacn_ip_tcp_tests $slow_ncalrpc_tests $slow_ncacn_np_tests $slow_ncacn_ip_tcp_tests RPC-SECRETS RPC-SAMBA3-SHARESEC" + +# Make sure all tests get run +for t in `$smb4torture --list | grep "^RPC-"` +do + echo $all_tests | grep $t > /dev/null + if [ $? -ne 0 ] + then + auto_rpc_tests="$auto_rpc_tests $t" + fi +done + +for bindoptions in seal,padcheck $VALIDATE bigendian; do + for transport in ncalrpc ncacn_np ncacn_ip_tcp; do + case $transport in + ncalrpc) tests=$ncalrpc_tests ;; + ncacn_np) tests=$ncacn_np_tests ;; + ncacn_ip_tcp) tests=$ncacn_ip_tcp_tests ;; + esac + for t in $tests; do + plantest "`normalize_testname $t` on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" + done + plantest "rpc.samba3.sharesec on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN --option=torture:share=tmp RPC-SAMBA3-SHARESEC "$*" + done +done + +for bindoptions in "" $VALIDATE bigendian; do + for t in $auto_rpc_tests; do + plantest "`normalize_testname $t` with $bindoptions" dc $VALGRIND $smb4torture "\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" + done +done + +for bindoptions in connect $VALIDATE ; do + for transport in ncalrpc ncacn_np ncacn_ip_tcp; do + case $transport in + ncalrpc) tests=$slow_ncalrpc_tests ;; + ncacn_np) tests=$slow_ncacn_np_tests ;; + ncacn_ip_tcp) tests=$slow_ncacn_ip_tcp_tests ;; + esac + for t in $tests; do + plantest "`normalize_testname $t` on $transport with $bindoptions" dc $VALGRIND $smb4torture $transport:"\$SERVER[$bindoptions]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN $t "$*" + done + done +done + + +# Tests for the NET API + +net=`$smb4torture --list | grep ^NET-` + +for t in $net; do + plansmbtorturetest "$t" dc "\$SERVER[$VALIDATE]" -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "$*" +done + +# Tests for session keys +# FIXME: Integrate these into a single smbtorture test + +bindoptions="" +transport="ncacn_np" +for ntlmoptions in \ + "-k no --option=usespnego=yes" \ + "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no" \ + "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=yes" \ + "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=no" \ + "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes" \ + "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=no" \ + "-k no --option=usespnego=yes --option=clientntlmv2auth=yes" \ + "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no" \ + "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes" \ + "-k no --option=usespnego=no --option=clientntlmv2auth=yes" \ + "-k no --option=gensec:spnego=no --option=clientntlmv2auth=yes" \ + "-k no --option=usespnego=no"; do + name="rpc.secrets on $transport with $bindoptions with $ntlmoptions" + plantest "$name" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN --option=gensec:target_hostname=\$NETBIOSNAME RPC-SECRETS "$*" +done +plantest "rpc.secrets on $transport with $bindoptions with Kerberos" dc $smb4torture $transport:"\$SERVER[$bindoptions]" -k yes -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN "--option=gensec:target_hostname=\$NETBIOSNAME" RPC-SECRETS "$*" +plantest "rpc.secrets on $transport with $bindoptions with Kerberos - use target principal" dc $smb4torture $transport:"\$SERVER[$bindoptions]" -k yes -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN "--option=clientusespnegoprincipal=yes" "--option=gensec:target_hostname=\$NETBIOSNAME" RPC-SECRETS "$*" +plantest "rpc.secrets on $transport with Kerberos - use Samba3 style login" dc $smb4torture $transport:"\$SERVER" -k yes -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "--option=gensec:fake_gssapi_krb5=yes" "--option=gensec:gssapi_krb5=no" "--option=gensec:target_hostname=\$NETBIOSNAME" "RPC-SECRETS-none*" "$*" +plantest "rpc.secrets on $transport with Kerberos - use Samba3 style login, use target principal" dc $smb4torture $transport:"\$SERVER" -k yes -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" "--option=clientusespnegoprincipal=yes" "--option=gensec:fake_gssapi_krb5=yes" "--option=gensec:gssapi_krb5=no" "--option=gensec:target_hostname=\$NETBIOSNAME" "RPC-SECRETS-none*" "$*" + +# Echo tests +transports="ncacn_np ncacn_ip_tcp ncalrpc" + +for transport in $transports; do + for bindoptions in connect spnego spnego,sign spnego,seal $VALIDATE padcheck bigendian bigendian,seal; do + for ntlmoptions in \ + "--option=socket:testnonblock=True --option=torture:quick=yes"; do + plantest "rpc.echo on $transport with $bindoptions and $ntlmoptions" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W "\$DOMAIN" RPC-ECHO "$*" + done + done +done + +for transport in $transports; do + for bindoptions in sign seal; do + for ntlmoptions in \ + "--option=ntlmssp_client:ntlm2=yes --option=torture:quick=yes" \ + "--option=ntlmssp_client:ntlm2=no --option=torture:quick=yes" \ + "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:128bit=no --option=torture:quick=yes" \ + "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:128bit=no --option=torture:quick=yes" \ + "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ + "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ + "--option=clientntlmv2auth=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ + "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=yes --option=torture:quick=yes" \ + "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes" \ + ; do + plantest "rpc.echo on $transport with $bindoptions and $ntlmoptions" dc $smb4torture $transport:"\$SERVER[$bindoptions]" $ntlmoptions -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN RPC-ECHO "$*" + done + done +done + +plantest "rpc.echo on ncacn_np over smb2" dc $smb4torture ncacn_np:"\$SERVER[smb2]" -U"\$USERNAME"%"\$PASSWORD" -W \$DOMAIN RPC-ECHO "$*" + +# Tests against the NTVFS POSIX backend +NTVFSARGS="" +NTVFSARGS="${NTVFSARGS} --option=torture:sharedelay=100000" +NTVFSARGS="${NTVFSARGS} --option=torture:oplocktimeout=3" +NTVFSARGS="${NTVFSARGS} --option=torture:writetimeupdatedelay=500000" + +smb2=`$smb4torture --list | grep "^SMB2-" | xargs` +#The QFILEINFO-IPC test needs to be on ipc$ +raw=`$smb4torture --list | grep "^RAW-" | grep -v "RAW-QFILEINFO-IPC"| xargs` +base=`$smb4torture --list | grep "^BASE-" | xargs` + +for t in $base $raw $smb2; do + plansmbtorturetest "$t" dc $ADDARGS //\$SERVER/tmp -U"\$USERNAME"%"\$PASSWORD" $NTVFSARGS +done + +plansmbtorturetest "RAW-QFILEINFO-IPC" dc $ADDARGS //\$SERVER/ipc$ -U"\$USERNAME"%"\$PASSWORD" + +rap=`$smb4torture --list | grep "^RAP-" | xargs` +for t in $rap; do + plansmbtorturetest "$t" dc $ADDARGS //\$SERVER/IPC\\\$ -U"\$USERNAME"%"\$PASSWORD" +done + +# Tests against the NTVFS CIFS backend +for t in $base $raw; do + plantest "ntvfs.cifs.`normalize_testname $t`" dc $VALGRIND $smb4torture //\$NETBIOSNAME/cifs -U"\$USERNAME"%"\$PASSWORD" $NTVFSARGS $t +done + +# Local tests + +for t in `$smb4torture --list | grep "^LOCAL-" | xargs`; do + plansmbtorturetest "$t" none ncalrpc: "$*" +done + +if test -f $samba4bindir/tdbtorture +then + plantest "tdb.stress" none $VALGRIND $samba4bindir/tdbtorture +fi + +# Pidl tests + +if test x"${PIDL_TESTS_SKIP}" = x"yes"; then + echo "Skipping pidl tests - PIDL_TESTS_SKIP=yes" +elif $PERL -e 'eval require Test::More;' > /dev/null 2>&1; then + for f in $samba4srcdir/../pidl/tests/*.pl; do + plantest "pidl.`basename $f .pl`" none $PERL $f "|" $samba4srcdir/script/harness2subunit.pl + done +else + echo "Skipping pidl tests - Test::More not installed" +fi + +# Blackbox Tests: +# tests that interact directly with the command-line tools rather than using +# the API. These mainly test that the various command-line options of commands +# work correctly. + +bbdir=../testprogs/blackbox + +plantest "blackbox.ndrdump" dc $samba4srcdir/librpc/tests/test_ndrdump.sh +plantest "blackbox.net" dc $samba4srcdir/utils/tests/test_net.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" +plantest "blackbox.kinit" dc $bbdir/test_kinit.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$REALM" "\$DOMAIN" "$PREFIX" $CONFIGURATION +plantest "blackbox.cifsdd" dc $samba4srcdir/client/tests/test_cifsdd.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" +plantest "blackbox.nmblookup" dc $samba4srcdir/utils/tests/test_nmblookup.sh "\$NETBIOSNAME" "\$NETBIOSALIAS" "\$SERVER" "\$SERVER_IP" +plantest "blackbox.nmblookup" member $samba4srcdir/utils/tests/test_nmblookup.sh "\$NETBIOSNAME" "\$NETBIOSALIAS" "\$SERVER" "\$SERVER_IP" +plantest "blackbox.locktest" dc $samba4srcdir/torture/tests/test_locktest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" +plantest "blackbox.masktest" dc $samba4srcdir/torture/tests/test_masktest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" +plantest "blackbox.gentest" dc $samba4srcdir/torture/tests/test_gentest.sh "\$SERVER" "\$USERNAME" "\$PASSWORD" "\$DOMAIN" "$PREFIX" +plantest "blackbox.wbinfo" dc $samba4srcdir/nsswitch/tests/test_wbinfo.sh "\$DOMAIN" "\$USERNAME" "\$PASSWORD" "dc" +plantest "blackbox.wbinfo" member $samba4srcdir/nsswitch/tests/test_wbinfo.sh "\$DOMAIN" "\$DC_USERNAME" "\$DC_PASSWORD" "member" + +# Tests using the "Simple" NTVFS backend + +for t in "BASE-RW1"; do + plantest "ntvfs.simple.`normalize_testname $t`" dc $VALGRIND $smb4torture $ADDARGS //\$SERVER/simple -U"\$USERNAME"%"\$PASSWORD" $t +done + +DATADIR=$samba4srcdir/../testdata + +plantest "js.samba3sam" none $samba4bindir/smbscript $SCRIPTDIR/samba3sam.js $CONFIGURATION `pwd` $DATADIR/samba3/ + +# Domain Member Tests + +plantest "rpc.echo against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" RPC-ECHO "$*" +plantest "rpc.echo against member server with domain creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$DOMAIN/\$DC_USERNAME"%"\$DC_PASSWORD" RPC-ECHO "$*" +plantest "rpc.samr against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR" "$*" +plantest "rpc.samr.users against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR-USERS" "$*" +plantest "rpc.samr.passwords against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR-PASSWORDS" "$*" +plantest "blackbox.smbclient against member server with local creds" member $samba4srcdir/client/tests/test_smbclient.sh "\$NETBIOSNAME" "\$USERNAME" "\$PASSWORD" "\$NETBIOSNAME" "$PREFIX" + +NBT_TESTS=`$smb4torture --list | grep "^NBT-" | xargs` + +for t in $NBT_TESTS; do + plansmbtorturetest "$t" dc //\$SERVER/_none_ -U\$USERNAME%\$PASSWORD +done + +WB_OPTS="--option=\"torture:strict mode=no\"" +WB_OPTS="${WB_OPTS} --option=\"torture:timelimit=1\"" +WB_OPTS="${WB_OPTS} --option=\"torture:winbindd separator=/\"" +WB_OPTS="${WB_OPTS} --option=\"torture:winbindd netbios name=\$SERVER\"" +WB_OPTS="${WB_OPTS} --option=\"torture:winbindd netbios domain=\$DOMAIN\"" + +WINBIND_STRUCT_TESTS=`$smb4torture --list | grep "^WINBIND-STRUCT" | xargs` +WINBIND_NDR_TESTS=`$smb4torture --list | grep "^WINBIND-NDR" | xargs` +for env in dc member; do + for t in $WINBIND_STRUCT_TESTS; do + plansmbtorturetest $t $env $WB_OPTS //_none_/_none_ + done + + for t in $WINBIND_NDR_TESTS; do + plansmbtorturetest $t $env $WB_OPTS //_none_/_none_ + done +done + +if test -f $samba4bindir/nsstest +then + plantest "nss.test using winbind" member $VALGRIND $samba4bindir/nsstest $samba4bindir/shared/libnss_winbind.so +fi + +PYTHON=/usr/bin/python +SUBUNITRUN="$PYTHON ./scripting/bin/subunitrun" +plantest "ldb.python" none PYTHONPATH="$PYTHONPATH:lib/ldb/tests/python/" $SUBUNITRUN api +plantest "credentials.python" none PYTHONPATH="$PYTHONPATH:auth/credentials/tests" $SUBUNITRUN bindings +plantest "registry.python" none PYTHONPATH="$PYTHONPATH:lib/registry/tests/" $SUBUNITRUN bindings +plantest "tdb.python" none PYTHONPATH="$PYTHONPATH:../lib/tdb/python/tests" $SUBUNITRUN simple +plantest "auth.python" none PYTHONPATH="$PYTHONPATH:auth/tests/" $SUBUNITRUN bindings +plantest "security.python" none PYTHONPATH="$PYTHONPATH:libcli/security/tests" $SUBUNITRUN bindings +plantest "param.python" none PYTHONPATH="$PYTHONPATH:param/tests" $SUBUNITRUN bindings +plantest "upgrade.python" none $SUBUNITRUN samba.tests.upgrade +plantest "samba.python" none $SUBUNITRUN samba.tests +plantest "provision.python" none $SUBUNITRUN samba.tests.provision +plantest "samba3.python" none $SUBUNITRUN samba.tests.samba3 +plantest "samr.python" dc $SUBUNITRUN samba.tests.dcerpc.sam +plantest "dcerpc.bare.python" dc $SUBUNITRUN samba.tests.dcerpc.bare +plantest "unixinfo.python" dc $SUBUNITRUN samba.tests.dcerpc.unix +plantest "samdb.python" none $SUBUNITRUN samba.tests.samdb +plantest "events.python" none PYTHONPATH="$PYTHONPATH:lib/events" $SUBUNITRUN tests +plantest "messaging.python" none PYTHONPATH="$PYTHONPATH:lib/messaging/tests" $SUBUNITRUN bindings +plantest "samba3sam.python" none PYTHONPATH="$PYTHONPATH:dsdb/samdb/ldb_modules/tests" $SUBUNITRUN samba3sam +plantest "rpcecho.python" dc $SUBUNITRUN samba.tests.dcerpc.rpcecho +plantest "winreg.python" dc $SUBUNITRUN -U\$USERNAME%\$PASSWORD samba.tests.dcerpc.registry +plantest "ldap.python" dc $PYTHON $samba4srcdir/lib/ldb/tests/python/ldap.py $CONFIGURATION \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN +plantest "blackbox.samba3dump" none $PYTHON scripting/bin/samba3dump $samba4srcdir/../testdata/samba3 +rm -rf $PREFIX/upgrade +plantest "blackbox.upgrade" none $PYTHON setup/upgrade $CONFIGURATION --targetdir=$PREFIX/upgrade ../testdata/samba3 ../testdata/samba3/smb.conf +rm -rf $PREFIX/provision +mkdir $PREFIX/provision +plantest "blackbox.provision.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_provision.sh "$PREFIX/provision" +plantest "blackbox.provision-backend.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_provision-backend.sh "$PREFIX/provision" +plantest "blackbox.setpassword.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_setpassword.sh "$PREFIX/provision" +plantest "blackbox.newuser.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_newuser.sh "$PREFIX/provision" -- cgit