diff options
author | Noah Misch <noah@leadboat.com> | 2017-12-16 10:03:35 -0800 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2017-12-16 10:03:35 -0800 |
commit | c757a3da0af0e5eb636eeee2af6602d279162b0a (patch) | |
tree | 24163e0234593c82df48d8573be6403019b9d0b2 | |
parent | 997071691f66dfe92e97e6b4e3d29d153317be31 (diff) | |
download | postgresql-c757a3da0af0e5eb636eeee2af6602d279162b0a.tar.gz postgresql-c757a3da0af0e5eb636eeee2af6602d279162b0a.zip |
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
-rw-r--r-- | src/test/authentication/t/001_password.pl | 3 | ||||
-rw-r--r-- | src/test/authentication/t/002_saslprep.pl | 3 | ||||
-rw-r--r-- | src/test/perl/TestLib.pm | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/src/test/authentication/t/001_password.pl b/src/test/authentication/t/001_password.pl index 2d3f674144e..9340f2f1ab4 100644 --- a/src/test/authentication/t/001_password.pl +++ b/src/test/authentication/t/001_password.pl @@ -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"); } diff --git a/src/test/authentication/t/002_saslprep.pl b/src/test/authentication/t/002_saslprep.pl index df9f85d6a9f..e09273edd46 100644 --- a/src/test/authentication/t/002_saslprep.pl +++ b/src/test/authentication/t/002_saslprep.pl @@ -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" ); diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index d1a2eb58837..60190400de0 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -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. |