Commit c757a3da authored by Noah Misch's avatar Noah Misch

Avoid and detect SIGPIPE race in TAP tests.

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
parent 99707169
...@@ -44,8 +44,7 @@ sub test_role ...@@ -44,8 +44,7 @@ sub test_role
$status_string = 'success' if ($expected_res eq 0); $status_string = 'success' if ($expected_res eq 0);
my $res = my $res = $node->psql('postgres', undef, extra_params => [ '-U', $role ]);
$node->psql('postgres', 'SELECT 1', extra_params => [ '-U', $role ]);
is($res, $expected_res, is($res, $expected_res,
"authentication $status_string for method $method, role $role"); "authentication $status_string for method $method, role $role");
} }
......
...@@ -41,8 +41,7 @@ sub test_login ...@@ -41,8 +41,7 @@ sub test_login
$status_string = 'success' if ($expected_res eq 0); $status_string = 'success' if ($expected_res eq 0);
$ENV{"PGPASSWORD"} = $password; $ENV{"PGPASSWORD"} = $password;
my $res = my $res = $node->psql('postgres', undef, extra_params => [ '-U', $role ]);
$node->psql('postgres', 'SELECT 1', extra_params => [ '-U', $role ]);
is($res, $expected_res, is($res, $expected_res,
"authentication $status_string for role $role with password $password" "authentication $status_string for role $role with password $password"
); );
......
...@@ -75,6 +75,10 @@ BEGIN ...@@ -75,6 +75,10 @@ BEGIN
INIT 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 # Determine output directories, and create them. The base path is the
# TESTDIR environment variable, which is normally set by the invoking # TESTDIR environment variable, which is normally set by the invoking
# Makefile. # Makefile.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment