diff options
author | Ed Santiago <santiago@redhat.com> | 2020-04-17 08:00:17 -0600 |
---|---|---|
committer | Ed Santiago <santiago@redhat.com> | 2020-04-17 08:12:09 -0600 |
commit | 1be8a34f5e86c3174681f2a5ffa7bdca176a1137 (patch) | |
tree | 295f26a13055deb6f9a460df9de65766926aedea /contrib/cirrus/logformatter | |
parent | d31dcb9bbd521fe8e3e78b0ebe2a893634ab2e6b (diff) | |
download | podman-1be8a34f5e86c3174681f2a5ffa7bdca176a1137.tar.gz podman-1be8a34f5e86c3174681f2a5ffa7bdca176a1137.tar.bz2 podman-1be8a34f5e86c3174681f2a5ffa7bdca176a1137.zip |
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 <santiago@redhat.com>
Diffstat (limited to 'contrib/cirrus/logformatter')
-rwxr-xr-x | contrib/cirrus/logformatter | 47 |
1 files changed, 38 insertions, 9 deletions
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); </script> </head> <body> -<pre> +<pre> <!-- begin processed output --> 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("<a name='t--%05d'>%s</a>", $2, $line); } $line = "<span class='bats-$css'>$line</span>"; + + $bats_count{$css}++; } print { $out_fh } "<span class=\"timestamp\">$timestamp</span>" @@ -354,7 +360,30 @@ END_HTML my $have_formatted_log; # Set on success if ($out_fh) { - print { $out_fh } "</pre>\n"; + # Summary line for BATS tests + if (keys %bats_count) { + print { $out_fh } "<hr/><span class='bats-summary'>Summary:"; + my $total = 0; + my $comma = ''; + for my $class (qw(passed failed skipped)) { + if (my $n = $bats_count{$class}) { + printf { $out_fh } "%s <span class='bats-%s'>%d %s</span>", + $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 } " <span class='bats-failed'>(WARNING: expected $expected_total)</span>"; + } + } + print { $out_fh } "</span>\n"; + } + + print { $out_fh } "</pre> <!-- end processed output -->\n"; # Did we find a cirrus task? Link back. if ($cirrus_task) { |