convert test_deltatar to revised crypto
authorPhilipp Gesang <philipp.gesang@intra2net.com>
Fri, 21 Apr 2017 07:57:05 +0000 (09:57 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Mon, 2 Apr 2018 11:34:08 +0000 (13:34 +0200)
testing/test_deltatar.py

index 0d61301..e1646be 100644 (file)
@@ -29,8 +29,10 @@ from functools import partial
 from unittest import skip, SkipTest
 
 import deltatar.tarfile as tarfile
-from tarfile import TarFile
+from deltatar.tarfile import TarFile
 from deltatar.deltatar import DeltaTar, NO_MATCH, MATCH, PARENT_MATCH
+from deltatar.deltatar import PDTCRYPT_EXTENSION as deltatar_PDTCRYPT_EXTENSION
+import deltatar.crypto as crypto
 
 from . import BaseTest
 from . import new_volume_handler
@@ -42,7 +44,7 @@ class DeltaTarTest(BaseTest):
     MODE = ''
     MODE_COMPRESSES = False
 
-    PASSWORD = None
+    ENCRYPTION = None  # (password : str, paramversion : int) option
 
     GIT_DIR = '.git'
 
@@ -82,7 +84,9 @@ class DeltaTarTest(BaseTest):
         '''
         Creates a full backup without any filtering and restores it.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -108,7 +112,9 @@ class DeltaTarTest(BaseTest):
         '''
         Creates a full backup and checks the index' checksum of files
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -154,10 +160,11 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('compression information is lost when creating '
                            'multiple volumes with no Stream')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
-
         self.hash = dict()
         os.makedirs('source_dir2')
         self.hash["source_dir2/big"]  = self.create_file("source_dir2/big", 100000)
@@ -207,10 +214,11 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
-
         self.hash = dict()
         os.makedirs('source_dir2')
         self.hash["source_dir2/big"]  = self.create_file("source_dir2/big", 3*1024*1024)
@@ -255,7 +263,9 @@ class DeltaTarTest(BaseTest):
         Tests that the index file for a full backup can store extra_data and
         that this data can be retrieved.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         extra_data = dict(
@@ -282,7 +292,9 @@ class DeltaTarTest(BaseTest):
         Tests that the index file for a diff backup can store extra_data and
         that this data can be retrieved.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         extra_data = dict(
@@ -315,7 +327,9 @@ class DeltaTarTest(BaseTest):
         Creates a full backup without any filtering with multiple volumes and
         restore it.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         shutil.copytree(self.GIT_DIR, "source_dir2")
@@ -351,10 +365,11 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
-
         self.hash = dict()
         os.makedirs('source_dir2')
         self.hash["source_dir2/big"]  = self.create_file("source_dir2/big", 100000)
@@ -405,15 +420,22 @@ class DeltaTarTest(BaseTest):
         fo = open(tar_path, 'rb')
         fo.seek(offset)
         def new_volume_handler(mode, tarobj, base_name, volume_number):
+            suf = DeltaTar._DeltaTar__file_extensions_dict[mode]
+            if self.ENCRYPTION is not None:
+                # deltatar module is shadowed here
+                suf += "." + deltatar_PDTCRYPT_EXTENSION
             tarobj.open_volume(datetime.now().strftime(
-                "backup_dir/bfull-%Y-%m-%d-%H%M-002.tar") +\
-                DeltaTar._DeltaTar__file_extensions_dict[mode])  # pylint: disable=no-member
+                "backup_dir/bfull-%Y-%m-%d-%H%M-002.tar") + suf)
         new_volume_handler = partial(new_volume_handler, self.MODE)
 
+        crypto_ctx = None
+        if self.ENCRYPTION is not None:
+            crypto_ctx = crypto.Decrypt (password)
+
         tarobj = TarFile.open(mode="r" + self.MODE, fileobj=fo,
-                              concat_compression=True,
                               new_volume_handler=new_volume_handler,
-                              password=self.PASSWORD)
+                              encryption=crypto_ctx)
+
         member = tarobj.next()
         member.path = deltatar.unprefixed(member.path)
         member.name = deltatar.unprefixed(member.name)
@@ -424,6 +446,7 @@ class DeltaTarTest(BaseTest):
 
         os.unlink("huge")
 
+
     def test_restore_from_index(self):
         '''
         Restores a full backup using an index file.
@@ -432,7 +455,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -462,7 +487,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -489,7 +516,9 @@ class DeltaTarTest(BaseTest):
         '''
         Tests create backup basic filtering.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger,
                             included_files=["test", "small"],
                             excluded_files=["test/huge"])
@@ -527,7 +556,10 @@ class DeltaTarTest(BaseTest):
             return True
 
         filter_func = partial(filter_func, visited_paths)
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger,
                             included_files=["test", "small"],
                             excluded_files=["test/huge"],
@@ -567,7 +599,10 @@ class DeltaTarTest(BaseTest):
             return False
 
         filter_func = partial(filter_func, visited_paths)
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger,
                             included_files=["test", "small"],
                             excluded_files=["test/huge"],
@@ -604,7 +639,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -647,7 +684,10 @@ class DeltaTarTest(BaseTest):
             return True
 
         filter_func = partial(filter_func, visited_paths)
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -678,7 +718,9 @@ class DeltaTarTest(BaseTest):
         '''
         Creates a backup, and then filter when doing the tar based restore.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -718,7 +760,10 @@ class DeltaTarTest(BaseTest):
             return True
 
         filter_func = partial(filter_func, visited_paths)
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -813,7 +858,10 @@ class DeltaTarTest(BaseTest):
         included_files = [
             'test/huge2'
         ]
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger,
                             included_files=included_files)
 
@@ -828,7 +876,7 @@ class DeltaTarTest(BaseTest):
         tar_filename = deltatar.volume_name_func('backup_dir', True, 0)
         tar_path = os.path.join("backup_dir", tar_filename)
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        deltatar = DeltaTar(mode=self.MODE, password=password,
                             logger=self.consoleLogger)
         deltatar.restore_backup(target_path="source_dir",
                                 backup_tar_path=tar_path)
@@ -846,7 +894,10 @@ class DeltaTarTest(BaseTest):
         included_files = [
             'test/huge2'
         ]
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -860,7 +911,7 @@ class DeltaTarTest(BaseTest):
         tar_filename = deltatar.volume_name_func('backup_dir', True, 0)
         tar_path = os.path.join("backup_dir", tar_filename)
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        deltatar = DeltaTar(mode=self.MODE, password=password,
                             logger=self.consoleLogger,
                             included_files=included_files)
         deltatar.restore_backup(target_path="source_dir",
@@ -879,7 +930,10 @@ class DeltaTarTest(BaseTest):
         included_files = [
             'test/huge2'
         ]
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -893,7 +947,7 @@ class DeltaTarTest(BaseTest):
         tar_filename = deltatar.volume_name_func('backup_dir', True, 0)
         tar_path = os.path.join("backup_dir", tar_filename)
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        deltatar = DeltaTar(mode=self.MODE, password=password,
                             logger=self.consoleLogger,
                             included_files=included_files)
         deltatar.restore_backup(target_path="source_dir",
@@ -910,7 +964,9 @@ class DeltaTarTest(BaseTest):
         Tests the collate iterators functionality with two exact directories,
         using an index iterator from a backup and the exact same source dir.
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -942,7 +998,9 @@ class DeltaTarTest(BaseTest):
         '''
         self.hash["source_dir/zzzz"]  = self.create_file("source_dir/zzzz", 100)
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -976,8 +1034,9 @@ class DeltaTarTest(BaseTest):
         Use the collate iterators functionality with two different directories.
         It must behave in an expected way.
         '''
-
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1030,7 +1089,9 @@ class DeltaTarTest(BaseTest):
         '''
         Creates an empty (no changes) backup diff
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1073,7 +1134,9 @@ class DeltaTarTest(BaseTest):
         '''
         Creates a diff backup when there are new files
         '''
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1141,7 +1204,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1182,7 +1247,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1230,7 +1297,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         shutil.rmtree("source_dir")
@@ -1301,7 +1370,9 @@ class DeltaTarTest(BaseTest):
             raise SkipTest('this test only works for uncompressed '
                            'or concat compressed modes')
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         shutil.rmtree("source_dir")
@@ -1406,7 +1477,9 @@ class DeltaTarTest(BaseTest):
         self.create_symlink("/foo/bar/baz", "source_dir/symlinks/xyzzy")
         self.create_symlink("burp/../buzz", "source_dir/symlinks/blup")
         self.create_symlink("../../../../biz", "source_dir/symlinks/bleep")
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1441,7 +1514,9 @@ class DeltaTarTest(BaseTest):
         of them must be filtered out.
         '''
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1484,7 +1559,9 @@ class DeltaTarTest(BaseTest):
         path that is abused to write outside the extraction prefix.
         '''
 
-        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+        password, paramversion = self.ENCRYPTION or (None, None)
+        deltatar = DeltaTar(mode=self.MODE, password=password,
+                            crypto_paramversion=paramversion,
                             logger=self.consoleLogger)
 
         # create first backup
@@ -1588,8 +1665,8 @@ class DeltaTarGzipAes128ConcatTest(DeltaTarTest):
     '''
     Same as DeltaTar but with specific gzip aes128 concat stream mode
     '''
-    MODE = '#gz.aes128'
-    PASSWORD = 'some magic key'
+    MODE = '#gz'
+    ENCRYPTION = ('some magic key', 1)
     MODE_COMPRESSES = True
 
 
@@ -1597,7 +1674,6 @@ class DeltaTarAes128ConcatTest(DeltaTarTest):
     '''
     Same as DeltaTar but with specific aes128 concat stream mode
     '''
-    MODE = '#aes128'
-    PASSWORD = 'some magic key'
+    ENCRYPTION = ('some magic key', 1)