s3/vfs_extd_audit: Don't ignore "syslog = 0".
[Samba.git] / selftest / selftest.pl
blob6f0883c585e296317eb66e27bf2316023f7b77a3
1 #!/usr/bin/perl
2 # Bootstrap Samba and run a number of tests against it.
3 # Copyright (C) 2005-2008 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL, v3 or later.
6 =pod
8 =head1 NAME
10 selftest - Samba test runner
12 =head1 SYNOPSIS
14 selftest --help
16 selftest [--srcdir=DIR] [--builddir=DIR] [--exeext=EXT][--target=samba4|samba3|win|kvm] [--socket-wrapper] [--quick] [--exclude=FILE] [--include=FILE] [--one] [--prefix=prefix] [--immediate] [--testlist=FILE] [TESTS]
18 =head1 DESCRIPTION
20 A simple test runner. TESTS is a regular expression with tests to run.
22 =head1 OPTIONS
24 =over 4
26 =item I<--help>
28 Show list of available options.
30 =item I<--srcdir=DIR>
32 Source directory.
34 =item I<--builddir=DIR>
36 Build directory.
38 =item I<--exeext=EXT>
40 Executable extention
42 =item I<--prefix=DIR>
44 Change directory to run tests in. Default is 'st'.
46 =item I<--immediate>
48 Show errors as soon as they happen rather than at the end of the test run.
50 =item I<--target samba4|samba3|win|kvm>
52 Specify test target against which to run. Default is 'samba4'.
54 =item I<--quick>
56 Run only a limited number of tests. Intended to run in about 30 seconds on
57 moderately recent systems.
59 =item I<--socket-wrapper>
61 Use socket wrapper library for communication with server. Only works
62 when the server is running locally.
64 Will prevent TCP and UDP ports being opened on the local host but
65 (transparently) redirects these calls to use unix domain sockets.
67 =item I<--expected-failures>
69 Specify a file containing a list of tests that are expected to fail. Failures for
70 these tests will be counted as successes, successes will be counted as failures.
72 The format for the file is, one entry per line:
74 TESTSUITE-NAME.TEST-NAME
76 The reason for a test can also be specified, by adding a hash sign (#) and the reason
77 after the test name.
79 =item I<--exclude>
81 Specify a file containing a list of tests that should be skipped. Possible
82 candidates are tests that segfault the server, flip or don't end. The format of this file is the same as
83 for the --expected-failures flag.
85 =item I<--include>
87 Specify a file containing a list of tests that should be run. Same format
88 as the --exclude flag.
90 Not includes specified means all tests will be run.
92 =item I<--one>
94 Abort as soon as one test fails.
96 =item I<--testlist>
98 Load a list of tests from the specified location.
100 =back
102 =head1 ENVIRONMENT
104 =over 4
106 =item I<SMBD_VALGRIND>
108 =item I<TORTURE_MAXTIME>
110 =item I<VALGRIND>
112 =item I<TLS_ENABLED>
114 =item I<srcdir>
116 =back
118 =head1 LICENSE
120 selftest is licensed under the GNU General Public License L<http://www.gnu.org/licenses/gpl.html>.
122 =head1 AUTHOR
124 Jelmer Vernooij
126 =cut
128 use strict;
130 use FindBin qw($RealBin $Script);
131 use File::Spec;
132 use Getopt::Long;
133 use POSIX;
134 use Cwd qw(abs_path);
135 use lib "$RealBin";
136 use Subunit qw(parse_results);
137 use SocketWrapper;
139 my $opt_help = 0;
140 my $opt_target = "samba4";
141 my $opt_quick = 0;
142 my $opt_socket_wrapper = 0;
143 my $opt_socket_wrapper_pcap = undef;
144 my $opt_socket_wrapper_keep_pcap = undef;
145 my $opt_one = 0;
146 my $opt_immediate = 0;
147 my $opt_expected_failures = undef;
148 my @opt_exclude = ();
149 my @opt_include = ();
150 my $opt_verbose = 0;
151 my $opt_image = undef;
152 my $opt_testenv = 0;
153 my $ldap = undef;
154 my $opt_analyse_cmd = undef;
155 my $opt_resetup_env = undef;
156 my $opt_bindir = undef;
157 my $opt_no_lazy_setup = undef;
158 my $opt_format = "plain";
159 my @testlists = ();
161 my $srcdir = ".";
162 my $builddir = ".";
163 my $exeext = "";
164 my $prefix = "./st";
166 my @expected_failures = ();
167 my @includes = ();
168 my @excludes = ();
170 my $statistics = {
171 SUITES_FAIL => 0,
173 TESTS_UNEXPECTED_OK => 0,
174 TESTS_EXPECTED_OK => 0,
175 TESTS_UNEXPECTED_FAIL => 0,
176 TESTS_EXPECTED_FAIL => 0,
177 TESTS_ERROR => 0,
178 TESTS_SKIP => 0,
181 sub find_in_list($$)
183 my ($list, $fullname) = @_;
185 foreach (@$list) {
186 if ($fullname =~ /$$_[0]/) {
187 return ($$_[1]) if ($$_[1]);
188 return "NO REASON SPECIFIED";
192 return undef;
195 sub expecting_failure($)
197 my ($name) = @_;
198 return find_in_list(\@expected_failures, $name);
201 sub skip($)
203 my ($name) = @_;
205 return find_in_list(\@excludes, $name);
208 sub getlog_env($);
210 sub setup_pcap($)
212 my ($name) = @_;
214 return unless ($opt_socket_wrapper_pcap);
215 return unless defined($ENV{SOCKET_WRAPPER_PCAP_DIR});
217 my $fname = $name;
218 $fname =~ s%[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-]%_%g;
220 my $pcap_file = "$ENV{SOCKET_WRAPPER_PCAP_DIR}/$fname.pcap";
222 SocketWrapper::setup_pcap($pcap_file);
224 return $pcap_file;
227 sub cleanup_pcap($$$)
229 my ($pcap_file, $expected_ret, $ret) = @_;
231 return unless ($opt_socket_wrapper_pcap);
232 return if ($opt_socket_wrapper_keep_pcap);
233 return unless ($expected_ret == $ret);
234 return unless defined($pcap_file);
236 unlink($pcap_file);
239 sub run_testsuite($$$$$$)
241 my ($envname, $name, $cmd, $i, $totalsuites, $msg_ops) = @_;
242 my $pcap_file = setup_pcap($name);
244 $msg_ops->start_test([], $name);
246 unless (open(RESULT, "$cmd 2>&1|")) {
247 $statistics->{TESTS_ERROR}++;
248 $msg_ops->end_test([], $name, "error", 1, "Unable to run $cmd: $!");
249 $statistics->{SUITES_FAIL}++;
250 return 0;
253 my $expected_ret = parse_results(
254 $msg_ops, $statistics, *RESULT, \&expecting_failure, [$name]);
256 my $envlog = getlog_env($envname);
257 $msg_ops->output_msg("ENVLOG: $envlog\n") if ($envlog ne "");
259 $msg_ops->output_msg("CMD: $cmd\n");
261 my $ret = close(RESULT);
262 $ret = 0 unless $ret == 1;
264 my $exitcode = $? >> 8;
266 if ($ret == 1) {
267 $msg_ops->end_test([], $name, "success", $expected_ret != $ret, undef);
268 } else {
269 $msg_ops->end_test([], $name, "failure", $expected_ret != $ret, "Exit code was $exitcode");
272 cleanup_pcap($pcap_file, $expected_ret, $ret);
274 if (not $opt_socket_wrapper_keep_pcap and defined($pcap_file)) {
275 $msg_ops->output_msg("PCAP FILE: $pcap_file\n");
278 if ($ret != $expected_ret) {
279 $statistics->{SUITES_FAIL}++;
280 exit(1) if ($opt_one);
283 return ($ret == $expected_ret);
286 sub ShowHelp()
288 print "Samba test runner
289 Copyright (C) Jelmer Vernooij <jelmer\@samba.org>
291 Usage: $Script [OPTIONS] TESTNAME-REGEX
293 Generic options:
294 --help this help page
295 --target=samba[34]|win|kvm Samba version to target
296 --testlist=FILE file to read available tests from
298 Paths:
299 --prefix=DIR prefix to run tests in [st]
300 --srcdir=DIR source directory [.]
301 --builddir=DIR output directory [.]
302 --exeext=EXT executable extention []
304 Target Specific:
305 --socket-wrapper-pcap save traffic to pcap directories
306 --socket-wrapper-keep-pcap keep all pcap files, not just those for tests that
307 failed
308 --socket-wrapper enable socket wrapper
309 --bindir=PATH path to target binaries
310 --expected-failures=FILE specify list of tests that is guaranteed to fail
312 Samba4 Specific:
313 --ldap=openldap|fedora-ds back samba onto specified ldap server
315 Kvm Specific:
316 --image=PATH path to KVM image
318 Behaviour:
319 --quick run quick overall test
320 --one abort when the first test fails
321 --immediate print test output for failed tests during run
322 --verbose be verbose
323 --analyse-cmd CMD command to run after each test
325 exit(0);
328 my $result = GetOptions (
329 'help|h|?' => \$opt_help,
330 'target=s' => \$opt_target,
331 'prefix=s' => \$prefix,
332 'socket-wrapper' => \$opt_socket_wrapper,
333 'socket-wrapper-pcap' => \$opt_socket_wrapper_pcap,
334 'socket-wrapper-keep-pcap' => \$opt_socket_wrapper_keep_pcap,
335 'quick' => \$opt_quick,
336 'one' => \$opt_one,
337 'immediate' => \$opt_immediate,
338 'expected-failures=s' => \$opt_expected_failures,
339 'exclude=s' => \@opt_exclude,
340 'include=s' => \@opt_include,
341 'srcdir=s' => \$srcdir,
342 'builddir=s' => \$builddir,
343 'exeext=s' => \$exeext,
344 'verbose' => \$opt_verbose,
345 'testenv' => \$opt_testenv,
346 'ldap:s' => \$ldap,
347 'analyse-cmd=s' => \$opt_analyse_cmd,
348 'no-lazy-setup' => \$opt_no_lazy_setup,
349 'resetup-environment' => \$opt_resetup_env,
350 'bindir:s' => \$opt_bindir,
351 'format=s' => \$opt_format,
352 'image=s' => \$opt_image,
353 'testlist=s' => \@testlists
356 exit(1) if (not $result);
358 ShowHelp() if ($opt_help);
360 my $tests = shift;
362 # quick hack to disable rpc validation when using valgrind - its way too slow
363 unless (defined($ENV{VALGRIND})) {
364 $ENV{VALIDATE} = "validate";
365 $ENV{MALLOC_CHECK_} = 2;
368 my $old_pwd = "$RealBin/..";
370 # Backwards compatibility:
371 if (defined($ENV{TEST_LDAP}) and $ENV{TEST_LDAP} eq "yes") {
372 if (defined($ENV{FEDORA_DS_ROOT})) {
373 $ldap = "fedora-ds";
374 } else {
375 $ldap = "openldap";
379 my $torture_maxtime = ($ENV{TORTURE_MAXTIME} or 1200);
380 if ($ldap) {
381 # LDAP is slow
382 $torture_maxtime *= 2;
385 $prefix =~ s+//+/+;
386 $prefix =~ s+/./+/+;
387 $prefix =~ s+/$++;
389 die("using an empty prefix isn't allowed") unless $prefix ne "";
391 #Ensure we have the test prefix around
392 mkdir($prefix, 0777) unless -d $prefix;
394 my $prefix_abs = abs_path($prefix);
395 my $srcdir_abs = abs_path($srcdir);
397 die("using an empty absolute prefix isn't allowed") unless $prefix_abs ne "";
398 die("using '/' as absolute prefix isn't allowed") unless $prefix_abs ne "/";
400 $ENV{PREFIX} = $prefix;
401 $ENV{KRB5CCNAME} = "$prefix/krb5ticket";
402 $ENV{PREFIX_ABS} = $prefix_abs;
403 $ENV{SRCDIR} = $srcdir;
404 $ENV{SRCDIR_ABS} = $srcdir_abs;
406 if (defined($ENV{RUN_FROM_BUILD_FARM}) and
407 ($ENV{RUN_FROM_BUILD_FARM} eq "yes")) {
408 $opt_format = "buildfarm";
411 my $tls_enabled = not $opt_quick;
412 $ENV{TLS_ENABLED} = ($tls_enabled?"yes":"no");
413 $ENV{LDB_MODULES_PATH} = "$old_pwd/source4/bin/modules/ldb";
414 $ENV{LD_SAMBA_MODULE_PATH} = "$old_pwd/source4/bin/modules";
415 sub prefix_pathvar($$)
417 my ($name, $newpath) = @_;
418 if (defined($ENV{$name})) {
419 $ENV{$name} = "$newpath:$ENV{$name}";
420 } else {
421 $ENV{$name} = $newpath;
424 prefix_pathvar("PKG_CONFIG_PATH", "$old_pwd/source4/bin/pkgconfig");
425 prefix_pathvar("PYTHONPATH", "$old_pwd/source4/bin/python");
427 if ($opt_socket_wrapper_keep_pcap) {
428 # Socket wrapper keep pcap implies socket wrapper pcap
429 $opt_socket_wrapper_pcap = 1;
432 if ($opt_socket_wrapper_pcap) {
433 # Socket wrapper pcap implies socket wrapper
434 $opt_socket_wrapper = 1;
437 my $socket_wrapper_dir;
438 if ($opt_socket_wrapper) {
439 $socket_wrapper_dir = SocketWrapper::setup_dir("$prefix/w", $opt_socket_wrapper_pcap);
440 print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n";
441 } else {
442 unless ($< == 0) {
443 print "WARNING: Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports\n";
447 my $target;
448 my $testenv_default = "none";
450 if ($opt_target eq "samba4") {
451 $testenv_default = "member";
452 require target::Samba4;
453 $target = new Samba4($opt_bindir or "$builddir/bin",
454 $ldap, "$srcdir/setup", $exeext);
455 } elsif ($opt_target eq "samba3") {
456 my $bindir = ($opt_bindir or "$builddir/bin");
457 if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") {
458 die("You must include --enable-socket-wrapper when compiling Samba in order to execute 'make test'. Exiting....");
460 $testenv_default = "dc";
461 require target::Samba3;
462 $target = new Samba3($bindir);
463 } elsif ($opt_target eq "win") {
464 die("Windows tests will not run with socket wrapper enabled.")
465 if ($opt_socket_wrapper);
466 $testenv_default = "dc";
467 require target::Windows;
468 $target = new Windows();
469 } elsif ($opt_target eq "kvm") {
470 die("Kvm tests will not run with socket wrapper enabled.")
471 if ($opt_socket_wrapper);
472 require target::Kvm;
473 die("No image specified") unless ($opt_image);
474 $target = new Kvm($opt_image, undef);
478 # Start a Virtual Distributed Ethernet Switch
479 # Returns the pid of the switch.
481 sub start_vde_switch($)
483 my ($path) = @_;
485 system("vde_switch --pidfile $path/vde.pid --sock $path/vde.sock --daemon");
487 open(PID, "$path/vde.pid");
488 <PID> =~ /([0-9]+)/;
489 my $pid = $1;
490 close(PID);
492 return $pid;
495 # Stop a Virtual Distributed Ethernet Switch
496 sub stop_vde_switch($)
498 my ($pid) = @_;
499 kill 9, $pid;
502 sub read_test_regexes($)
504 my ($name) = @_;
505 my @ret = ();
506 open(LF, "<$name") or die("unable to read $name: $!");
507 while (<LF>) {
508 chomp;
509 next if (/^#/);
510 if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) {
511 push (@ret, [$1, $4]);
512 } else {
513 s/^(.*?)([ \t]+)\#([\t ]*)(.*?)$//;
514 push (@ret, [$_, undef]);
517 close(LF);
518 return @ret;
521 if (defined($opt_expected_failures)) {
522 @expected_failures = read_test_regexes($opt_expected_failures);
525 foreach (@opt_exclude) {
526 push (@excludes, read_test_regexes($_));
529 foreach (@opt_include) {
530 push (@includes, read_test_regexes($_));
533 my $interfaces = join(',', ("127.0.0.6/8",
534 "127.0.0.7/8",
535 "127.0.0.8/8",
536 "127.0.0.9/8",
537 "127.0.0.10/8",
538 "127.0.0.11/8"));
540 my $conffile = "$prefix_abs/client/client.conf";
541 $ENV{SMB_CONF_PATH} = $conffile;
543 sub write_clientconf($$)
545 my ($conffile, $vars) = @_;
547 mkdir("$prefix/client", 0777) unless -d "$prefix/client";
549 if ( -d "$prefix/client/private" ) {
550 unlink <$prefix/client/private/*>;
551 } else {
552 mkdir("$prefix/client/private", 0777);
555 open(CF, ">$conffile");
556 print CF "[global]\n";
557 if (defined($ENV{VALGRIND})) {
558 print CF "\ticonv:native = true\n";
559 } else {
560 print CF "\ticonv:native = false\n";
562 print CF "\tnetbios name = client\n";
563 if (defined($vars->{DOMAIN})) {
564 print CF "\tworkgroup = $vars->{DOMAIN}\n";
566 if (defined($vars->{REALM})) {
567 print CF "\trealm = $vars->{REALM}\n";
569 if (defined($vars->{NCALRPCDIR})) {
570 print CF "\tncalrpc dir = $vars->{NCALRPCDIR}\n";
572 if (defined($vars->{PIDDIR})) {
573 print CF "\tpid directory = $vars->{PIDDIR}\n";
575 if (defined($vars->{WINBINDD_SOCKET_DIR})) {
576 print CF "\twinbindd socket directory = $vars->{WINBINDD_SOCKET_DIR}\n";
578 if ($opt_socket_wrapper) {
579 print CF "\tinterfaces = $interfaces\n";
581 print CF "
582 private dir = $prefix_abs/client/private
583 name resolve order = bcast
584 panic action = $RealBin/gdb_backtrace \%PID\% \%PROG\%
585 max xmit = 32K
586 notify:inotify = false
587 ldb:nosync = true
588 system:anonymous = true
589 client lanman auth = Yes
590 torture:basedir = $prefix_abs/client
591 #We don't want to pass our self-tests if the PAC code is wrong
592 gensec:require_pac = true
593 modules dir = $ENV{LD_SAMBA_MODULE_PATH}
595 close(CF);
598 my @todo = ();
600 my $testsdir = "$srcdir/selftest";
602 my %required_envs = ();
604 sub read_testlist($)
606 my ($filename) = @_;
608 my @ret = ();
609 open(IN, $filename) or die("Unable to open $filename: $!");
611 while (<IN>) {
612 if ($_ eq "-- TEST --\n") {
613 my $name = <IN>;
614 $name =~ s/\n//g;
615 my $env = <IN>;
616 $env =~ s/\n//g;
617 my $cmdline = <IN>;
618 $cmdline =~ s/\n//g;
619 if (not defined($tests) or $name =~ /$tests/) {
620 $required_envs{$env} = 1;
621 push (@ret, [$name, $env, $cmdline]);
623 } else {
624 print;
627 close(IN) or die("Error creating recipe");
628 return @ret;
631 if ($#testlists == -1) {
632 die("No testlists specified");
635 $ENV{SELFTEST_PREFIX} = "$prefix_abs";
636 if ($opt_socket_wrapper) {
637 $ENV{SELFTEST_INTERFACES} = $interfaces;
638 } else {
639 $ENV{SELFTEST_INTERFACES} = "";
641 if ($opt_verbose) {
642 $ENV{SELFTEST_VERBOSE} = "1";
643 } else {
644 $ENV{SELFTEST_VERBOSE} = "";
646 if ($opt_quick) {
647 $ENV{SELFTEST_QUICK} = "1";
648 } else {
649 $ENV{SELFTEST_QUICK} = "";
651 $ENV{SELFTEST_TARGET} = $opt_target;
652 $ENV{SELFTEST_MAXTIME} = $torture_maxtime;
653 $ENV{SELFTEST_CONFFILE} = $conffile;
655 my @available = ();
656 foreach my $fn (@testlists) {
657 foreach (read_testlist($fn)) {
658 my $name = $$_[0];
659 next if (@includes and not find_in_list(\@includes, $name));
660 push (@available, $_);
664 my $msg_ops;
665 if ($opt_format eq "buildfarm") {
666 require output::buildfarm;
667 $msg_ops = new output::buildfarm($statistics);
668 } elsif ($opt_format eq "plain") {
669 require output::plain;
670 $msg_ops = new output::plain("$prefix/summary", $opt_verbose, $opt_immediate, $statistics, $#available+1);
671 } elsif ($opt_format eq "html") {
672 require output::html;
673 mkdir("test-results", 0777);
674 $msg_ops = new output::html("test-results", $statistics);
675 } else {
676 die("Invalid output format '$opt_format'");
680 foreach (@available) {
681 my $name = $$_[0];
682 my $skipreason = skip($name);
683 if ($skipreason) {
684 $msg_ops->skip_testsuite($name, $skipreason);
685 } else {
686 push(@todo, $_);
690 if ($#todo == -1) {
691 print STDERR "No tests to run\n";
692 exit(1);
695 my $suitestotal = $#todo + 1;
696 my $i = 0;
697 $| = 1;
699 my %running_envs = ();
701 my @exported_envvars = (
702 # domain stuff
703 "DOMAIN",
704 "REALM",
706 # domain controller stuff
707 "DC_SERVER",
708 "DC_SERVER_IP",
709 "DC_NETBIOSNAME",
710 "DC_NETBIOSALIAS",
712 # server stuff
713 "SERVER",
714 "SERVER_IP",
715 "NETBIOSNAME",
716 "NETBIOSALIAS",
718 # user stuff
719 "USERNAME",
720 "PASSWORD",
721 "DC_USERNAME",
722 "DC_PASSWORD",
724 # misc stuff
725 "KRB5_CONFIG",
726 "WINBINDD_SOCKET_DIR",
727 "WINBINDD_PRIV_PIPE_DIR"
730 $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
731 my $signame = shift;
732 teardown_env($_) foreach(keys %running_envs);
733 die("Received signal $signame");
736 sub setup_env($)
738 my ($envname) = @_;
740 my $testenv_vars;
741 if ($envname eq "none") {
742 $testenv_vars = {};
743 } elsif (defined($running_envs{$envname})) {
744 $testenv_vars = $running_envs{$envname};
745 if (not $target->check_env($testenv_vars)) {
746 $testenv_vars = undef;
748 } else {
749 $testenv_vars = $target->setup_env($envname, $prefix);
752 return undef unless defined($testenv_vars);
754 $running_envs{$envname} = $testenv_vars;
756 SocketWrapper::set_default_iface(6);
757 write_clientconf($conffile, $testenv_vars);
759 foreach (@exported_envvars) {
760 if (defined($testenv_vars->{$_})) {
761 $ENV{$_} = $testenv_vars->{$_};
762 } else {
763 delete $ENV{$_};
767 return $testenv_vars;
770 sub exported_envvars_str($)
772 my ($testenv_vars) = @_;
773 my $out = "";
775 foreach (@exported_envvars) {
776 next unless defined($testenv_vars->{$_});
777 $out .= $_."=".$testenv_vars->{$_}."\n";
780 return $out;
783 sub getlog_env($)
785 my ($envname) = @_;
786 return "" if ($envname eq "none");
787 return $target->getlog_env($running_envs{$envname});
790 sub check_env($)
792 my ($envname) = @_;
793 return 1 if ($envname eq "none");
794 return $target->check_env($running_envs{$envname});
797 sub teardown_env($)
799 my ($envname) = @_;
800 return if ($envname eq "none");
801 $target->teardown_env($running_envs{$envname});
802 delete $running_envs{$envname};
805 if ($opt_no_lazy_setup) {
806 setup_env($_) foreach (keys %required_envs);
809 if ($opt_testenv) {
810 my $testenv_name = $ENV{SELFTEST_TESTENV};
811 $testenv_name = $testenv_default unless defined($testenv_name);
813 my $testenv_vars = setup_env($testenv_name);
815 $ENV{PIDDIR} = $testenv_vars->{PIDDIR};
817 my $envvarstr = exported_envvars_str($testenv_vars);
819 my $term = ($ENV{TERM} or "xterm");
820 system("$term -e 'echo -e \"
821 Welcome to the Samba4 Test environment '$testenv_name'
823 This matches the client environment used in make test
824 server is pid `cat \$PIDDIR/samba.pid`
826 Some useful environment variables:
827 TORTURE_OPTIONS=\$TORTURE_OPTIONS
828 CONFIGURATION=\$CONFIGURATION
830 $envvarstr
831 \" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash'");
832 teardown_env($testenv_name);
833 } else {
834 foreach (@todo) {
835 $i++;
836 my $cmd = $$_[2];
837 $cmd =~ s/([\(\)])/\\$1/g;
838 my $name = $$_[0];
839 my $envname = $$_[1];
841 my $envvars = setup_env($envname);
842 if (not defined($envvars)) {
843 $msg_ops->skip_testsuite($name, "unable to set up environment $envname");
844 next;
847 run_testsuite($envname, $name, $cmd, $i, $suitestotal,
848 $msg_ops);
850 if (defined($opt_analyse_cmd)) {
851 system("$opt_analyse_cmd \"$name\"");
854 teardown_env($envname) if ($opt_resetup_env);
858 print "\n";
860 teardown_env($_) foreach (keys %running_envs);
862 $target->stop();
864 $msg_ops->summary();
866 my $failed = 0;
868 # if there were any valgrind failures, show them
869 foreach (<$prefix/valgrind.log*>) {
870 next unless (-s $_);
871 system("grep DWARF2.CFI.reader $_ > /dev/null");
872 if ($? >> 8 == 0) {
873 print "VALGRIND FAILURE\n";
874 $failed++;
875 system("cat $_");
879 if ($opt_format eq "buildfarm") {
880 print "TEST STATUS: $statistics->{SUITES_FAIL}\n";
883 exit $statistics->{SUITES_FAIL};