postgresql/src/bin/pg_verifybackup/t/009_extract.pl

68 lines
1.7 KiB
Perl

# Copyright (c) 2021-2022, PostgreSQL Global Development Group
# This test aims to verify that the client can decompress and extract
# a backup which was compressed by the server.
use strict;
use warnings;
use Cwd;
use Config;
use File::Path qw(rmtree);
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
my $primary = PostgreSQL::Test::Cluster->new('primary');
$primary->init(allows_streaming => 1);
$primary->start;
my @test_configuration = (
{
'compression_method' => 'none',
'backup_flags' => [],
'enabled' => 1
},
{
'compression_method' => 'gzip',
'backup_flags' => ['--compress', 'server-gzip:5'],
'enabled' => check_pg_config("#define HAVE_LIBZ 1")
},
{
'compression_method' => 'lz4',
'backup_flags' => ['--compress', 'server-lz4:5'],
'enabled' => check_pg_config("#define HAVE_LIBLZ4 1")
}
);
for my $tc (@test_configuration)
{
my $backup_path = $primary->backup_dir . '/' . 'extract_backup';
my $method = $tc->{'compression_method'};
SKIP: {
skip "$method compression not supported by this build", 2
if ! $tc->{'enabled'};
# Take backup with server compression enabled.
my @backup = (
'pg_basebackup', '-D', $backup_path,
'-Xfetch', '--no-sync', '-cfast', '-Fp');
push @backup, @{$tc->{'backup_flags'}};
my @verify = ('pg_verifybackup', '-e', $backup_path);
# A backup with a valid compression method should work.
$primary->command_ok(\@backup,
"backup done, compression method \"$method\"");
# Make sure that it verifies OK.
$primary->command_ok(\@verify,
"backup verified, compression method \"$method\"");
}
# Remove backup immediately to save disk space.
rmtree($backup_path);
}
done_testing();