From 91bdf499b37b0bbef34e2bab5cc40dde52bda52c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 8 Jul 2020 20:25:52 -0400 Subject: [PATCH] Tighten up Windows CRLF conversion in our TAP test scripts. The previous approach was to search-and-destroy all \r occurrences no matter what. That seems more likely to hide bugs than anything else; indeed it seems to be hiding one now. Fix things so that we only transform \r\n to \n. Side effects: must do this before, not after, chomp'ing if we're going to chomp, else we'd fail to clean up a trailing \r\n. Also, remove safe_psql's redundant repetition of what psql already did; else it might reduce \r\r\n to \n, which is exactly the scenario I'm hoping to expose. Perhaps this should be back-patched, but for now I'm content to see what happens in HEAD. Discussion: https://postgr.es/m/412ae8da-76bb-640f-039a-f3513499e53d@gmx.net --- src/bin/pg_rewind/t/RewindTest.pm | 2 +- src/test/perl/PostgresNode.pm | 13 ++++++------- src/test/perl/TestLib.pm | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/bin/pg_rewind/t/RewindTest.pm b/src/bin/pg_rewind/t/RewindTest.pm index 149b99159d..7516af7a01 100644 --- a/src/bin/pg_rewind/t/RewindTest.pm +++ b/src/bin/pg_rewind/t/RewindTest.pm @@ -112,7 +112,7 @@ sub check_query } else { - $stdout =~ s/\r//g if $Config{osname} eq 'msys'; + $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; is($stdout, $expected_stdout, "$test_name: query result matches"); } return; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index b216bbbe4b..0914fdaa46 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1324,7 +1324,6 @@ sub safe_psql print "\n#### End standard error\n"; } - $stdout =~ s/\r//g if $TestLib::windows_os; return $stdout; } @@ -1515,14 +1514,14 @@ sub psql if (defined $$stdout) { + $$stdout =~ s/\r\n/\n/g if $TestLib::windows_os; chomp $$stdout; - $$stdout =~ s/\r//g if $TestLib::windows_os; } if (defined $$stderr) { + $$stderr =~ s/\r\n/\n/g if $TestLib::windows_os; chomp $$stderr; - $$stderr =~ s/\r//g if $TestLib::windows_os; } # See http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR @@ -1652,8 +1651,8 @@ sub poll_query_until { my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; + $stdout =~ s/\r\n/\n/g if $TestLib::windows_os; chomp($stdout); - $stdout =~ s/\r//g if $TestLib::windows_os; if ($stdout eq $expected) { @@ -1668,8 +1667,8 @@ sub poll_query_until # The query result didn't change in 180 seconds. Give up. Print the # output from the last attempt, hopefully that's useful for debugging. + $stderr =~ s/\r\n/\n/g if $TestLib::windows_os; chomp($stderr); - $stderr =~ s/\r//g if $TestLib::windows_os; diag qq(poll_query_until timed out executing this query: $query expecting this output: @@ -2113,8 +2112,8 @@ sub pg_recvlogical_upto } }; - $stdout =~ s/\r//g if $TestLib::windows_os; - $stderr =~ s/\r//g if $TestLib::windows_os; + $stdout =~ s/\r\n/\n/g if $TestLib::windows_os; + $stderr =~ s/\r\n/\n/g if $TestLib::windows_os; if (wantarray) { diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index d579d5c177..a7490d2ce7 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -430,7 +430,7 @@ sub slurp_file CloseHandle($fHandle) or die "could not close \"$filename\": $^E\n"; } - $contents =~ s/\r//g if $Config{osname} eq 'msys'; + $contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; return $contents; }