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
MODE = ''
MODE_COMPRESSES = False
- PASSWORD = None
+ ENCRYPTION = None # (password : str, paramversion : int) option
GIT_DIR = '.git'
'''
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
'''
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
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)
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)
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(
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(
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")
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)
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)
os.unlink("huge")
+
def test_restore_from_index(self):
'''
Restores a full backup using an index file.
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
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
'''
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"])
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"],
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"],
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
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
'''
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
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
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)
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)
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
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",
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
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",
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
'''
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
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
'''
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
'''
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
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
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
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")
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")
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
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
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
'''
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
'''
Same as DeltaTar but with specific aes128 concat stream mode
'''
- MODE = '#aes128'
- PASSWORD = 'some magic key'
+ ENCRYPTION = ('some magic key', 1)