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

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Apr 9 16:13:29 CEST 2010


Author: jm
Date: Fri Apr  9 16:13:28 2010
New Revision: 34432

URL: http://svn.erp5.org?rev=34432&view=rev
Log:
runUnitTest: new option to randomize priorities of activities in a deterministic way

Most random failures in unit tests are due to wrong dependencies between
activities. With this option, it is often possible to make a unit test
reproducible to make debugging easier.

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

Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py?rev=34432&r1=34431&r2=34432&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] Fri Apr  9 16:13:28 2010
@@ -1331,5 +1331,17 @@
     dumps(value)
     CacheEntry__init__(self, value, *args, **kw)
   CacheEntry.__init__ = __init__
+  # randomize priorities of activities in a deterministic way
+  seed = os.environ.get("random_activity_priority")
+  if seed is not None:
+    ZopeTestCase._print("RNG seed for priorities of activities is %r\n" % seed)
+    rng = random.Random(seed)
+    from Products.CMFActivity.ActivityTool import Message
+    Message__init__ = Message.__init__
+    def __init__(self, obj, active_process, activity_kw, *args, **kw):
+      activity_kw['priority'] = rng.randint(-128, 127)
+      Message__init__(self, obj, active_process, activity_kw, *args, **kw)
+    Message.__init__ = __init__
+
 
 fortify()

Modified: erp5/trunk/products/ERP5Type/tests/runUnitTest.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/runUnitTest.py?rev=34432&r1=34431&r2=34432&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] Fri Apr  9 16:13:28 2010
@@ -8,6 +8,7 @@
 import unittest
 import shutil
 import errno
+import random
 
 import backportUnittest
 
@@ -79,21 +80,28 @@
                              for performance reasons. Provide list of documents
                              (delimited with comas) for which we want to force
                              indexing. This can only be for now 'portal_types'
-  
+
   --conversion_server_hostname=STRING
-                            Hostname used to connect to conversion server (Oood), 
-			    this value will stored at default preference. By default 
-			    localhost is used. 
+                             Hostname used to connect to conversion server (Oood),
+                             this value will stored at default preference.
+                             By default localhost is used.
 
   --conversion_server_port=STRING
-                            Port number used to connect to conversion server
-			    (Oood), the value will be stored at default preference. 
-			    By default 8008 is used.
+                             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.
+                             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)
+                             almost always reproducible. A random number
+                             generator with the specified seed (or a random one
+                             otherwise) is created for this purpose.
 
 """
 
@@ -515,12 +523,14 @@
         "enable_full_indexing=",
         "run_only=",
         "update_only=",
-        "use_dummy_mail_host", 
-        "update_business_templates"] )
+        "use_dummy_mail_host",
+        "update_business_templates",
+        "random_activity_priority=",
+        ])
   except getopt.GetoptError, msg:
     usage(sys.stderr, msg)
     sys.exit(2)
-  
+
   if WIN:
     os.environ["erp5_tests_bt5_path"] = os.path.join(real_instance_home, 'bt5')
 
@@ -582,6 +592,9 @@
       os.environ["conversion_server_port"] = arg
     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))
 
   test_list = args
   if not test_list:




More information about the Erp5-report mailing list