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