use POSIX;
use Cwd qw(abs_path);
use lib "$RealBin";
-use Subunit;
+use Subunit qw(parse_results);
+use Subunit::Filter;
use SocketWrapper;
my $opt_help = 0;
my ($envname, $name, $cmd, $i, $totalsuites) = @_;
my $pcap_file = setup_pcap($name);
- Subunit::report_time(time());
Subunit::start_testsuite($name);
+ Subunit::report_time(time());
- system("$cmd 2>&1 | $RealBin/filter-subunit.pl --prefix \"$name.\"");
- my $ret = $?;
- if ($ret == -1) {
- Subunit::end_testsuite($name, "error", "Unable to run $cmd: $!");
- return 0;
- } elsif ($ret & 127) {
+ open(RESULTS, "$cmd 2>&1|");
+ my $statistics = {
+ TESTS_UNEXPECTED_OK => 0,
+ TESTS_EXPECTED_OK => 0,
+ TESTS_UNEXPECTED_FAIL => 0,
+ TESTS_EXPECTED_FAIL => 0,
+ TESTS_ERROR => 0,
+ TESTS_SKIP => 0,
+ };
+
+ my $msg_ops = new Subunit::Filter("$name\.", []);
+
+ parse_results($msg_ops, $statistics, *RESULTS);
+
+ my $ret = 0;
+
+ unless (close(RESULTS)) {
+ if ($!) {
+ Subunit::end_testsuite($name, "error", "Unable to run $cmd: $!");
+ return 0;
+ } else {
+ $ret = $?;
+ }
+ }
+
+ if ($ret & 127) {
Subunit::end_testsuite($name, "error", sprintf("Testsuite died with signal %d, %s coredump", ($ret & 127), ($ret & 128) ? "with": "without"));
return 0;
}
my $exitcode = $ret >> 8;
Subunit::report_time(time());
- my $reason = "Exit code was $exitcode";
- my $result;
if ($exitcode == 0) {
- $result = "success";
+ Subunit::end_testsuite($name, "success");
} else {
- $result = "failure";
+ Subunit::end_testsuite($name, "failure", "Exit code was $exitcode");
}
- Subunit::end_testsuite($name, $result, $reason);
cleanup_pcap($pcap_file, $exitcode);
ShowHelp() if ($opt_help);
-my $tests = shift;
+# we want unbuffered output
+$| = 1;
+
+my @tests = @ARGV;
# quick hack to disable rpc validation when using valgrind - its way too slow
unless (defined($ENV{VALGRIND})) {
$ENV{MALLOC_CHECK_} = 2;
}
+# make all our python scripts unbuffered
+$ENV{PYTHONUNBUFFERED} = 1;
+
my $bindir = ($opt_bindir or "$builddir/bin");
my $bindir_abs = abs_path($bindir);
mkdir("$prefix/client/private", 0777);
}
- if ( -d "$prefix/client/lock" ) {
+ if ( -d "$prefix/client/lockdir" ) {
unlink <$prefix/client/lockdir/*>;
} else {
mkdir("$prefix/client/lockdir", 0777);
}
+ if ( -d "$prefix_abs/client/ncalrpcdir" ) {
+ unlink <$prefix/client/ncalrpcdir/*>;
+ } else {
+ mkdir("$prefix/client/ncalrpcdir", 0777);
+ }
+
open(CF, ">$conffile");
print CF "[global]\n";
if (defined($ENV{VALGRIND})) {
print CF "
private dir = $prefix_abs/client/private
lock dir = $prefix_abs/client/lockdir
+ ncalrpc dir = $prefix_abs/client/ncalrpcdir
name resolve order = bcast
panic action = $RealBin/gdb_backtrace \%PID\% \%PROG\%
max xmit = 32K
#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}
+ setup directory = ./setup
";
close(CF);
}
my %required_envs = ();
+sub should_run_test($)
+{
+ my $name = shift;
+ if ($#tests == -1) {
+ return 1;
+ }
+ for (my $i=0; $i <= $#tests; $i++) {
+ if ($name =~ /$tests[$i]/i) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
sub read_testlist($)
{
my ($filename) = @_;
$env =~ s/\n//g;
my $cmdline = <IN>;
$cmdline =~ s/\n//g;
- if (not defined($tests) or $name =~ /$tests/) {
+ if (should_run_test($name) == 1) {
$required_envs{$env} = 1;
push (@ret, [$name, $env, $cmdline]);
}
my $envvarstr = exported_envvars_str($testenv_vars);
- my $term = ($ENV{TERM} or "xterm");
+ my $term = ($ENV{TERMINAL} or "xterm");
system("$term -e 'echo -e \"
Welcome to the Samba4 Test environment '$testenv_name'
# 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 $_");
- }
+ print "VALGRIND FAILURE\n";
+ $failed++;
+ system("cat $_");
}
exit 0;