From 9ce7426c6670296575333e572c1dad8772337680 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Wed, 8 Jun 2016 17:48:23 +0200 Subject: [PATCH] created unittest for get_file_size --- testing/test_multivol.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 48 insertions(+), 0 deletions(-) diff --git a/testing/test_multivol.py b/testing/test_multivol.py index fac6d61..0026881 100644 --- a/testing/test_multivol.py +++ b/testing/test_multivol.py @@ -168,6 +168,54 @@ class MultivolGnuFormatTest(BaseTest): assert os.path.exists(key) assert value == self.md5sum(key) + def test_get_file_size(self): + ''' test _Stream.get_file_size which is basis for multivol with compres + ''' + + # create test files of different sizes + size_factor = 4 + n_sizes = 14 # 1,4,16,64...,1 MiB=2**20=4**10, 4MiB, 16MiB, 64MiB + next_size = 1 + sizes = [] + file_names = [] + for exponents in range(n_sizes): + sizes.append(next_size) + new_name = 'size_test_{:08d}'.format(next_size) + file_names.append(new_name) + self.create_file(new_name, next_size) + next_size *= size_factor + + max_err = 0 + max_err_post = 0 + + for mode in 'w|gz', 'w|bz2', 'w|xz', 'w#gz', 'w#gz.aes128', \ + 'w#gz.aes256', 'w#aes128': + tar_file_name = "size_test.tar." + mode[2:] + for size_number in range(1,n_sizes): + for order in 1,-1: + tarobj = TarFile.open(tar_file_name, + mode=mode, + format=self.tarfile_format, + password='test') + for file_name in file_names[:size_number][::order]: + tarobj.add(file_name) + estimate = tarobj.fileobj.get_file_size() + tarobj.close() + estimate_post = tarobj.fileobj.get_file_size() + actual_size = os.stat(tar_file_name).st_size + err = abs(actual_size - estimate) + print('mode {}, {} files: estim={}, true={}, post={}, err={}' + .format(mode, size_number, estimate, actual_size, + estimate_post, err)) + os.unlink(tar_file_name) + if err > max_err: + max_err = err + err = abs(actual_size - estimate_post) + if err > max_err_post: + max_err_post = err + + print('max err is {}, post={}'.format(max_err, max_err_post)) + def test_volume_extract1(self): ''' Create a tar file with multiple volumes and one file and extract it -- 1.7.1