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

source_changes at macosforge.org source_changes at macosforge.org
Wed Feb 16 12:13:35 PST 2011


Revision: 7029
          http://trac.macosforge.org/projects/calendarserver/changeset/7029
Author:   exarkun at twistedmatrix.com
Date:     2011-02-16 12:13:34 -0800 (Wed, 16 Feb 2011)
Log Message:
-----------
When accepting an invitation, find the inbox event and delete it.

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

Modified: CalendarServer/trunk/contrib/performance/loadtest/ical.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/ical.py	2011-02-16 19:46:17 UTC (rev 7028)
+++ CalendarServer/trunk/contrib/performance/loadtest/ical.py	2011-02-16 20:13:34 UTC (rev 7029)
@@ -86,10 +86,20 @@
     _events = None
     _calendars = None
 
+    def _setEvent(self, href, event):
+        self._events[href] = event
+        calendar, uid = href.rsplit('/', 1)
+        self._calendars[calendar + '/'].events[uid] = event
+
+
     def addEvent(self, href, vcalendar):
         raise NotImplementedError("%r does not implement addEvent" % (self.__class__,))
 
 
+    def deleteEvent(self, href):
+        raise NotImplementedError("%r does not implement deleteEvent" % (self.__class__,))
+
+
     def addEventAttendee(self, href, attendee):
         raise NotImplementedError("%r does not implement addEventAttendee" % (self.__class__,))
 
@@ -321,12 +331,6 @@
                 self.eventChanged(responseHref, etag, scheduleTag, body)
 
 
-    def _setEvent(self, href, event):
-        self._events[href] = event
-        calendar, uid = href.rsplit('/', 1)
-        self._calendars[calendar + '/'].events[uid] = event
-
-
     def eventChanged(self, href, etag, scheduleTag, body):
         event = self._events[href]
         event.etag = etag

Modified: CalendarServer/trunk/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/profiles.py	2011-02-16 19:46:17 UTC (rev 7028)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py	2011-02-16 20:13:34 UTC (rev 7029)
@@ -190,7 +190,17 @@
     def _acceptInvitation(self, href, attendee):
         self._accepting.remove(href)
         accepted = self._makeAcceptedAttendee(attendee)
-        self._client.changeEventAttendee(href, attendee, accepted)
+        d = self._client.changeEventAttendee(href, attendee, accepted)
+        def accepted(ignored):
+            # Find the corresponding event in the inbox and delete it.
+            uid = self._client._events[href].getUID()
+            for cal in self._client._calendars.itervalues():
+                if cal.resourceType == caldavxml.schedule_inbox:
+                    for event in cal.events.itervalues():
+                        if uid == event.getUID():
+                            return self._client.deleteEvent(event.url)
+        d.addCallback(accepted)
+        return d
 
 
     def _makeAcceptedAttendee(self, attendee):

Modified: CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-02-16 19:46:17 UTC (rev 7028)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-02-16 20:13:34 UTC (rev 7029)
@@ -25,9 +25,10 @@
 
 from twisted.trial.unittest import TestCase
 from twisted.internet.task import Clock
+from twisted.internet.defer import succeed
 
 from loadtest.profiles import Eventer, Inviter, Accepter
-from loadtest.ical import Calendar, Event
+from loadtest.ical import Calendar, Event, BaseClient
 
 SIMPLE_EVENT = """\
 BEGIN:VCALENDAR
@@ -163,7 +164,7 @@
 
 
 
-class StubClient(object):
+class StubClient(BaseClient):
     def __init__(self, number):
         self._events = {}
         self._calendars = {}
@@ -175,6 +176,12 @@
         self._events[href] = Event(href, None, vevent)
 
 
+    def deleteEvent(self, href):
+        event = self._events.pop(href)
+        calendar, uid = href.rsplit('/', 1)
+        del self._calendars[calendar + '/'].events[uid]
+
+
     def addEventAttendee(self, href, attendee):
         vevent = self._events[href].vevent
         attendees = vevent.contents[u'vevent'][0].contents.setdefault(u'attendee', [])
@@ -186,9 +193,9 @@
         attendees = vevent.contents[u'vevent'][0].contents.setdefault(u'attendee', [])
         attendees.remove(old)
         attendees.append(new)
+        return succeed(None)
 
 
-
 class InviterTests(TestCase):
     """
     Tests for loadtest.profiles.Inviter.
@@ -344,7 +351,6 @@
         accepter.eventChanged('/some/calendar/1234.ics')
 
 
-
     def test_ignoreNonCalendar(self):
         """
         If an event is on a calendar which is not of type
@@ -410,20 +416,32 @@
         """
         If the client is an attendee on an event and the PARTSTAT is
         NEEDS-ACTION, a response is generated which accepts the
-        invitation.
+        invitation and the corresponding event in the
+        I{schedule-inbox} is deleted.
         """
         clock = Clock()
         randomDelay = 7
         vevent = list(readComponents(INVITED_EVENT))[0]
         attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
         userNumber = int(attendees[1].params[u'CN'][0].split(None, 1)[1])
+        client = StubClient(userNumber)
+        
         calendarURL = '/some/calendar/'
         calendar = Calendar(
             caldavxml.calendar, u'calendar', calendarURL, None)
-        client = StubClient(userNumber)
         client._calendars[calendarURL] = calendar
+
+        inboxURL = '/some/inbox/'
+        inbox = Calendar(
+            caldavxml.schedule_inbox, u'the inbox', inboxURL, None)
+        client._calendars[inboxURL] = inbox
+
         event = Event(calendarURL + u'1234.ics', None, vevent)
-        client._events[event.url] = event
+        client._setEvent(event.url, event)
+
+        inboxEvent = Event(inboxURL + u'4321.ics', None, vevent)
+        client._setEvent(inboxEvent.url, inboxEvent)
+
         accepter = Accepter(clock, client, userNumber)
         accepter.random = Deterministic()
         accepter.random.gauss = lambda mu, sigma: randomDelay
@@ -439,7 +457,10 @@
             attendees[1].params[u'PARTSTAT'], [u'ACCEPTED'])
         self.assertNotIn(u'RSVP', attendees[1].params)
 
+        self.assertNotIn(inboxEvent.url, client._events)
+        self.assertNotIn('4321.ics', inbox.events)
 
+
     def test_reacceptInvitation(self):
         """
         If a client accepts an invitation on an event and then is
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110216/d897dab4/attachment-0001.html>


More information about the calendarserver-changes mailing list