diff options
Diffstat (limited to 'source4/selftest')
-rw-r--r-- | source4/selftest/Subunit.pm | 74 | ||||
-rwxr-xr-x | source4/selftest/selftest.pl | 70 |
2 files changed, 77 insertions, 67 deletions
diff --git a/source4/selftest/Subunit.pm b/source4/selftest/Subunit.pm new file mode 100644 index 0000000000..1be412c356 --- /dev/null +++ b/source4/selftest/Subunit.pm @@ -0,0 +1,74 @@ +package Subunit; + +require Exporter; +@ISA = qw(Exporter); +@EXPORT_OK = qw(parse_results); + +use strict; + +sub parse_results($$$$$) +{ + my ($msg_ops, $msg_state, $statistics, $fh, $expecting_failure) = @_; + my $expected_ret = 1; + my $open_tests = {}; + + while(<$fh>) { + if (/^test: (.+)\n/) { + $msg_ops->control_msg($msg_state, $_); + $open_tests->{$1} = 1; + $msg_ops->start_test($msg_state, $1); + } elsif (/^(success|failure|skip|error): (.*?)( \[)?([ \t]*)\n/) { + $msg_ops->control_msg($msg_state, $_); + my $reason = undef; + if ($3) { + $reason = ""; + # reason may be specified in next lines + while(<$fh>) { + $msg_ops->control_msg($msg_state, $_); + if ($_ eq "]\n") { last; } else { $reason .= $_; } + } + } + my $result = $1; + if ($1 eq "success") { + delete $open_tests->{$2}; + if ($expecting_failure->("$msg_state->{NAME}/$2")) { + $statistics->{TESTS_UNEXPECTED_OK}++; + $msg_ops->end_test($msg_state, $2, $1, 1, $reason); + } else { + $statistics->{TESTS_EXPECTED_OK}++; + $msg_ops->end_test($msg_state, $2, $1, 0, $reason); + } + } elsif ($1 eq "failure") { + delete $open_tests->{$2}; + if ($expecting_failure->("$msg_state->{NAME}/$2")) { + $statistics->{TESTS_EXPECTED_FAIL}++; + $msg_ops->end_test($msg_state, $2, $1, 0, $reason); + $expected_ret = 0; + } else { + $statistics->{TESTS_UNEXPECTED_FAIL}++; + $msg_ops->end_test($msg_state, $2, $1, 1, $reason); + } + } elsif ($1 eq "skip") { + $statistics->{TESTS_SKIP}++; + delete $open_tests->{$2}; + $msg_ops->end_test($msg_state, $2, $1, 0, $reason); + } elsif ($1 eq "error") { + $statistics->{TESTS_ERROR}++; + delete $open_tests->{$2}; + $msg_ops->end_test($msg_state, $2, $1, 1, $reason); + } + } else { + $msg_ops->output_msg($msg_state, $_); + } + } + + foreach (keys %$open_tests) { + $msg_ops->end_test($msg_state, $_, "error", 1, + "was started but never finished!"); + $statistics->{TESTS_ERROR}++; + } + + return $expected_ret; +} + +1; diff --git a/source4/selftest/selftest.pl b/source4/selftest/selftest.pl index 3abdd641c9..de7e5c4dbc 100755 --- a/source4/selftest/selftest.pl +++ b/source4/selftest/selftest.pl @@ -114,6 +114,7 @@ use Getopt::Long; use POSIX; use Cwd qw(abs_path); use lib "$RealBin"; +use Subunit qw(parse_results); use env::Samba3; use env::Samba4; use env::Windows; @@ -212,71 +213,6 @@ sub cleanup_pcap($$$) $state->{PCAP_FILE} = undef; } -sub parse_subunit_results($$$$) -{ - my ($msg_ops, $msg_state, $statistics, $fh) = @_; - my $expected_ret = 1; - my $open_tests = {}; - - while(<$fh>) { - if (/^test: (.+)\n/) { - $msg_ops->control_msg($msg_state, $_); - $open_tests->{$1} = 1; - $msg_ops->start_test($msg_state, $1); - } elsif (/^(success|failure|skip|error): (.*?)( \[)?([ \t]*)\n/) { - $msg_ops->control_msg($msg_state, $_); - my $reason = undef; - if ($3) { - $reason = ""; - # reason may be specified in next lines - while(<$fh>) { - $msg_ops->control_msg($msg_state, $_); - if ($_ eq "]\n") { last; } else { $reason .= $_; } - } - } - my $result = $1; - if ($1 eq "success") { - delete $open_tests->{$2}; - if (expecting_failure("$msg_state->{NAME}/$2")) { - $statistics->{TESTS_UNEXPECTED_OK}++; - $msg_ops->end_test($msg_state, $2, $1, 1, $reason); - } else { - $statistics->{TESTS_EXPECTED_OK}++; - $msg_ops->end_test($msg_state, $2, $1, 0, $reason); - } - } elsif ($1 eq "failure") { - delete $open_tests->{$2}; - if (expecting_failure("$msg_state->{NAME}/$2")) { - $statistics->{TESTS_EXPECTED_FAIL}++; - $msg_ops->end_test($msg_state, $2, $1, 0, $reason); - $expected_ret = 0; - } else { - $statistics->{TESTS_UNEXPECTED_FAIL}++; - $msg_ops->end_test($msg_state, $2, $1, 1, $reason); - } - } elsif ($1 eq "skip") { - $statistics->{TESTS_SKIP}++; - delete $open_tests->{$2}; - $msg_ops->end_test($msg_state, $2, $1, 0, $reason); - } elsif ($1 eq "error") { - $statistics->{TESTS_ERROR}++; - delete $open_tests->{$2}; - $msg_ops->end_test($msg_state, $2, $1, 1, $reason); - } - } else { - $msg_ops->output_msg($msg_state, $_); - } - } - - foreach (keys %$open_tests) { - $msg_ops->end_test($msg_state, $_, "error", 1, - "was started but never finished!"); - $statistics->{TESTS_ERROR}++; - } - - return $expected_ret; -} - sub run_testsuite($$$$$$) { my ($envname, $name, $cmd, $i, $totalsuites, $msg_ops) = @_; @@ -294,8 +230,8 @@ sub run_testsuite($$$$$$) open(RESULT, "$cmd 2>&1|"); $msg_ops->start_testsuite($msg_state); - my $expected_ret = parse_subunit_results( - $msg_ops, $msg_state, $statistics, *RESULT); + my $expected_ret = parse_results( + $msg_ops, $msg_state, $statistics, *RESULT, \&expecting_failure); my $ret = close(RESULT); |