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

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Dec 24 18:37:09 CET 2007


Author: vincent
Date: Mon Dec 24 18:37:09 2007
New Revision: 18500

URL: http://svn.erp5.org?rev=18500&view=rev
Log:
Add a test to verify that CMFActivity SQL connection is not blindly commited when activity failed: it needs to be commited for internal activity handling, but it must not commit whan activity might have done.

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=18500&r1=18499&r2=18500&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/tests/testCMFActivity.py (original)
+++ erp5/trunk/products/CMFActivity/tests/testCMFActivity.py Mon Dec 24 18:37:09 2007
@@ -39,6 +39,7 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from zLOG import LOG
 from ZODB.POSException import ConflictError
+from DateTime import DateTime
 
 try:
   from transaction import get as get_transaction
@@ -1926,6 +1927,61 @@
     message_list = activity_tool.getMessageList()
     self.assertEquals(len(message_list), 2)
 
+  def activityModificationsViaCMFActivityConnectionRolledBackOnError(self, activity):
+    activity_tool = self.getActivityTool()
+    def modifySQLAndFail(self, connection_id):
+      # Add a dumy activity which will not be executed
+      # Modified table does not matter
+      self.SQLDict_writeMessageList(
+        uid_list=[0], # This uid is never automaticaly assigned (starts at 1)
+        date_list=[DateTime().Date()],
+        path_list=['dummy_activity'],
+        method_id_list=['dummy_activity'],
+        message_list=['dummy_message'],
+        priority_list=[1],
+        processing_node_list=[-4],
+        group_method_id_list=[''],
+        tag_list=[''],
+        order_validation_text_list=['']
+        )
+      # Fail
+      raise ValueError, 'This method always fail'
+    Organisation.modifySQLAndFail = modifySQLAndFail
+    obj = self.getPortal().organisation_module.newContent(portal_type='Organisation')
+    obj.activate(activity=activity).modifySQLAndFail()
+    get_transaction().commit()
+    self.flushAllActivities(silent=1, loop_size=100)
+    self.assertEquals(activity_tool.countMessage(path='dummy_activity'), 0)
+  
+
+  def test_83_ActivityModificationsViaCMFActivityConnectionRolledBackOnErrorSQLDict(self, quiet=0, run=run_all_test):
+    """
+      When an activity modifies tables through CMFActivity SQL connection and
+      raises, check that its changes are correctly rolled back.
+    """
+    if not run: return
+    if not quiet:
+      message = '\nCheck activity modifications via CMFActivity connection are rolled back on error (SQLDict)'
+      ZopeTestCase._print(message)
+      LOG('Testing... ',0,message)
+    get_transaction().commit()
+    self.tic()
+    self.activityModificationsViaCMFActivityConnectionRolledBackOnError('SQLDict')
+
+  def test_84_ActivityModificationsViaCMFActivityConnectionRolledBackOnErrorSQLQeue(self, quiet=0, run=run_all_test):
+    """
+      When an activity modifies tables through CMFActivity SQL connection and
+      raises, check that its changes are correctly rolled back.
+    """
+    if not run: return
+    if not quiet:
+      message = '\nCheck activity modifications via CMFActivity connection are rolled back on error (SQLQueue)'
+      ZopeTestCase._print(message)
+      LOG('Testing... ',0,message)
+    get_transaction().commit()
+    self.tic()
+    self.activityModificationsViaCMFActivityConnectionRolledBackOnError('SQLQueue') 
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestCMFActivity))




More information about the Erp5-report mailing list