[CalendarServer-changes] [13803] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Jul 29 11:22:00 PDT 2014


Revision: 13803
          http://trac.calendarserver.org//changeset/13803
Author:   cdaboo at apple.com
Date:     2014-07-29 11:22:00 -0700 (Tue, 29 Jul 2014)
Log Message:
-----------
Fix RRULE expansion caching issue when the cached period is extended. Caused negative RRULE COUNTs when splitting in very
specific situations.

Modified Paths:
--------------
    CalendarServer/trunk/requirements-stable.txt
    CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py

Modified: CalendarServer/trunk/requirements-stable.txt
===================================================================
--- CalendarServer/trunk/requirements-stable.txt	2014-07-29 18:19:07 UTC (rev 13802)
+++ CalendarServer/trunk/requirements-stable.txt	2014-07-29 18:22:00 UTC (rev 13803)
@@ -7,7 +7,7 @@
 -e .
 -e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13796#egg=twextpy
 -e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
--e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13711#egg=pycalendar
+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13802#egg=pycalendar
 
 # Specify specific versions of our dependencies so that we're all testing the same config.
 

Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py	2014-07-29 18:19:07 UTC (rev 13802)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py	2014-07-29 18:22:00 UTC (rev 13803)
@@ -35,6 +35,8 @@
         self.now.setHHMMSS(0, 0, 0)
 
         self.subs["now"] = self.now
+        self.subs["now_1"] = self.now.duplicate()
+        self.subs["now_1"].offsetSeconds(-1)
 
         for i in range(30):
             attrname = "now_back%s" % (i + 1,)
@@ -2222,6 +2224,109 @@
             self.assertFalse(splitter.willSplit(icalOld), "Failed past will split: %s" % (title,))
 
 
+    def test_split_negative_count(self):
+
+        data = (
+            (
+                "1.1 - RRULE with override",
+                """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back30)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+RRULE:FREQ=WEEKLY;COUNT=100
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back23)s
+DTSTART:%(now_back23)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back16)s
+DTSTART:%(now_back16)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+END:VEVENT
+END:VCALENDAR
+""",
+                """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_fwd5)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=WEEKLY;COUNT=95
+END:VEVENT
+END:VCALENDAR
+""",
+                """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:%(uid)s
+DTSTART:%(now_back30)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=WEEKLY;UNTIL=%(now_fwd5_1)s
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back23)s
+DTSTART:%(now_back23)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back16)s
+DTSTART:%(now_back16)s
+DURATION:PT1H
+ATTENDEE:mailto:user1 at example.com
+ATTENDEE:mailto:user2 at example.com
+ORGANIZER:mailto:user1 at example.com
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+END:VEVENT
+END:VCALENDAR
+""",
+            ),
+        )
+
+        for title, calendar, split_future, split_past in data:
+            ical = Component.fromString(calendar % self.subs)
+            splitter = iCalSplitter(100, 0)
+            if title[0] == "1":
+                self.assertTrue(splitter.willSplit(ical), "Failed will split: %s" % (title,))
+            icalOld, icalNew = splitter.split(ical)
+            relsubs = dict(self.subs)
+            relsubs["uid"] = icalOld.resourceUID()
+            relsubs["relID"] = icalOld.mainComponent().propertyValue("RELATED-TO") if icalOld.mainComponent() else icalNew.mainComponent().propertyValue("RELATED-TO")
+            self.assertEqual(str(icalNew).replace("\r\n ", ""), split_future.replace("\n", "\r\n") % relsubs, "Failed future: %s" % (title,))
+            self.assertEqual(str(icalOld).replace("\r\n ", ""), split_past.replace("\n", "\r\n") % relsubs, "Failed past: %s" % (title,))
+
+
     def test_future_split(self):
 
         data = (
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140729/3fa8c8b9/attachment.html>


More information about the calendarserver-changes mailing list