[Erp5-report] r12022 - /erp5/trunk/products/CMFActivity/tests/testCMFActivity.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Jan 11 15:19:21 CET 2007
Author: yo
Date: Thu Jan 11 15:19:18 2007
New Revision: 12022
URL: http://svn.erp5.org?rev=12022&view=rev
Log:
This new test confirms a bug which made messages pending permanently when conflict errors happen in retrieving objects.
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=12022&r1=12021&r2=12022&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/tests/testCMFActivity.py (original)
+++ erp5/trunk/products/CMFActivity/tests/testCMFActivity.py Thu Jan 11 15:19:18 2007
@@ -674,6 +674,49 @@
self.flushAllActivities(silent = 1, loop_size = i + 10)
self.assertEquals(len(activity_tool.getMessageList()), 0)
+ def TryConflictErrorsWhileValidating(self, activity):
+ """Try to execute active objects which may throw conflict errors
+ while validating, and check if they are still executed."""
+ # Make sure that no active object is installed.
+ activity_tool = self.getPortal().portal_activities
+ activity_tool.manageClearActivities(keep=0)
+
+ # Need an object.
+ organisation_module = self.getOrganisationModule()
+ if not organisation_module.hasContent(self.company_id):
+ organisation_module.newContent(id=self.company_id)
+ o = organisation_module._getOb(self.company_id)
+ get_transaction().commit()
+ self.flushAllActivities(silent = 1, loop_size = 10)
+ self.assertEquals(len(activity_tool.getMessageList()), 0)
+
+ # Monkey patch Queue to induce conflict errors artificially.
+ def validate(self, *args, **kwargs):
+ from Products.CMFActivity.Activity.Queue import Queue
+ if Queue.current_num_conflict_errors < Queue.conflict_errors_limit:
+ Queue.current_num_conflict_errors += 1
+ # LOG('TryConflictErrorsWhileValidating', 0, 'causing a conflict error artificially')
+ raise ConflictError
+ return self.original_validate(*args, **kwargs)
+ from Products.CMFActivity.Activity.Queue import Queue
+ Queue.original_validate = Queue.validate
+ Queue.validate = validate
+
+ try:
+ # Test some range of conflict error occurences.
+ for i in xrange(10):
+ Queue.current_num_conflict_errors = 0
+ Queue.conflict_errors_limit = i
+ o.activate(activity = activity).getId()
+ get_transaction().commit()
+ self.flushAllActivities(silent = 1, loop_size = i + 10)
+ self.assertEquals(len(activity_tool.getMessageList()), 0)
+ finally:
+ Queue.validate = Queue.original_validate
+ del Queue.original_validate
+ del Queue.current_num_conflict_errors
+ del Queue.conflict_errors_limit
+
def test_01_DeferedSetTitleSQLDict(self, quiet=0, run=run_all_test):
# Test if we can add a complete sales order
if not run: return
@@ -1462,6 +1505,28 @@
LOG('Testing... ', 0, message)
self.TryConflictErrorsWhileProcessing('SQLQueue')
+ def test_70_TestConflictErrorsWhileValidatingWithSQLDict(self, quiet=0, run=run_all_test):
+ """
+ Test if conflict errors spoil out active objects with SQLDict.
+ """
+ if not run: return
+ if not quiet:
+ message = '\nTest Conflict Errors While Validating With SQLDict'
+ ZopeTestCase._print(message)
+ LOG('Testing... ', 0, message)
+ self.TryConflictErrorsWhileValidating('SQLDict')
+
+ def test_71_TestConflictErrorsWhileValidatingWithSQLQueue(self, quiet=0, run=run_all_test):
+ """
+ Test if conflict errors spoil out active objects with SQLQueue.
+ """
+ if not run: return
+ if not quiet:
+ message = '\nTest Conflict Errors While Validating With SQLQueue'
+ ZopeTestCase._print(message)
+ LOG('Testing... ', 0, message)
+ self.TryConflictErrorsWhileValidating('SQLQueue')
+
if __name__ == '__main__':
framework()
More information about the Erp5-report
mailing list