adding an integration test that uses create_pseudo_random_files to create a determini...
authorEduardo Robles Elvira <edulix@wadobo.com>
Thu, 7 Aug 2014 09:38:14 +0000 (11:38 +0200)
committerEduardo Robles Elvira <edulix@wadobo.com>
Thu, 7 Aug 2014 09:38:35 +0000 (11:38 +0200)
runtests.py
testing/create_pseudo_random_files.py
testing/run_benchmark.py
testing/test_compression_level.py [new file with mode: 0644]

index 0d7f99c..a168d8b 100755 (executable)
@@ -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()
index a16de77..1d7d8d5 100755 (executable)
@@ -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()
index 9884a46..3e2ef85 100755 (executable)
@@ -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 (file)
index 0000000..7bbebf9
--- /dev/null
@@ -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
+# <http://www.gnu.org/licenses/lgpl-3.0.html>
+
+# Authors: Victor Ramirez de la Corte <virako@wadobo.com>
+#          Eduardo Robles Elvira <edulix@wadobo.com>
+
+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