[Checkins] SVN: lovely.responsecache/trunk/ - added purge testing utilities

Juergen Kartnaller juergen at kartnaller.at
Thu Sep 11 09:59:56 EDT 2008


Log message for revision 91060:
   - added purge testing utilities
  

Changed:
  U   lovely.responsecache/trunk/CHANGES.txt
  A   lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.py
  A   lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.txt
  U   lovely.responsecache/trunk/src/lovely/responsecache/tests.py

-=-
Modified: lovely.responsecache/trunk/CHANGES.txt
===================================================================
--- lovely.responsecache/trunk/CHANGES.txt	2008-09-11 12:06:36 UTC (rev 91059)
+++ lovely.responsecache/trunk/CHANGES.txt	2008-09-11 13:59:55 UTC (rev 91060)
@@ -5,6 +5,8 @@
 trunk
 =====
 
+ - added purge testing utilities
+
 2008/07/17 1.2.0
 ================
 

Added: lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.py
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.py	                        (rev 0)
+++ lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.py	2008-09-11 13:59:55 UTC (rev 91060)
@@ -0,0 +1,65 @@
+##############################################################################
+#
+# Copyright (c) 2006-2008 Lovely Systems GmbH. All Rights Reserved.
+#
+# This software is subject to the provisions of the Lovely Visible Source
+# License, Version 1.0 (LVSL).  A copy of the LVSL should accompany this
+# distribution.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = 'restructuredtext'
+
+import re
+
+from zope import component
+
+from zope.testing.loggingsupport import InstalledHandler
+
+from lovely.responsecache.purge import log, PurgeUtil
+from lovely.responsecache.interfaces import IPurge
+
+
+_purgeOriginal = PurgeUtil._purgeURLs.im_func
+
+def _purgeTesting(self, urls):
+    for url in urls:
+        log.info('purged %r', url)
+    return True
+
+REMOVE_LINES = re.compile('lovely.responsecache.purge.*\n')
+
+class PurgeInfo(object):
+
+    def __init__(self, log_info):
+        self.log_info = log_info
+
+    def __call__(self):
+        result = str(self.log_info)
+        self.log_info.clear()
+        return REMOVE_LINES.sub('', result)
+
+
+def setUpPurge(test):
+    PurgeUtil._purgeURLs = _purgeTesting
+
+    log_info = InstalledHandler('lovely.responsecache.purge')
+    test.globs['log_info'] = log_info
+    test.globs['purgeInfo'] = PurgeInfo(log_info)
+
+    purgeUtil = component.getUtility(IPurge)
+    purgeUtil.failLock.acquire()
+    purgeUtil.failedHosts.clear()
+    purgeUtil.failLock.release()
+
+
+def tearDownPurge(test):
+    PurgeUtil._purgeURLs = _purgeOriginal
+


Property changes on: lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.txt
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.txt	                        (rev 0)
+++ lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.txt	2008-09-11 13:59:55 UTC (rev 91060)
@@ -0,0 +1,46 @@
+=======================
+Purge Testing Utilities
+=======================
+
+The module lovely.testing.purge allowes simple logging of purge expressions
+sent from a purge utility.
+
+To activate the purge expression test functionality the setUpPurge and
+tearDownPurge funktions must be used in your test setUp and tearDown
+functions.
+
+After that the function purgeInfo is available in the doc test.
+
+  >>> purgeInfo()
+  ''
+  >>> from zope import component
+  >>> from lovely.responsecache.interfaces import IPurge
+  >>> purger = component.getUtility(IPurge)
+  >>> purger.purge('expression')
+
+We still got no purge info because purging is done on transaction.commit().
+
+  >>> purgeInfo()
+  ''
+
+After a commit we get the purge info.
+
+  >>> import transaction
+  >>> transaction.commit()
+  >>> print purgeInfo()
+  purged 'expression'
+
+A second call to purgeInfo returns nothing because the stored log was deleted.
+
+  >>> purgeInfo()
+  ''
+
+ Multiple purge expressions.
+
+  >>> purger.purge('expr 1')
+  >>> purger.purge('expr 2')
+  >>> transaction.commit()
+  >>> print purgeInfo()
+  purged 'expr 2'
+  purged 'expr 1'
+


Property changes on: lovely.responsecache/trunk/src/lovely/responsecache/testing/purge.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: lovely.responsecache/trunk/src/lovely/responsecache/tests.py
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/tests.py	2008-09-11 12:06:36 UTC (rev 91059)
+++ lovely.responsecache/trunk/src/lovely/responsecache/tests.py	2008-09-11 13:59:55 UTC (rev 91060)
@@ -31,6 +31,10 @@
 
 from zope.testing.loggingsupport import InstalledHandler
 
+from lovely.responsecache.purge import PurgeUtil
+
+import testing.purge
+
 from view import ResponseCacheSettings
 
 
@@ -72,6 +76,16 @@
     setup.placefulTearDown()
 
 
+def purgeSetUp(test):
+    # before we can use the purge test utilities we need to have a purge
+    # utility.
+    component.provideUtility(PurgeUtil(['varnish'], 1, 60)) # , IPurge)
+    testing.purge.setUpPurge(test)
+
+def purgeTearDown(test):
+    testing.purge.tearDownPurge(test)
+
+
 def test_suite():
     fsuite = functional.FunctionalDocFileSuite('PURGEVIEW.txt')
     fsuite.layer=ResponseCacheLayer
@@ -93,6 +107,10 @@
             'PURGEDISK.txt', setUp=setUp, tearDown=tearDown,
             optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
             ),
+        DocFileSuite(
+            'testing/purge.txt', setUp=purgeSetUp, tearDown=purgeTearDown,
+            optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+            ),
         fsuite,
         )
 



More information about the Checkins mailing list