[CalendarServer-changes] [15075] CalendarServer/trunk/calendarserver/tools

source_changes at macosforge.org source_changes at macosforge.org
Fri Aug 28 08:52:40 PDT 2015


Revision: 15075
          http://trac.calendarserver.org//changeset/15075
Author:   cdaboo at apple.com
Date:     2015-08-28 08:52:40 -0700 (Fri, 28 Aug 2015)
Log Message:
-----------
Cope with missing organizer events.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/calverify.py
    CalendarServer/trunk/calendarserver/tools/test/test_calverify.py

Modified: CalendarServer/trunk/calendarserver/tools/calverify.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/calverify.py	2015-08-27 20:29:31 UTC (rev 15074)
+++ CalendarServer/trunk/calendarserver/tools/calverify.py	2015-08-28 15:52:40 UTC (rev 15075)
@@ -2760,7 +2760,7 @@
             if fail:
                 details.append(Details(resid, uid,))
                 if self.fix:
-                    yield self.fixCalendarData(cal, rname)
+                    yield self.fixCalendarData(cal, rname, resid)
                     fixed += 1
 
             if self.options["verbose"] and not self.options["summary"]:
@@ -2809,15 +2809,22 @@
 
 
     @inlineCallbacks
-    def fixCalendarData(self, cal, rname):
+    def fixCalendarData(self, cal, rname, location_resid):
         """
         Fix problems in calendar data using store APIs.
         """
 
+        result = True
+        message = ""
+
         # Extract organizer (strip off urn:x-uid:) and UID
         organizer = cal.getOrganizer()[10:]
         uid = cal.resourceUID()
         _ignore_calendar, resid, _ignore_created, _ignore_modified = yield self.getCalendarForOwnerByUID(organizer, uid)
+        if resid is None:
+            # No organizer copy exists - it is safe to delete the location resource
+            yield self.removeEvent(location_resid)
+            returnValue((result, message,))
 
         # Get the organizer's calendar object and data
         homeID, calendarID = yield self.getAllResourceInfoForResourceID(resid)
@@ -2840,8 +2847,6 @@
                 comp.addProperty(Property("LOCATION", rname))
 
         # Write out fix, commit and get a new transaction
-        result = True
-        message = ""
         try:
             yield calendarObj.setComponent(component)
         except Exception, e:

Modified: CalendarServer/trunk/calendarserver/tools/test/test_calverify.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/test/test_calverify.py	2015-08-27 20:29:31 UTC (rev 15074)
+++ CalendarServer/trunk/calendarserver/tools/test/test_calverify.py	2015-08-28 15:52:40 UTC (rev 15075)
@@ -2856,10 +2856,77 @@
 END:VCALENDAR
 """.replace("\n", "\r\n") % subs
 
+    # Room as organizer event
+    ROOM_ORGANIZER_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:ROOM_ORGANIZER_ICS
+TRANSP:OPAQUE
+SUMMARY:ROOM_ORGANIZER_ICS
+DTSTART:%(year)s%(month)02d08T120000Z
+DURATION:PT1H
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+ORGANIZER:urn:x-uid:%(uuidl1)s
+ATTENDEE:urn:x-uid:%(uuidl1)s
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n") % subs
+
+    # Room event without organizer
+    ROOM_NO_ORGANIZER_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:ROOM_NO_ORGANIZER_ICS
+TRANSP:OPAQUE
+SUMMARY:ROOM_NO_ORGANIZER_ICS
+DTSTART:%(year)s%(month)02d08T120000Z
+DURATION:PT1H
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n") % subs
+
+    # Invalid event with no organizer copt
+    ROOM_MISSING_ORGANIZER_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:ROOM_MISSING_ORGANIZER_ICS
+TRANSP:OPAQUE
+SUMMARY:ROOM_MISSING_ORGANIZER_ICS
+DTSTART:%(year)s%(month)02d08T120000Z
+DURATION:PT1H
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+ORGANIZER:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid2)s
+ATTENDEE:urn:x-uid:%(uuidl1)s
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n") % subs
+
     allEvents = {
         "invite1.ics"      : (VALID_ICS, CalVerifyMismatchTestsBase.metadata,),
         "invite2.ics"      : (INVALID_ICS, CalVerifyMismatchTestsBase.metadata,),
     }
+    allEvents_Room = {
+        "invite1.ics"      : (VALID_ICS, CalVerifyMismatchTestsBase.metadata,),
+        "invite2.ics"      : (INVALID_ICS, CalVerifyMismatchTestsBase.metadata,),
+        "invite3.ics"      : (ROOM_ORGANIZER_ICS, CalVerifyMismatchTestsBase.metadata,),
+        "invite4.ics"      : (ROOM_NO_ORGANIZER_ICS, CalVerifyMismatchTestsBase.metadata,),
+        "invite5.ics"      : (ROOM_MISSING_ORGANIZER_ICS, CalVerifyMismatchTestsBase.metadata,),
+    }
 
     requirements = {
         CalVerifyMismatchTestsBase.uuid1 : {
@@ -2875,7 +2942,7 @@
             "inbox" : {},
         },
         CalVerifyMismatchTestsBase.uuidl1 : {
-            "calendar" : allEvents,
+            "calendar" : allEvents_Room,
             "inbox" : {},
         },
     }
@@ -2918,9 +2985,9 @@
         self.assertEqual(calverify.results["Number of events to process"], len(self.requirements[CalVerifyMismatchTestsBase.uuidl1]["calendar"]))
         self.assertEqual(
             sorted([i.uid for i in calverify.results["Bad Events"]]),
-            ["INVALID_ICS", ]
+            ["INVALID_ICS", "ROOM_MISSING_ORGANIZER_ICS", "ROOM_ORGANIZER_ICS", ]
         )
-        self.assertEqual(calverify.results["Number of bad events"], 1)
+        self.assertEqual(calverify.results["Number of bad events"], 3)
         self.assertTrue("Fix bad events" not in calverify.results)
 
         sync_token_newl1 = (yield (yield self.calendarUnderTest(home=self.uuidl1, name="calendar")).syncToken())
@@ -2972,10 +3039,10 @@
         self.assertEqual(calverify.results["Number of events to process"], len(self.requirements[CalVerifyMismatchTestsBase.uuidl1]["calendar"]))
         self.assertEqual(
             sorted([i.uid for i in calverify.results["Bad Events"]]),
-            ["INVALID_ICS", ]
+            ["INVALID_ICS", "ROOM_MISSING_ORGANIZER_ICS", "ROOM_ORGANIZER_ICS", ]
         )
-        self.assertEqual(calverify.results["Number of bad events"], 1)
-        self.assertEqual(calverify.results["Fix bad events"], 1)
+        self.assertEqual(calverify.results["Number of bad events"], 3)
+        self.assertEqual(calverify.results["Fix bad events"], 3)
 
         sync_token_newl1 = (yield (yield self.calendarUnderTest(home=self.uuidl1, name="calendar")).syncToken())
         self.assertNotEqual(sync_token_oldl1, sync_token_newl1)
@@ -2990,7 +3057,7 @@
         calverify = MissingLocationService(self._sqlCalendarStore, options, output, reactor, config)
         yield calverify.doAction()
 
-        self.assertEqual(calverify.results["Number of events to process"], len(self.requirements[CalVerifyMismatchTestsBase.uuidl1]["calendar"]))
+        self.assertEqual(calverify.results["Number of events to process"], len(self.requirements[CalVerifyMismatchTestsBase.uuidl1]["calendar"]) - 1)
         self.assertEqual(len(calverify.results["Bad Events"]), 0)
         self.assertTrue("Fix bad events" not in calverify.results)
 
@@ -2999,4 +3066,16 @@
             calobj = yield self.calendarObjectUnderTest(home=uid, calendar_name="calendar", name="invite2.ics")
             caldata = yield calobj.componentForUser()
             self.assertTrue("LOCATION:" in str(caldata))
+
+        calobj = yield self.calendarObjectUnderTest(home=uid, calendar_name="calendar", name="invite3.ics")
+        caldata = yield calobj.componentForUser()
+        self.assertTrue("LOCATION:" in str(caldata))
+
+        calobj = yield self.calendarObjectUnderTest(home=uid, calendar_name="calendar", name="invite4.ics")
+        caldata = yield calobj.componentForUser()
+        self.assertTrue("LOCATION:" not in str(caldata))
+
+        calobj = yield self.calendarObjectUnderTest(home=uid, calendar_name="calendar", name="invite5.ics")
+        self.assertTrue(calobj is None)
+
         yield self.commit()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150828/07289a90/attachment.html>


More information about the calendarserver-changes mailing list