[Checkins] SVN: zc.z3monitor/trunk/ Added a test for the initialization subscriber.

Jim Fulton jim at zope.com
Tue Feb 21 23:05:13 UTC 2012


Log message for revision 124453:
  Added a test for the initialization subscriber.
  
  Also cleaned up the buildout quite a bit.
  

Changed:
  U   zc.z3monitor/trunk/buildout.cfg
  U   zc.z3monitor/trunk/setup.py
  A   zc.z3monitor/trunk/src/zc/z3monitor/initialize.test
  U   zc.z3monitor/trunk/src/zc/z3monitor/tests.py

-=-
Modified: zc.z3monitor/trunk/buildout.cfg
===================================================================
--- zc.z3monitor/trunk/buildout.cfg	2012-02-21 21:58:13 UTC (rev 124452)
+++ zc.z3monitor/trunk/buildout.cfg	2012-02-21 23:05:13 UTC (rev 124453)
@@ -1,119 +1,12 @@
 [buildout]
 develop = .
-          ../../zc.ngi/trunk
-          ../../zc.monitor/trunk
+parts = py
 
-parts = instance test zodb storage interpreter
-
-[zodb]
-recipe = zc.recipe.egg
-eggs = ZODB3 <3.9dev
-
-[app]
-recipe = zc.zope3recipes:application
-eggs = zc.z3monitor
-       zope.app.zcmlfiles
-       zope.app.server
-       setuptools
-       zc.configuration
-       ZODB3
-       zope.annotation
-       zope.app.appsetup
-       zope.app.authentication
-       zope.app.catalog
-       zope.app.component
-       zope.app.container
-       zope.app.folder
-       zope.app.intid
-       zope.app.keyreference
-       zope.app.publication
-       zope.app.security
-       zope.app.securitypolicy
-       zope.app.session
-       zope.app.testing
-       zope.app.testing
-       zope.app.zcmlfiles
-       zope.component
-       zope.event
-       zope.formlib
-       zope.i18nmessageid
-       zope.interface
-       zope.lifecycleevent
-       zope.locking
-       zope.proxy
-       zope.testing
-       zope.sendmail
-
-
-
-
-
-servers = zserver
-site.zcml =
-  <include package="zope.app.zcmlfiles" />
-  <include package="zope.app.securitypolicy" />
-  <include package="zope.app.securitypolicy" file="meta.zcml" />
-  <include package="zope.app.authentication" />
-  <include package="zope.app.server" />
-  <securityPolicy
-    component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
-  <role id="zope.Anonymous" title="Everybody"
-                 description="All users have this role implicitly" />
-  <role id="zope.Manager" title="Site Manager" />
-  <role id="zope.Member" title="Site Member" />
-  <grantAll role="zope.Manager" />
-  <unauthenticatedPrincipal
-    id="zope.anybody"
-    title="Unauthenticated User"
-    />
-  <principal
-      id="zope.manager"
-      title="Manager"
-      login="jim"
-      password_manager="SHA1"
-      password="40bd001563085fc35165329ea1ff5c5ecbdbbeef"
-      />
-  <grant
-      role="zope.Manager"
-      principal="zope.manager"
-      />
-  <include package="zc.z3monitor" />
-  <include package="zc.z3monitor" file="sleeptest.zcml" />
-
-[instance]
-recipe = zc.zope3recipes:instance
-application = app
-zope.conf =
-   <product-config zc.z3monitor>
-      port 8000
-   </product-config>
-   <zodb>
-    <zeoclient>
-       server 8100
-       cache-size 100KB
-    </zeoclient>
-   </zodb>
-
-
-[storage]
-recipe = zc.zodbrecipes:server
-zeo.conf =
-  <zeo>
-     address 8100
-  </zeo>
-  <filestorage 1>
-     path ${data:path}
-  </filestorage>
-
-
-[data]
-recipe = zc.recipe.filestorage
-
 [test]
 recipe = zc.recipe.testrunner
 eggs = zc.z3monitor
 
-[interpreter]
+[py]
 recipe = zc.recipe.egg
-eggs = zc.z3monitor
+eggs = ${test:eggs}
 interpreter = py

Modified: zc.z3monitor/trunk/setup.py
===================================================================
--- zc.z3monitor/trunk/setup.py	2012-02-21 21:58:13 UTC (rev 124452)
+++ zc.z3monitor/trunk/setup.py	2012-02-21 23:05:13 UTC (rev 124453)
@@ -22,6 +22,7 @@
     install_requires = [
         'setuptools', 'zc.monitor', 'ZODB3', 'zope.component',
         'zope.publisher', 'zope.app.appsetup', 'zope.testing',
+        'mock',
         ],
     include_package_data = True,
     zip_safe = False,

Added: zc.z3monitor/trunk/src/zc/z3monitor/initialize.test
===================================================================
--- zc.z3monitor/trunk/src/zc/z3monitor/initialize.test	                        (rev 0)
+++ zc.z3monitor/trunk/src/zc/z3monitor/initialize.test	2012-02-21 23:05:13 UTC (rev 124453)
@@ -0,0 +1,65 @@
+Basic stubby test of monitor initialization.  Mocks everywhere!
+
+    >>> import zc.z3monitor
+    >>> from zope.app.appsetup.product import getProductConfiguration
+    >>> from zope.component import getUtilitiesFor
+    >>> from ZODB.ActivityMonitor import ActivityMonitor
+
+
+Test empty product config to initialize activity monitors
+---------------------------------------------------------
+
+    >>> getProductConfiguration.return_value = {}
+    >>> import mock
+    >>> db = mock.Mock()
+    >>> db.getActivityMonitor.return_value = None
+    >>> getUtilitiesFor.return_value = [('foo', db)]
+
+    >>> zc.z3monitor.initialize(None)
+
+    >>> import ZODB.interfaces
+    >>> getUtilitiesFor.assert_called_with(ZODB.interfaces.IDatabase)
+    >>> getProductConfiguration.assert_called_with('zc.z3monitor')
+    >>> db.setActivityMonitor.assert_called_once_with(
+    ...     ActivityMonitor.return_value)
+
+    >>> from zc.monitor import start
+    >>> start.called
+    False
+
+Test that the port option does as expected and we don't reinitialize database
+-----------------------------------------------------------------------------
+
+    >>> getProductConfiguration.return_value = {'port': '42'}
+    >>> db.getActivityMonitor.return_value = 1
+    >>> zc.z3monitor.initialize(None)
+
+OK, this time we started:
+
+    >>> start.assert_called_once_with(42)
+
+We didn't call setActivityMonitor again:
+
+    >>> db.setActivityMonitor.assert_called_once_with(
+    ...     ActivityMonitor.return_value)
+
+
+
+Test that the port option does as expected and we don't reinitialize database
+-----------------------------------------------------------------------------
+
+Various flavors of bind:
+
+    >>> getProductConfiguration.return_value = {'bind': '43'}
+    >>> zc.z3monitor.initialize(None)
+    >>> start.assert_called_with(43)
+
+    >>> getProductConfiguration.return_value = {'bind': 'foo.com:44'}
+    >>> zc.z3monitor.initialize(None)
+    >>> start.assert_called_with(('foo.com', 44))
+
+    >>> getProductConfiguration.return_value = {'bind': 'foo.sock'}
+    >>> zc.z3monitor.initialize(None)
+    >>> start.assert_called_with('foo.sock')
+
+


Property changes on: zc.z3monitor/trunk/src/zc/z3monitor/initialize.test
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: zc.z3monitor/trunk/src/zc/z3monitor/tests.py
===================================================================
--- zc.z3monitor/trunk/src/zc/z3monitor/tests.py	2012-02-21 21:58:13 UTC (rev 124452)
+++ zc.z3monitor/trunk/src/zc/z3monitor/tests.py	2012-02-21 23:05:13 UTC (rev 124453)
@@ -11,14 +11,16 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-import re, unittest
-import logging, sys
-
+from zope.testing import renormalizing, setupstack
+import doctest
+import logging
+import mock
+import re
+import sys
+import unittest
 import ZODB.MappingStorage
 
-from zope.testing import doctest, renormalizing
 
-
 class FauxCache:
 
     @property
@@ -35,6 +37,15 @@
 ZODB.MappingStorage.MappingStorage._is_connected = True
 ZODB.MappingStorage.MappingStorage.is_connected = is_connected
 
+def setUpInitialize(test):
+    for name in (
+        'zope.app.appsetup.product.getProductConfiguration',
+        'zope.component.getUtilitiesFor',
+        'ZODB.ActivityMonitor.ActivityMonitor',
+        'zc.monitor.start',
+        ):
+        setupstack.context_manager(test, mock.patch(name))
+
 def test_suite():
     return unittest.TestSuite((
         doctest.DocFileSuite(
@@ -44,5 +55,8 @@
                 (re.compile("\d+[.]\d+ seconds"), 'N.NNNNNN seconds'),
                 ]),
             ),
-        
+        doctest.DocFileSuite(
+            'initialize.test',
+            setUp = setUpInitialize, tearDown=setupstack.tearDown,
+            )
         ))



More information about the checkins mailing list