[Erp5-report] r19083 - /erp5/trunk/products/CMFActivity/tests/testCMFActivity.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Feb 5 20:37:07 CET 2008


Author: vincent
Date: Tue Feb  5 20:37:05 2008
New Revision: 19083

URL: http://svn.erp5.org?rev=19083&view=rev
Log:
Check connection state consistency when activity commit tpc_vote raises.

Modified:
    erp5/trunk/products/CMFActivity/tests/testCMFActivity.py

Modified: erp5/trunk/products/CMFActivity/tests/testCMFActivity.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/tests/testCMFActivity.py?rev=19083&r1=19082&r2=19083&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/tests/testCMFActivity.py (original)
+++ erp5/trunk/products/CMFActivity/tests/testCMFActivity.py Tue Feb  5 20:37:05 2008
@@ -2454,6 +2454,68 @@
     finally:
       delattr(Organisation, 'modifySQL')
 
+  def TryActivityRaiseInCommitDoesNotStallActivityConection(self, activity):
+    """
+      Check that an activity which commit raises (as would a regular conflict
+      error be raised in tpc_vote) does not cause activity connection to
+      stall.
+    """
+    get_transaction().commit()
+    self.tic()
+    activity_tool = self.getActivityTool()
+    from Shared.DC.ZRDB.TM import TM
+    class dummy_tm(TM):
+      def tpc_vote(self, *ignored):
+        raise Exception, 'vote always raises'
+
+      def _finish(self):
+        pass
+
+      def _abort(self):
+        pass
+    dummy_tm_instance = dummy_tm()
+    def registerFailingTransactionManager(self, *args, **kw):
+      dummy_tm_instance._register()
+    try:
+      Organisation.registerFailingTransactionManager = registerFailingTransactionManager
+      obj = self.getPortal().organisation_module.newContent(portal_type='Organisation')
+      get_transaction().commit()
+      self.tic()
+      now = DateTime()
+      obj.activate(activity=activity).registerFailingTransactionManager()
+      get_transaction().commit()
+      self.flushAllActivities(silent=1, loop_size=100)
+      get_transaction().commit()
+      # Check that cmf_activity SQL connection still works
+      connection_da_pool = self.getPortalObject().cmf_activity_sql_connection()
+      import thread
+      connection_da = connection_da_pool._db_pool[thread.get_ident()]
+      self.assertFalse(connection_da._registered)
+      connection_da_pool.query('select 1')
+      self.assertTrue(connection_da._registered)
+      get_transaction().commit()
+      self.assertFalse(connection_da._registered)
+    finally:
+      delattr(Organisation, 'registerFailingTransactionManager')
+
+  def test_96_ActivityRaiseInCommitDoesNotStallActivityConectionSQLDict(self, quiet=0, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = '\nCheck that raising in commit does not stall cmf activity SQL connection (SQLDict)'
+      ZopeTestCase._print(message)
+      LOG('Testing... ',0,message)
+    self.TryActivityRaiseInCommitDoesNotStallActivityConection('SQLDict')
+
+  def test_97_ActivityRaiseInCommitDoesNotStallActivityConectionSQLQueue(self, quiet=0, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = '\nCheck that raising in commit does not stall cmf activity SQL connection (SQLQueue)'
+      ZopeTestCase._print(message)
+      LOG('Testing... ',0,message)
+    self.TryActivityRaiseInCommitDoesNotStallActivityConection('SQLQueue')
+
+
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestCMFActivity))




More information about the Erp5-report mailing list