From: Eduardo Robles Elvira Date: Thu, 7 Aug 2014 09:38:14 +0000 (+0200) Subject: adding an integration test that uses create_pseudo_random_files to create a determini... X-Git-Tag: v2.2~48 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=08bb4b4aa403826297722b08c8b250256d7e60c8;p=python-delta-tar adding an integration test that uses create_pseudo_random_files to create a deterministic files and directories tree and then uses delta-tar with the run_benchmark script. --- diff --git a/runtests.py b/runtests.py index 0d7f99c..a168d8b 100755 --- a/runtests.py +++ b/runtests.py @@ -29,6 +29,8 @@ from testing.test_deltatar import (DeltaTarTest, DeltaTar2Test, DeltaTarGzipAes256ConcatTest, DeltaTarAes128ConcatTest, DeltaTarAes256ConcatTest ) +from testing.test_compression_level import suite if __name__ == "__main__": + unittest.TextTestRunner().run(suite()) unittest.main() diff --git a/testing/create_pseudo_random_files.py b/testing/create_pseudo_random_files.py index a16de77..1d7d8d5 100755 --- a/testing/create_pseudo_random_files.py +++ b/testing/create_pseudo_random_files.py @@ -131,7 +131,28 @@ def get_files_per_folder(nfile, ndir, distribute_files): return list_files -def main(parser): +def main(args = None): + parser = argparse.ArgumentParser(description='Wgeneration option. ') + parser.add_argument('--seed', type=int, action='store', help='Seed. ') + parser.add_argument('--ndir', type=int, action='store', + help='Number of directories for create. ') + parser.add_argument('--deep', type=int, action='store', + help='Percent for distribute deep.') + parser.add_argument('--nfile', type=int, action='store', + help='Number of files for create. ') + parser.add_argument('--size', type=int, action='store', + help='Total size of files (MB) ') + parser.add_argument('--distribute_files', type=int, action='store', + help='Percent for distribute files. ') + parser.add_argument('--distribute_size', type=int, action='store', + help='Percent to distribute size of files. ') + parser.add_argument('--path', action='store', help='Path to generate. ') + + if not args: + parser = parser.parse_args() + else: + parser = parser.parse_args(args) + if parser.seed is not None: seed = parser.seed else: @@ -199,24 +220,8 @@ def main(parser): list_dir[0][1] = ndir_path else: del list_dir[0] + return seed if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Wgeneration option. ') - parser.add_argument('--seed', type=int, action='store', help='Seed. ') - parser.add_argument('--ndir', type=int, action='store', - help='Number of directories for create. ') - parser.add_argument('--deep', type=int, action='store', - help='Percent for distribute deep.') - parser.add_argument('--nfile', type=int, action='store', - help='Number of files for create. ') - parser.add_argument('--size', type=int, action='store', - help='Total size of files (MB) ') - parser.add_argument('--distribute_files', type=int, action='store', - help='Percent for distribute files. ') - parser.add_argument('--distribute_size', type=int, action='store', - help='Percent to distribute size of files. ') - parser.add_argument('--path', action='store', help='Path to generate. ') - - results = parser.parse_args() - main(results) + main() diff --git a/testing/run_benchmark.py b/testing/run_benchmark.py index 9884a46..3e2ef85 100755 --- a/testing/run_benchmark.py +++ b/testing/run_benchmark.py @@ -28,7 +28,7 @@ import io import pstats -def main(): +def main(args = None): ''' Main function, parses the command line arguments and launches the appropiate benchmark test. @@ -59,7 +59,11 @@ def main(): 'tottime'], default="cumulative") - pargs = parser.parse_args() + if not args: + pargs = parser.parse_args() + else: + pargs = parser.parse_args(args) + compression_level = pargs.compression_level path = pargs.path diff --git a/testing/test_compression_level.py b/testing/test_compression_level.py new file mode 100644 index 0000000..7bbebf9 --- /dev/null +++ b/testing/test_compression_level.py @@ -0,0 +1,91 @@ +# Copyright (C) 2014 Intra2net AG +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# + +# Authors: Victor Ramirez de la Corte +# Eduardo Robles Elvira + +import os +import shutil +import sys +import hashlib +import unittest +from . import run_benchmark +from . import create_pseudo_random_files + + +class CompressLevelTest(unittest.TestCase): + """ + Small integration test that uses create_pseudo_random_files to create a + deterministic files and directories tree and then uses delta-tar with the + run_benchmark script. + """ + + BUF_SIZE = 2**12 + + def __init__(self, num_dir, num_files, size, compression_lvl_1, compression_lvl_2): + super(CompressLevelTest, self).__init__('test_compression_level') + self.num_dir = num_dir + self.num_files = num_files + self.size = size + self.compression_lvl_1 = compression_lvl_1 + self.compression_lvl_2 = compression_lvl_2 + + def setUp(self): + ''' + Create pseudo random test files + ''' + shutil.rmtree("source_dir", ignore_errors=True) + args = ['--nfile', str(self.num_files), + '--ndir', str(self.num_dir), + '--size', str(self.size), + '--path', 'source_dir', + '--seed', '1337'] + self.seed = create_pseudo_random_files.main(args) + + def tearDown(self): + ''' + Remove pseudo random files created by unit tests + ''' + shutil.rmtree("source_dir", ignore_errors=True) + + def test_compression_level(self): + ''' + Create two test compression with two different compression level. + ''' + args = ['--test', 'delta-tarfile', + '-l', str(self.compression_lvl_1), + '-p', 'source_dir'] + run_benchmark.main(args) + size1 = os.path.getsize('test_tarfile.tar.gz') + os.unlink('test_tarfile.tar.gz') + + args = ['--test', 'delta-tarfile', + '-l', str(self.compression_lvl_2), + '-p', 'source_dir'] + run_benchmark.main(args) + size2 = os.path.getsize('test_tarfile.tar.gz') + os.unlink('test_tarfile.tar.gz') + + self.assertGreater(size1, size2, msg="""Fail test using lvl %d and + lvl %d, with the seed: %d. """ % (self.compression_lvl_1, + self.compression_lvl_2, self.seed)) + + +def suite(): + suite = unittest.TestSuite() + for size in (10, ): + suite.addTest(CompressLevelTest(int(size / 10), size, size, 1, 8)) + return suite