On Thu, Aug 30, 2018 at 09:35:33PM +0200, Magnus Hagander wrote: > Should we make it a separate test in pg_verify_checksums, or should we > piggyback on the pg_basebackup tests (which AFAICT is the only ones that > create a cluster with checksums enabled at all, and thus is the only > codepath that actually uses the backend checksum code at all, which I think > is an even worse thing to have no tests of)
This should be a separate suite. And FWIW, we only use pg_regress to make sure that an already-initialized data folder has the correct, secure authentication set. So creating a node with checksums enabled is just that: $node->init(extra => ['--data-checksums']); [... 20 minutes later ...] Attached is a basic test suite ;) -- Michael
diff --git a/src/bin/pg_verify_checksums/.gitignore b/src/bin/pg_verify_checksums/.gitignore index d1dcdaf0dd..0e5e569a54 100644 --- a/src/bin/pg_verify_checksums/.gitignore +++ b/src/bin/pg_verify_checksums/.gitignore @@ -1 +1,3 @@ /pg_verify_checksums + +/tmp_check/ diff --git a/src/bin/pg_verify_checksums/Makefile b/src/bin/pg_verify_checksums/Makefile index d16261571f..cfe4ab1b8b 100644 --- a/src/bin/pg_verify_checksums/Makefile +++ b/src/bin/pg_verify_checksums/Makefile @@ -34,3 +34,9 @@ uninstall: clean distclean maintainer-clean: rm -f pg_verify_checksums$(X) $(OBJS) rm -rf tmp_check + +check: + $(prove_check) + +installcheck: + $(prove_installcheck) diff --git a/src/bin/pg_verify_checksums/t/001_basic.pl b/src/bin/pg_verify_checksums/t/001_basic.pl new file mode 100644 index 0000000000..1fa2e12db2 --- /dev/null +++ b/src/bin/pg_verify_checksums/t/001_basic.pl @@ -0,0 +1,8 @@ +use strict; +use warnings; +use TestLib; +use Test::More tests => 8; + +program_help_ok('pg_verify_checksums'); +program_version_ok('pg_verify_checksums'); +program_options_handling_ok('pg_verify_checksums'); diff --git a/src/bin/pg_verify_checksums/t/002_actions.pl b/src/bin/pg_verify_checksums/t/002_actions.pl new file mode 100644 index 0000000000..20d19f0291 --- /dev/null +++ b/src/bin/pg_verify_checksums/t/002_actions.pl @@ -0,0 +1,42 @@ +# Do basic sanity checks supported by pg_verify_checksums using +# an initialized cluster. + +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More tests => 9; + +# Initialize node with checksums disabled. +my $node_no_checksum = get_new_node('node_no_checksum'); +$node_no_checksum->init; +$node_no_checksum->start; +my $pgdata = $node_no_checksum->data_dir; + +# Error, server must be shut down cleanly. +command_fails(['pg_verify_checksums', '-d', $pgdata], + "pg_verify_checksums requires server to be cleanly stopped"); +$node_no_checksum->stop; + +# Control file should know that checksums are enabled. +command_like(['pg_controldata', $pgdata], + qr/Data page checksum version:.*0/, + 'checksums are disabled in control file'); + +# Run verification, which should fail as checksums are disabled. +command_fails(['pg_verify_checksums', '-d', $pgdata], + "checksums disabled so no verification"); + +# Initialize node with checksums enabled. +my $node_checksum = get_new_node('node_checksum'); +$node_checksum->init(extra => ['--data-checksums']); +$pgdata = $node_checksum->data_dir; + +# Control file should know that checksums are disabled. +command_like(['pg_controldata', $pgdata], + qr/Data page checksum version:.*1/, + 'checksums are enabled in control file'); + +# This time verification is able to work. +command_ok(['pg_verify_checksums', '-d', $pgdata], + "checksums enabled so verification happens");
signature.asc
Description: PGP signature