improving the empty diff backup unit test
authorEduardo Robles Elvira <edulix@wadobo.com>
Mon, 5 Aug 2013 16:38:07 +0000 (18:38 +0200)
committerEduardo Robles Elvira <edulix@wadobo.com>
Mon, 5 Aug 2013 16:38:07 +0000 (18:38 +0200)
deltatar/deltatar.py
testing/test_deltatar.py

index 5e93a25..e04ab23 100644 (file)
@@ -22,6 +22,7 @@ import logging
 import datetime
 import binascii
 import os
+import shutil
 import re
 import stat
 import json
@@ -909,9 +910,16 @@ class DeltaTar(object):
             os.chdir(target_path)
 
             def filter(cls, tarinfo):
-                tarinfo.path = self.unprefixed(tarinfo.path)
-                tarinfo.name = self.unprefixed(tarinfo.name)
-                return cls.filter_path(tarinfo.path, '.', tarinfo.isdir()) != NO_MATCH
+                if tarinfo.path.startswith("snapshot://"):
+                    tarinfo.path = self.unprefixed(tarinfo.path)
+                    tarinfo.name = self.unprefixed(tarinfo.name)
+                    return cls.filter_path(tarinfo.path, '.', tarinfo.isdir()) != NO_MATCH
+                elif tarinfo.path.startswith("delete://"):
+                    path = self.unprefixed(tarinfo.path)
+                    shutil.rmtree(path)
+                    return False
+                else:
+                    return False
             filter = partial(filter, self)
 
             tarobj.extractall(filter=filter)
index 595d5f3..e31d438 100644 (file)
@@ -804,13 +804,25 @@ class DeltaTarTest(BaseTest):
         # check index items
         index_path = os.path.join("backup_dir2", prev_index_filename)
         index_it = deltatar.iterate_index_path(index_path)
+        n = 0
         for i in index_it:
+            n += 1
             assert i[0]['path'].startswith("list://")
 
-        tar_filename = deltatar.volume_name_func('backup_dir', True, 0)
-        tar_path = os.path.join("backup_dir", tar_filename)
+        assert n == 7
 
         # check the tar file
+        assert os.path.exists("backup_dir2")
+        shutil.rmtree("source_dir")
+
+        tar_filename = deltatar.volume_name_func('backup_dir2', True, 0)
+        tar_path = os.path.join("backup_dir2", tar_filename)
+
+        # no file restored, because the diff was empty
+        deltatar.restore_backup(target_path="source_dir",
+                                backup_tar_path=tar_path)
+        assert len(os.listdir("source_dir")) == 0
+
 
 class DeltaTar2Test(DeltaTarTest):
     '''