diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-11-06 15:31:14 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-11-06 15:31:14 +0900 |
commit | ba08edb065459fca62191c020362022efd42b522 (patch) | |
tree | 4de15373ed1d8be6bab5d1d1dc67c0004cf9d042 /src/test/perl/PostgreSQL/Test/BackgroundPsql.pm | |
parent | 87f81a55632107006e5006a2d0bc5272ebaeca64 (diff) | |
download | postgresql-ba08edb065459fca62191c020362022efd42b522.tar.gz postgresql-ba08edb065459fca62191c020362022efd42b522.zip |
Extend Cluster.pm's background_psql() to be able to start asynchronously
This commit extends the constructor routine of BackgroundPsql.pm with a
new "wait" parameter. If set to 0, the routine returns without waiting
for psql to start, ready to consume input.
background_psql() in Cluster.pm gains the same "wait" parameter. The
default behavior is still to wait for psql to start. It becomes now
possible to not wait, giving to TAP scripts the possibility to perform
actions between a BackgroundPsql startup and its wait_connect() call.
Author: Jacob Champion
Discussion: https://postgr.es/m/CAOYmi+=60deN20WDyCoHCiecgivJxr=98s7s7-C8SkXwrCfHXg@mail.gmail.com
Diffstat (limited to 'src/test/perl/PostgreSQL/Test/BackgroundPsql.pm')
-rw-r--r-- | src/test/perl/PostgreSQL/Test/BackgroundPsql.pm | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm index 3c2aca1c5d7..c7a3d3e920d 100644 --- a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm +++ b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm @@ -68,7 +68,7 @@ use Test::More; =over -=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout) +=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout, wait) Builds a new object of class C<PostgreSQL::Test::BackgroundPsql> for either an interactive or background session and starts it. If C<interactive> is @@ -76,12 +76,15 @@ true then a PTY will be attached. C<psql_params> should contain the full command to run psql with all desired parameters and a complete connection string. For C<interactive> sessions, IO::Pty is required. +This routine will not return until psql has started up and is ready to +consume input. Set B<wait> to 0 to return immediately instead. + =cut sub new { my $class = shift; - my ($interactive, $psql_params, $timeout) = @_; + my ($interactive, $psql_params, $timeout, $wait) = @_; my $psql = { 'stdin' => '', 'stdout' => '', @@ -119,14 +122,25 @@ sub new my $self = bless $psql, $class; - $self->_wait_connect(); + $wait = 1 unless defined($wait); + if ($wait) + { + $self->wait_connect(); + } return $self; } -# Internal routine for awaiting psql starting up and being ready to consume -# input. -sub _wait_connect +=pod + +=item $session->wait_connect + +Returns once psql has started up and is ready to consume input. This is called +automatically for clients unless requested otherwise in the constructor. + +=cut + +sub wait_connect { my ($self) = @_; @@ -187,7 +201,7 @@ sub reconnect_and_clear $self->{stdin} = ''; $self->{stdout} = ''; - $self->_wait_connect(); + $self->wait_connect(); } =pod |