[Erp5-report] r11668 - in /erp5/trunk/products/ERP5Type/tests: testMemcachedTool.py utils.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Dec 11 16:27:22 CET 2006


Author: vincent
Date: Mon Dec 11 16:27:18 2006
New Revision: 11668

URL: http://svn.erp5.org?rev=11668&view=rev
Log:
Use a monkey patch to automaticaly enable Memcached Tool.
Add a test for non-string dictionary keys.

Modified:
    erp5/trunk/products/ERP5Type/tests/testMemcachedTool.py
    erp5/trunk/products/ERP5Type/tests/utils.py

Modified: erp5/trunk/products/ERP5Type/tests/testMemcachedTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testMemcachedTool.py?rev=11668&r1=11667&r2=11668&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testMemcachedTool.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testMemcachedTool.py Mon Dec 11 16:27:18 2006
@@ -28,17 +28,15 @@
 
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from Products.ERP5Type.Tool.MemcachedTool import MemcachedTool
-from Products.ERP5Type import allowMemcachedTool
 from AccessControl.SecurityManagement import newSecurityManager
+from Products.ERP5Type.tests.utils import installRealMemcachedTool
 
 class TestMemcachedTool(ERP5TypeTestCase):
   """
     Test MemcachedTool.
-    Note : MemcachedTool needs to be enabled to be tested.
-           This test will fail if it's not the case.
-    Note 2 : When writing tests, keep in mind that the test must not
-             give false positive or negative if the value already exists in
-             an existing memcached server.
+    Note : When writing tests, keep in mind that the test must not give false
+           positive or negative if the value already exists in an existing
+           memcached server.
   """
 
   def getBusinessTemplateList(self):
@@ -46,6 +44,10 @@
 
   def getTitle(self):
     return "MemcachedTool"
+
+  def setUp(self):
+    ERP5TypeTestCase.setUp(self)
+    installRealMemcachedTool(self.getPortal())
 
   def afterSetUp(self):
     self.login()
@@ -58,13 +60,6 @@
 
   def getMemcachedDict(self):
     return self.getPortal().portal_memcached.getMemcachedDict(key_prefix='unit_test')
-
-  def test_00_memcachedToolIsEnabled(self):
-    """
-      Tests that memcached tool is enabled. Otherwise, testing it is
-      pointless.
-    """
-    self.assertTrue(allowMemcachedTool)
 
   def test_01_dictionnaryIsUsable(self):
     """
@@ -135,7 +130,28 @@
     self.assertTrue(tested_dict[tested_key] == tested_value)
     del tested_dict[tested_key]
     get_transaction().commit()
-    self.assertTrue(tested_dict[tested_key] is None)
+    try:
+      dummy = tested_dict[tested_key]
+    except KeyError:
+      pass
+    except:
+      self.fail('Wrong error type is raised when key is not found.')
+    else:
+      self.fail('No error is raised when key is not found.')
+
+  def test_06_checkNonStringKeyFails(self):
+    """
+      Tests that a non-string key is not accepted by SharedDict.
+    """
+    tested_dict = self.getMemcachedDict()
+    tested_key = tuple()
+    tested_value = 'test_value'
+    try:
+      tested_dict[tested_key] = tested_value
+    except TypeError:
+      pass
+    else:
+      self.fail('No error was raised when assigning a value to a non-string key.')
 
 if __name__ == '__main__':
   unittest.main()

Modified: erp5/trunk/products/ERP5Type/tests/utils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/utils.py?rev=11668&r1=11667&r2=11668&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/utils.py (original)
+++ erp5/trunk/products/ERP5Type/tests/utils.py Mon Dec 11 16:27:18 2006
@@ -89,4 +89,18 @@
   reload(ClassTool)
   portal.manage_delObjects(['portal_classes'])
   portal._setObject('portal_classes', ClassTool.ClassTool())
-  
+
+def installRealMemcachedTool(portal):
+  """Replaces portal_memcached by a real memcached tool object.
+  """
+  Products.ERP5Type.allowMemcachedTool = lambda: 1
+  _recreateMemcachedTool(portal)
+
+def _recreateMemcachedTool(portal):
+  """Recreate the memcached tool for this portal.
+  """
+  from Products.ERP5Type.Tool import MemcachedTool
+  reload(MemcachedTool)
+  portal.manage_delObjects(['portal_memcached'])
+  portal._setObject('portal_memcached', MemcachedTool.MemcachedTool())
+




More information about the Erp5-report mailing list