[Checkins] SVN: zc.ngi/branches/jim-dev/src/zc/ngi/tests.py Added missing test

Jim Fulton jim at zope.com
Fri Jun 11 17:08:22 EDT 2010


Log message for revision 113369:
  Added missing test
  

Changed:
  U   zc.ngi/branches/jim-dev/src/zc/ngi/tests.py

-=-
Modified: zc.ngi/branches/jim-dev/src/zc/ngi/tests.py
===================================================================
--- zc.ngi/branches/jim-dev/src/zc/ngi/tests.py	2010-06-11 18:49:18 UTC (rev 113368)
+++ zc.ngi/branches/jim-dev/src/zc/ngi/tests.py	2010-06-11 21:08:22 UTC (rev 113369)
@@ -16,11 +16,15 @@
 $Id$
 """
 from zope.testing import doctest
+import logging
 import manuel.capture
 import manuel.doctest
 import manuel.testing
-import threading, unittest
+import sys
+import threading
+import unittest
 import zc.ngi.async
+import zc.ngi.generator
 import zc.ngi.testing
 import zc.ngi.wordcount
 
@@ -127,10 +131,61 @@
     True
 
     >>> s.close()
+    """
 
+def async_error_in_client_when_conection_is_closed():
+    """
+If a connection is closed, we need to make sure write calls generate errors.
 
+    >>> logger = logging.getLogger('zc.ngi')
+    >>> log_handler = logging.StreamHandler(sys.stdout)
+    >>> logger.addHandler(log_handler)
+    >>> logger.setLevel(logging.WARNING)
 
+    >>> server_event = threading.Event()
+    >>> @zc.ngi.generator.handler
+    ... def server(conn):
+    ...     data = yield
+    ...     print data
+    ...     server_event.set()
 
+    >>> listener = zc.ngi.async.listener(None, server)
+
+    >>> class Connector:
+    ...     def __init__(self):
+    ...         self.event = threading.Event()
+    ...     def connected(self, conn):
+    ...         self.conn = conn
+    ...         self.event.set()
+
+    >>> connector = Connector()
+    >>> zc.ngi.async.connect(listener.address, connector)
+    >>> connector.event.wait(1)
+
+OK, we've connected.  If we close the connection, we won't be able to write:
+
+    >>> connector.conn.close()
+    >>> connector.conn.write('xxx')
+
+    >>> connector.conn.writelines(['xxx', 'yyy'])
+
+Similarly if the server closes the connection:
+
+    >>> connector = Connector()
+    >>> zc.ngi.async.connect(listener.address, connector)
+    >>> connector.event.wait(1)
+
+    >>> connector.conn.write('aaa'); server_event.wait(1)
+    aaa
+
+    >>> connector.conn.write('xxx')
+
+    >>> connector.conn.writelines(['xxx', 'yyy'])
+
+
+    >>> logger.removeHandler(log_handler)
+    >>> logger.setLevel(logging.NOTSET)
+
     """
 
 class BrokenConnect:



More information about the checkins mailing list