From 1be8a34f5e86c3174681f2a5ffa7bdca176a1137 Mon Sep 17 00:00:00 2001 From: Ed Santiago Date: Fri, 17 Apr 2020 08:00:17 -0600 Subject: Log formatter: add BATS summary line BATS emits a summary line (number of tests passed/failed)... but only on a tty or when run with --pretty! In our CI context, with TAP output, it gives no end summary. Fix that. Keep track of 'ok', 'not ok', and 'skipped', and display the counts at the end. Also: add a regression test. You don't need to review or even read it: it's stark, and I'm not even enabling it for CI because it almost certainly won't run due to missing Perl library modules. It's just something I need on my end. Signed-off-by: Ed Santiago --- contrib/cirrus/logformatter | 47 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) (limited to 'contrib/cirrus/logformatter') diff --git a/contrib/cirrus/logformatter b/contrib/cirrus/logformatter index 738d2e19d..4bfe7b97f 100755 --- a/contrib/cirrus/logformatter +++ b/contrib/cirrus/logformatter @@ -52,12 +52,14 @@ a.codelink:hover { background: #000; color: #999; } a.timing { text-decoration: none; } /* BATS styles */ -.bats-ok { color: #393; } -.bats-notok { color: #F00; font-weight: bold; } -.bats-skip { color: #F90; } +.bats-passed { color: #393; } +.bats-failed { color: #F00; font-weight: bold; } +.bats-skipped { color: #F90; } .bats-log { color: #900; } .bats-log-esm { color: #b00; font-weight: bold; } +.bats-summary { font-size: 150%; } + /* error titles: display next to timestamp, not on separate line */ h2 { display: inline; } END_CSS @@ -169,7 +171,7 @@ window.addEventListener("load", scrollToBottom, false); -
+
 
 END_HTML
 
     # State variables
@@ -181,6 +183,7 @@ END_HTML
     my $after_divider = 0;        # Count of lines after seeing '-----'
     my $current_output;           # for removing duplication
     my $looks_like_bats;          # binary flag: for detecting BATS results
+    my %bats_count;               # For summary line: count of pass/fail/skip
 
     # Main loop: read input, one line at a time, and write out reformatted
   LINE:
@@ -221,15 +224,16 @@ END_HTML
         }
 
         # BATS handling (used also for apiv2 tests, which emit TAP output)
-        if ($line =~ /^1\.\.\d+$/ || $line =~ m!/test-apiv2!) {
+        if ($line =~ /^1\.\.(\d+)$/ || $line =~ m!/test-apiv2!) {
             $looks_like_bats = 1;
+            $bats_count{expected_total} = $1;
         }
         if ($looks_like_bats) {
             my $css;
 
-            if    ($line =~ /^ok\s.*\s# skip/) { $css = 'skip'    }
-            elsif ($line =~ /^ok\s/)           { $css = 'ok'      }
-            elsif ($line =~ /^not\s+ok\s/)     { $css = 'notok'   }
+            if    ($line =~ /^ok\s.*\s# skip/) { $css = 'skipped' }
+            elsif ($line =~ /^ok\s/)           { $css = 'passed'  }
+            elsif ($line =~ /^not\s+ok\s/)     { $css = 'failed'  }
             elsif ($line =~ /^#\s#\|\s/)       { $css = 'log-esm' }
             elsif ($line =~ /^#\s/)            { $css = 'log'     }
 
@@ -239,6 +243,8 @@ END_HTML
                     $line = sprintf("%s", $2, $line);
                 }
                 $line = "$line";
+
+                $bats_count{$css}++;
             }
 
             print { $out_fh } "$timestamp"
@@ -354,7 +360,30 @@ END_HTML
     my $have_formatted_log;     # Set on success
 
     if ($out_fh) {
-        print { $out_fh } "
\n"; + # Summary line for BATS tests + if (keys %bats_count) { + print { $out_fh } "
Summary:"; + my $total = 0; + my $comma = ''; + for my $class (qw(passed failed skipped)) { + if (my $n = $bats_count{$class}) { + printf { $out_fh } "%s %d %s", + $comma, $class, $n, ucfirst($class); + $total += $n; + $comma = ','; + } + } + + printf { $out_fh } ". Total tests: $total"; + if (my $expected_total = $bats_count{expected_total}) { + if ($total != $expected_total) { + print { $out_fh } " (WARNING: expected $expected_total)"; + } + } + print { $out_fh } "\n"; + } + + print { $out_fh } "
\n"; # Did we find a cirrus task? Link back. if ($cirrus_task) { -- cgit v1.2.3-54-g00ecf