You've already forked pgbackrest
							
							
				mirror of
				https://github.com/pgbackrest/pgbackrest.git
				synced 2025-10-30 23:37:45 +02:00 
			
		
		
		
	Refactor command/expire unit test module.
Add titles and use a Buffer to store backup.info instead of a String.
This commit is contained in:
		
				
					committed by
					
						 David Steele
						David Steele
					
				
			
			
				
	
			
			
			
						parent
						
							f9c86b11a5
						
					
				
				
					commit
					e170c53e7e
				
			| @@ -600,6 +600,9 @@ unit: | |||||||
|         coverage: |         coverage: | ||||||
|           command/expire/expire: full |           command/expire/expire: full | ||||||
|  |  | ||||||
|  |         include: | ||||||
|  |           - info/infoBackup | ||||||
|  |  | ||||||
|       # ---------------------------------------------------------------------------------------------------------------------------- |       # ---------------------------------------------------------------------------------------------------------------------------- | ||||||
|       - name: help |       - name: help | ||||||
|         total: 4 |         total: 4 | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| /*********************************************************************************************************************************** | /*********************************************************************************************************************************** | ||||||
| Test Expire Command | Test Expire Command | ||||||
| ***********************************************************************************************************************************/ | ***********************************************************************************************************************************/ | ||||||
|  | #include "common/io/bufferRead.h" | ||||||
| #include "storage/posix/storage.h" | #include "storage/posix/storage.h" | ||||||
|  |  | ||||||
| #include "common/harnessConfig.h" | #include "common/harnessConfig.h" | ||||||
| @@ -83,74 +84,79 @@ testRun(void) | |||||||
|     StringList *argListAvoidWarn = strLstDup(argListBase); |     StringList *argListAvoidWarn = strLstDup(argListBase); | ||||||
|     strLstAddZ(argListAvoidWarn, "--repo1-retention-full=1");  // avoid warning |     strLstAddZ(argListAvoidWarn, "--repo1-retention-full=1");  // avoid warning | ||||||
|  |  | ||||||
|     String *backupInfoBase = strNew( |     const Buffer *backupInfoBase = harnessInfoChecksumZ | ||||||
|              "[backup:current]\n" |     ( | ||||||
|             "20181119-152138F={" |          "[backup:current]\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," |         "20181119-152138F={" | ||||||
|             "\"backup-archive-start\":\"000000010000000000000002\",\"backup-archive-stop\":\"000000010000000000000002\"," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," | ||||||
|             "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," |         "\"backup-archive-start\":\"000000010000000000000002\",\"backup-archive-stop\":\"000000010000000000000002\"," | ||||||
|             "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," |         "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," | ||||||
|             "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," |         "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "20181119-152800F={" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," |         "20181119-152800F={" | ||||||
|             "\"backup-archive-start\":\"000000010000000000000004\",\"backup-archive-stop\":\"000000010000000000000004\"," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," | ||||||
|             "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," |         "\"backup-archive-start\":\"000000010000000000000004\",\"backup-archive-stop\":\"000000010000000000000004\"," | ||||||
|             "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," |         "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," | ||||||
|             "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," |         "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "20181119-152800F_20181119-152152D={" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000005\"," |         "20181119-152800F_20181119-152152D={" | ||||||
|             "\"backup-archive-stop\":\"000000010000000000000005\",\"backup-info-repo-size\":2369186," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000005\"," | ||||||
|             "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," |         "\"backup-archive-stop\":\"000000010000000000000005\",\"backup-info-repo-size\":2369186," | ||||||
|             "\"backup-prior\":\"20181119-152800F\",\"backup-reference\":[\"20181119-152800F\"]," |         "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," | ||||||
|             "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"diff\"," |         "\"backup-prior\":\"20181119-152800F\",\"backup-reference\":[\"20181119-152800F\"]," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"diff\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "20181119-152800F_20181119-152155I={" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000006\"," |         "20181119-152800F_20181119-152155I={" | ||||||
|             "\"backup-archive-stop\":\"000000010000000000000006\",\"backup-info-repo-size\":2369186," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000006\"," | ||||||
|             "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," |         "\"backup-archive-stop\":\"000000010000000000000006\",\"backup-info-repo-size\":2369186," | ||||||
|             "\"backup-prior\":\"20181119-152800F_20181119-152152D\"," |         "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," | ||||||
|             "\"backup-reference\":[\"20181119-152800F\",\"20181119-152800F_20181119-152152D\"]," |         "\"backup-prior\":\"20181119-152800F_20181119-152152D\"," | ||||||
|             "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"incr\"," |         "\"backup-reference\":[\"20181119-152800F\",\"20181119-152800F_20181119-152152D\"]," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"incr\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "20181119-152900F={" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," |         "20181119-152900F={" | ||||||
|             "\"backup-archive-start\":\"000000010000000000000007\",\"backup-archive-stop\":\"000000010000000000000007\"," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\"," | ||||||
|             "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," |         "\"backup-archive-start\":\"000000010000000000000007\",\"backup-archive-stop\":\"000000010000000000000007\"," | ||||||
|             "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," |         "\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186," | ||||||
|             "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," |         "\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640911,\"backup-type\":\"full\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "20181119-152900F_20181119-152600D={" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000008\"," |         "20181119-152900F_20181119-152600D={" | ||||||
|             "\"backup-archive-stop\":\"000000010000000000000008\",\"backup-info-repo-size\":2369186," |         "\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000008\"," | ||||||
|             "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," |         "\"backup-archive-stop\":\"000000010000000000000008\",\"backup-info-repo-size\":2369186," | ||||||
|             "\"backup-prior\":\"20181119-152138F\",\"backup-reference\":[\"20181119-152900F\"]," |         "\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428," | ||||||
|             "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"diff\"," |         "\"backup-prior\":\"20181119-152138F\",\"backup-reference\":[\"20181119-152900F\"]," | ||||||
|             "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," |         "\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"diff\"," | ||||||
|             "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" |         "\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false," | ||||||
|             "\n" |         "\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n" | ||||||
|             "[db]\n" |         "\n" | ||||||
|             "db-catalog-version=201409291\n" |         "[db]\n" | ||||||
|             "db-control-version=942\n" |         "db-catalog-version=201409291\n" | ||||||
|             "db-id=1\n" |         "db-control-version=942\n" | ||||||
|             "db-system-id=6625592122879095702\n" |         "db-id=1\n" | ||||||
|             "db-version=\"9.4\"\n" |         "db-system-id=6625592122879095702\n" | ||||||
|             "\n" |         "db-version=\"9.4\"\n" | ||||||
|             "[db:history]\n" |         "\n" | ||||||
|             "1={\"db-catalog-version\":201409291,\"db-control-version\":942,\"db-system-id\":6625592122879095702," |         "[db:history]\n" | ||||||
|                 "\"db-version\":\"9.4\"}"); |         "1={\"db-catalog-version\":201409291,\"db-control-version\":942,\"db-system-id\":6625592122879095702," | ||||||
|  |             "\"db-version\":\"9.4\"}" | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     // ***************************************************************************************************************************** |     // ***************************************************************************************************************************** | ||||||
|     if (testBegin("expireBackup()")) |     if (testBegin("expireBackup()")) | ||||||
|     { |     { | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("manifest file removal"); | ||||||
|  |  | ||||||
|         // Create backup.info |         // Create backup.info | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), harnessInfoChecksum(backupInfoBase)); |         TEST_RESULT_VOID(storagePutP(storageNewWriteP(storageTest, backupInfoFileName), backupInfoBase), "write backup.info"); | ||||||
|  |  | ||||||
|         InfoBackup *infoBackup = NULL; |         InfoBackup *infoBackup = NULL; | ||||||
|         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); |         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); | ||||||
| @@ -184,7 +190,7 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(expireBackup(infoBackup, full1, backupExpired), "expire backup with both manifest files"); |         TEST_RESULT_VOID(expireBackup(infoBackup, full1, backupExpired), "expire backup with both manifest files"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             (strLstSize(storageListP(storageTest, full1Path)) && strLstExistsZ(storageListP(storageTest, full1Path), "bogus")), |             (strLstSize(storageListP(storageTest, full1Path)) && strLstExistsZ(storageListP(storageTest, full1Path), "bogus")), | ||||||
|             true, "  full1 - only manifest files removed"); |             true, "full1 - only manifest files removed"); | ||||||
|  |  | ||||||
|         TEST_RESULT_VOID(expireBackup(infoBackup, full2, backupExpired), "expire backup with no manifest - does not error"); |         TEST_RESULT_VOID(expireBackup(infoBackup, full2, backupExpired), "expire backup with no manifest - does not error"); | ||||||
|  |  | ||||||
| @@ -199,10 +205,11 @@ testRun(void) | |||||||
|     if (testBegin("expireFullBackup()")) |     if (testBegin("expireFullBackup()")) | ||||||
|     { |     { | ||||||
|         // Create backup.info |         // Create backup.info | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), harnessInfoChecksum(backupInfoBase)); |  | ||||||
|  |  | ||||||
|         InfoBackup *infoBackup = NULL; |         InfoBackup *infoBackup = NULL; | ||||||
|         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); |         TEST_ASSIGN(infoBackup, infoBackupNewLoad(ioBufferReadNew(backupInfoBase)), "get backup.info"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-full not set - nothing expired"); | ||||||
|  |  | ||||||
|         // Load Parameters |         // Load Parameters | ||||||
|         StringList *argList = strLstDup(argListBase); |         StringList *argList = strLstDup(argListBase); | ||||||
| @@ -215,33 +222,39 @@ testRun(void) | |||||||
|             "set option 'repo1-retention-full' to the maximum."); |             "set option 'repo1-retention-full' to the maximum."); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-full set - full backup no dependencies expired"); | ||||||
|  |  | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=2"); |         strLstAddZ(argList, "--repo1-retention-full=2"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireFullBackup(infoBackup), 1, "retention-full=2 - one full backup expired"); |         TEST_RESULT_UINT(expireFullBackup(infoBackup), 1, "retention-full=2 - one full backup expired"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 5, "  current backups reduced by 1 full - no dependencies"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 5, "current backups reduced by 1 full - no dependencies"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), |             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), | ||||||
|             "20181119-152800F, 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I" |             "20181119-152800F, 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I" | ||||||
|                 ", 20181119-152900F, 20181119-152900F_20181119-152600D", |                 ", 20181119-152900F, 20181119-152900F_20181119-152600D", | ||||||
|             "  remaining backups correct"); |             "remaining backups correct"); | ||||||
|         harnessLogResult("P00   INFO: expire full backup 20181119-152138F"); |         harnessLogResult("P00   INFO: expire full backup 20181119-152138F"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-full set - full backup with dependencies expired"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListBase); |         argList = strLstDup(argListBase); | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=1"); |         strLstAddZ(argList, "--repo1-retention-full=1"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireFullBackup(infoBackup), 3, "retention-full=1 - one full backup and dependencies expired"); |         TEST_RESULT_UINT(expireFullBackup(infoBackup), 3, "retention-full=1 - one full backup and dependencies expired"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "  current backups reduced by 1 full and dependencies"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "current backups reduced by 1 full and dependencies"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152900F, 20181119-152900F_20181119-152600D", |             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152900F, 20181119-152900F_20181119-152600D", | ||||||
|             "  remaining backups correct"); |             "remaining backups correct"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " |             "P00   INFO: expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " | ||||||
|             "20181119-152800F_20181119-152155I"); |             "20181119-152800F_20181119-152155I"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-full set - no backups expired"); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireFullBackup(infoBackup), 0, "retention-full=1 - not enough backups to expire any"); |         TEST_RESULT_UINT(expireFullBackup(infoBackup), 0, "retention-full=1 - not enough backups to expire any"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152900F, 20181119-152900F_20181119-152600D", |             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152900F, 20181119-152900F_20181119-152600D", | ||||||
| @@ -252,44 +265,51 @@ testRun(void) | |||||||
|     if (testBegin("expireDiffBackup()")) |     if (testBegin("expireDiffBackup()")) | ||||||
|     { |     { | ||||||
|         // Create backup.info |         // Create backup.info | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), harnessInfoChecksum(backupInfoBase)); |  | ||||||
|  |  | ||||||
|         InfoBackup *infoBackup = NULL; |         InfoBackup *infoBackup = NULL; | ||||||
|         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); |         TEST_ASSIGN(infoBackup, infoBackupNewLoad(ioBufferReadNew(backupInfoBase)), "get backup.info"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-diff not set"); | ||||||
|  |  | ||||||
|         // Load Parameters |         // Load Parameters | ||||||
|         StringList *argList = strLstDup(argListAvoidWarn); |         StringList *argList = strLstDup(argListAvoidWarn); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff not set - nothing expired"); |         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff not set - nothing expired"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 6, "  current backups not expired"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 6, "current backups not expired"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-diff set - nothing yet to expire"); | ||||||
|  |  | ||||||
|         // Add retention-diff |         // Add retention-diff | ||||||
|         StringList *argListTemp = strLstDup(argList); |         StringList *argListTemp = strLstDup(argList); | ||||||
|         strLstAddZ(argListTemp, "--repo1-retention-diff=6"); |         strLstAddZ(argListTemp, "--repo1-retention-diff=6"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argListTemp); |         harnessCfgLoad(cfgCmdExpire, argListTemp); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff set - too soon to expire"); |         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff set - too soon to expire"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 6, "  current backups not expired"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 6, "current backups not expired"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-diff set - diff and dependent incr expired"); | ||||||
|  |  | ||||||
|         strLstAddZ(argList, "--repo1-retention-diff=2"); |         strLstAddZ(argList, "--repo1-retention-diff=2"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 2, "retention-diff set - full considered in diff"); |         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 2, "retention-diff=2 - full considered in diff"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "  current backups reduced by 1 diff and dependent increment"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "current backups reduced by 1 diff and dependent increment"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), |             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), | ||||||
|             "20181119-152138F, 20181119-152800F, 20181119-152900F, 20181119-152900F_20181119-152600D", |             "20181119-152138F, 20181119-152800F, 20181119-152900F, 20181119-152900F_20181119-152600D", | ||||||
|             "  remaining backups correct"); |             "remaining backups correct"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: expire diff backup set: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I"); |             "P00   INFO: expire diff backup set: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I"); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff=2 but no more to expire"); |         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 0, "retention-diff=2 but no more to expire"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "  current backups not reduced"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "current backups not reduced"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-diff set - diff with no dependents expired"); | ||||||
|  |  | ||||||
|         // Create backup.info with two diff - oldest to be expired - no "set:" |         // Create backup.info with two diff - oldest to be expired - no "set:" | ||||||
|         storagePutP( |         storagePutP( | ||||||
|             storageNewWriteP(storageTest, backupInfoFileName), |             storageNewWriteP(storageTest, backupInfoFileName), | ||||||
| @@ -338,10 +358,10 @@ testRun(void) | |||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 1, "retention-diff set - only oldest diff expired"); |         TEST_RESULT_UINT(expireDiffBackup(infoBackup), 1, "retention-diff set - only oldest diff expired"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "  current backups reduced by one"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "current backups reduced by one"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152800F, 20181119-152800F_20181119-152155D", |             strLstJoin(infoBackupDataLabelList(infoBackup, NULL), ", "), "20181119-152800F, 20181119-152800F_20181119-152155D", | ||||||
|             "  remaining backups correct"); |             "remaining backups correct"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: expire diff backup 20181119-152800F_20181119-152152D"); |             "P00   INFO: expire diff backup 20181119-152800F_20181119-152152D"); | ||||||
|     } |     } | ||||||
| @@ -349,6 +369,9 @@ testRun(void) | |||||||
|     // ***************************************************************************************************************************** |     // ***************************************************************************************************************************** | ||||||
|     if (testBegin("removeExpiredBackup()")) |     if (testBegin("removeExpiredBackup()")) | ||||||
|     { |     { | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("remove expired backup from disk - backup not in current backup"); | ||||||
|  |  | ||||||
|         // Create backup.info |         // Create backup.info | ||||||
|         storagePutP( |         storagePutP( | ||||||
|             storageNewWriteP(storageTest, backupInfoFileName), |             storageNewWriteP(storageTest, backupInfoFileName), | ||||||
| @@ -410,9 +433,11 @@ testRun(void) | |||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), ", "), |             strLstJoin(strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), ", "), | ||||||
|             "20181118-152100F_20181119-152152D.save, 20181119-152138F, backup.info, bogus", |             "20181118-152100F_20181119-152152D.save, 20181119-152138F, backup.info, bogus", | ||||||
|             "  remaining file/directories correct"); |             "remaining file/directories correct"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("remove expired backup from disk - no current backups"); | ||||||
|  |  | ||||||
|         // Create backup.info without current backups |         // Create backup.info without current backups | ||||||
|         storagePutP( |         storagePutP( | ||||||
|             storageNewWriteP(storageTest, backupInfoFileName), |             storageNewWriteP(storageTest, backupInfoFileName), | ||||||
| @@ -428,19 +453,22 @@ testRun(void) | |||||||
|                 "1={\"db-catalog-version\":201409291,\"db-control-version\":942,\"db-system-id\":6625592122879095702," |                 "1={\"db-catalog-version\":201409291,\"db-control-version\":942,\"db-system-id\":6625592122879095702," | ||||||
|                     "\"db-version\":\"9.4\"}")); |                     "\"db-version\":\"9.4\"}")); | ||||||
|  |  | ||||||
|         TEST_ASSIGN(infoBackup,infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); |         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); | ||||||
|  |  | ||||||
|         TEST_RESULT_VOID(removeExpiredBackup(infoBackup), "remove backups - backup.info current empty"); |         TEST_RESULT_VOID(removeExpiredBackup(infoBackup), "remove backups - backup.info current empty"); | ||||||
|  |  | ||||||
|         harnessLogResult("P00   INFO: remove expired backup 20181119-152138F"); |         harnessLogResult("P00   INFO: remove expired backup 20181119-152138F"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), ", "), |             strLstJoin(strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), ", "), | ||||||
|             "20181118-152100F_20181119-152152D.save, backup.info, bogus", "  remaining file/directories correct"); |             "20181118-152100F_20181119-152152D.save, backup.info, bogus", "remaining file/directories correct"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // ***************************************************************************************************************************** |     // ***************************************************************************************************************************** | ||||||
|     if (testBegin("removeExpiredArchive() & cmdExpire()")) |     if (testBegin("removeExpiredArchive() & cmdExpire()")) | ||||||
|     { |     { | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive not set"); | ||||||
|  |  | ||||||
|         // Load Parameters |         // Load Parameters | ||||||
|         StringList *argList = strLstDup(argListBase); |         StringList *argList = strLstDup(argListBase); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
| @@ -471,6 +499,8 @@ testRun(void) | |||||||
|             "P00   INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired"); |             "P00   INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive set - no current backups"); | ||||||
|  |  | ||||||
|         // Set archive retention, archive retention type default but no current backups - code path test |         // Set archive retention, archive retention type default but no current backups - code path test | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=4"); |         strLstAddZ(argList, "--repo1-retention-archive=4"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
| @@ -482,6 +512,8 @@ testRun(void) | |||||||
|             "set option 'repo1-retention-full' to the maximum."); |             "set option 'repo1-retention-full' to the maximum."); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive set - no archive on disk"); | ||||||
|  |  | ||||||
|         // Create backup.info with current backups spread over different timelines |         // Create backup.info with current backups spread over different timelines | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), |         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), | ||||||
|             harnessInfoChecksumZ( |             harnessInfoChecksumZ( | ||||||
| @@ -574,6 +606,8 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(removeExpiredArchive(infoBackup), "no archive on disk"); |         TEST_RESULT_VOID(removeExpiredArchive(infoBackup), "no archive on disk"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive set - remove archives across timelines"); | ||||||
|  |  | ||||||
|         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "9.4-1", "0000000100000000"); |         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "9.4-1", "0000000100000000"); | ||||||
|         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "9.4-1", "0000000200000000"); |         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "9.4-1", "0000000200000000"); | ||||||
|         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "10-2", "0000000100000000"); |         archiveGenerate(storageTest, archiveStanzaPath, 1, 10, "10-2", "0000000100000000"); | ||||||
| @@ -583,22 +617,24 @@ testRun(void) | |||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 10, "0000000100000000"), "  only 9.4-1/0000000100000000/000000010000000000000001 removed"); |             archiveExpectList(2, 10, "0000000100000000"), "only 9.4-1/0000000100000000/000000010000000000000001 removed"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(1, 10, "0000000200000000"), |             archiveExpectList(1, 10, "0000000200000000"), | ||||||
|             "  none removed from 9.4-1/0000000200000000 - crossing timelines to play through PITR"); |             "none removed from 9.4-1/0000000200000000 - crossing timelines to play through PITR"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(3, 10, "0000000100000000"), |             archiveExpectList(3, 10, "0000000100000000"), | ||||||
|             "  000000010000000000000001 and 000000010000000000000002 removed from 10-2/0000000100000000"); |             "000000010000000000000001 and 000000010000000000000002 removed from 10-2/0000000100000000"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: full backup total < 4 - using oldest full backup for 9.4-1 archive retention\n" |             "P00   INFO: full backup total < 4 - using oldest full backup for 9.4-1 archive retention\n" | ||||||
|             "P00   INFO: full backup total < 4 - using oldest full backup for 10-2 archive retention"); |             "P00   INFO: full backup total < 4 - using oldest full backup for 10-2 archive retention"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive set - latest archive not expired"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=2"); |         strLstAddZ(argList, "--repo1-retention-archive=2"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
| @@ -609,19 +645,21 @@ testRun(void) | |||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 2, "0000000100000000"), |             archiveExpectList(2, 2, "0000000100000000"), | ||||||
|             "  only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); |             "only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 10, "0000000200000000"), |             archiveExpectList(2, 10, "0000000200000000"), | ||||||
|             "  only 9.4-1/0000000200000000/000000010000000000000001 removed from major wal 2"); |             "only 9.4-1/0000000200000000/000000010000000000000001 removed from major wal 2"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(3, 10, "0000000100000000"), |             archiveExpectList(3, 10, "0000000100000000"), | ||||||
|             "  none removed from 10-2/0000000100000000"); |             "none removed from 10-2/0000000100000000"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive set to lowest - keep PITR for each archiveId"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=1"); |         strLstAddZ(argList, "--repo1-retention-archive=1"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
| @@ -632,18 +670,20 @@ testRun(void) | |||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 2, "0000000100000000"), |             archiveExpectList(2, 2, "0000000100000000"), | ||||||
|             "  only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); |             "only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 10, "0000000200000000"), |             archiveExpectList(2, 10, "0000000200000000"), | ||||||
|             "  nothing removed from 9.4-1/0000000200000000 major wal 2 - each archiveId must have one backup to play through PITR"); |             "nothing removed from 9.4-1/0000000200000000 major wal 2 - each archiveId must have one backup to play through PITR"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(3, 10, "0000000100000000"), "  none removed from 10-2/0000000100000000"); |             archiveExpectList(3, 10, "0000000100000000"), "none removed from 10-2/0000000100000000"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive, retention-archive-type=diff, retention-diff set"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=2"); |         strLstAddZ(argList, "--repo1-retention-archive=2"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive-type=diff"); |         strLstAddZ(argList, "--repo1-retention-archive-type=diff"); | ||||||
| @@ -667,17 +707,19 @@ testRun(void) | |||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 2, "0000000100000000"), |             archiveExpectList(2, 2, "0000000100000000"), | ||||||
|             "  only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); |             "only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), | ||||||
|             result, "  all in-between removed from 9.4-1/0000000200000000 major wal 2 - last backup able to play through PITR"); |             result, "all in-between removed from 9.4-1/0000000200000000 major wal 2 - last backup able to play through PITR"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(3, 10, "0000000100000000"), "  none removed from 10-2/0000000100000000"); |             archiveExpectList(3, 10, "0000000100000000"), "none removed from 10-2/0000000100000000"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive, retention-archive-type=incr"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=4"); |         strLstAddZ(argList, "--repo1-retention-archive=4"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive-type=incr"); |         strLstAddZ(argList, "--repo1-retention-archive-type=incr"); | ||||||
| @@ -700,17 +742,19 @@ testRun(void) | |||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 2, "0000000100000000"), |             archiveExpectList(2, 2, "0000000100000000"), | ||||||
|             "  only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); |             "only 9.4-1/0000000100000000/000000010000000000000002 remains in major wal 1"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000200000000")), sortOrderAsc), ", "), | ||||||
|             result, "  incremental and after remain in 9.4-1/0000000200000000 major wal 2"); |             result, "incremental and after remain in 9.4-1/0000000200000000 major wal 2"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(3, 10, "0000000100000000"), "  none removed from 10-2/0000000100000000"); |             archiveExpectList(3, 10, "0000000100000000"), "none removed from 10-2/0000000100000000"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire command - dry run"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListBase); |         argList = strLstDup(argListBase); | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=2"); |         strLstAddZ(argList, "--repo1-retention-full=2"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-diff=3"); |         strLstAddZ(argList, "--repo1-retention-diff=3"); | ||||||
| @@ -745,10 +789,10 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) do not remove last backup in archive sub path or sub path"); |         TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) do not remove last backup in archive sub path or sub path"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), |             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), | ||||||
|             true, "  archive sub path not removed"); |             true, "archive sub path not removed"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))), |             storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))), | ||||||
|             true, "  backup not removed"); |             true, "backup not removed"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: [DRY-RUN] expire full backup 20181119-152138F\n" |             "P00   INFO: [DRY-RUN] expire full backup 20181119-152138F\n" | ||||||
|             "P00   INFO: [DRY-RUN] remove expired backup 20181119-152138F"); |             "P00   INFO: [DRY-RUN] remove expired backup 20181119-152138F"); | ||||||
| @@ -762,6 +806,8 @@ testRun(void) | |||||||
|             storageNewWriteP(storageTest, strNewFmt("%s%s", strPtr(archiveInfoFileName), ".save"))); |             storageNewWriteP(storageTest, strNewFmt("%s%s", strPtr(archiveInfoFileName), ".save"))); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire via backup command"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListBase); |         argList = strLstDup(argListBase); | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=2"); |         strLstAddZ(argList, "--repo1-retention-full=2"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-diff=3"); |         strLstAddZ(argList, "--repo1-retention-diff=3"); | ||||||
| @@ -773,12 +819,14 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(cmdExpire(), "via backup command: expire last backup in archive sub path and remove sub path"); |         TEST_RESULT_VOID(cmdExpire(), "via backup command: expire last backup in archive sub path and remove sub path"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), |             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), | ||||||
|             false, "  archive sub path removed"); |             false, "archive sub path removed"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: expire full backup 20181119-152138F\n" |             "P00   INFO: expire full backup 20181119-152138F\n" | ||||||
|             "P00   INFO: remove expired backup 20181119-152138F"); |             "P00   INFO: remove expired backup 20181119-152138F"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire command - no dry run"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListBase); |         argList = strLstDup(argListBase); | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=2"); |         strLstAddZ(argList, "--repo1-retention-full=2"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-diff=3"); |         strLstAddZ(argList, "--repo1-retention-diff=3"); | ||||||
| @@ -803,12 +851,14 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(cmdExpire(), "expire last backup in archive sub path and remove sub path"); |         TEST_RESULT_VOID(cmdExpire(), "expire last backup in archive sub path and remove sub path"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), |             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1/0000000100000000")), | ||||||
|             false, "  archive sub path removed"); |             false, "archive sub path removed"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: expire full backup 20181119-152138F\n" |             "P00   INFO: expire full backup 20181119-152138F\n" | ||||||
|             "P00   INFO: remove expired backup 20181119-152138F"); |             "P00   INFO: remove expired backup 20181119-152138F"); | ||||||
|  |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire command - dry run: archive and backups not removed"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=1"); |         strLstAddZ(argList, "--repo1-retention-archive=1"); | ||||||
|         strLstAddZ(argList, "--dry-run"); |         strLstAddZ(argList, "--dry-run"); | ||||||
| @@ -817,7 +867,7 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) - log expired backups and archive path to remove"); |         TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) - log expired backups and archive path to remove"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1")), |             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1")), | ||||||
|             true, "  archive path not removed"); |             true, "archive path not removed"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             (storageExistsP(storageTest, strNewFmt("%s/20181119-152800F/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))) && |             (storageExistsP(storageTest, strNewFmt("%s/20181119-152800F/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))) && | ||||||
|             storageExistsP( |             storageExistsP( | ||||||
| @@ -826,7 +876,7 @@ testRun(void) | |||||||
|                 storageTest, strNewFmt("%s/20181119-152800F_20181119-152155I/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))) && |                 storageTest, strNewFmt("%s/20181119-152800F_20181119-152155I/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath))) && | ||||||
|             storageExistsP( |             storageExistsP( | ||||||
|                 storageTest, strNewFmt("%s/20181119-152800F_20181119-152252D/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath)))), |                 storageTest, strNewFmt("%s/20181119-152800F_20181119-152252D/" BACKUP_MANIFEST_FILE, strPtr(backupStanzaPath)))), | ||||||
|             true, "  backup not removed"); |             true, "backup not removed"); | ||||||
|         harnessLogResult(strPtr(strNewFmt( |         harnessLogResult(strPtr(strNewFmt( | ||||||
|             "P00   INFO: [DRY-RUN] expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " |             "P00   INFO: [DRY-RUN] expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " | ||||||
|             "20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n" |             "20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n" | ||||||
| @@ -836,6 +886,9 @@ testRun(void) | |||||||
|             "P00   INFO: [DRY-RUN] remove expired backup 20181119-152800F\n" |             "P00   INFO: [DRY-RUN] remove expired backup 20181119-152800F\n" | ||||||
|             "P00   INFO: [DRY-RUN] remove archive path: %s/%s/9.4-1", testPath(), strPtr(archiveStanzaPath)))); |             "P00   INFO: [DRY-RUN] remove archive path: %s/%s/9.4-1", testPath(), strPtr(archiveStanzaPath)))); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire via backup command - archive and backups removed"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=1"); |         strLstAddZ(argList, "--repo1-retention-archive=1"); | ||||||
|         strLstAdd(argList, strNewFmt("--pg1-path=%s/pg", testPath())); |         strLstAdd(argList, strNewFmt("--pg1-path=%s/pg", testPath())); | ||||||
| @@ -844,7 +897,7 @@ testRun(void) | |||||||
|         TEST_RESULT_VOID(cmdExpire(), "via backup command: expire backups and remove archive path"); |         TEST_RESULT_VOID(cmdExpire(), "via backup command: expire backups and remove archive path"); | ||||||
|         TEST_RESULT_BOOL( |         TEST_RESULT_BOOL( | ||||||
|             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1")), |             storagePathExistsP(storageTest, strNewFmt("%s/%s", strPtr(archiveStanzaPath), "9.4-1")), | ||||||
|             false, "  archive path removed"); |             false, "archive path removed"); | ||||||
|  |  | ||||||
|         harnessLogResult(strPtr(strNewFmt( |         harnessLogResult(strPtr(strNewFmt( | ||||||
|             "P00   INFO: expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " |             "P00   INFO: expire full backup set: 20181119-152800F, 20181119-152800F_20181119-152152D, " | ||||||
| @@ -855,11 +908,14 @@ testRun(void) | |||||||
|             "P00   INFO: remove expired backup 20181119-152800F\n" |             "P00   INFO: remove expired backup 20181119-152800F\n" | ||||||
|             "P00   INFO: remove archive path: %s/%s/9.4-1", testPath(), strPtr(archiveStanzaPath)))); |             "P00   INFO: remove archive path: %s/%s/9.4-1", testPath(), strPtr(archiveStanzaPath)))); | ||||||
|  |  | ||||||
|         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "  get backup.info"); |         TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); | ||||||
|         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "  backup.info updated on disk"); |         TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "backup.info updated on disk"); | ||||||
|         TEST_RESULT_STR_Z( |         TEST_RESULT_STR_Z( | ||||||
|             strLstJoin(strLstSort(infoBackupDataLabelList(infoBackup, NULL), sortOrderAsc), ", "), |             strLstJoin(strLstSort(infoBackupDataLabelList(infoBackup, NULL), sortOrderAsc), ", "), | ||||||
|             "20181119-152900F, 20181119-152900F_20181119-152500I", "  remaining current backups correct"); |             "20181119-152900F, 20181119-152900F_20181119-152500I", "remaining current backups correct"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("expire command - archive removed"); | ||||||
|  |  | ||||||
|         archiveGenerate(storageTest, archiveStanzaPath, 1, 1, "9.4-1", "0000000100000000"); |         archiveGenerate(storageTest, archiveStanzaPath, 1, 1, "9.4-1", "0000000100000000"); | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
| @@ -915,6 +971,9 @@ testRun(void) | |||||||
|  |  | ||||||
|         archiveGenerate(storageTest, archiveStanzaPath, 1, 5, "9.4-1", "0000000100000000"); |         archiveGenerate(storageTest, archiveStanzaPath, 1, 5, "9.4-1", "0000000100000000"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention backup no archive-start"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=2"); |         strLstAddZ(argList, "--repo1-retention-archive=2"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive-type=full"); |         strLstAddZ(argList, "--repo1-retention-archive-type=full"); | ||||||
| @@ -925,7 +984,10 @@ testRun(void) | |||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(1, 5, "0000000100000000"), "  nothing removed from 9.4-1/0000000100000000"); |             archiveExpectList(1, 5, "0000000100000000"), "nothing removed from 9.4-1/0000000100000000"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("retention-archive-type=incr"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=4"); |         strLstAddZ(argList, "--repo1-retention-archive=4"); | ||||||
| @@ -937,10 +999,13 @@ testRun(void) | |||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "9.4-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(2, 5, "0000000100000000"), "  only removed archive prior to first full"); |             archiveExpectList(2, 5, "0000000100000000"), "only removed archive prior to first full"); | ||||||
|         harnessLogResult( |         harnessLogResult( | ||||||
|             "P00   INFO: full backup total < 4 - using oldest full backup for 9.4-1 archive retention"); |             "P00   INFO: full backup total < 4 - using oldest full backup for 9.4-1 archive retention"); | ||||||
|  |  | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("prior backup has no archive-start"); | ||||||
|  |  | ||||||
|         argList = strLstDup(argListAvoidWarn); |         argList = strLstDup(argListAvoidWarn); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive=1"); |         strLstAddZ(argList, "--repo1-retention-archive=1"); | ||||||
|         strLstAddZ(argList, "--repo1-retention-archive-type=full"); |         strLstAddZ(argList, "--repo1-retention-archive-type=full"); | ||||||
| @@ -960,13 +1025,14 @@ testRun(void) | |||||||
|     // ***************************************************************************************************************************** |     // ***************************************************************************************************************************** | ||||||
|     if (testBegin("info files mismatch")) |     if (testBegin("info files mismatch")) | ||||||
|     { |     { | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("archive.info has only current db with different db history id as backup.info"); | ||||||
|  |  | ||||||
|         // Load Parameters |         // Load Parameters | ||||||
|         StringList *argList = strLstDup(argListBase); |         StringList *argList = strLstDup(argListBase); | ||||||
|         strLstAddZ(argList, "--repo1-retention-full=2"); |         strLstAddZ(argList, "--repo1-retention-full=2"); | ||||||
|         harnessCfgLoad(cfgCmdExpire, argList); |         harnessCfgLoad(cfgCmdExpire, argList); | ||||||
|  |  | ||||||
|         // archive.info has only current db with different db history id as backup.info |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |  | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), |         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), | ||||||
|             harnessInfoChecksumZ( |             harnessInfoChecksumZ( | ||||||
|                 "[backup:current]\n" |                 "[backup:current]\n" | ||||||
| @@ -1043,14 +1109,15 @@ testRun(void) | |||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(1, 7, "0000000100000000"), "  none removed from 10-1/0000000100000000"); |             archiveExpectList(1, 7, "0000000100000000"), "none removed from 10-1/0000000100000000"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(1, 7, "0000000100000000"), "  none removed from 10-2/0000000100000000"); |             archiveExpectList(1, 7, "0000000100000000"), "none removed from 10-2/0000000100000000"); | ||||||
|  |  | ||||||
|         // archive.info old history db system id not the same as backup.info |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("archive.info old history db system id not the same as backup.info"); | ||||||
|  |  | ||||||
|         storagePutP( |         storagePutP( | ||||||
|             storageNewWriteP(storageTest, archiveInfoFileName), |             storageNewWriteP(storageTest, archiveInfoFileName), | ||||||
|             harnessInfoChecksumZ( |             harnessInfoChecksumZ( | ||||||
| @@ -1065,8 +1132,9 @@ testRun(void) | |||||||
|  |  | ||||||
|         TEST_ERROR(cmdExpire(), FormatError, "archive expiration cannot continue - archive and backup history lists do not match"); |         TEST_ERROR(cmdExpire(), FormatError, "archive expiration cannot continue - archive and backup history lists do not match"); | ||||||
|  |  | ||||||
|         // archive.info old history db version not the same as backup.info |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("archive.info old history db version not the same as backup.info"); | ||||||
|  |  | ||||||
|         storagePutP( |         storagePutP( | ||||||
|             storageNewWriteP(storageTest, archiveInfoFileName), |             storageNewWriteP(storageTest, archiveInfoFileName), | ||||||
|             harnessInfoChecksumZ( |             harnessInfoChecksumZ( | ||||||
| @@ -1081,8 +1149,9 @@ testRun(void) | |||||||
|  |  | ||||||
|         TEST_ERROR(cmdExpire(), FormatError, "archive expiration cannot continue - archive and backup history lists do not match"); |         TEST_ERROR(cmdExpire(), FormatError, "archive expiration cannot continue - archive and backup history lists do not match"); | ||||||
|  |  | ||||||
|         // archive.info has only current db with same db history id as backup.info |  | ||||||
|         //-------------------------------------------------------------------------------------------------------------------------- |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("archive.info has only current db with same db history id as backup.info"); | ||||||
|  |  | ||||||
|         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), |         storagePutP(storageNewWriteP(storageTest, backupInfoFileName), | ||||||
|             harnessInfoChecksumZ( |             harnessInfoChecksumZ( | ||||||
|                 "[backup:current]\n" |                 "[backup:current]\n" | ||||||
| @@ -1164,17 +1233,20 @@ testRun(void) | |||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(1, 7, "0000000100000000"), "  none removed from 10-1/0000000100000000"); |             archiveExpectList(1, 7, "0000000100000000"), "none removed from 10-1/0000000100000000"); | ||||||
|         TEST_RESULT_STR( |         TEST_RESULT_STR( | ||||||
|             strLstJoin(strLstSort(storageListP( |             strLstJoin(strLstSort(storageListP( | ||||||
|                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), |                 storageTest, strNewFmt("%s/%s/%s", strPtr(archiveStanzaPath), "10-2", "0000000100000000")), sortOrderAsc), ", "), | ||||||
|             archiveExpectList(6, 7, "0000000100000000"), |             archiveExpectList(6, 7, "0000000100000000"), | ||||||
|             "  all prior to 000000010000000000000006 removed from 10-2/0000000100000000"); |             "all prior to 000000010000000000000006 removed from 10-2/0000000100000000"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // ***************************************************************************************************************************** |     // ***************************************************************************************************************************** | ||||||
|     if (testBegin("archiveIdComparator()")) |     if (testBegin("archiveIdComparator()")) | ||||||
|     { |     { | ||||||
|  |         //-------------------------------------------------------------------------------------------------------------------------- | ||||||
|  |         TEST_TITLE("archiveId comparator sorting"); | ||||||
|  |  | ||||||
|         StringList *list = strLstNewParam(archiveIdComparator); |         StringList *list = strLstNewParam(archiveIdComparator); | ||||||
|  |  | ||||||
|         strLstAddZ(list, "10-4"); |         strLstAddZ(list, "10-4"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user