You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-11-06 08:49:29 +02:00
Add tests to command/backup and info/manifest modules.
These tests exercise various interesting cases and provide coverage for proposed improvements.
This commit is contained in:
@@ -1171,6 +1171,8 @@ testRun(void)
|
||||
destination = bufNew(256);
|
||||
write = ioBufferWriteNew(destination);
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(ioWriteFilterGroup(write), ioBufferNew()), "buffer to force internal buffer size");
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(
|
||||
ioWriteFilterGroup(write),
|
||||
@@ -1212,6 +1214,8 @@ testRun(void)
|
||||
destination = bufNew(256);
|
||||
write = ioBufferWriteNew(destination);
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(ioWriteFilterGroup(write), ioBufferNew()), "buffer to force internal buffer size");
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(
|
||||
ioWriteFilterGroup(write), blockIncrNewPack(ioFilterParamList(blockIncrNew(3, 3, 8, 3, 0, 0, map, NULL, NULL)))),
|
||||
@@ -1254,6 +1258,8 @@ testRun(void)
|
||||
destination = bufNew(256);
|
||||
write = ioBufferWriteNew(destination);
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(ioWriteFilterGroup(write), ioBufferNew()), "buffer to force internal buffer size");
|
||||
TEST_RESULT_VOID(
|
||||
ioFilterGroupAdd(
|
||||
ioWriteFilterGroup(write), blockIncrNewPack(ioFilterParamList(blockIncrNew(6, 3, 8, 2, 4, 5, NULL, NULL, NULL)))),
|
||||
@@ -3443,20 +3449,30 @@ testRun(void)
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-grow", file, .timeModified = backupTimeStart);
|
||||
|
||||
// File that shrinks below the limit
|
||||
// File that shrinks below the limit where it would get block incremental if it were new
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE + 1);
|
||||
memset(bufPtr(file), 55, bufSize(file));
|
||||
bufUsedSet(file, bufSize(file));
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-shrink", file, .timeModified = backupTimeStart);
|
||||
|
||||
// File that remains the same between backups
|
||||
// File that shrinks to the size of a single block
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE);
|
||||
memset(bufPtr(file), 44, bufSize(file));
|
||||
bufUsedSet(file, bufSize(file));
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-shrink-block", file, .timeModified = backupTimeStart);
|
||||
|
||||
// Block incremental file that remains the same between backups
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE);
|
||||
memset(bufPtr(file), 33, bufSize(file));
|
||||
bufUsedSet(file, bufSize(file));
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-same", file, .timeModified = backupTimeStart);
|
||||
|
||||
// Normal file that remains the same between backups
|
||||
HRN_STORAGE_PUT_Z(storagePgWrite(), "normal-same", "SAME", .timeModified = backupTimeStart);
|
||||
|
||||
// File that grows above the limit
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE - 1);
|
||||
memset(bufPtr(file), 77, bufSize(file));
|
||||
@@ -3494,18 +3510,20 @@ testRun(void)
|
||||
"P00 INFO: check archive for segment 0000000105DBF06000000000\n"
|
||||
"P00 INFO: backup '20191103-165320F' cannot be resumed: partially deleted by prior resume or invalid\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-grow (24KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/grow-to-block-incr (bundle 1/0, 16.0KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (bundle 1/16383, 8KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink (bundle 1/24575, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-same (bundle 1/40989, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/PG_VERSION (bundle 1/57395, 2B, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/normal-same (bundle 1/0, 4B, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/grow-to-block-incr (bundle 1/4, 16.0KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (bundle 1/16387, 8KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink-block (bundle 1/24579, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink (bundle 1/40985, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-same (bundle 1/57399, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/PG_VERSION (bundle 1/73805, 2B, [PCT]) checksum [SHA1]\n"
|
||||
"P00 INFO: execute non-exclusive backup stop and wait for all WAL segments to archive\n"
|
||||
"P00 INFO: backup stop archive = 0000000105DBF06000000001, lsn = 5dbf060/300000\n"
|
||||
"P00 DETAIL: wrote 'backup_label' file returned from backup stop function\n"
|
||||
"P00 DETAIL: wrote 'tablespace_map' file returned from backup stop function\n"
|
||||
"P00 INFO: check archive for segment(s) 0000000105DBF06000000000:0000000105DBF06000000001\n"
|
||||
"P00 INFO: new backup label = 20191103-165320F\n"
|
||||
"P00 INFO: full backup size = [SIZE], file total = 8");
|
||||
"P00 INFO: full backup size = [SIZE], file total = 10");
|
||||
|
||||
TEST_RESULT_STR_Z(
|
||||
testBackupValidateP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")),
|
||||
@@ -3514,8 +3532,10 @@ testRun(void)
|
||||
"bundle/1/pg_data/PG_VERSION {file, s=2}\n"
|
||||
"bundle/1/pg_data/block-incr-same {file, m=0:{0,1}, s=16384}\n"
|
||||
"bundle/1/pg_data/block-incr-shrink {file, m=0:{0,1,2}, s=16385}\n"
|
||||
"bundle/1/pg_data/block-incr-shrink-block {file, m=0:{0,1}, s=16384}\n"
|
||||
"bundle/1/pg_data/global/pg_control {file, s=8192}\n"
|
||||
"bundle/1/pg_data/grow-to-block-incr {file, s=16383}\n"
|
||||
"bundle/1/pg_data/normal-same {file, s=4}\n"
|
||||
"pg_data {path}\n"
|
||||
"pg_data/backup_label {file, s=17}\n"
|
||||
"pg_data/block-incr-grow.pgbi {file, m=0:{0,1,2}, s=24576}\n"
|
||||
@@ -3535,9 +3555,13 @@ testRun(void)
|
||||
",\"size\":16384,\"timestamp\":1572800000}\n"
|
||||
"pg_data/block-incr-shrink={\"bi\":1,\"bim\":29,\"checksum\":\"ce5f8864058b1bb274244b512cb9641355987134\""
|
||||
",\"size\":16385,\"timestamp\":1572800000}\n"
|
||||
"pg_data/block-incr-shrink-block={\"bi\":1,\"bim\":22,\"checksum\":\"d6a2f1f82878bbcbe1697f89c2aa5ede4e945efc\","
|
||||
"\"size\":16384,\"timestamp\":1572800000}\n"
|
||||
"pg_data/global/pg_control={\"size\":8192,\"timestamp\":1572800000}\n"
|
||||
"pg_data/grow-to-block-incr={\"checksum\":\"f5a5c308cf5fcb52bccebe2365f8ed56acbcc41d\",\"size\":16383"
|
||||
",\"timestamp\":1572800000}\n"
|
||||
"pg_data/normal-same={\"checksum\":\"64b404a01e9e34e74c7509b3ab6adfe63e79d31c\",\"size\":4"
|
||||
",\"timestamp\":1572800000}\n"
|
||||
"pg_data/tablespace_map={\"checksum\":\"87fe624d7976c2144e10afcb7a9a49b071f35e9c\",\"size\":19"
|
||||
",\"timestamp\":1572800002}\n"
|
||||
"\n"
|
||||
@@ -3586,15 +3610,23 @@ testRun(void)
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-larger", file, .timeModified = backupTimeStart);
|
||||
|
||||
// Shrink file below the limit
|
||||
// Shrink file below the limit where it would get block incremental if it were new
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE - 1);
|
||||
memset(bufPtr(file), 55, bufSize(file));
|
||||
bufUsedSet(file, bufSize(file));
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-shrink", file, .timeModified = backupTimeStart);
|
||||
|
||||
// Update timestamp without changing contents of the file
|
||||
// Shrink file to the size of a single block
|
||||
file = bufNew(BLOCK_MIN_SIZE);
|
||||
memset(bufPtr(file), 44, bufSize(file));
|
||||
bufUsedSet(file, bufSize(file));
|
||||
|
||||
HRN_STORAGE_PUT(storagePgWrite(), "block-incr-shrink-block", file, .timeModified = backupTimeStart);
|
||||
|
||||
// Update timestamps without changing contents of the files
|
||||
HRN_STORAGE_TIME(storagePgWrite(), "block-incr-same", backupTimeStart);
|
||||
HRN_STORAGE_TIME(storagePgWrite(), "normal-same", backupTimeStart);
|
||||
|
||||
// Grow file above the limit
|
||||
file = bufNew(BLOCK_MIN_FILE_SIZE + 1);
|
||||
@@ -3623,10 +3655,12 @@ testRun(void)
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-larger (1.4MB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-grow (128KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: store truncated file " TEST_PATH "/pg1/truncate-to-zero (4B->0B, [PCT])\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/grow-to-block-incr (bundle 1/0, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (bundle 1/16411, 8KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink (bundle 1/24603, 16.0KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-same (bundle 1/40986, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/normal-same (bundle 1/0, 4B, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/grow-to-block-incr (bundle 1/4, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (bundle 1/16416, 8KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink-block (bundle 1/24608, 8KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-shrink (bundle 1/32800, 16.0KB, [PCT]) checksum [SHA1]\n"
|
||||
"P01 DETAIL: backup file " TEST_PATH "/pg1/block-incr-same (bundle 1/49183, 16KB, [PCT]) checksum [SHA1]\n"
|
||||
"P00 DETAIL: reference pg_data/PG_VERSION to 20191103-165320F\n"
|
||||
"P00 INFO: execute non-exclusive backup stop and wait for all WAL segments to archive\n"
|
||||
"P00 INFO: backup stop archive = 0000000105DC213000000001, lsn = 5dc2130/300000\n"
|
||||
@@ -3634,7 +3668,7 @@ testRun(void)
|
||||
"P00 DETAIL: wrote 'tablespace_map' file returned from backup stop function\n"
|
||||
"P00 INFO: check archive for segment(s) 0000000105DC213000000000:0000000105DC213000000001\n"
|
||||
"P00 INFO: new backup label = 20191103-165320F_20191106-002640D\n"
|
||||
"P00 INFO: diff backup size = [SIZE], file total = 10");
|
||||
"P00 INFO: diff backup size = [SIZE], file total = 12");
|
||||
|
||||
TEST_RESULT_STR_Z(
|
||||
testBackupValidateP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")),
|
||||
@@ -3642,8 +3676,10 @@ testRun(void)
|
||||
"bundle {path}\n"
|
||||
"bundle/1/pg_data/block-incr-same {file, m=0:{0,1}, s=16384}\n"
|
||||
"bundle/1/pg_data/block-incr-shrink {file, s=16383}\n"
|
||||
"bundle/1/pg_data/block-incr-shrink-block {file, s=8192}\n"
|
||||
"bundle/1/pg_data/global/pg_control {file, s=8192}\n"
|
||||
"bundle/1/pg_data/grow-to-block-incr {file, m=1:{0,1,2}, s=16385}\n"
|
||||
"bundle/1/pg_data/normal-same {file, s=4}\n"
|
||||
"pg_data {path}\n"
|
||||
"pg_data/backup_label {file, s=17}\n"
|
||||
"pg_data/block-incr-grow.pgbi {file, m=0:{0},1:{0},0:{2},1:{1,2,3,4,5,6,7,8,9,10,11,12,13}, s=131072}\n"
|
||||
@@ -3667,9 +3703,13 @@ testRun(void)
|
||||
",\"size\":16384,\"timestamp\":1573000000}\n"
|
||||
"pg_data/block-incr-shrink={\"checksum\":\"1c6a17f67562d8b3f64f1b5f2ee592a4c2809b3b\",\"size\":16383"
|
||||
",\"timestamp\":1573000000}\n"
|
||||
"pg_data/block-incr-shrink-block={\"checksum\":\"b659cdc8436b0632a448ccf7492dfb5b2d366991\",\"size\":8192"
|
||||
",\"timestamp\":1573000000}\n"
|
||||
"pg_data/global/pg_control={\"size\":8192,\"timestamp\":1573000000}\n"
|
||||
"pg_data/grow-to-block-incr={\"bi\":1,\"bim\":26,\"checksum\":\"4f560611d9dc9212432970e5c4bec15d876c226e\","
|
||||
"pg_data/grow-to-block-incr={\"bi\":1,\"bim\":27,\"checksum\":\"4f560611d9dc9212432970e5c4bec15d876c226e\","
|
||||
"\"size\":16385,\"timestamp\":1573000000}\n"
|
||||
"pg_data/normal-same={\"checksum\":\"64b404a01e9e34e74c7509b3ab6adfe63e79d31c\",\"size\":4"
|
||||
",\"timestamp\":1573000000}\n"
|
||||
"pg_data/tablespace_map={\"checksum\":\"87fe624d7976c2144e10afcb7a9a49b071f35e9c\",\"size\":19"
|
||||
",\"timestamp\":1573000002}\n"
|
||||
"pg_data/truncate-to-zero={\"size\":0,\"szo\":4,\"timestamp\":1573000000}\n"
|
||||
@@ -3683,7 +3723,9 @@ testRun(void)
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "block-incr-larger");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "block-incr-same");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "block-incr-shrink");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "block-incr-shrink-block");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "grow-to-block-incr");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "normal-same");
|
||||
HRN_STORAGE_REMOVE(storagePgWrite(), "truncate-to-zero");
|
||||
}
|
||||
|
||||
|
||||
@@ -1171,9 +1171,10 @@ testRun(void)
|
||||
manifest->pub.data.backupOptionDelta = BOOL_FALSE_VAR;
|
||||
lstClear(manifest->pub.fileList);
|
||||
|
||||
// File goes to zero-length
|
||||
HRN_MANIFEST_FILE_ADD(
|
||||
manifest, .name = MANIFEST_TARGET_PGDATA "/FILE1", .copy = true, .size = 4, .sizeRepo = 4, .timestamp = 1482182859,
|
||||
.group = "test", .user = "test");
|
||||
manifest, .name = MANIFEST_TARGET_PGDATA "/FILE1", .copy = true, .size = 0, .timestamp = 1482182859, .group = "test",
|
||||
.user = "test");
|
||||
|
||||
// Clear prior manifest and add a single file with later timestamp and checksum error
|
||||
lstClear(manifestPrior->pub.fileList);
|
||||
@@ -1208,9 +1209,7 @@ testRun(void)
|
||||
"pg_data={\"path\":\"/pg\",\"type\":\"path\"}\n"
|
||||
"\n"
|
||||
"[target:file]\n"
|
||||
"pg_data/FILE1={\"checksum\":\"aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd\",\"checksum-page\":false"
|
||||
",\"checksum-page-error\":[77],\"reference\":\"20190101-010101F_20190202-010101D\",\"size\":4"
|
||||
",\"timestamp\":1482182859}\n"
|
||||
"pg_data/FILE1={\"size\":0,\"timestamp\":1482182859}\n"
|
||||
TEST_MANIFEST_FILE_DEFAULT
|
||||
"\n"
|
||||
"[target:path]\n"
|
||||
@@ -1336,6 +1335,8 @@ testRun(void)
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("block incr delta");
|
||||
|
||||
manifest->pub.data.backupOptionDelta = BOOL_FALSE_VAR;
|
||||
|
||||
lstClear(manifest->pub.fileList);
|
||||
lstClear(manifestPrior->pub.fileList);
|
||||
|
||||
@@ -1353,15 +1354,16 @@ testRun(void)
|
||||
.timestamp = 1482182861, .group = "test", .user = "test");
|
||||
HRN_MANIFEST_FILE_ADD(
|
||||
manifestPrior, .name = MANIFEST_TARGET_PGDATA "/block-incr-sub", .size = 4, .sizeRepo = 4, .blockIncrSize = 8192,
|
||||
.blockIncrMapSize = 66, .timestamp = 1482182860, .checksumSha1 = "ddddddddddbbbbbbbbbbccccccccccaaaaaaaaaa");
|
||||
.blockIncrMapSize = 66, .blockIncrChecksumSize = 1, .timestamp = 1482182860,
|
||||
.checksumSha1 = "ddddddddddbbbbbbbbbbccccccccccaaaaaaaaaa");
|
||||
|
||||
// Prior file has different block incr size
|
||||
// Prior file has different block incr size which is preserved and new file is large enough to be block incremental
|
||||
HRN_MANIFEST_FILE_ADD(
|
||||
manifest, .name = MANIFEST_TARGET_PGDATA "/block-incr-keep-size", .copy = true, .size = 6, .sizeRepo = 6,
|
||||
manifest, .name = MANIFEST_TARGET_PGDATA "/block-incr-keep-size", .copy = true, .size = 8193, .sizeRepo = 6,
|
||||
.blockIncrSize = 16384, .blockIncrChecksumSize = 6, .timestamp = 1482182861, .group = "test", .user = "test");
|
||||
HRN_MANIFEST_FILE_ADD(
|
||||
manifestPrior, .name = MANIFEST_TARGET_PGDATA "/block-incr-keep-size", .size = 4, .sizeRepo = 4, .blockIncrSize = 8192,
|
||||
.blockIncrChecksumSize = 6, .blockIncrMapSize = 31, .timestamp = 1482182860,
|
||||
manifestPrior, .name = MANIFEST_TARGET_PGDATA "/block-incr-keep-size", .size = 16384, .sizeRepo = 4,
|
||||
.blockIncrSize = 8192, .blockIncrChecksumSize = 6, .blockIncrMapSize = 31, .timestamp = 1482182860,
|
||||
.checksumSha1 = "ddddddddddbbbbbbbbbbccccccccccaaaaaaaaaa");
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
@@ -1376,7 +1378,7 @@ testRun(void)
|
||||
TEST_MANIFEST_HEADER_PRE
|
||||
"backup-reference=\"20190101-010101F,20190101-010101F_20190202-010101D\"\n"
|
||||
TEST_MANIFEST_HEADER_MID
|
||||
"option-delta=true\n"
|
||||
"option-delta=false\n"
|
||||
"option-hardlink=false\n"
|
||||
"option-online=true\n"
|
||||
"\n"
|
||||
@@ -1386,7 +1388,7 @@ testRun(void)
|
||||
"[target:file]\n"
|
||||
"pg_data/block-incr-add={\"bi\":1,\"size\":6,\"timestamp\":1482182861}\n"
|
||||
"pg_data/block-incr-keep-size={\"bi\":1,\"bim\":31,\"checksum\":\"ddddddddddbbbbbbbbbbccccccccccaaaaaaaaaa\""
|
||||
",\"reference\":\"20190101-010101F\",\"repo-size\":4,\"size\":6,\"timestamp\":1482182861}\n"
|
||||
",\"reference\":\"20190101-010101F\",\"repo-size\":4,\"size\":8193,\"timestamp\":1482182861}\n"
|
||||
"pg_data/block-incr-sub={\"size\":6,\"timestamp\":1482182861}\n"
|
||||
TEST_MANIFEST_FILE_DEFAULT
|
||||
"\n"
|
||||
|
||||
Reference in New Issue
Block a user