[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