]> granicus.if.org Git - postgresql/commitdiff
Avoid and detect SIGPIPE race in TAP tests.
authorNoah Misch <noah@leadboat.com>
Sat, 16 Dec 2017 18:03:35 +0000 (10:03 -0800)
committerNoah Misch <noah@leadboat.com>
Sat, 16 Dec 2017 18:03:35 +0000 (10:03 -0800)
Don't write to stdin of a psql process that could have already exited
with an authentication failure.  Buildfarm members crake and mandrill
have failed once by doing so.  Ignore SIGPIPE in all TAP tests.
Back-patch to v10, where these tests were introduced.

Reviewed by Michael Paquier.

Discussion: https://postgr.es/m/20171209210203.GC3362632@rfd.leadboat.com

src/test/authentication/t/001_password.pl
src/test/authentication/t/002_saslprep.pl
src/test/perl/TestLib.pm

index 2d3f674144ef5639237eff5202d74c89a8445e33..9340f2f1ab4e4a56e24ec7fe790b1bcd20326b37 100644 (file)
@@ -44,8 +44,7 @@ sub test_role
 
        $status_string = 'success' if ($expected_res eq 0);
 
-       my $res =
-         $node->psql('postgres', 'SELECT 1', extra_params => [ '-U', $role ]);
+       my $res = $node->psql('postgres', undef, extra_params => [ '-U', $role ]);
        is($res, $expected_res,
                "authentication $status_string for method $method, role $role");
 }
index df9f85d6a9f9270e8867a1f707d7554aae9e4380..e09273edd4663b7f6613d1b8f7a36fbedbfeedd5 100644 (file)
@@ -41,8 +41,7 @@ sub test_login
        $status_string = 'success' if ($expected_res eq 0);
 
        $ENV{"PGPASSWORD"} = $password;
-       my $res =
-         $node->psql('postgres', 'SELECT 1', extra_params => [ '-U', $role ]);
+       my $res = $node->psql('postgres', undef, extra_params => [ '-U', $role ]);
        is($res, $expected_res,
                "authentication $status_string for role $role with password $password"
        );
index d1a2eb58837c151f497dae8159e651877035e005..60190400de0495509e7cd259673244df383f39ca 100644 (file)
@@ -75,6 +75,10 @@ BEGIN
 INIT
 {
 
+       # Return EPIPE instead of killing the process with SIGPIPE.  An affected
+       # test may still fail, but it's more likely to report useful facts.
+       $SIG{PIPE} = 'IGNORE';
+
        # Determine output directories, and create them.  The base path is the
        # TESTDIR environment variable, which is normally set by the invoking
        # Makefile.