[Erp5-report] r42905 jm - /erp5/trunk/products/ERP5Type/tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Feb 1 19:31:41 CET 2011


Author: jm
Date: Tue Feb  1 19:31:41 2011
New Revision: 42905

URL: http://svn.erp5.org?rev=42905&view=rev
Log:
Always use dummy MailHost while running unit tests

Modified:
    erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py
    erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
    erp5/trunk/products/ERP5Type/tests/runUnitTest.py
    erp5/trunk/products/ERP5Type/tests/utils.py

Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py?rev=42905&r1=42904&r2=42905&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] Tue Feb  1 19:31:41 2011
@@ -101,6 +101,7 @@ class ERP5TypeLiveTestCase(ERP5TypeTestC
       '''Closes the ZODB connection.'''
       revert = transaction.get().__hash__() != self.initial_transaction_hash
       transaction.abort()
+      self._restoreMailHost()
       if revert:
         if self.activity_tool_subscribed:
           self.portal.portal_activities.subscribe()
@@ -115,6 +116,7 @@ class ERP5TypeLiveTestCase(ERP5TypeTestC
         self.activity_tool_subscribed = self.getPortalObject()\
                 .portal_activities.isSubscribed()
         self.portal.portal_activities.unsubscribe()
+        self._setUpDummyMailHost()
 
     def setUp(self):
         '''Sets up the fixture. Do not override,

Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py?rev=42905&r1=42904&r2=42905&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] Tue Feb  1 19:31:41 2011
@@ -73,7 +73,7 @@ from Products.ERP5Type.Accessor.Constant
 from zLOG import LOG, DEBUG
 
 from Products.ERP5Type.tests.backportUnittest import SetupSiteError
-from Products.ERP5Type.tests.utils import DummyMailHost, parseListeningAddress
+from Products.ERP5Type.tests.utils import DummyMailHostMixin, parseListeningAddress
 
 # Quiet messages when installing products
 install_product_quiet = 1
@@ -322,6 +322,20 @@ class ERP5TypeTestCaseMixin(ProcessingNo
       if not uf.getUser(user_name):
         uf._doAddUser(user_name, 'secret', ['Member'], [])
 
+    def _setUpDummyMailHost(self):
+      """Replace Original Mail Host by Dummy Mail Host in a non-persistent way
+      """
+      cls = self.portal.MailHost.__class__
+      assert not issubclass(cls, DummyMailHostMixin)
+      cls.__bases__ = (DummyMailHostMixin,) + cls.__bases__
+
+    def _restoreMailHost(self):
+      """Restore original Mail Host
+      """
+      cls = self.portal.MailHost.__class__
+      assert cls.__bases__[0] is DummyMailHostMixin
+      cls.__bases__ = cls.__bases__[1:]
+
     def getDefaultSitePreferenceId(self):
       """Default id, usefull method to override
       """
@@ -768,7 +782,6 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
       BaseMessage.max_retry = property(lambda self:
         self.activity_kw.get('max_retry', 1))
 
-      use_dummy_mail_host = os.environ.get('use_dummy_mail_host', 0)
       template_list = self.getBusinessTemplateList()
       erp5_catalog_storage = os.environ.get('erp5_catalog_storage',
                                             'erp5_mysql_innodb_catalog')
@@ -801,8 +814,7 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
                          create_activities=create_activities,
                          quiet=install_bt5_quiet,
                          hot_reindexing=hot_reindexing,
-                         erp5_catalog_storage=erp5_catalog_storage, 
-                         use_dummy_mail_host=use_dummy_mail_host)
+                         erp5_catalog_storage=erp5_catalog_storage)
       PortalTestCase.setUp(self)
 
     def afterSetUp(self):
@@ -826,13 +838,6 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
         connection_name = connection_string_name.replace('_string', '')
         getattr(self.portal, connection_name).edit('', connection_string)
 
-    def _setUpDummyMailHost(self):
-      """Replace Original Mail Host by Dummy Mail Host.
-      """
-      if 'MailHost' in self.portal.objectIds():
-        self.portal.manage_delObjects(['MailHost'])
-        self.portal._setObject('MailHost', DummyMailHost('MailHost'))
-
     def _updateConversionServerConfiguration(self):
       """Update conversion server (Oood) at default site preferences.
       """
@@ -909,8 +914,7 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
                      light_install=1,
                      create_activities=1,
                      hot_reindexing=1,
-                     erp5_catalog_storage='erp5_mysql_innodb_catalog',
-                     use_dummy_mail_host=0):
+                     erp5_catalog_storage='erp5_mysql_innodb_catalog'):
       '''
         Creates an ERP5 site.
         business_template_list must be specified correctly
@@ -978,6 +982,7 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
             self.portal = portal = self.getPortal()
 
             if len(setup_done) == 1: # make sure it is run only once
+              self._setUpDummyMailHost()
               try:
                 from Products import DeadlockDebugger
               except ImportError:
@@ -997,9 +1002,6 @@ class ERP5TypeCommandLineTestCase(ERP5Ty
                             'Assignor', 'Author', 'Auditor', 'Associate'], [])
             user = uf.getUserById('ERP5TypeTestCase').__of__(uf)
 
-            if use_dummy_mail_host:
-              self._setUpDummyMailHost()
-
             setup_once = getattr(self, 'setUpOnce', None)
             if setup_once is not None and \
                    not getattr(portal, 'set_up_once_called', 0):

Modified: erp5/trunk/products/ERP5Type/tests/runUnitTest.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/runUnitTest.py?rev=42905&r1=42904&r2=42905&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] Tue Feb  1 19:31:41 2011
@@ -98,9 +98,6 @@ Options:
                              Port number used to connect to conversion server
                              (Oood), the value will be stored at default preference.
                              By default 8008 is used.
-  --use_dummy_mail_host      Replace the MailHost by DummyMailHost.
-                             This prevent the instance send emails.
-                             By default Original MailHost is used.
   --random_activity_priority=[SEED]
                              Force activities to have a random priority, to make
                              random failures (due to bad activity dependencies)
@@ -610,7 +607,6 @@ def main(argument_list=None):
         "enable_full_indexing=",
         "run_only=",
         "update_only=",
-        "use_dummy_mail_host",
         "update_business_templates",
         "random_activity_priority=",
         "activity_node=",
@@ -698,8 +694,6 @@ def main(argument_list=None):
       os.environ["erp5_dump_sql"] = "0"
       os.environ["erp5_tests_data_fs_path"] = os.path.join(
                                       live_instance_path, 'var', 'Data.fs')
-    elif opt == "--use_dummy_mail_host":
-      os.environ["use_dummy_mail_host"] = "1"
     elif opt == "--random_activity_priority":
       os.environ["random_activity_priority"] = arg or \
         str(random.randrange(0, 1<<16))

Modified: erp5/trunk/products/ERP5Type/tests/utils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/utils.py?rev=42905&r1=42904&r2=42905&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/utils.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/utils.py [utf8] Tue Feb  1 19:31:41 2011
@@ -54,25 +54,23 @@ class FileUpload(file):
     self.headers = {}
 
 # dummy objects
-class DummyMailHost(MailHost):
+class DummyMailHostMixin(object):
   """Dummy Mail Host that doesn't really send messages and keep a copy in
   _last_message attribute.
-  To use it, you have to replace existing mailhost in afterSetUp:
-    
-    if 'MailHost' in portal.objectIds():
-      portal.manage_delObjects(['MailHost'])
-    portal._setObject('MailHost', DummyMailHost('MailHost'))
   """
   _last_message = ()
   _previous_message = ()
   _message_list = []
-  def _send( self, mfrom, mto, messageText, immediate=False ):
+
+  @classmethod
+  def _send(cls, mfrom, mto, messageText, immediate=False):
     """Record message in _last_message."""
-    self._previous_message = self._last_message
-    self._last_message = (mfrom, mto, messageText)
-    self._message_list.append(self._last_message)
+    cls._previous_message = cls._last_message
+    cls._last_message = (mfrom, mto, messageText)
+    cls._message_list.append(cls._last_message)
 
-  def _decodeMessage(self, messageText):
+  @staticmethod
+  def _decodeMessage(messageText):
     """ Decode message"""
     message_text = messageText
     for part in message_from_string(messageText).walk():
@@ -81,15 +79,20 @@ class DummyMailHost(MailHost):
         message_text = part.get_payload(decode=1)
     return message_text
 
-  def getMessageList(self, decode=True):
+  @classmethod
+  def getMessageList(cls, decode=True):
     """ Return message list"""
     if decode:
-      return [ (m[0], m[1], self._decodeMessage(m[2])) for m in self._message_list]
-    return self._message_list
+      return [(m[0], m[1], cls._decodeMessage(m[2])) for m in cls._message_list]
+    return cls._message_list
 
-  def getLastLog(self):
+  @classmethod
+  def getLastLog(cls):
     """ Return last message """
-    return self._last_message
+    return cls._last_message
+
+class DummyMailHost(DummyMailHostMixin, MailHost):
+  pass
 
 
 class DummyTranslationService:



More information about the Erp5-report mailing list