[CalendarServer-changes] [7798] CalendarServer/trunk/contrib/performance/loadtest

source_changes at macosforge.org source_changes at macosforge.org
Thu Jul 14 14:13:47 PDT 2011


Revision: 7798
          http://trac.macosforge.org/projects/calendarserver/changeset/7798
Author:   cdaboo at apple.com
Date:     2011-07-14 14:13:46 -0700 (Thu, 14 Jul 2011)
Log Message:
-----------
Handle inbox REPLY and CANCEL messages as a client would.

Modified Paths:
--------------
    CalendarServer/trunk/contrib/performance/loadtest/profiles.py
    CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py

Modified: CalendarServer/trunk/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/profiles.py	2011-07-14 20:59:32 UTC (rev 7797)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py	2011-07-14 21:13:46 UTC (rev 7798)
@@ -238,7 +238,8 @@
 
 class Accepter(ProfileBase):
     """
-    A Calendar user who accepts invitations to events.
+    A Calendar user who accepts invitations to events. As well as accepting requests, this
+    will also remove cancels and replies.
     """
     def setParameters(self, acceptDelayDistribution=NormalDistribution(1200, 60)):
         self._accepting = set()
@@ -258,8 +259,16 @@
             calendar = self._client._calendars[calendar]
         except KeyError:
             return
-        if calendar.resourceType != caldavxml.calendar:
+
+        if calendar.resourceType == caldavxml.schedule_inbox:
+            # Handle inbox differently
+            self.inboxEventChanged(calendar, href)
+        elif calendar.resourceType == caldavxml.calendar:
+            self.calendarEventChanged(calendar, href)
+        else:
             return
+
+    def calendarEventChanged(self, calendar, href):
         if href in self._accepting:
             return
 
@@ -276,6 +285,26 @@
                         delay, self._acceptInvitation, href, attendee)
 
 
+    def inboxEventChanged(self, calendar, href):
+        if href in self._accepting:
+            return
+
+        vevent = self._client._events[href].vevent
+        method = vevent.contents.get('method')[0].value
+        if method == "REPLY":
+            # Replies are immediately deleted
+            self._accepting.add(href)
+            self._reactor.callLater(
+                0, self._handleReply, href)
+
+        elif method == "CANCEL":
+            # Cancels are handled after a user delay
+            delay = self._acceptDelayDistribution.sample()
+            self._accepting.add(href)
+            self._reactor.callLater(
+                delay, self._handleCancel, href)
+
+
     def _acceptInvitation(self, href, attendee):
         def change():
             accepted = self._makeAcceptedAttendee(attendee)
@@ -314,6 +343,35 @@
         return self._newOperation("accept", d)
 
 
+    def _handleReply(self, href):
+        d = self._client.deleteEvent(href)
+        def finished(passthrough):
+            self._accepting.remove(href)
+            return passthrough
+        d.addBoth(finished)
+        return self._newOperation("clean reply", d)
+
+
+    def _handleCancel(self, href):
+
+        uid = self._client._events[href].getUID()
+        d = self._client.deleteEvent(href)
+
+        def removed(ignored):
+            # Find the corresponding event in any calendar and delete it.
+            for cal in self._client._calendars.itervalues():
+                if cal.resourceType == caldavxml.calendar:
+                    for event in cal.events.itervalues():
+                        if uid == event.getUID():
+                            return self._client.deleteEvent(event.url)
+        d.addCallback(removed)
+        def finished(passthrough):
+            self._accepting.remove(href)
+            return passthrough
+        d.addBoth(finished)
+        return self._newOperation("clean cancel", d)
+
+
     def _makeAcceptedAttendee(self, attendee):
         accepted = ContentLine.duplicate(attendee)
         accepted.params[u'PARTSTAT'] = [u'ACCEPTED']

Modified: CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-07-14 20:59:32 UTC (rev 7797)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-07-14 21:13:46 UTC (rev 7798)
@@ -23,7 +23,7 @@
 
 from vobject import readComponents
 
-from caldavclientlibrary.protocol.caldav.definitions import caldavxml
+from caldavclientlibrary.protocol.caldav.definitions import caldavxml, csxml
 
 from twisted.trial.unittest import TestCase
 from twisted.internet.task import Clock
@@ -463,7 +463,7 @@
         userNumber = 14
         calendarURL = '/some/calendar/'
         calendar = Calendar(
-            caldavxml.schedule_inbox, u'inbox', calendarURL, None)
+            csxml.dropbox_home, u'notification', calendarURL, None)
         client = StubClient(userNumber)
         client._calendars[calendarURL] = calendar
         accepter = Accepter(None, self.sim, client, userNumber)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110714/ca45e802/attachment.html>


More information about the calendarserver-changes mailing list