[Checkins] SVN: zc.zk/trunk/src/zc/zk/ Updated to take advantage of new content-manager and waiting support

Jim Fulton jim at zope.com
Sun Jan 29 14:49:20 UTC 2012


Log message for revision 124245:
  Updated to take advantage of new content-manager and waiting support
  in zope.testing.
  

Changed:
  U   zc.zk/trunk/src/zc/zk/disconnectiontests.py
  U   zc.zk/trunk/src/zc/zk/testing.py
  U   zc.zk/trunk/src/zc/zk/tests.py

-=-
Modified: zc.zk/trunk/src/zc/zk/disconnectiontests.py
===================================================================
--- zc.zk/trunk/src/zc/zk/disconnectiontests.py	2012-01-29 14:28:09 UTC (rev 124244)
+++ zc.zk/trunk/src/zc/zk/disconnectiontests.py	2012-01-29 14:49:19 UTC (rev 124245)
@@ -19,6 +19,7 @@
 # enough to control).
 
 from pprint import pprint
+from zope.testing.wait import wait
 import zc.zk
 import zookeeper
 import zope.testing.loggingsupport
@@ -42,10 +43,10 @@
 
     We'll wait a while while it tries in vane to connect:
 
-    >>> wait_until((lambda : zk is not None), 4)
+    >>> wait((lambda : zk is not None), 4)
     Traceback (most recent call last):
     ...
-    AssertionError: timeout
+    TimeOutWaitingFor: <lambda>
 
     >>> print handler # doctest: +ELLIPSIS
     zc.zk CRITICAL
@@ -58,7 +59,7 @@
     Now, we'll make the connection possible:
 
     >>> ZooKeeper._allow_connection('Invalid')
-    >>> wait_until(lambda : zk is not None)
+    >>> wait(lambda : zk is not None)
 
     >>> zk.state == zookeeper.CONNECTED_STATE
     True

Modified: zc.zk/trunk/src/zc/zk/testing.py
===================================================================
--- zc.zk/trunk/src/zc/zk/testing.py	2012-01-29 14:28:09 UTC (rev 124244)
+++ zc.zk/trunk/src/zc/zk/testing.py	2012-01-29 14:49:19 UTC (rev 124245)
@@ -19,6 +19,7 @@
 It provides setUp and tearDown functions that can be used with
 doctests or with regular ```unittest`` tests.
 """
+from zope.testing import setupstack
 import json
 import mock
 import os
@@ -34,6 +35,9 @@
 
 __all__ = ['assert_', 'setUp', 'tearDown', 'testing_with_real_zookeeper']
 
+def side_effect(mock):
+    return lambda func: setattr(mock, 'side_effect', func)
+
 def assert_(cond, mess='', error=True):
     """A simple assertion function.
 
@@ -47,10 +51,10 @@
             print 'assertion failed: ', mess
 
 def wait_until(func=None, timeout=9):
-    """Wait until a function returns true.
+    import warnings
+    warnings.warn("wait_until is deprecated. Use zope.testing.wait.wait",
+                  DeprecationWarning, 2)
 
-    Raise an AssertionError on timeout.
-    """
     if func():
         return
     deadline = time.time()+timeout
@@ -127,8 +131,7 @@
     A regular unit test can check the ZooKeeper test attribute.
     """
 
-    globs = getattr(test, 'globs', test.__dict__)
-    teardowns = []
+    globs = setupstack.globs(test)
     faux_zookeeper = None
     real_zk = testing_with_real_zookeeper()
     if real_zk:
@@ -137,17 +140,17 @@
         setup_tree(tree, real_zk, test_root, True)
 
         orig_init = zookeeper.init
-        cm = mock.patch('zookeeper.init')
-        m = cm.__enter__()
+
+        @side_effect(
+            setupstack.context_manager(test, mock.patch('zookeeper.init')))
         def init(addr, watch=None, session_timeout=1000):
             if addr != connection_string:
                 return orig_init(addr, watch, session_timeout)
             else:
                 return orig_init(real_zk+test_root, watch, session_timeout)
-        m.side_effect = init
-        teardowns.append(cm.__exit__)
 
-        teardowns.append(lambda : setattr(zc.zk.ZooKeeper, 'test_sleep', 0))
+        setupstack.register(
+            test, lambda : setattr(zc.zk.ZooKeeper, 'test_sleep', 0))
         zc.zk.ZooKeeper.test_sleep = .01
         time.sleep(float(os.environ.get('TEST_ZOOKEEPER_SLEEP', 0)))
 
@@ -172,18 +175,15 @@
         for name in ZooKeeper.__dict__:
             if name[0] == '_':
                 continue
-            cm = mock.patch('zookeeper.'+name)
-            m = cm.__enter__()
+            m = setupstack.context_manager(test, mock.patch('zookeeper.'+name))
             m.side_effect = getattr(faux_zookeeper, name)
-            teardowns.append(cm.__exit__)
 
         if tree:
             zk = zc.zk.ZooKeeper(connection_string)
             zk.import_tree(tree)
             zk.close()
 
-    globs['wait_until'] = wait_until
-    globs['zc.zk.testing'] = teardowns
+    globs['wait_until'] = wait_until # BBB
     globs['ZooKeeper'] = faux_zookeeper
     globs.setdefault('assert_', assert_)
 
@@ -192,13 +192,11 @@
 
     The single argument is the test case passed to setUp.
     """
-    globs = getattr(test, 'globs', test.__dict__)
-    for cm in globs['zc.zk.testing']:
-        cm()
+    setupstack.tearDown(test)
     real_zk = testing_with_real_zookeeper()
     if real_zk:
         zk = zc.zk.ZooKeeper(real_zk)
-        root = globs['/zc.zk.testing.test-root']
+        root = setupstack.globs(test)['/zc.zk.testing.test-root']
         if zk.exists(root):
             zk.delete_recursive(root)
         zk.close()

Modified: zc.zk/trunk/src/zc/zk/tests.py
===================================================================
--- zc.zk/trunk/src/zc/zk/tests.py	2012-01-29 14:28:09 UTC (rev 124244)
+++ zc.zk/trunk/src/zc/zk/tests.py	2012-01-29 14:49:19 UTC (rev 124245)
@@ -12,6 +12,8 @@
 #
 ##############################################################################
 from pprint import pprint
+from zope.testing import setupstack
+from zope.testing.wait import wait
 import doctest
 import json
 import logging
@@ -45,10 +47,9 @@
         except:
             pass
 
-        zc.zk.testing.wait_until(
-            lambda : [r for r in handler.records
-                      if 'environment' in r.getMessage()]
-            )
+        wait(lambda : [r for r in handler.records
+                       if 'environment' in r.getMessage()]
+             )
         handler.clear()
 
         # Test that the filter for the "Exceeded deadline by" noise works.
@@ -56,12 +57,11 @@
         os.write(zc.zk._logging_pipe[1],
                  '2012-01-06 16:45:44,572:43673(0x1004f6000):ZOO_WARN@'
                  'zookeeper_interest at 1461: Exceeded deadline by 27747ms\n')
-        zc.zk.testing.wait_until(
-            lambda : [r for r in handler.records
-                      if ('Exceeded deadline by' in r.getMessage()
-                          and r.levelno == logging.DEBUG)
-                      ]
-            )
+        wait(lambda : [r for r in handler.records
+                       if ('Exceeded deadline by' in r.getMessage()
+                           and r.levelno == logging.DEBUG)
+                       ]
+             )
 
         self.assert_(not [r for r in handler.records
                           if ('Exceeded deadline by' in r.getMessage()
@@ -97,7 +97,7 @@
             zk = zc.zk.ZooKeeper()
             return zk
 
-        zc.zk.testing.wait_until(lambda : init.call_args)
+        wait(lambda : init.call_args)
         (zkaddr, self.__session_watcher), kw = init.call_args
         self.assertEqual((zkaddr, kw), ('127.0.0.1:2181', {}))
         self.__session_watcher(
@@ -1521,10 +1521,9 @@
 
 def setUpREADME(test):
     zc.zk.testing.setUp(test)
-    cm = mock.patch('socket.getfqdn')
-    m = cm.__enter__()
-    m.side_effect = lambda : 'server.example.com'
-    test.globs['zc.zk.testing'].append(cm.__exit__)
+    @side_effect(setupstack.context_manager(test, mock.patch('socket.getfqdn')))
+    def getfqdn():
+        return 'socket.getfqdn'
 
 checker = zope.testing.renormalizing.RENormalizing([
     (re.compile('pid = \d+'), 'pid = 9999'),



More information about the checkins mailing list