- compare files
- repeat whole procedure with differntly-sized big and small source files
+As with test_volume_size_accuracty, this file can be run as stand-alone test
+(repeats endlessly) or as unittest (runs only a fixed number of times)
+
.. codeauthor:: Intra2net AG <info@intra2net>
"""
from tempfile import TemporaryDirectory, NamedTemporaryFile
from time import time
from traceback import format_exc
+from unittest import TestCase
# try to import the tarfile from source, not the globally installed one
source_base = dirname(dirname(abspath(__file__)))
#: buffer size for reading file for hashing
HASH_BUF_SIZE = 4096
+#: modes for tar file creation
+CREATE_MODES = 'w:tar', 'w|tar', 'w|gz', 'w|bz2', 'w#gz'
+ #'w#gz.aes128', 'w#gz.aes256', 'w#aes128', 'w#aes256'
+ # not currently working: 'w:gz', 'w:bz2',
+
+#: modes for tar file extraction: only the start, in get_extract_mode the
+#: corresponding suffix ({tar|gz|bz2}[.aesXXX] is added
+EXTRACT_MODE_STARTS = 'r:', 'r#', 'r:*'
+
+#: number of runs of each mode in unittest
+UNITTEST_REPETITIONS = 10
+
def create_file(file_size, temp_dir):
""" create random file of given size in given dir
return random.getrandbits(SEED_BITS)
+def get_extract_mode(create_mode, extract_start):
+ """ for a given mode for tar file creation complete extract mode from start
+
+ returns None if create mode is incompatible with start of extract mode
+ """
+
+ if ('#' in extract_start) and ('#' not in create_mode):
+ return None # not possible
+ if ':' in extract_start and not create_mode.endswith('tar'):
+ return None # not possible
+ full_extract_mode = extract_start
+ if extract_start[-1] != '*':
+ full_extract_mode += create_mode[2:]
+ return full_extract_mode
+
+
def test_forever():
""" Main function, called when running file as script
# more params
fast_fail = True
print_everything = False
- create_modes = 'w:tar', 'w|tar', 'w|gz', 'w|bz2', 'w#gz'
- #'w#gz.aes128', 'w#gz.aes256', 'w#aes128', 'w#aes256'
- # not currently working: 'w:gz', 'w:bz2',
- extract_mode_starts = 'r:', 'r#', 'r:*'
# seed properly
random.seed()
try:
start_time = time()
while not do_stop:
- for create_mode in create_modes:
+ for create_mode in CREATE_MODES:
if do_stop:
break
- for extract_start in extract_mode_starts:
+ for extract_start in EXTRACT_MODE_STARTS:
if do_stop:
break
# figure out extract mode for tar file
- if ('#' in extract_start) and ('#' not in create_mode):
- continue # not possible
- if ':' in extract_start and \
- not create_mode.endswith('tar'):
- continue # not possible
- full_extract_mode = extract_start
- if extract_start[-1] != '*':
- full_extract_mode += create_mode[2:]
+ full_extract_mode = get_extract_mode(create_mode,
+ extract_start)
+ if full_extract_mode is None:
+ continue # incompatible modes
+
# create seed to re-create results
seed = create_seed()
print(params)
+class VolumeSplitTest(TestCase):
+ """ runs all combinations of params from run_forever a few times """
+
+ def test_each(self):
+ # create temp dir
+ with TemporaryDirectory(prefix='deltatar_test_') as temp_dir:
+
+ # repeat given number of times
+ for _ in range(UNITTEST_REPETITIONS):
+
+ # loop over params
+ for create_mode in CREATE_MODES:
+ for extract_start in EXTRACT_MODE_STARTS:
+
+ # figure out extract mode for tar file
+ full_extract_mode = get_extract_mode(create_mode,
+ extract_start)
+ if full_extract_mode is None:
+ continue # incompatible modes
+
+ # create seed to re-create results
+ seed = create_seed()
+
+ # run test
+ everything_ok = \
+ do_test(seed, create_mode, full_extract_mode,
+ temp_dir)
+
+ self.assertTrue(everything_ok)
+
+
if __name__ == '__main__':
test_forever()