From e080bcccd441c7e3a993ef72b7cd842ae939ecce Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Thu, 6 Mar 2025 10:38:44 -0500 Subject: [PATCH v1 2/4] tests: Add note if BackgroundPsql::wait_connect() fails Author: Reviewed-by: Discussion: https://postgr.es/m/ Backpatch: --- .../perl/PostgreSQL/Test/BackgroundPsql.pm | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm index c611a61cf4e..1deb410c133 100644 --- a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm +++ b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm @@ -154,10 +154,28 @@ sub wait_connect my $banner = "background_psql: ready"; my $banner_match = qr/(^|\n)$banner\r?\n/; $self->{stdin} .= "\\echo $banner\n\\warn $banner\n"; - $self->{run}->pump() - until ($self->{stdout} =~ /$banner_match/ - && $self->{stderr} =~ /$banner\r?\n/) - || $self->{timeout}->is_expired; + + # IPC::Run throws in case psql exits while we're pumping. To make it + # easier to diagnose that, catch the error, report stdout/stderr at time + # of death and reraise. + eval { + $self->{run}->pump() + until ($self->{stdout} =~ /$banner_match/ + && $self->{stderr} =~ /$banner\r?\n/) + || $self->{timeout}->is_expired; + }; + if ($@) + { + chomp(my $stdout = $self->{stdout}); + chomp(my $stderr = $self->{stderr}); + chomp(my $err = $@); + diag qq(psql died while connecting: + stdout: $stdout + stderr: $stderr + perl error: $err +); + die "psql died while connecting"; + } note "connect output:\n", explain { -- 2.48.1.76.g4e746b1a31.dirty