[CalendarServer-changes] [10235] CalendarServer/branches/users/glyph/queue-locking-and-timing
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jan 4 16:38:50 PST 2013
Revision: 10235
http://trac.calendarserver.org//changeset/10235
Author: glyph at apple.com
Date: 2013-01-04 16:38:49 -0800 (Fri, 04 Jan 2013)
Log Message:
-----------
Failing test for peer distribution case.
Modified Paths:
--------------
CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_queue.py
Property Changed:
----------------
CalendarServer/branches/users/glyph/queue-locking-and-timing/
Modified: CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_queue.py
===================================================================
--- CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_queue.py 2013-01-05 00:38:48 UTC (rev 10234)
+++ CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_queue.py 2013-01-05 00:38:49 UTC (rev 10235)
@@ -240,7 +240,7 @@
have spawned but some peers have connected, then it should choose a
connection from the network to perform it.
"""
- peer = PeerConnectionPool(None, None, 4321, schema)
+ peer = PeerConnectionPool(None, None, 4322, schema)
local = self.pcp.peerFactory().buildProtocol(None)
remote = peer.peerFactory().buildProtocol(None)
connection = Connection(local, remote)
@@ -248,7 +248,43 @@
self.checkPerformer(ConnectionFromPeerNode)
+ def test_performingWorkOnNetwork(self):
+ """
+ The L{PerformWork} command will get relayed to the remote peer
+ controller.
+ """
+ peer = PeerConnectionPool(None, None, 4322, schema)
+ local = self.pcp.peerFactory().buildProtocol(None)
+ remote = peer.peerFactory().buildProtocol(None)
+ connection = Connection(local, remote)
+ connection.start()
+ d = Deferred()
+ class DummyPerformer(object):
+ def performWork(self, table, workID):
+ self.table = table
+ self.workID = workID
+ return d
+ # Doing real database I/O in this test would be tedious so fake the
+ # first method in the call stack which actually talks to the DB.
+ dummy = DummyPerformer()
+ def chooseDummy(onlyLocally=False):
+ return dummy
+ peer.choosePerformer = chooseDummy
+ performed = local.performWork(schema.DUMMY_WORK_ITEM, 7384)
+ performResult = []
+ performed.addCallback(performResult.append)
+ # Sanity check.
+ self.assertEquals(performResult, [])
+ connection.flush()
+ self.assertEquals(dummy.table, schema.DUMMY_WORK_ITEM)
+ self.assertEquals(dummy.workID, 7384)
+ self.assertEquals(performResult, [])
+ d.callback(128374)
+ connection.flush()
+ self.assertEquals(performResult, [None])
+
+
class HalfConnection(object):
def __init__(self, protocol):
self.protocol = protocol
@@ -310,11 +346,20 @@
"""
Relay data in one direction between the two connections.
"""
- self.receiver.deliver(self.sender.extract())
+ result = self.receiver.deliver(self.sender.extract())
self.receiver, self.sender = self.sender, self.receiver
+ return result
+ def flush(self, turns=10):
+ """
+ Keep relaying data until there's no more.
+ """
+ for x in range(turns):
+ if not (self.pump() or self.pump()):
+ return
+
class PeerConnectionPoolIntegrationTests(TestCase):
"""
L{PeerConnectionPool} is the service responsible for coordinating
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130104/9ee7331b/attachment.html>
More information about the calendarserver-changes
mailing list