diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-09-05 13:29:43 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-09-05 13:29:43 +0900 |
commit | 5735521ac2d52485bca673039ba43e2b8cc71cd4 (patch) | |
tree | 3371db7b444fb56ba14963d2e4f258790dfe73d2 /src | |
parent | 908a968612f9ed61911d8ca0a185b262b82f1269 (diff) | |
download | postgresql-5735521ac2d52485bca673039ba43e2b8cc71cd4.tar.gz postgresql-5735521ac2d52485bca673039ba43e2b8cc71cd4.zip |
Check availability of module injection_points in TAP tests
This fixes defects with installcheck for TAP tests that expect the
module injection_points to exist in an installation, but the contents of
src/test/modules are not installed by default with installcheck. This
would cause, for example, failures under installcheck-world for a build
with injection points enabled, when the contents of src/test/modules/
are not installed.
The availability of the module can be done with a scan of
pg_available_extension. This has been introduced in 2cdcae9da696, and
it is refactored here as a new routine in Cluster.pm.
Tests are changed in different ways depending on what they need:
- The libpq TAP test sets up a node even without injection points, so it
is enough to check that CREATE EXTENSION can be used. There is no need
for the variable enable_injection_points.
- In test_misc, 006_signal_autovacuum requires a runtime check.
- 041_checkpoint_at_promote in recovery tests and 005_timeouts in
test_misc are updated to use the routine introduced in Cluster.pm.
- test_slru's 001_multixact, injection_points's 001_stats and
modules/gin/ do not require a check as these modules disable
installcheck entirely.
Discussion: https://postgr.es/m/ZtesYQ-WupeAK7xK@paquier.xyz
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/libpq/Makefile | 2 | ||||
-rw-r--r-- | src/interfaces/libpq/meson.build | 1 | ||||
-rw-r--r-- | src/interfaces/libpq/t/005_negotiate_encryption.pl | 7 | ||||
-rw-r--r-- | src/test/modules/test_misc/t/005_timeouts.pl | 5 | ||||
-rw-r--r-- | src/test/modules/test_misc/t/006_signal_autovacuum.pl | 9 | ||||
-rw-r--r-- | src/test/perl/PostgreSQL/Test/Cluster.pm | 22 | ||||
-rw-r--r-- | src/test/recovery/t/041_checkpoint_at_promote.pl | 5 |
7 files changed, 39 insertions, 12 deletions
diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index 27f8499d8a7..c1bf33dbdc7 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -15,7 +15,7 @@ subdir = src/interfaces/libpq top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -export with_ssl with_gssapi with_krb_srvnam enable_injection_points +export with_ssl with_gssapi with_krb_srvnam PGFILEDESC = "PostgreSQL Access Library" diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build index 7623aeadab7..ed2a4048d18 100644 --- a/src/interfaces/libpq/meson.build +++ b/src/interfaces/libpq/meson.build @@ -121,7 +121,6 @@ tests += { 't/005_negotiate_encryption.pl', ], 'env': { - 'enable_injection_points': get_option('injection_points') ? 'yes' : 'no', 'with_ssl': ssl_library, 'with_gssapi': gssapi.found() ? 'yes' : 'no', 'with_krb_srvnam': 'postgres', diff --git a/src/interfaces/libpq/t/005_negotiate_encryption.pl b/src/interfaces/libpq/t/005_negotiate_encryption.pl index 73f0056f10c..06d67de2db1 100644 --- a/src/interfaces/libpq/t/005_negotiate_encryption.pl +++ b/src/interfaces/libpq/t/005_negotiate_encryption.pl @@ -90,8 +90,6 @@ my $kerberos_enabled = $ENV{PG_TEST_EXTRA} && $ENV{PG_TEST_EXTRA} =~ /\bkerberos\b/; my $ssl_supported = $ENV{with_ssl} eq 'openssl'; -my $injection_points_supported = $ENV{enable_injection_points} eq 'yes'; - ### ### Prepare test server for GSSAPI and SSL authentication, with a few ### different test users and helper functions. We don't actually @@ -151,6 +149,11 @@ if ($ssl_supported != 0) $node->start; +# Check if the extension injection_points is available, as it may be +# possible that this script is run with installcheck, where the module +# would not be installed by default. +my $injection_points_supported = $node->check_extension('injection_points'); + $node->safe_psql('postgres', 'CREATE USER localuser;'); $node->safe_psql('postgres', 'CREATE USER testuser;'); $node->safe_psql('postgres', 'CREATE USER ssluser;'); diff --git a/src/test/modules/test_misc/t/005_timeouts.pl b/src/test/modules/test_misc/t/005_timeouts.pl index 53e44016e3a..d9b72191216 100644 --- a/src/test/modules/test_misc/t/005_timeouts.pl +++ b/src/test/modules/test_misc/t/005_timeouts.pl @@ -28,10 +28,7 @@ $node->start; # Check if the extension injection_points is available, as it may be # possible that this script is run with installcheck, where the module # would not be installed by default. -my $result = $node->safe_psql('postgres', - "SELECT count(*) > 0 FROM pg_available_extensions WHERE name = 'injection_points';" -); -if ($result eq 'f') +if (!$node->check_extension('injection_points')) { plan skip_all => 'Extension injection_points not installed'; } diff --git a/src/test/modules/test_misc/t/006_signal_autovacuum.pl b/src/test/modules/test_misc/t/006_signal_autovacuum.pl index 929253f7542..aaea569c101 100644 --- a/src/test/modules/test_misc/t/006_signal_autovacuum.pl +++ b/src/test/modules/test_misc/t/006_signal_autovacuum.pl @@ -25,6 +25,15 @@ $node->init; # This ensures a quick worker spawn. $node->append_conf('postgresql.conf', 'autovacuum_naptime = 1'); $node->start; + +# Check if the extension injection_points is available, as it may be +# possible that this script is run with installcheck, where the module +# would not be installed by default. +if (!$node->check_extension('injection_points')) +{ + plan skip_all => 'Extension injection_points not installed'; +} + $node->safe_psql('postgres', 'CREATE EXTENSION injection_points;'); $node->safe_psql( diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index fe6ebf10f76..143dc8c1015 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -2837,6 +2837,28 @@ sub lsn =pod +=item $node->check_extension(extension_name) + +Scan pg_available_extensions to check that an extension is available in an +installation. + +Returns 1 if the extension is available, 0 otherwise. + +=cut + +sub check_extension +{ + my ($self, $extension_name) = @_; + + my $result = $self->safe_psql('postgres', + "SELECT count(*) > 0 FROM pg_available_extensions WHERE name = '$extension_name';" + ); + + return $result eq 't' ? 1 : 0; +} + +=pod + =item $node->wait_for_event(wait_event_name, backend_type) Poll pg_stat_activity until backend_type reaches wait_event_name. diff --git a/src/test/recovery/t/041_checkpoint_at_promote.pl b/src/test/recovery/t/041_checkpoint_at_promote.pl index 905662353da..3c21d18e3af 100644 --- a/src/test/recovery/t/041_checkpoint_at_promote.pl +++ b/src/test/recovery/t/041_checkpoint_at_promote.pl @@ -38,10 +38,7 @@ $node_primary->start; # Check if the extension injection_points is available, as it may be # possible that this script is run with installcheck, where the module # would not be installed by default. -my $result = $node_primary->safe_psql('postgres', - "SELECT count(*) > 0 FROM pg_available_extensions WHERE name = 'injection_points';" -); -if ($result eq 'f') +if (!$node_primary->check_extension('injection_points')) { plan skip_all => 'Extension injection_points not installed'; } |