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 4b46b1336b..06bb73816f 100644 --- a/src/test/modules/worker_spi/t/001_worker_spi.pl +++ b/src/test/modules/worker_spi/t/001_worker_spi.pl @@ -104,4 +104,31 @@ postgres|myrole|WorkerSpiMain]), 'dynamic bgworkers all launched' ) 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;)); +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);]); +$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'); + +# 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"}');]); +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]), + 'dynamic bgworker with BYPASS_ALLOWCONN started'); + +$node->safe_psql('postgres', q(ALTER DATABASE mydb ALLOW_CONNECTIONS true;)); + done_testing();