]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Cleanup some code related to pgbench log checks in TAP tests
authorMichael Paquier <michael@paquier.xyz>
Fri, 25 Jun 2021 11:15:39 +0000 (20:15 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 25 Jun 2021 11:15:39 +0000 (20:15 +0900)
This fixes a couple of problems within the so-said code of this commit
subject:
- Replace the use of open() with slurp_file(), fixing an issue reported
by buildfarm member fairywren whose perl installation keep around CRLF
characters, causing the matching patterns for the logs to fail.
- Remove the eval block, which is not really necessary.

This set of issues has come into light after fixing a different issue
with c13585fe, and this is wrong since this code has been introduced.

Reported-by: Andrew Dunstan, and buildfarm member fairywren
Author: Michael Paquier
Reviewed-by: Andrew Dunstan
Discussion: https://postgr.es/m/0f49303e-7784-b3ee-200b-cbf67be2eb9e@dunslane.net
Backpatch-through: 11

src/bin/pgbench/t/001_pgbench_with_server.pl

index 4308a2edd82fdb2829ac45e69f4496b9cc621345..a2dfc59218ace4500295e8a0d5129218d8c037b3 100644 (file)
@@ -834,18 +834,27 @@ sub check_pgbench_logs
        my $log_number = 0;
        for my $log (sort @logs)
        {
-               eval {
-                       open my $fh, '<', $log or die "$@";
-                       my @contents = <$fh>;
-                       my $clen     = @contents;
-                       ok( $min <= $clen && $clen <= $max,
-                               "transaction count for $log ($clen)");
-                       ok( grep(/$re/, @contents) == $clen,
-                               "transaction format for $prefix");
-                       close $fh or die "$@";
-               };
+               # Check the contents of each log file.
+               my $contents_raw = slurp_file($log);
+
+               my @contents = split(/\n/, $contents_raw);
+               my $clen     = @contents;
+               ok( $min <= $clen && $clen <= $max,
+                       "transaction count for $log ($clen)");
+               my $clen_match = grep(/$re/, @contents);
+               ok($clen_match == $clen, "transaction format for $prefix");
+
+               # Show more information if some logs don't match
+               # to help with debugging.
+               if ($clen_match != $clen)
+               {
+                       foreach my $log (@contents)
+                       {
+                               print "# Log entry not matching: $log\n"
+                                 unless $log =~ /$re/;
+                       }
+               }
        }
-       ok(unlink(@logs), "remove log files");
        return;
 }