Allow TAP tests to force checksums off when calling init()
authorPeter Eisentraut
Mon, 14 Oct 2024 08:57:54 +0000 (10:57 +0200)
committerPeter Eisentraut
Mon, 14 Oct 2024 09:25:03 +0000 (11:25 +0200)
TAP tests can write

    $node->init(no_data_checksums => 1);

to initialize a cluster explicitly without checksums.  Currently, this
is the default, but this change allows running all tests with
checksums enabled, like

    PG_TEST_INITDB_EXTRA_OPTS=--data-checksums meson test ...

And this also prepares the tests for when we switch the default to
checksums enabled.

The pg_checksums tests need to disable checksums so it can test its
own functionality of enabling checksums.  The amcheck/pg_amcheck tests
need to disable checksums because they manually introduce corruption
that they want to detect, but with checksums enabled, the checksum
verification will fail before they even get to their work.

Author: Greg Sabino Mullane 
Reviewed-by: Nathan Bossart
Reviewed-by: Peter Eisentraut
Discussion: https://www.postgresql.org/message-id/flat/CAKAnmmKwiMHik5AHmBEdf5vqzbOBbcwEPHo4-PioWeAbzwcTOQ@mail.gmail.com

contrib/amcheck/t/001_verify_heapam.pl
src/bin/pg_amcheck/t/003_check.pl
src/bin/pg_amcheck/t/004_verify_heapam.pl
src/bin/pg_checksums/t/002_actions.pl
src/test/perl/PostgreSQL/Test/Cluster.pm

index 481e4dbe4feae85c0667df1d3d10e631dfa0bf3d..ffe89b25a6382f1f807c8d56e7dddc4d03aacac9 100644 (file)
@@ -15,7 +15,7 @@ my $node;
 # Test set-up
 #
 $node = PostgreSQL::Test::Cluster->new('test');
-$node->init;
+$node->init(no_data_checksums => 1);
 $node->append_conf('postgresql.conf', 'autovacuum=off');
 $node->start;
 $node->safe_psql('postgres', q(CREATE EXTENSION amcheck));
index d99b094dba8076d6ff2a8a0d85c867c24c6af64f..2b57c4dbac15127cb568318596e81e395e7f3414 100644 (file)
@@ -120,7 +120,7 @@ sub perform_all_corruptions()
 
 # Test set-up
 $node = PostgreSQL::Test::Cluster->new('test');
-$node->init;
+$node->init(no_data_checksums => 1);
 $node->append_conf('postgresql.conf', 'autovacuum=off');
 $node->start;
 $port = $node->port;
index f6d2c5f7877d53e6836294a082b620b4b8fb670a..95fe6e6d3bdc42d9e8cd521bb882e1671bdbce93 100644 (file)
@@ -181,7 +181,7 @@ my $aborted_xid;
 # autovacuum workers visiting the table could crash the backend.
 # Disable autovacuum so that won't happen.
 my $node = PostgreSQL::Test::Cluster->new('test');
-$node->init;
+$node->init(no_data_checksums => 1);
 $node->append_conf('postgresql.conf', 'autovacuum=off');
 $node->append_conf('postgresql.conf', 'max_prepared_transactions=10');
 
index 33e7fb53c5e166284289f80f20343b3a68d63df2..df9263399091adb41d9fb748f8e89c496e819c6d 100644 (file)
@@ -88,7 +88,7 @@ sub check_relation_corruption
 
 # Initialize node with checksums disabled.
 my $node = PostgreSQL::Test::Cluster->new('node_checksum');
-$node->init();
+$node->init(no_data_checksums => 1);
 my $pgdata = $node->data_dir;
 
 # Control file should know that checksums are disabled.
index 3f133cafbd975641ce654b4ff9969ca56d13566c..110b53ba0dcff2cb3ea4925b32dadac8d131e43f 100644 (file)
@@ -586,6 +586,8 @@ On Windows, we use SSPI authentication to ensure the same (by pg_regress
 WAL archiving can be enabled on this node by passing the keyword parameter
 has_archiving => 1. This is disabled by default.
 
+Data checksums can be forced off by passing no_data_checksums => 1.
+
 postgresql.conf can be set up for replication by passing the keyword
 parameter allows_streaming => 'logical' or 'physical' (passing 1 will also
 suffice for physical replication) depending on type of replication that
@@ -618,6 +620,12 @@ sub init
        push @{ $params{extra} }, shellwords($initdb_extra_opts_env);
    }
 
+   # This should override user-supplied initdb options.
+   if ($params{no_data_checksums})
+   {
+       push @{ $params{extra} }, '--no-data-checksums';
+   }
+
    mkdir $self->backup_dir;
    mkdir $self->archive_dir;