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

source_changes at macosforge.org source_changes at macosforge.org
Fri Feb 18 07:31:39 PST 2011


Revision: 7045
          http://trac.macosforge.org/projects/calendarserver/changeset/7045
Author:   exarkun at twistedmatrix.com
Date:     2011-02-18 07:31:36 -0800 (Fri, 18 Feb 2011)
Log Message:
-----------
Avoid freaking out if we stumble across an event that already has as many attendees as we can give it.

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-02-18 03:06:58 UTC (rev 7044)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py	2011-02-18 15:31:36 UTC (rev 7045)
@@ -31,7 +31,7 @@
 from protocol.caldav.definitions import caldavxml
 
 from twisted.python.log import msg
-from twisted.internet.defer import succeed
+from twisted.internet.defer import succeed, fail
 from twisted.internet.task import LoopingCall
 
 
@@ -56,7 +56,13 @@
             if cal.resourceType == calendarType]
 
 
+class CannotAddAttendee(Exception):
+    """
+    Indicates no new attendees can be invited to a particular event.
+    """
 
+
+
 class Inviter(ProfileBase):
     """
     A Calendar user who invites and de-invites other users to events.
@@ -77,11 +83,13 @@
         for att in attendees:
             invitees.add(att.value)
 
-        while True:
+        for i in range(10):
             invitee = max(1, int(self.random.gauss(self._number, 3)))
             uuid = u'urn:uuid:user%02d' % (invitee,)
             if uuid not in invitees:
                 break
+        else:
+            return fail(CannotAddAttendee("Can't find uninvited user to invite."))
 
         user = u'User %02d' % (invitee,)
         email = u'user%02d at example.com' % (invitee,)
@@ -138,10 +146,11 @@
                 attendees = event.contents['vevent'][0].contents.get('attendee', [])
 
                 d = self._addAttendee(event, attendees)
-                d.addCallback(
+                d.addCallbacks(
                     lambda attendee:
                         self._client.addEventAttendee(
-                            href, attendee))
+                            href, attendee),
+                    lambda reason: reason.trap(CannotAddAttendee))
                 return d
 
 

Modified: CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-02-18 03:06:58 UTC (rev 7044)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py	2011-02-18 15:31:36 UTC (rev 7045)
@@ -336,7 +336,25 @@
                 u'RSVP': [u'TRUE']})
 
 
+    def test_everybodyInvitedAlready(self):
+        """
+        If the first so-many randomly selected users we come across
+        are already attendees on the event, the invitation attempt is
+        abandoned.
+        """
+        selfNumber = 1
+        vevent, event, calendar, client = self._simpleAccount(
+            selfNumber, INVITED_EVENT)
+        inviter = Inviter(None, client, selfNumber)
+        inviter.random = Deterministic()
+        # Always return a user number which has already been invited.
+        inviter.random.gauss = lambda mu, sigma: 2
+        inviter._invite()
+        attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+        self.assertEquals(len(attendees), 2)
 
+
+
 class AccepterTests(TestCase):
     """
     Tests for loadtest.profiles.Accepter.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110218/efd85ece/attachment.html>


More information about the calendarserver-changes mailing list