Beispiel #1
0
    def test_calendarObjectRevisions_Modified(self):
        """
        Verify that a calendar object created before the revision cut-off, but modified after it is correctly reported as changed
        after revision clean-up
        """

        # Need to add one non-event change that creates a revision after the last event change revisions in order
        # for the logic in this test to work correctly
        home = yield self.homeUnderTest(name="user01")
        yield home.createCalendarWithName("_ignore_me")
        yield self.commit()

        # get initial sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        initial_token = yield calendar.syncToken()
        yield self.commit()

        # Pause to give some space in the modified time
        time.sleep(1)
        modified = datetime.datetime.utcnow()
        time.sleep(1)

        # Patch the work item to use the modified cut-off we need
        def _dateCutoff(self):
            return modified

        self.patch(FindMinValidRevisionWork, "dateCutoff", _dateCutoff)

        # Make a change to get a pre-update token
        cal2Object = yield self.calendarObjectUnderTest(
            self.transactionUnderTest(),
            name="cal2.ics",
            calendar_name="calendar",
            home="user01")
        yield cal2Object.remove()
        yield self.commit()

        # get changed sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        pre_update_token = yield calendar.syncToken()
        yield self.commit()

        # make changes
        cal1Object = yield self.calendarObjectUnderTest(
            self.transactionUnderTest(),
            name="cal1.ics",
            calendar_name="calendar",
            home="user01")
        yield cal1Object.setComponent(Component.fromString(self.cal1_mod))
        yield self.commit()

        # get changed sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        update_token = yield calendar.syncToken()
        yield self.commit()

        # do FindMinValidRevisionWork and RevisionCleanupWork
        yield FindMinValidRevisionWork.reschedule(self.transactionUnderTest(),
                                                  0)
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor,
                                60)

        # initial sync token fails
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        yield self.failUnlessFailure(
            calendar.resourceNamesSinceToken(initial_token),
            SyncTokenValidException)
        yield self.commit()

        # Pre-update sync token returns one item
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        names = yield calendar.resourceNamesSinceToken(pre_update_token)
        self.assertEqual(names, (['cal1.ics'], [], []))
        yield self.commit()

        # Post-update sync token returns one item
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        names = yield calendar.resourceNamesSinceToken(update_token)
        self.assertEqual(names, ([], [], []))
        yield self.commit()
    def test_calendarObjectRevisions_Modified(self):
        """
        Verify that a calendar object created before the revision cut-off, but modified after it is correctly reported as changed
        after revision clean-up
        """

        # Need to add one non-event change that creates a revision after the last event change revisions in order
        # for the logic in this test to work correctly
        home = yield self.homeUnderTest(name="user01")
        yield home.createCalendarWithName("_ignore_me")
        yield self.commit()

        # get initial sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        initial_token = yield calendar.syncToken()
        yield self.commit()

        # Pause to give some space in the modified time
        time.sleep(1)
        modified = datetime.datetime.utcnow()
        time.sleep(1)

        # Patch the work item to use the modified cut-off we need
        def _dateCutoff(self):
            return modified
        self.patch(FindMinValidRevisionWork, "dateCutoff", _dateCutoff)

        # Make a change to get a pre-update token
        cal2Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name="cal2.ics", calendar_name="calendar", home="user01")
        yield cal2Object.remove()
        yield self.commit()

        # get changed sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        pre_update_token = yield calendar.syncToken()
        yield self.commit()

        # make changes
        cal1Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name="cal1.ics", calendar_name="calendar", home="user01")
        yield cal1Object.setComponent(Component.fromString(self.cal1_mod))
        yield self.commit()

        # get changed sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        update_token = yield calendar.syncToken()
        yield self.commit()

        # do FindMinValidRevisionWork and RevisionCleanupWork
        yield FindMinValidRevisionWork.reschedule(self.transactionUnderTest(), 0)
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor, 60)

        # initial sync token fails
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        yield self.failUnlessFailure(calendar.resourceNamesSinceToken(initial_token), SyncTokenValidException)
        yield self.commit()

        # Pre-update sync token returns one item
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        names = yield calendar.resourceNamesSinceToken(pre_update_token)
        self.assertEqual(names, (['cal1.ics'], [], []))
        yield self.commit()

        # Post-update sync token returns one item
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        names = yield calendar.resourceNamesSinceToken(update_token)
        self.assertEqual(names, ([], [], []))
        yield self.commit()
Beispiel #3
0
    def test_calendarObjectRevisions(self):
        """
        Verify that all extra calendar object revisions are deleted by FindMinValidRevisionWork and RevisionCleanupWork
        """

        # get home sync token
        home = yield self.homeUnderTest(name="user01")
        hometoken = yield home.syncToken()

        # get sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        token = yield calendar.syncToken()

        # make changes
        cal1Object = yield self.calendarObjectUnderTest(
            self.transactionUnderTest(),
            name="cal1.ics",
            calendar_name="calendar",
            home="user01")
        yield cal1Object.remove()
        cal2Object = yield self.calendarObjectUnderTest(
            self.transactionUnderTest(),
            name="cal2.ics",
            calendar_name="calendar",
            home="user01")
        yield cal2Object.remove()

        # Get object revisions
        rev = schema.CALENDAR_OBJECT_REVISIONS
        revisionRows = yield Select(
            [rev.REVISION],
            From=rev,
        ).on(self.transactionUnderTest())
        self.assertNotEqual(len(revisionRows), 0)

        # do FindMinValidRevisionWork
        yield FindMinValidRevisionWork.reschedule(self.transactionUnderTest(),
                                                  0)
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor,
                                60)

        # Get the minimum valid revision and check it
        minValidRevision = yield self.transactionUnderTest(
        ).calendarserverValue("MIN-VALID-REVISION")
        self.assertEqual(int(minValidRevision),
                         max([row[0] for row in revisionRows]) + 1)

        # do RevisionCleanupWork
        yield self.transactionUnderTest().enqueue(
            RevisionCleanupWork, notBefore=datetime.datetime.utcnow())
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor,
                                60)

        # Get group1 object revision
        rev = schema.CALENDAR_OBJECT_REVISIONS
        revisionRows = yield Select(
            [rev.REVISION],
            From=rev,
        ).on(self.transactionUnderTest())
        self.assertEqual(len(revisionRows), 0)

        # old sync token fails
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        yield self.failUnlessFailure(calendar.resourceNamesSinceToken(token),
                                     SyncTokenValidException)
        yield self.commit()

        # old sync token fails
        home = yield self.homeUnderTest(name="user01")
        yield self.failUnlessFailure(
            home.resourceNamesSinceToken(hometoken, 1),
            SyncTokenValidException)
        yield self.commit()

        # calendar sync token changed
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        newtoken = yield calendar.syncToken()
        self.assertGreater(newtoken, token)
        yield self.commit()

        # home sync token changed
        home = yield self.homeUnderTest(name="user01")
        newhometoken = yield home.syncToken()
        self.assertGreater(newhometoken, hometoken)
        yield self.commit()

        # Depth:1 tokens match
        home = yield self.homeUnderTest(name="user01")
        yield home.loadChildren()
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        newtoken1 = yield calendar.syncToken()
        self.assertEqual(newtoken1, newtoken)
        yield self.commit()
    def test_calendarObjectRevisions(self):
        """
        Verify that all extra calendar object revisions are deleted by FindMinValidRevisionWork and RevisionCleanupWork
        """

        # get home sync token
        home = yield self.homeUnderTest(name="user01")
        hometoken = yield home.syncToken()

        # get sync token
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        token = yield calendar.syncToken()

        # make changes
        cal1Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name="cal1.ics", calendar_name="calendar", home="user01")
        yield cal1Object.remove()
        cal2Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name="cal2.ics", calendar_name="calendar", home="user01")
        yield cal2Object.remove()

        # Get object revisions
        rev = schema.CALENDAR_OBJECT_REVISIONS
        revisionRows = yield Select(
            [rev.REVISION],
            From=rev,
        ).on(self.transactionUnderTest())
        self.assertNotEqual(len(revisionRows), 0)

        # do FindMinValidRevisionWork
        yield FindMinValidRevisionWork.reschedule(self.transactionUnderTest(), 0)
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor, 60)

        # Get the minimum valid revision and check it
        minValidRevision = yield self.transactionUnderTest().calendarserverValue("MIN-VALID-REVISION")
        self.assertEqual(int(minValidRevision), max([row[0] for row in revisionRows]) + 1)

        # do RevisionCleanupWork
        yield self.transactionUnderTest().enqueue(RevisionCleanupWork, notBefore=datetime.datetime.utcnow())
        yield self.commit()
        yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor, 60)

        # Get group1 object revision
        rev = schema.CALENDAR_OBJECT_REVISIONS
        revisionRows = yield Select(
            [rev.REVISION],
            From=rev,
        ).on(self.transactionUnderTest())
        self.assertEqual(len(revisionRows), 0)

        # old sync token fails
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        yield self.failUnlessFailure(calendar.resourceNamesSinceToken(token), SyncTokenValidException)
        yield self.commit()

        # old sync token fails
        home = yield self.homeUnderTest(name="user01")
        yield self.failUnlessFailure(home.resourceNamesSinceToken(hometoken, 1), SyncTokenValidException)
        yield self.commit()

        # calendar sync token changed
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        newtoken = yield calendar.syncToken()
        self.assertGreater(newtoken, token)
        yield self.commit()

        # home sync token changed
        home = yield self.homeUnderTest(name="user01")
        newhometoken = yield home.syncToken()
        self.assertGreater(newhometoken, hometoken)
        yield self.commit()

        # Depth:1 tokens match
        home = yield self.homeUnderTest(name="user01")
        yield home.loadChildren()
        calendar = yield self.calendarUnderTest(home="user01", name="calendar")
        newtoken1 = yield calendar.syncToken()
        self.assertEqual(newtoken1, newtoken)
        yield self.commit()