r24338: Add callbacks for starting and finishing tests.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 11 Aug 2007 22:14:07 +0000 (22:14 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 20:01:40 +0000 (15:01 -0500)
(This used to be commit 824833b59a1c9c829cea4e5c4bfd2387b1bc7a2f)

source4/selftest/selftest.pl
source4/selftest/subunit-summary [moved from source4/script/subunit-summary with 100% similarity]

index 6e952dcb2b59f841369b2e531450ecc6a21c4420..9d4426a6e31080cfa2963cc77d0ddb9a98dedac1 100755 (executable)
@@ -183,7 +183,7 @@ sub getlog_env($);
 
 my $test_output = {};
 
-sub buildfarm_start_msg($)
+sub buildfarm_start_testsuite($)
 {
        my ($state) = @_;
        my $out = "";
@@ -208,7 +208,7 @@ sub buildfarm_output_msg($$)
        $test_output->{$state->{NAME}} .= $output;
 }
 
-sub buildfarm_end_msg($$$)
+sub buildfarm_end_testsuite($$$)
 {
        my ($state, $expected_ret, $ret) = @_;
        my $out = "";
@@ -237,15 +237,27 @@ sub buildfarm_end_msg($$$)
        print $out;
 }
 
+sub buildfarm_start_test($$)
+{
+       my ($state, $testname) = @_;
+}
+
+sub buildfarm_end_test($$$$)
+{
+       my ($state, $testname, $result, $expected) = @_;
+}
+
 my $buildfarm_msg_ops = {
-       start_msg       => \&buildfarm_start_msg,
+       start_testsuite => \&buildfarm_start_testsuite,
        output_msg      => \&buildfarm_output_msg,
-       end_msg         => \&buildfarm_end_msg
+       end_testsuite           => \&buildfarm_end_testsuite,
+       start_test => \&buildfarm_start_test,
+       end_test => \&buildfarm_end_test,
 };
 
 sub plain_output_msg($$);
 
-sub plain_start_msg($)
+sub plain_start_testsuite($)
 {
        my ($state) = @_;
        my $out = "";
@@ -272,7 +284,7 @@ sub plain_output_msg($$)
        }
 }
 
-sub plain_end_msg($$$)
+sub plain_end_testsuite($$$)
 {
        my ($state, $expected_ret, $ret) = @_;
        my $out = "";
@@ -294,10 +306,22 @@ sub plain_end_msg($$$)
        print $out;
 }
 
+sub plain_start_test($$)
+{
+       my ($state, $testname) = @_;
+}
+
+sub plain_end_test($$$$)
+{
+       my ($state, $testname, $result, $expected) = @_;
+}
+
 my $plain_msg_ops = {
-       start_msg       => \&plain_start_msg,
+       start_testsuite => \&plain_start_testsuite,
        output_msg      => \&plain_output_msg,
-       end_msg         => \&plain_end_msg
+       end_testsuite           => \&plain_end_testsuite,
+       start_test => \&plain_start_test,
+       end_test => \&plain_end_test,
 };
 
 sub setup_pcap($)
@@ -344,48 +368,57 @@ sub run_test($$$$$$)
 
        setup_pcap($msg_state);
 
-       $msg_ops->{start_msg}->($msg_state);
+       $msg_ops->{start_testsuite}->($msg_state);
 
        open(RESULT, "$cmd 2>&1|");
        while (<RESULT>) {
                $msg_ops->{output_msg}->($msg_state, $_);
                if (/^test: (.+)\n/) {
                        $open_tests->{$1} = 1;
+                       $msg_ops->{start_test}->($msg_state, $1);
                } elsif (/^(success|failure|skip|error): (.*?)( \[)?\n/) {
                        my $result = $1;
                        if ($1 eq "success") {
                                delete $open_tests->{$2};
                                if (expecting_failure("$name/$2")) {
                                        $statistics->{TESTS_UNEXPECTED_OK}++;
+                                       $msg_ops->{end_test}->($msg_state, $2, $1, 1);
                                } else {
                                        $statistics->{TESTS_EXPECTED_OK}++;
+                                       $msg_ops->{end_test}->($msg_state, $2, $1, 0);
                                }
                        } elsif ($1 eq "failure") {
                                delete $open_tests->{$2};
                                if (expecting_failure("$name/$2")) {
                                        $statistics->{TESTS_EXPECTED_FAIL}++;
+                                       $msg_ops->{end_test}->($msg_state, $2, $1, 0);
                                        $expected_ret = 0;
                                } else {
                                        print "n:$name/$2\n";
                                        $statistics->{TESTS_UNEXPECTED_FAIL}++;
+                                       $msg_ops->{end_test}->($msg_state, $2, $1, 1);
                                }
                        } elsif ($1 eq "skip") {
                                delete $open_tests->{$2};
+                               $msg_ops->{end_test}->($msg_state, $2, $1, 0);
                        } elsif ($1 eq "error") {
                                $statistics->{TESTS_ERROR}++;
                                delete $open_tests->{$2};
+                               $msg_ops->{end_test}->($msg_state, $2, $1, 1);
                        }
                }
        }
+
        foreach (keys %$open_tests) {
-               $msg_ops->{output_msg}->($msg_state, "$_ was started but never finished!\n");
+               $msg_ops->{end_test}->($msg_state, $_, "error", 1);
+               $msg_ops->{output_msg}->($msg_state, "$_ was started but never finished!");
                $statistics->{TESTS_ERROR}++;
        }
        my $ret = close(RESULT);
 
        cleanup_pcap($msg_state,  $expected_ret, $ret);
 
-       $msg_ops->{end_msg}->($msg_state, $expected_ret, $ret);
+       $msg_ops->{end_testsuite}->($msg_state, $expected_ret, $ret);
 
        if ($ret != $expected_ret) {
                push(@$suitesfailed, $name);