[CalendarServer-changes] [12329] CalendarServer/branches/users/gaya/cleanrevisions/txdav/common/ datastore/work/test/test_revision_cleanup.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 12 11:22:23 PDT 2014


Revision: 12329
          http://trac.calendarserver.org//changeset/12329
Author:   gaya at apple.com
Date:     2014-01-13 14:58:49 -0800 (Mon, 13 Jan 2014)
Log Message:
-----------
test_addressbookObjectRevisions works

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/cleanrevisions/txdav/common/datastore/work/test/test_revision_cleanup.py

Modified: CalendarServer/branches/users/gaya/cleanrevisions/txdav/common/datastore/work/test/test_revision_cleanup.py
===================================================================
--- CalendarServer/branches/users/gaya/cleanrevisions/txdav/common/datastore/work/test/test_revision_cleanup.py	2014-01-13 22:56:21 UTC (rev 12328)
+++ CalendarServer/branches/users/gaya/cleanrevisions/txdav/common/datastore/work/test/test_revision_cleanup.py	2014-01-13 22:58:49 UTC (rev 12329)
@@ -176,14 +176,66 @@
         pass
 
 
+    @inlineCallbacks
     def test_addressbookObjectRevisions(self):
-        pass
+        """
+        Verify that all extra addressbook object revisions are deleted by the cleaning work items
+        """
 
+        # get sync token
+        addressbook = yield self.addressbookUnderTest(home="user01", name="addressbook")
+        token = yield addressbook.syncToken()
 
+        #make changes
+        card1Object = yield self.addressbookObjectUnderTest(self.transactionUnderTest(), name="card1.vcf", addressbook_name="addressbook", home="user01")
+        yield card1Object.remove()
+        card2Object = yield self.addressbookObjectUnderTest(self.transactionUnderTest(), name="card2.vcf", addressbook_name="addressbook", home="user01")
+        yield card2Object.remove()
+
+        # Get object revisions
+        rev = schema.ADDRESSBOOK_OBJECT_REVISIONS
+        revisionRows = yield Select(
+            [rev.REVISION],
+            From=rev,
+        ).on(self.transactionUnderTest())
+        self.assertNotEqual(len(revisionRows), 0)
+
+        # do FindMinValidRevisionWork
+        wp = yield self.transactionUnderTest().enqueue(FindMinValidRevisionWork, notBefore=datetime.datetime.utcnow())
+        yield self.commit()
+        yield wp.whenExecuted()
+
+        # Get the minimum valid revision and check it
+        cs = schema.CALENDARSERVER
+        minValidRevision = int((yield Select(
+            [cs.VALUE],
+            From=cs,
+            Where=(cs.NAME == "MIN-VALID-REVISION")
+        ).on(self.transactionUnderTest()))[0][0])
+        self.assertEqual(minValidRevision, max([row[0] for row in revisionRows]))
+
+        # do RevisionCleanupWork
+        wp = yield self.transactionUnderTest().enqueue(RevisionCleanupWork, notBefore=datetime.datetime.utcnow())
+        yield self.commit()
+        yield wp.whenExecuted()
+
+        # Get group1 object revision
+        rev = schema.ADDRESSBOOK_OBJECT_REVISIONS
+        revisionRows = yield Select(
+            [rev.REVISION],
+            From=rev,
+        ).on(self.transactionUnderTest())
+        self.assertEqual(len(revisionRows), 1)  # current algo leaves 1 revision behind TOTAL, so what?
+
+        # old sync token fails
+        addressbook = yield self.addressbookUnderTest(home="user01", name="addressbook")
+        self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
+
+
     @inlineCallbacks
     def test_addressbookMembersRevisions(self):
         """
-        Verify that resourceNamesSinceRevision returns all resources after initial bind and sync.
+        Verify that all extra members revisions are deleted by the cleaning work items
         """
 
         # get sync token
@@ -198,7 +250,7 @@
         yield group1Object.setComponent(VCard.fromString(self.group1))
         self.commit()
 
-        # generate 2 revisions per member of group2, and make max revision of group1 members < max revision used
+        # generate 2 revisions per member of group2, and make max revision of group1 members < max valid revision
         group2Object = yield self.addressbookObjectUnderTest(self.transactionUnderTest(), name="group2.vcf", addressbook_name="addressbook", home="user01")
         yield group2Object.setComponent(VCard.fromString(self.group2Empty))
         self.commit()
@@ -249,10 +301,6 @@
         ).on(self.transactionUnderTest()))[0][0])
         self.assertEqual(minValidRevision, max([row[3] for row in group1Rows + group2Rows]))
 
-        # old sync token fails
-        addressbook = yield self.addressbookUnderTest(home="user01", name="addressbook")
-        self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
-
         # do RevisionCleanupWork
         wp = yield self.transactionUnderTest().enqueue(RevisionCleanupWork, notBefore=datetime.datetime.utcnow())
         yield self.commit()
@@ -278,3 +326,7 @@
             Where=aboMembers.GROUP_ID == group2Object._resourceID,
         ).on(self.transactionUnderTest())
         self.assertEqual(len(group2Rows), 0)  # 0 members
+
+        # old sync token fails
+        addressbook = yield self.addressbookUnderTest(home="user01", name="addressbook")
+        self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/c710813b/attachment.html>


More information about the calendarserver-changes mailing list