diff --git a/src/test/modules/worker_spi/t/001_worker_spi.pl b/src/test/modules/worker_spi/t/001_worker_spi.pl index 06bb73816f..178962eddb 100644 --- a/src/test/modules/worker_spi/t/001_worker_spi.pl +++ b/src/test/modules/worker_spi/t/001_worker_spi.pl @@ -105,30 +105,30 @@ postgres|myrole|WorkerSpiMain]), ) or die "Timed out while waiting for dynamic bgworkers to be launched"; # Check BGWORKER_BYPASS_ALLOWCONN. -$node->safe_psql('postgres', q(ALTER DATABASE mydb ALLOW_CONNECTIONS false;)); +$node->safe_psql('postgres', + q(CREATE DATABASE noconndb ALLOW_CONNECTIONS false;)); +my $noconndb_id = $node->safe_psql('mydb', + "SELECT oid FROM pg_database where datname = 'noconndb';"); my $log_offset = -s $node->logfile; -# bgworker cannot be launched with connection restriction. -my $worker3_pid = $node->safe_psql('postgres', - qq[SELECT worker_spi_launch(12, $mydb_id, $myrole_id);]); +# worker_spi_launch() may be able to detect that the worker has been +# stopped, so do not rely on psql_safe(). +$node->psql('postgres', + qq[SELECT worker_spi_launch(12, $noconndb_id, $myrole_id);]); $node->wait_for_log( - qr/database "mydb" is not currently accepting connections/, $log_offset); - -$result = $node->safe_psql('postgres', - "SELECT count(*) FROM pg_stat_activity WHERE pid = $worker3_pid;"); -is($result, '0', 'dynamic bgworker without BYPASS_ALLOWCONN not started'); + qr/database "noconndb" is not currently accepting connections/, + $log_offset); # bgworker bypasses the connection check, and can be launched. my $worker4_pid = $node->safe_psql('postgres', - qq[SELECT worker_spi_launch(12, $mydb_id, $myrole_id, '{"ALLOWCONN"}');]); + qq[SELECT worker_spi_launch(12, $noconndb_id, $myrole_id, '{"ALLOWCONN"}');] +); ok( $node->poll_query_until( 'postgres', qq[SELECT datname, usename, wait_event FROM pg_stat_activity WHERE backend_type = 'worker_spi dynamic' AND pid IN ($worker4_pid) ORDER BY datname;], - qq[mydb|myrole|WorkerSpiMain]), + qq[noconndb|myrole|WorkerSpiMain]), 'dynamic bgworker with BYPASS_ALLOWCONN started'); -$node->safe_psql('postgres', q(ALTER DATABASE mydb ALLOW_CONNECTIONS true;)); - done_testing();