From 67480e216a201dfde9aa2dc48b39b37e39bf46fb Mon Sep 17 00:00:00 2001 From: Georgios Kokolatos Date: Fri, 25 Mar 2022 14:00:28 +0000 Subject: [PATCH v2 1/4] Extend compression coverage for pg_dump, pg_restore --- src/bin/pg_dump/t/001_basic.pl | 15 ++++++ src/bin/pg_dump/t/002_pg_dump.pl | 92 ++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl index 48faeb4371..8fdacea6f5 100644 --- a/src/bin/pg_dump/t/001_basic.pl +++ b/src/bin/pg_dump/t/001_basic.pl @@ -126,6 +126,21 @@ command_fails_like( qr/\Qpg_dump: error: -Z\/--compress must be in range 0..9\E/, 'pg_dump: -Z/--compress must be in range'); +if (check_pg_config("#define HAVE_LIBZ 1")) +{ + command_fails_like( + [ 'pg_dump', '--compress', '1', '--format', 'tar' ], + qr/\Qpg_dump: error: compression is not supported by tar archive format\E/, + 'pg_dump: compression is not supported by tar archive format'); +} +else +{ + command_fails_like( + [ 'pg_dump', '--compress', '1', '--format', 'tar' ], + qr/\Qpg_dump: warning: requested compression not available in this installation -- archive will be uncompressed\E/, + 'pg_dump: warning: requested compression not available in this installation -- archive will be uncompressed'); +} + command_fails_like( [ 'pg_dump', '--extra-float-digits', '-16' ], qr/\Qpg_dump: error: --extra-float-digits must be in range\E/, diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 3e55ff26f8..cbf4524503 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -55,6 +55,81 @@ my %pgdump_runs = ( "$tempdir/binary_upgrade.dump", ], }, + + # Do not use --no-sync to give test coverage for data sync. + compression_gzip_custom_format => { + test_key => 'compression', + dump_cmd => [ + 'pg_dump', + '--format=custom', '--compress=1', + "--file=$tempdir/compression_gzip_custom_format.dump", + 'postgres', + ], + restore_cmd => [ + 'pg_restore', + "--file=$tempdir/compression_gzip_custom_format.sql", + "$tempdir/compression_gzip_custom_format.dump", + ], + }, + + # Do not use --no-sync to give test coverage for data sync. + compression_gzip_directory_format => { + test_key => 'compression', + dump_cmd => [ + 'pg_dump', + '--format=directory', '--compress=1', + "--file=$tempdir/compression_gzip_directory_format", + 'postgres', + ], + # Give coverage for manually compressed blob.toc files during restore. + compress_cmd => [ + $ENV{'GZIP_PROGRAM'}, + '-f', + "$tempdir/compression_gzip_directory_format/blobs.toc", + ], + restore_cmd => [ + 'pg_restore', + "--file=$tempdir/compression_gzip_directory_format.sql", + "$tempdir/compression_gzip_directory_format", + ], + }, + + compression_gzip_directory_format_parallel => { + test_key => 'compression', + dump_cmd => [ + 'pg_dump', '--jobs=2', + '--format=directory', '--compress=6', + "--file=$tempdir/compression_gzip_directory_format_parallel", + 'postgres', + ], + # Give coverage for manually compressed blob.toc files during restore. + compress_cmd => [ + $ENV{'GZIP_PROGRAM'}, + '-f', + "$tempdir/compression_gzip_directory_format_parallel/blobs.toc", + ], + restore_cmd => [ + 'pg_restore', + '--jobs=3', + "--file=$tempdir/compression_gzip_directory_format_parallel.sql", + "$tempdir/compression_gzip_directory_format_parallel", + ], + }, + + # Check that the output is valid gzip + compression_gzip_plain_format => { + test_key => 'compression', + dump_cmd => [ + 'pg_dump', '--format=plain', '-Z1', + "--file=$tempdir/compression_gzip_plain_format.sql.gz", + 'postgres', + ], + compress_cmd => [ + $ENV{'GZIP_PROGRAM'}, + '-k', '-d', + "$tempdir/compression_gzip_plain_format.sql.gz", + ], + }, clean => { dump_cmd => [ 'pg_dump', @@ -425,6 +500,7 @@ my %full_runs = ( binary_upgrade => 1, clean => 1, clean_if_exists => 1, + compression => 1, createdb => 1, defaults => 1, exclude_dump_test_schema => 1, @@ -3007,6 +3083,7 @@ my %tests = ( binary_upgrade => 1, clean => 1, clean_if_exists => 1, + compression => 1, createdb => 1, defaults => 1, exclude_test_table => 1, @@ -3080,6 +3157,7 @@ my %tests = ( binary_upgrade => 1, clean => 1, clean_if_exists => 1, + compression => 1, createdb => 1, defaults => 1, exclude_dump_test_schema => 1, @@ -3856,9 +3934,23 @@ foreach my $run (sort keys %pgdump_runs) my $test_key = $run; my $run_db = 'postgres'; + my $supports_compression = check_pg_config("#define HAVE_LIBZ 1"); + my $compress_program = $ENV{GZIP_PROGRAM}; + $node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} }, "$run: pg_dump runs"); + if (defined($pgdump_runs{$run}->{compress_cmd})) + { + # Skip compression_cmd tests when compression is not supported, + # as the result is uncompressed or the utility program does not + # exist + next if !$supports_compression || !defined($compress_program) + || $compress_program eq ''; + command_ok( \@{ $pgdump_runs{$run}->{compress_cmd} }, + "$run: compression commands"); + } + if ($pgdump_runs{$run}->{restore_cmd}) { $node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} }, -- 2.33.0