[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