from testing.test_multivol import MultivolGnuFormatTest, MultivolPaxFormatTest
from testing.test_concat_compress import ConcatCompressTest
from testing.test_recover import \
- RecoverCorruptPayloadTest \
- , RecoverCorruptPayloadGZTest \
- , RecoverCorruptPayloadGZAESTest \
- , RecoverCorruptHeaderTest \
- , RecoverCorruptHeaderGZTest \
- , RecoverCorruptHeaderGZAESTest \
- , RecoverCorruptEntireHeaderTest \
- , RecoverCorruptEntireHeaderGZTest \
- , RecoverCorruptEntireHeaderGZAESTest \
- , RecoverCorruptTrailingDataTest \
- , RecoverCorruptTrailingDataGZTest \
- , RecoverCorruptTrailingDataGZAESTest
+ RecoverCorruptPayloadSingleTest \
+ , RecoverCorruptPayloadMultiTest \
+ , RecoverCorruptPayloadGZSingleTest \
+ , RecoverCorruptPayloadGZMultiTest \
+ , RecoverCorruptPayloadGZAESSingleTest \
+ , RecoverCorruptPayloadGZAESMultiTest \
+ , RecoverCorruptHeaderSingleTest \
+ , RecoverCorruptHeaderMultiTest \
+ , RecoverCorruptHeaderGZSingleTest \
+ , RecoverCorruptHeaderGZMultiTest \
+ , RecoverCorruptHeaderGZAESSingleTest \
+ , RecoverCorruptHeaderGZAESMultiTest \
+ , RecoverCorruptEntireHeaderSingleTest \
+ , RecoverCorruptEntireHeaderMultiTest \
+ , RecoverCorruptEntireHeaderGZSingleTest \
+ , RecoverCorruptEntireHeaderGZMultiTest \
+ , RecoverCorruptEntireHeaderGZAESSingleTest \
+ , RecoverCorruptEntireHeaderGZAESMultiTest \
+ , RecoverCorruptTrailingDataSingleTest \
+ , RecoverCorruptTrailingDataMultiTest \
+ , RecoverCorruptTrailingDataGZSingleTest \
+ , RecoverCorruptTrailingDataGZMultiTest \
+ , RecoverCorruptTrailingDataGZAESSingleTest \
+ , RecoverCorruptTrailingDataGZAESMultiTest
from testing.test_rescue_tar import RescueTarTest
from testing.test_encryption import EncryptionTest
from testing.test_deltatar import (DeltaTarTest, DeltaTar2Test,
, DeltaTarAes128ConcatTest
, HeaderTest, AESGCMTest
# testing.test_recover
- , RecoverCorruptPayloadTest
- , RecoverCorruptPayloadGZTest
- , RecoverCorruptPayloadGZAESTest
- , RecoverCorruptHeaderTest
- , RecoverCorruptHeaderGZTest
- , RecoverCorruptHeaderGZAESTest
- , RecoverCorruptEntireHeaderTest
- , RecoverCorruptEntireHeaderGZTest
- , RecoverCorruptEntireHeaderGZAESTest
- , RecoverCorruptTrailingDataTest
- , RecoverCorruptTrailingDataGZTest
- , RecoverCorruptTrailingDataGZAESTest
+
+ , RecoverCorruptPayloadSingleTest
+ , RecoverCorruptPayloadMultiTest
+ , RecoverCorruptPayloadGZSingleTest
+ , RecoverCorruptPayloadGZMultiTest
+ , RecoverCorruptPayloadGZAESSingleTest
+ , RecoverCorruptPayloadGZAESMultiTest
+ , RecoverCorruptHeaderSingleTest
+ , RecoverCorruptHeaderMultiTest
+ , RecoverCorruptHeaderGZSingleTest
+ , RecoverCorruptHeaderGZMultiTest
+ , RecoverCorruptHeaderGZAESSingleTest
+ , RecoverCorruptHeaderGZAESMultiTest
+ , RecoverCorruptEntireHeaderSingleTest
+ , RecoverCorruptEntireHeaderMultiTest
+ , RecoverCorruptEntireHeaderGZSingleTest
+ , RecoverCorruptEntireHeaderGZMultiTest
+ , RecoverCorruptEntireHeaderGZAESSingleTest
+ , RecoverCorruptEntireHeaderGZAESMultiTest
+ , RecoverCorruptTrailingDataSingleTest
+ , RecoverCorruptTrailingDataMultiTest
+ , RecoverCorruptTrailingDataGZSingleTest
+ , RecoverCorruptTrailingDataGZMultiTest
+ , RecoverCorruptTrailingDataGZAESSingleTest
+ , RecoverCorruptTrailingDataGZAESMultiTest
]:
try:
t = group (n)
from . import BaseTest
-TEST_PASSWORD = "test1234"
+TEST_PASSWORD = "test1234"
+TEST_VOLSIZ = 3 # MB
+TEST_FILESPERVOL = 3
###############################################################################
## helpers ##
FAILURES = 0 # files that could not be restored
MISMATCHES = 0 # files that were restored but corrupted
CORRUPT = corrupt_payload_start
+ VOLUMES = 1
def setUp(self):
"""
mode = self.COMPRESSION or "#"
bak_path = "backup_dir"
- backup_file = "the_full_backup.tar"
- backup_full = "%s/%s" % (bak_path, backup_file)
+ backup_file = "the_full_backup_%0.2d.tar"
+ backup_full = ("%s/%s" % (bak_path, backup_file)) % 0
index_file = "the_full_index"
if self.COMPRESSION is not None:
index_file += ".gz"
if self.PASSWORD is not None:
- backup_file += deltatar.PDTCRYPT_EXTENSION
- backup_full += deltatar.PDTCRYPT_EXTENSION
- index_file += deltatar.PDTCRYPT_EXTENSION
-
- def vname (*a, **kwa):
- return backup_file
+ backup_file = "%s.%s" % (backup_file, deltatar.PDTCRYPT_EXTENSION)
+ backup_full = "%s.%s" % (backup_full, deltatar.PDTCRYPT_EXTENSION)
+ index_file = "%s.%s" % (index_file , deltatar.PDTCRYPT_EXTENSION)
+
+ if self.VOLUMES > 1:
+ # add n files for one nth the volume size each
+ fsiz = int (TEST_VOLSIZ / TEST_FILESPERVOL * 1024 * 1024)
+ fcnt = self.VOLUMES * TEST_FILESPERVOL
+ for i in range (fcnt):
+ nvol, invol = divmod(i, TEST_FILESPERVOL)
+ f = "dummy_vol_%d_n_%0.2d" % (nvol, invol)
+ self.hash [f] = self.create_file ("%s/%s"
+ % (self.src_path, f),
+ fsiz)
+
+ def vname (_x, _y, n, *a, **kwa):
+ return backup_file % n
dtar = deltatar.DeltaTar (mode=mode,
logger=None,
volume_name_func=vname)
dtar.create_full_backup \
- (source_path=self.src_path, backup_path=bak_path)
+ (source_path=self.src_path, backup_path=bak_path,
+ max_volume_size=1)
if self.PASSWORD is not None:
# ensure all files are at least superficially in PDT format
shutil.rmtree (self.dst_path)
-class RecoverCorruptPayloadTest (RecoverTest):
+class RecoverCorruptPayloadTestBase (RecoverTest):
COMPRESSION = None
PASSWORD = None
FAILURES = 0 # tarfile will restore but corrupted, as
MISMATCHES = 1 # revealed by the hash
+class RecoverCorruptPayloadSingleTest (RecoverCorruptPayloadTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptPayloadMultiTest (RecoverCorruptPayloadTestBase):
+ VOLUMES = 3
+
-class RecoverCorruptPayloadGZTest (RecoverTest):
+class RecoverCorruptPayloadGZTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = None
FAILURES = 1
MISMATCHES = 0
+class RecoverCorruptPayloadGZSingleTest (RecoverCorruptPayloadGZTestBase):
+ VOLUMES = 1
-class RecoverCorruptPayloadGZAESTest (RecoverTest):
+class RecoverCorruptPayloadGZMultiTest (RecoverCorruptPayloadGZTestBase):
+ VOLUMES = 3
+
+
+class RecoverCorruptPayloadGZAESTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = TEST_PASSWORD
FAILURES = 1
MISMATCHES = 0
+class RecoverCorruptPayloadGZAESSingleTest (RecoverCorruptPayloadGZAESTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptPayloadGZAESMultiTest (RecoverCorruptPayloadGZAESTestBase):
+ VOLUMES = 3
-class RecoverCorruptHeaderTest (RecoverTest):
+
+class RecoverCorruptHeaderTestBase (RecoverTest):
COMPRESSION = None
PASSWORD = None
FAILURES = 1
CORRUPT = corrupt_header
MISMATCHES = 0
+class RecoverCorruptHeaderSingleTest (RecoverCorruptHeaderTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptHeaderMultiTest (RecoverCorruptHeaderTestBase):
+ VOLUMES = 3
+
-class RecoverCorruptHeaderGZTest (RecoverTest):
+class RecoverCorruptHeaderGZTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = None
FAILURES = 1
CORRUPT = corrupt_header
MISMATCHES = 0
+class RecoverCorruptHeaderGZSingleTest (RecoverCorruptHeaderGZTestBase):
+ VOLUMES = 1
-class RecoverCorruptHeaderGZAESTest (RecoverTest):
+class RecoverCorruptHeaderGZMultiTest (RecoverCorruptHeaderGZTestBase):
+ VOLUMES = 3
+
+
+class RecoverCorruptHeaderGZAESTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = TEST_PASSWORD
FAILURES = 1
CORRUPT = corrupt_header
MISMATCHES = 0
+class RecoverCorruptHeaderGZAESSingleTest (RecoverCorruptHeaderGZAESTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptHeaderGZAESMultiTest (RecoverCorruptHeaderGZAESTestBase):
+ VOLUMES = 3
-class RecoverCorruptEntireHeaderTest (RecoverTest):
+
+class RecoverCorruptEntireHeaderTestBase (RecoverTest):
COMPRESSION = None
PASSWORD = None
FAILURES = 1
CORRUPT = corrupt_entire_header
MISMATCHES = 0
+class RecoverCorruptEntireHeaderSingleTest (RecoverCorruptEntireHeaderTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptEntireHeaderMultiTest (RecoverCorruptEntireHeaderTestBase):
+ VOLUMES = 3
+
-class RecoverCorruptEntireHeaderGZTest (RecoverTest):
+class RecoverCorruptEntireHeaderGZTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = None
FAILURES = 1
CORRUPT = corrupt_entire_header
MISMATCHES = 0
+class RecoverCorruptEntireHeaderGZSingleTest (RecoverCorruptEntireHeaderGZTestBase):
+ VOLUMES = 1
-class RecoverCorruptEntireHeaderGZAESTest (RecoverTest):
+class RecoverCorruptEntireHeaderGZMultiTest (RecoverCorruptEntireHeaderGZTestBase):
+ VOLUMES = 3
+
+
+class RecoverCorruptEntireHeaderGZAESTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = TEST_PASSWORD
FAILURES = 1
CORRUPT = corrupt_entire_header
MISMATCHES = 0
+class RecoverCorruptEntireHeaderGZAESSingleTest (RecoverCorruptEntireHeaderGZAESTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptEntireHeaderGZAESMultiTest (RecoverCorruptEntireHeaderGZAESTestBase):
+ VOLUMES = 3
-class RecoverCorruptTrailingDataTest (RecoverTest):
+
+class RecoverCorruptTrailingDataTestBase (RecoverTest):
# plain Tar is indifferent against traling data and the results
# are consistent
COMPRESSION = None
CORRUPT = corrupt_trailing_data
MISMATCHES = 0
+class RecoverCorruptTrailingDataSingleTest (RecoverCorruptTrailingDataTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptTrailingDataMultiTest (RecoverCorruptTrailingDataTestBase):
+ VOLUMES = 3
+
-class RecoverCorruptTrailingDataGZTest (RecoverTest):
+class RecoverCorruptTrailingDataGZTestBase (RecoverTest):
# reading past the final object will cause decompression failure;
# all objects except for the last survive unharmed though
COMPRESSION = "#gz"
CORRUPT = corrupt_trailing_data
MISMATCHES = 0
+class RecoverCorruptTrailingDataGZSingleTest (RecoverCorruptTrailingDataGZTestBase):
+ VOLUMES = 1
-class RecoverCorruptTrailingDataGZAESTest (RecoverTest):
+class RecoverCorruptTrailingDataGZMultiTest (RecoverCorruptTrailingDataGZTestBase):
+ VOLUMES = 3
+
+
+class RecoverCorruptTrailingDataGZAESTestBase (RecoverTest):
COMPRESSION = "#gz"
PASSWORD = TEST_PASSWORD
FAILURES = 0
CORRUPT = corrupt_trailing_data
MISMATCHES = 0
+class RecoverCorruptTrailingDataGZAESSingleTest (RecoverCorruptTrailingDataGZAESTestBase):
+ VOLUMES = 1
+
+class RecoverCorruptTrailingDataGZAESMultiTest (RecoverCorruptTrailingDataGZAESTestBase):
+ VOLUMES = 3