From 0d91c52a8fc71bfe5664a13368e42e1dabc5fe78 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 22 Sep 2021 08:42:42 +0900 Subject: [PATCH] Fix places in TestLib.pm in need of adaptation to the output of Msys perl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contrary to the output of native perl, Msys perl generates outputs with CRLFs characters. There are already places in the TAP code where CRLFs (\r\n) are automatically converted to LF (\n) on Msys, but we missed a couple of places when running commands and using their output for comparison, that would lead to failures. This problem has been found thanks to the test added in 5adb067 using TestLib::command_checks_all(), but after a closer look more code paths were missing a filter. This is backpatched all the way down to prevent any surprises if a new test is introduced in stable branches. Reviewed-by: Andrew Dunstan, Álvaro Herrera Discussion: https://postgr.es/m/1252480.1631829409@sss.pgh.pa.us Backpatch-through: 9.6 --- src/test/perl/TestLib.pm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index cbab1587cc2..15f4e6f56e3 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -434,6 +434,7 @@ sub run_command my ($cmd) = @_; my ($stdout, $stderr); my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; + foreach ($stderr, $stdout) { s/\r\n/\n/g if $Config{osname} eq 'msys'; } chomp($stdout); chomp($stderr); return ($stdout, $stderr); @@ -878,6 +879,7 @@ sub command_like my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; ok($result, "$test_name: exit code 0"); is($stderr, '', "$test_name: no stderr"); + $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; like($stdout, $expected_stdout, "$test_name: matches"); return; } @@ -930,6 +932,7 @@ sub command_fails_like print("# Running: " . join(" ", @{$cmd}) . "\n"); my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; ok(!$result, "$test_name: exit code not 0"); + $stderr =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; like($stderr, $expected_stderr, "$test_name: matches"); return; } @@ -974,6 +977,8 @@ sub command_checks_all if $ret & 127; $ret = $ret >> 8; + foreach ($stderr, $stdout) { s/\r\n/\n/g if $Config{osname} eq 'msys'; } + # check status ok($ret == $expected_ret, "$test_name status (got $ret vs expected $expected_ret)");