, RecoverCorruptTrailingDataGZSingleTest \
, RecoverCorruptTrailingDataGZMultiTest \
, RecoverCorruptTrailingDataGZAESSingleTest \
- , RecoverCorruptTrailingDataGZAESMultiTest
+ , RecoverCorruptTrailingDataGZAESMultiTest \
+ , RecoverCorruptVolumeTest \
+ , RecoverCorruptVolumeGZTest \
+ , RecoverCorruptVolumeGZAESTest
from testing.test_rescue_tar import RescueTarTest
from testing.test_encryption import EncryptionTest
from testing.test_deltatar import (DeltaTarTest, DeltaTar2Test,
, DeltaTarGzipAes128ConcatTest
, DeltaTarAes128ConcatTest
, HeaderTest, AESGCMTest
- # testing.test_recover
+ # testing.test_recover
, RecoverCorruptPayloadSingleTest
, RecoverCorruptPayloadMultiTest
, RecoverCorruptPayloadGZSingleTest
, RecoverCorruptTrailingDataGZSingleTest
, RecoverCorruptTrailingDataGZMultiTest
, RecoverCorruptTrailingDataGZAESSingleTest
- , RecoverCorruptTrailingDataGZAESMultiTest
+ , RecoverCorruptVolumeTest
+ , RecoverCorruptVolumeGZTest
+ , RecoverCorruptVolumeGZAESTest
]:
try:
t = group (n)
TEST_FILESPERVOL = 3
VOLUME_OVERHEAD = 1.4 # account for tar overhead when fitting files into
# volumes; this is black magic
+TEST_BLOCKSIZE = 4096
###############################################################################
## helpers ##
os.close (fd)
+def corrupt_volume (_, fname, compress, encrypt):
+ """
+ Zero out an entire volume.
+ """
+ fd = os.open (fname, os.O_WRONLY)
+ size = os.lseek (fd, 0, os.SEEK_END)
+ assert os.lseek (fd, 0, os.SEEK_SET) == 0
+ zeros = bytes (b'\x00' * TEST_BLOCKSIZE)
+ while size > 0:
+ todo = min (size, TEST_BLOCKSIZE)
+ os.write (fd, zeros [:todo])
+ size -= todo
+ os.close (fd)
+
+
###############################################################################
## tests ##
###############################################################################
class RecoverCorruptTrailingDataGZAESMultiTest (RecoverCorruptTrailingDataGZAESTestBase):
VOLUMES = 3
+
+class RecoverCorruptVolumeBaseTest (RecoverTest):
+ COMPRESSION = None
+ PASSWORD = None
+ FAILURES = 8
+ CORRUPT = corrupt_volume
+ VOLUMES = 3
+
+class RecoverCorruptVolumeTest (RecoverCorruptVolumeBaseTest):
+ pass
+
+class RecoverCorruptVolumeGZTest (RecoverTest):
+ COMPRESSION = "#gz"
+ PASSWORD = None
+ FAILURES = 8
+ CORRUPT = corrupt_volume
+ VOLUMES = 3
+
+class RecoverCorruptVolumeGZAESTest (RecoverTest):
+ COMPRESSION = "#gz"
+ PASSWORD = TEST_PASSWORD
+ FAILURES = 8
+ CORRUPT = corrupt_volume
+ VOLUMES = 3
+