Tighten up Windows CRLF conversion in our TAP test scripts.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 9 Jul 2020 00:25:52 +0000 (20:25 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 9 Jul 2020 00:25:52 +0000 (20:25 -0400)
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
src/test/perl/PostgresNode.pm
src/test/perl/TestLib.pm

index 149b99159d0895469091cbf4dbbf75afe56fec14..7516af7a01a64cb8d993cc78ede6e5649c1cb04e 100644 (file)
@@ -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;
index b216bbbe4bbd023ec39c0e9ff5ee92786c064e22..0914fdaa463fa54c602681ba9812eba49dff9c56 100644 (file)
@@ -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)
    {
index d579d5c177b0b5f17a5b3643f1a467460fa31315..a7490d2ce7973b145d897ee0793858ffe2c17ec8 100644 (file)
@@ -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;
 }