From df6088100bcba541e9820f2e0d3e6e9bc53d96d2 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Mon, 25 Jul 2016 13:08:31 +0200 Subject: [PATCH] created Unittest for test_volume_split --- runtests.py | 1 + testing/test_volume_split.py | 84 +++++++++++++++++++++++++++++++++++------- 2 files changed, 71 insertions(+), 14 deletions(-) diff --git a/runtests.py b/runtests.py index fdbab7f..99e19b0 100755 --- a/runtests.py +++ b/runtests.py @@ -94,6 +94,7 @@ from testing.test_deltatar import (DeltaTarTest, DeltaTar2Test, ) from testing.test_compression_level import suite from testing.test_volume_size_accuracy import VolumeSizeAccuracyTest +from testing.test_volume_split import VolumeSplitTest if __name__ == "__main__": if len(sys.argv) == 1: diff --git a/testing/test_volume_split.py b/testing/test_volume_split.py index aef1cb0..50e1c14 100755 --- a/testing/test_volume_split.py +++ b/testing/test_volume_split.py @@ -15,6 +15,9 @@ More precisely: - 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 """ @@ -27,6 +30,7 @@ from hashlib import md5 as hash_type 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__))) @@ -59,6 +63,18 @@ SEED_BITS = int(log2(sys.maxsize+1)) #: 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 @@ -298,6 +314,22 @@ def create_seed(): 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 @@ -307,10 +339,6 @@ def test_forever(): # 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() @@ -326,22 +354,19 @@ def test_forever(): 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() @@ -389,5 +414,36 @@ def test_forever(): 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() -- 1.7.1