Browse Source

Add regression test for 95cf337

Marian Beermann 8 years ago
parent
commit
3b716f98ff
1 changed files with 24 additions and 1 deletions
  1. 24 1
      borg/testsuite/repository.py

+ 24 - 1
borg/testsuite/repository.py

@@ -8,8 +8,9 @@ from ..hashindex import NSIndex
 from ..helpers import Location, IntegrityError
 from ..helpers import Location, IntegrityError
 from ..locking import Lock, LockFailed
 from ..locking import Lock, LockFailed
 from ..remote import RemoteRepository, InvalidRPCMethod
 from ..remote import RemoteRepository, InvalidRPCMethod
-from ..repository import Repository, LoggedIO, TAG_COMMIT, MAX_DATA_SIZE
+from ..repository import Repository, LoggedIO, TAG_DELETE, MAX_DATA_SIZE
 from . import BaseTestCase
 from . import BaseTestCase
+from .hashindex import H
 
 
 
 
 UNSPECIFIED = object()  # for default values where we can't use None
 UNSPECIFIED = object()  # for default values where we can't use None
@@ -227,6 +228,28 @@ class RepositoryCommitTestCase(RepositoryTestCaseBase):
             io = self.repository.io
             io = self.repository.io
             assert not io.is_committed_segment(io.get_latest_segment())
             assert not io.is_committed_segment(io.get_latest_segment())
 
 
+    def test_moved_deletes_are_tracked(self):
+        self.repository.put(H(1), b'1')
+        self.repository.put(H(2), b'2')
+        self.repository.commit()
+        self.repository.delete(H(1))
+        self.repository.commit()
+        last_segment = self.repository.io.get_latest_segment()
+        num_deletes = 0
+        for tag, key, offset, data in self.repository.io.iter_objects(last_segment, include_data=True):
+            if tag == TAG_DELETE:
+                assert key == H(1)
+                num_deletes += 1
+        assert num_deletes == 1
+        assert last_segment in self.repository.compact
+        self.repository.put(H(3), b'3')
+        self.repository.commit()
+        assert last_segment not in self.repository.compact
+        assert not self.repository.io.segment_exists(last_segment)
+        last_segment = self.repository.io.get_latest_segment()
+        for tag, key, offset in self.repository.io.iter_objects(last_segment):
+            assert tag != TAG_DELETE
+
 
 
 class RepositoryAppendOnlyTestCase(RepositoryTestCaseBase):
 class RepositoryAppendOnlyTestCase(RepositoryTestCaseBase):
     def open(self, create=False):
     def open(self, create=False):