[CalendarServer-changes] [9049] CalendarServer/trunk/contrib/performance/loadtest
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 12 18:17:53 PDT 2012
Revision: 9049
http://trac.macosforge.org/projects/calendarserver/changeset/9049
Author: dre at apple.com
Date: 2012-04-12 18:17:53 -0700 (Thu, 12 Apr 2012)
Log Message:
-----------
Two new tests for client sim: testInboxReply and testInboxReplyFailedDelete
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 2012-04-13 01:06:25 UTC (rev 9048)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2012-04-13 01:17:53 UTC (rev 9049)
@@ -517,16 +517,17 @@
def _handleReply(self, href):
d = self._client.deleteEvent(href)
- def finished(passthrough):
- self._accepting.remove(href)
- if isinstance(passthrough, Failure):
- passthrough.trap(IncorrectResponseCode)
- passthrough = passthrough.response
- return passthrough
- d.addBoth(finished)
+ d.addBoth(self._finishRemoveAccepting, href)
return self._newOperation("reply done", d)
+ def _finishRemoveAccepting(self, passthrough, href):
+ self._accepting.remove(href)
+ if isinstance(passthrough, Failure):
+ passthrough.trap(IncorrectResponseCode)
+ passthrough = passthrough.value.response
+ return passthrough
+
def _handleCancel(self, href):
uid = self._client._events[href].getUID()
@@ -540,13 +541,7 @@
if uid == event.getUID():
return self._client.deleteEvent(event.url)
d.addCallback(removed)
- def finished(passthrough):
- self._accepting.remove(href)
- if isinstance(passthrough, Failure):
- passthrough.trap(IncorrectResponseCode)
- passthrough = passthrough.response
- return passthrough
- d.addBoth(finished)
+ d.addBoth(self._finishRemoveAccepting, href)
return self._newOperation("cancelled", d)
Modified: CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py 2012-04-13 01:06:25 UTC (rev 9048)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py 2012-04-13 01:17:53 UTC (rev 9049)
@@ -154,7 +154,20 @@
END:VCALENDAR
"""
+INBOX_REPLY = """\
+BEGIN:VCALENDAR
+METHOD:REPLY
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+ORGANIZER;CN="User 01":mailto:user1 at example.com
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user1 at example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
class AnyUser(object):
def __getitem__(self, index):
return _AnyRecord(index)
@@ -197,10 +210,12 @@
@ivar rescheduled: A set of event URLs which will not allow
attendee changes due to a changed schedule tag.
+ @ivar _pendingFailures: dict mapping URLs to failure objects
"""
def __init__(self, number):
self._events = {}
self._calendars = {}
+ self._pendingFailures = {}
self.record = _DirectoryRecord(
"user%02d" % (number,), "user%02d" % (number,),
"User %02d" % (number,), "user%02d at example.org" % (number,))
@@ -210,6 +225,13 @@
self.started = True
+ def _failDeleteWithObject(self, href, failureObject):
+ """
+ Accessor for inserting intentional failures for deletes.
+ """
+ self._pendingFailures[href] = failureObject
+
+
def addEvent(self, href, vevent):
self._events[href] = Event(href, None, vevent)
return succeed(None)
@@ -219,12 +241,16 @@
return self.addEvent(href, vevent)
- def deleteEvent(self, href):
+ def deleteEvent(self, href,):
del self._events[href]
calendar, uid = href.rsplit('/', 1)
del self._calendars[calendar + '/'].events[uid]
+ if href in self._pendingFailures:
+ failureObject = self._pendingFailures.pop(href)
+ return fail(failureObject)
+ else:
+ return succeed(None)
-
def updateEvent(self, href):
self.rescheduled.remove(href)
return succeed(None)
@@ -743,6 +769,58 @@
clock.advance(randomDelay)
+ def test_inboxReply(self):
+ """
+ When an inbox item that contains a reply is seen by the client, it
+ deletes it immediately.
+ """
+ userNumber = 1
+ clock = Clock()
+ inboxURL = '/some/inbox/'
+ vevent = Component.fromString(INBOX_REPLY)
+ inbox = Calendar(
+ caldavxml.schedule_inbox, set(), u'the inbox', inboxURL, None)
+ client = StubClient(userNumber)
+ client._calendars[inboxURL] = inbox
+
+ inboxEvent = Event(inboxURL + u'4321.ics', None, vevent)
+ client._setEvent(inboxEvent.url, inboxEvent)
+ accepter = Accepter(clock, self.sim, client, userNumber)
+ accepter.eventChanged(inboxEvent.url)
+ clock.advance(3)
+ self.assertNotIn(inboxEvent.url, client._events)
+ self.assertNotIn('4321.ics', inbox.events)
+
+
+ def test_inboxReplyFailedDelete(self):
+ """
+ When an inbox item that contains a reply is seen by the client, it
+ deletes it immediately. If the delete fails, the appropriate response
+ code is returned.
+ """
+ userNumber = 1
+ clock = Clock()
+ inboxURL = '/some/inbox/'
+ vevent = Component.fromString(INBOX_REPLY)
+ inbox = Calendar(
+ caldavxml.schedule_inbox, set(), u'the inbox', inboxURL, None)
+ client = StubClient(userNumber)
+ client._calendars[inboxURL] = inbox
+
+ inboxEvent = Event(inboxURL + u'4321.ics', None, vevent)
+ client._setEvent(inboxEvent.url, inboxEvent)
+ client._failDeleteWithObject(inboxEvent.url, IncorrectResponseCode(
+ NO_CONTENT,
+ Response(
+ ('HTTP', 1, 1), PRECONDITION_FAILED,
+ 'Precondition Failed', None, None)))
+ accepter = Accepter(clock, self.sim, client, userNumber)
+ accepter.eventChanged(inboxEvent.url)
+ clock.advance(3)
+ self.assertNotIn(inboxEvent.url, client._events)
+ self.assertNotIn('4321.ics', inbox.events)
+
+
def test_acceptInvitation(self):
"""
If the client is an attendee on an event and the PARTSTAT is
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120412/d07642b3/attachment.html>
More information about the calendarserver-changes
mailing list