v2-0003-Tap-test-case-patch-to-verify-the-backup-using-ve.patch
application/octet-stream
Filename: v2-0003-Tap-test-case-patch-to-verify-the-backup-using-ve.patch
Type: application/octet-stream
Part: 2
Message:
Re: backup manifests
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0003
Subject: Tap test case patch to verify the backup using --verify-backup option
| File | + | − |
|---|---|---|
| src/bin/pg_basebackup/t/010_pg_basebackup.pl | 123 | 1 |
From a3bcf5f8613d54462174c70c8c442847b83d1ad2 Mon Sep 17 00:00:00 2001
From: Suraj Kharage <suraj.kharage@enterprisedb.com>
Date: Thu, 12 Dec 2019 16:51:08 +0530
Subject: [PATCH v2 3/3] Tap test case patch to verify the backup using
--verify-backup option
Patch by Rajkumar Raghuwanshi
---
src/bin/pg_basebackup/t/010_pg_basebackup.pl | 124 ++++++++++++++++++++++++++-
1 file changed, 123 insertions(+), 1 deletion(-)
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index b7d36b6..e1de0f5 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -6,7 +6,7 @@ use File::Basename qw(basename dirname);
use File::Path qw(rmtree);
use PostgresNode;
use TestLib;
-use Test::More tests => 106;
+use Test::More tests => 135;
program_help_ok('pg_basebackup');
program_version_ok('pg_basebackup');
@@ -329,6 +329,128 @@ SKIP:
'pg_replslot symlink copied as directory');
rmtree("$tempdir/backup1");
+ # verify backup cluster using --verify-backup options.
+ # take backup with default "NONE" manifest checksum option
+ $node->command_ok(
+ [
+ 'pg_basebackup', '-D', "$tempdir/backup1",
+ "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc_verify"
+ ],
+ 'plain backup with default manifest checksum with tablespaces succeeds');
+ ok(-f "$tempdir/backup1/PG_VERSION", 'backup1 created');
+ ok(-f "$tempdir/backup1/backup_manifest", 'backup_manifest file is present');
+ # verify plain backup with default NONE manifest-checksum.
+ $node->command_ok(
+ [
+ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup'
+ ],
+ 'plain backup with default manifest checksum is verified');
+
+ # --verify-backup without checksums should detect removed file, new file or changed size of a file
+ # delete a file from mapped tablespace
+ rmtree("$tempdir/tbackup/tblspc_verify/${tblspc1UnloggedBackupPath}_init");
+ # create a new file in backup cluster
+ open my $new_file_none, '>', "$tempdir/backup1/postgresql.new" or die "unable to create file postgresql.new";
+ close $new_file_none;
+ # append text to file to change file size
+ open my $modify_file_none, '>>', "$tempdir/backup1/postgresql.conf" or die "unable to open file postgresql.conf";
+ print $modify_file_none "port = 5555\n";
+ close $modify_file_none;
+ $node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup' ],
+ 0,
+ [qr{^$}],
+ [
+ qr/\Qpg_basebackup: missing file: $tblspc1UnloggedPath\E_init/,
+ qr/\Qpg_basebackup: extra file found: postgresql.new/,
+ qr/\Qpg_basebackup: size changed for file: postgresql.conf\E/
+ ],
+ 'backup verification without checksum detected removed file, new file and changed size of a file');
+ rmtree("$tempdir/backup1");
+ rmtree("$tempdir/tbackup/tblspc_verify");
+
+ # take backup with SHA256 manifest checksum
+ $node->command_ok(
+ [
+ 'pg_basebackup', '-D', "$tempdir/backup1", '--manifest-checksums', 'SHA256',
+ "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc_verify"
+ ],
+ 'plain backup with SHA256 manifest checksum with tablespaces succeeds');
+ ok(-f "$tempdir/backup1/PG_VERSION", 'backup1 created');
+ ok(-f "$tempdir/backup1/backup_manifest", 'backup_manifest file is present');
+ # verify plain backup with SHA256 manifest-checksum.
+ $node->command_ok([ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup'],
+ 'plain backup with SHA256 manifest-checksum is verified');
+
+ # --verify-backup with SHA256 checksums should detect removed file, new file or modified file with and without size change
+ # delete a file from mapped tablespace
+ rmtree("$tempdir/tbackup/tblspc_verify/${tblspc1UnloggedBackupPath}_init");
+ # create a new file in backup cluster
+ open my $new_file_sha256, '>', "$tempdir/backup1/postgresql.new" or die "unable to create file postgresql.new";
+ close $new_file_sha256;
+ # append text to a file to change file size
+ open my $modify_file_sha256, '>>', "$tempdir/backup1/postgresql.conf" or die "unable to open file postgresql.conf";
+ print $modify_file_sha256 "port = 5555\n";
+ close $modify_file_sha256;
+ # replace text with same size from a file
+ open my $same_size_file_sha256, '>', "$tempdir/backup1/PG_VERSION" or die "unable to open file PG_VERSION";
+ print $same_size_file_sha256 "00";
+ close $same_size_file_sha256;
+ $node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup' ],
+ 0,
+ [qr{^$}],
+ [
+ qr/\Qpg_basebackup: missing file: $tblspc1UnloggedPath\E_init/,
+ qr/\Qpg_basebackup: extra file found: postgresql.new/,
+ qr/\Qpg_basebackup: checksum difference for file: PG_VERSION/,
+ qr/\Qpg_basebackup: size changed for file: postgresql.conf\E/
+ ],
+ 'backup verification with SHA256 checksum detected removed file, new file and modified file with and without size change');
+ rmtree("$tempdir/backup1");
+ rmtree("$tempdir/tbackup/tblspc_verify");
+
+ # take backup with --manifest-checksums=CRC32C
+ $node->command_ok(
+ [
+ 'pg_basebackup', '-D', "$tempdir/backup1", '--manifest-checksums', 'CRC32C',
+ "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc_verify"
+ ],
+ 'plain backup with manifest-checksums=CRC32C with tablespaces succeeds');
+ ok(-f "$tempdir/backup1/PG_VERSION", 'backup1 created');
+ ok(-f "$tempdir/backup1/backup_manifest",'backup_manifest file is present');
+ # verify plain backup with CRC32C manifest-checksum.
+ $node->command_ok([ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup'],
+ 'plain backup with CRC32C manifest-checksum is verified');
+
+ # --verify-backup with CRC32C checksums should detect removed file, new file or modified file with and without size change
+ # delete a file from mapped tablespace
+ rmtree("$tempdir/tbackup/tblspc_verify/${tblspc1UnloggedBackupPath}_init");
+ # create a new file in backup cluster
+ open my $new_file_crc32c, '>', "$tempdir/backup1/postgresql.new" or die "unable to create file postgresql.new";
+ close $new_file_crc32c;
+ # append text to a file to change file size
+ open my $modify_file_crc32c, '>>', "$tempdir/backup1/postgresql.conf" or die "unable to open file postgresql.conf";
+ print $modify_file_crc32c "port = 5555\n";
+ close $modify_file_crc32c;
+ # replace text with same size from a file
+ open my $same_size_file_crc32c, '>', "$tempdir/backup1/PG_VERSION" or die "unable to open file PG_VERSION";
+ print $same_size_file_crc32c "00";
+ close $same_size_file_crc32c;
+ $node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup1", '--verify-backup' ],
+ 0,
+ [qr{^$}],
+ [
+ qr/\Qpg_basebackup: missing file: $tblspc1UnloggedPath\E_init/,
+ qr/\Qpg_basebackup: extra file found: postgresql.new/,
+ qr/\Qpg_basebackup: checksum difference for file: PG_VERSION/,
+ qr/\Qpg_basebackup: size changed for file: postgresql.conf\E/
+ ],
+ 'backup verification with CRC32C checksum detected removed file, new file and modified file with and without size change');
+ rmtree("$tempdir/backup1");
+ rmtree("$tempdir/tbackup/tblspc_verify");
+
mkdir "$tempdir/tbl=spc2";
$node->safe_psql('postgres', "DROP TABLE test1;");
$node->safe_psql('postgres', "DROP TABLE tblspc1_unlogged;");
--
1.8.3.1