[Checkins] SVN: Sandbox/J1m/resumelb/src/zc/resumelb/worker.test Added missing worker-reconnection tests.

Jim Fulton jim at zope.com
Wed Nov 9 10:29:50 UTC 2011


Log message for revision 123323:
  Added missing worker-reconnection tests.
  

Changed:
  U   Sandbox/J1m/resumelb/src/zc/resumelb/worker.test

-=-
Modified: Sandbox/J1m/resumelb/src/zc/resumelb/worker.test
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/worker.test	2011-11-09 09:15:33 UTC (rev 123322)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/worker.test	2011-11-09 10:29:50 UTC (rev 123323)
@@ -11,6 +11,7 @@
 
     >>> server = gevent.server.StreamServer(('127.0.0.1', 0), handle)
     >>> server.start()
+    >>> server_port = server.server_port
 
 Now, we can start a worker:
 
@@ -18,7 +19,7 @@
     >>> worker = gevent.spawn(
     ...   zc.resumelb.worker.Worker,
     ...   zc.resumelb.tests.app(),
-    ...   ('127.0.0.1', server.server_port),
+    ...   ('127.0.0.1', server_port),
     ...   history=5)
 
 Here we created a worker using a test application, telling it to
@@ -59,7 +60,7 @@
 
 The newenv helper:
 
-- Creates a request enviton
+- Creates a request environ
 - without input or error streams
 - with a passed request class. The request class is needed for the resume.
 
@@ -190,14 +191,9 @@
 The next message we recieve will be the new resume:
 
     >>> zero, resume = read_message(worker_socket)
-    >>> zero == zero
-    True
-    >>> resume.keys()
-    ['', '1', '2']
+    >>> zero, resume.keys(), [x for x in resume.values() if type(x) != float]
+    (0, ['', '1', '2'], [])
 
-    >>> [x for x in resume.values() if type(x) != float]
-    []
-
     >>> resume[''] > 10, resume['1'] > 10, resume['2'] < 10
     (True, True, True)
 
@@ -221,5 +217,35 @@
     <BLANKLINE>
     1200000
 
+Reconnection
+============
 
-XXX Need disconnect/connect test
+If a worker is disconnected, it will automatically reconnect:
+
+    >>> worker_socket_result = gevent.event.AsyncResult()
+    >>> worker_socket.close()
+    >>> worker_socket = worker_socket_result.get()
+
+and send it's resume:
+
+    >>> zero, resume = read_message(worker_socket)
+    >>> zero, resume.keys(), [x for x in resume.values() if type(x) != float]
+    (0, ['', '1', '2'], [])
+    >>> resume[''] > 10, resume['1'] > 10, resume['2'] < 10
+    (True, True, True)
+
+We can even stop the server for a while, and the worker will
+reconnect:
+
+    >>> server.stop()
+    >>> worker_socket.close()
+    >>> gevent.sleep(3)
+    >>> worker_socket_result = gevent.event.AsyncResult()
+    >>> server = gevent.server.StreamServer(('127.0.0.1', server_port), handle)
+    >>> server.start()
+    >>> worker_socket = worker_socket_result.get()
+    >>> zero, resume = read_message(worker_socket)
+    >>> zero, resume.keys(), [x for x in resume.values() if type(x) != float]
+    (0, ['', '1', '2'], [])
+    >>> resume[''] > 10, resume['1'] > 10, resume['2'] < 10
+    (True, True, True)



More information about the checkins mailing list