From e18266a2b25b5dcdb768c795a6783c86525a2dcc Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Tue, 10 May 2016 18:41:50 +0200
Subject: [PATCH] Make functional tests stop waiting for activities as soon as
 they're all in failed state

---
 .../extension.erp5.ERP5Zuite.py               | 20 +++++++
 .../Zuite_waitForActivities.py                | 16 ------
 .../Zuite_waitForActivities.xml               | 56 ++-----------------
 3 files changed, 25 insertions(+), 67 deletions(-)
 delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.py

diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py
index 0eaee8541c..eb31da73e3 100644
--- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py
+++ b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py
@@ -1,3 +1,23 @@
+from time import sleep
+
+def waitForActivities(self, count=1000):
+  """
+    We wait until all activities are finished
+
+    RuntimeError is raised in case there is no way
+    to finish activities.
+  """
+  activity_tool = self.getPortalObject().portal_activities
+  for x in xrange(count):
+    x = activity_tool.getMessageList()
+    if not x:
+      return 'Done.'
+    if all(x.processing_node == -2 for x in x):
+      break
+    activity_tool.process_timer(None, None)
+    sleep(1)
+  raise RuntimeError('tic is looping forever.')
+
 def UpdateImage(image):
   image._update_image_info()
 
diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.py
deleted file mode 100644
index 98da7ee93a..0000000000
--- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-  We wait until all activities are finished
-
-  RuntimeError is raised in case there is no way
-  to finish activities.
-"""
-from Products.ERP5Type.Utils import sleep
-count = int(count)
-while len(context.portal_activities.getMessageList()) > 0:
-  context.portal_activities.process_timer(0, 0)
-  count -= 1
-  sleep(t=1)
-  if count < 0:
-    raise RuntimeError, 'tic is endless'
-
-return 'Done.'
diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml
index 608ad57218..4a3db25edd 100644
--- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml
+++ b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml
@@ -2,63 +2,17 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+      <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
     </pickle>
     <pickle>
       <dictionary>
         <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
+            <key> <string>_function</string> </key>
+            <value> <string>waitForActivities</string> </value>
         </item>
         <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>count = 1000</string> </value>
-        </item>
-        <item>
-            <key> <string>_proxy_roles</string> </key>
-            <value>
-              <tuple>
-                <string>Manager</string>
-              </tuple>
-            </value>
+            <key> <string>_module</string> </key>
+            <value> <string>ERP5Zuite</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
-- 
2.30.9