[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