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
This commit is contained in:
parent
908a968612
commit
5735521ac2
@ -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"
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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;');
|
||||
|
@ -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';
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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.
|
||||
|
@ -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';
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user