Avoid installcheck failure in TAP tests using injection_points
authorMichael Paquier <michael@paquier.xyz>
Tue, 3 Sep 2024 23:56:23 +0000 (08:56 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 3 Sep 2024 23:56:23 +0000 (08:56 +0900)
These tests depend on the test module injection_points to be installed,
but it may not be available as the contents of src/test/modules/ are not
installed by default.

This commit adds a workaround based on a scan of pg_available_extensions
to check if the extension is available, skipping the test if it is not.
This allows installcheck to work transparently.

There are more tests impacted by this problem on HEAD, but for now this
addresses only the tests that exist on HEAD and v17 as the release is
close by.

Reported-by: Maxim Orlov
Discussion: https://postgr.es/m/CACG=ezZkoT-pFz6a9XnyToiuR-Wg8fGELqHLoyBodr+2h-77qA@mail.gmail.com
Backpatch-through: 17

src/test/modules/test_misc/t/005_timeouts.pl
src/test/recovery/t/041_checkpoint_at_promote.pl

index 9e1ff9e5c1c66e807b1a49b1bbcae556596650a2..53e44016e3ae879d16dd99209c23ce2a898e063d 100644 (file)
@@ -24,6 +24,18 @@ if ($ENV{enable_injection_points} ne 'yes')
 my $node = PostgreSQL::Test::Cluster->new('master');
 $node->init();
 $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')
+{
+   plan skip_all => 'Extension injection_points not installed';
+}
+
 $node->safe_psql('postgres', 'CREATE EXTENSION injection_points;');
 
 #
index 5aa05b456ca22ebe41d96b17278c8e33710567cf..905662353da966ab269dd61577cc41ebd1caf2af 100644 (file)
@@ -35,6 +35,17 @@ restart_after_crash = on
 ]);
 $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')
+{
+   plan skip_all => 'Extension injection_points not installed';
+}
+
 my $backup_name = 'my_backup';
 $node_primary->backup($backup_name);