From d3e3ea843e48375ac41ea3d0ce1e95cb7d39ea03 Mon Sep 17 00:00:00 2001 From: Ed Santiago Date: Thu, 17 Mar 2022 10:19:14 -0600 Subject: logformatter: link to bats sources on error We already link to ginkgo sources, now add links to bats. Ugly, because we need to hardcode containers/podman (git repo) and test/system (test file path): those can't be determined from the log results like they can in ginkgo. Also, great suggestion from @Luap99: in addition to the 'Annotated results' link which we append to the basic log, include a short summary of failures. This should help a viewer see exactly which test(s) failed, which in turn can be helpful for diagnosing known-flake or real-problem. Signed-off-by: Ed Santiago --- contrib/cirrus/logformatter | 19 ++++++++++++++++++- contrib/cirrus/logformatter.t | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'contrib') diff --git a/contrib/cirrus/logformatter b/contrib/cirrus/logformatter index 43173eaa6..5b8e2f2a1 100755 --- a/contrib/cirrus/logformatter +++ b/contrib/cirrus/logformatter @@ -307,10 +307,18 @@ END_HTML elsif ($line =~ /^#\s#\|\s/) { $css = 'log-esm' } elsif ($line =~ /^#\s/) { $css = 'log' } + # Link to source file. This is ugly: we have to hardcode 'podman' + # and 'test/system' because there's no way to get them from log. + # + # 1 2 2 13 4 43 5 + $line =~ s{(in(\stest)?\s+file\s+\S+/)(\S+\.(bats|bash)),\s+line\s+(\d+)}{$1$3, line $5}; + if ($css) { # Make it linkable, e.g. foo.html#t--00001 - if ($line =~ /^(not\s+)?ok\s+(\d+)/) { + if ($line =~ /^(not\s+)?ok\s+(\d+)\s+(.*)/) { $line = sprintf("%s", $2, $line); + + push @{$bats_count{__fail_list}}, [ $2, $3 ] if $1; } $line = "$line"; @@ -515,6 +523,15 @@ END_HTML } } + # Grumble. Github only shows the last N lines of the log... which is + # anti-helpful when you want a quick synopsis of what failed. Write a + # summary at the tail, to make it easier for humans to see what went wrong. + if (my $fails = $bats_count{__fail_list}) { + print "\n"; + printf "Failed tests (%d):\n", scalar(@$fails); + printf " - %d %s\n", @$_ for @$fails; + } + # If Cirrus magic envariables are available, write a link to results. # FIXME: it'd be so nice to make this a clickable live link. # diff --git a/contrib/cirrus/logformatter.t b/contrib/cirrus/logformatter.t index df8154cb9..7f5973a15 100755 --- a/contrib/cirrus/logformatter.t +++ b/contrib/cirrus/logformatter.t @@ -91,6 +91,9 @@ __END__ ok 1 hi ok 2 bye # skip no reason not ok 3 fail +# (from function `assert' in file ./helpers.bash, line 343, +# from function `expect_output' in file ./helpers.bash, line 370, +# in test file ./run.bats, line 786) # $ /path/to/podman foo -bar # #| FAIL: exit code is 123; expected 321 ok 4 blah @@ -99,6 +102,9 @@ ok 4 blah ok 1 hi ok 2 bye # skip no reason not ok 3 fail +# (from function `assert' in file ./helpers.bash, line 343, +# from function `expect_output' in file ./helpers.bash, line 370, +# in test file ./run.bats, line 786) # $ podman foo -bar # #| FAIL: exit code is 123; expected 321 ok 4 blah -- cgit v1.2.3-54-g00ecf