Commit da44845a authored by Thomas Gambier's avatar Thomas Gambier 🚴🏼 Committed by Lu Xu

erp5_test_result: rework slapos agent distributor

parent 27c22d64
...@@ -28,7 +28,7 @@ from Products.ERP5Type.XMLObject import XMLObject ...@@ -28,7 +28,7 @@ from Products.ERP5Type.XMLObject import XMLObject
from DateTime import DateTime from DateTime import DateTime
import json import json
import random import random
from zLOG import LOG,DEBUG,ERROR from zLOG import LOG,DEBUG,ERROR,INFO
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery from Products.ZSQLCatalog.SQLCatalog import SimpleQuery
...@@ -271,7 +271,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject): ...@@ -271,7 +271,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
if test_node.getValidationState() != 'validated': if test_node.getValidationState() != 'validated':
try: try:
test_node.validate() test_node.validate()
except Exception as e: except Exception, e:
LOG('Test Node Validate',ERROR,'%s' %e) LOG('Test Node Validate',ERROR,'%s' %e)
if test_node is None: if test_node is None:
test_node = test_node_module.newContent(portal_type="Test Node", title=title, computer_guid=computer_guid, test_node = test_node_module.newContent(portal_type="Test Node", title=title, computer_guid=computer_guid,
...@@ -384,7 +384,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject): ...@@ -384,7 +384,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
for x in to_delete_key_list: for x in to_delete_key_list:
config.pop(x) config.pop(x)
config_list.append(config) config_list.append(config)
LOG('ERP5ProjectUnitTestDistributor.startTestSuite, config_list',DEBUG,config_list) LOG('ERP5ProjectUnitTestDistributor.startTestSuite, config_list',INFO,config_list)
if batch_mode: if batch_mode:
return config_list return config_list
return json.dumps(config_list) return json.dumps(config_list)
...@@ -395,12 +395,13 @@ class ERP5ProjectUnitTestDistributor(XMLObject): ...@@ -395,12 +395,13 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
""" """
Here this is only a proxy to the task distribution tool Here this is only a proxy to the task distribution tool
""" """
LOG('ERP5ProjectUnitTestDistributor.createTestResult', DEBUG, (node_title, test_title)) LOG('ERP5ProjectUnitTestDistributor.createTestResult', INFO, (node_title, test_title))
portal = self.getPortalObject() portal = self.getPortalObject()
if node_title: if node_title:
test_node = self._getTestNodeFromTitle(node_title) test_node = self._getTestNodeFromTitle(node_title)
test_node.setPingDate() test_node.setPingDate()
test_suite = self._getTestSuiteFromTitle(test_title) test_suite = self._getTestSuiteFromTitle(test_title)
LOG('ERP5ProjectUnitTestDistributor.createTestResult 2', INFO, (test_suite))
if test_suite is not None: if test_suite is not None:
if not allow_restart and test_suite.isEnabled(): if not allow_restart and test_suite.isEnabled():
# in case if allow_restart is not enforced by client and test_node # in case if allow_restart is not enforced by client and test_node
...@@ -430,6 +431,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject): ...@@ -430,6 +431,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
return test_node return test_node
def _getTestSuiteFromTitle(self, suite_title): def _getTestSuiteFromTitle(self, suite_title):
LOG('ERP5ProjectUnitTestDistributor._getTestSuiteFromTitle', INFO, (suite_title, self._getTestSuiteModule()))
test_suite_list = self._getTestSuiteModule().searchFolder( test_suite_list = self._getTestSuiteModule().searchFolder(
portal_type='Test Suite', portal_type='Test Suite',
title=SimpleQuery(comparison_operator='=', title=suite_title), title=SimpleQuery(comparison_operator='=', title=suite_title),
......
...@@ -128,7 +128,7 @@ class ERP5ScalabilityDistributor(ERP5ProjectUnitTestDistributor, object): ...@@ -128,7 +128,7 @@ class ERP5ScalabilityDistributor(ERP5ProjectUnitTestDistributor, object):
if test_node.getValidationState() != 'validated': if test_node.getValidationState() != 'validated':
try: try:
test_node.validate() test_node.validate()
except Exception as e: except Exception, e:
LOG('Test Node Validate',ERROR,'%s' %e) LOG('Test Node Validate',ERROR,'%s' %e)
return test_node return test_node
return None return None
......
...@@ -26,7 +26,9 @@ ...@@ -26,7 +26,9 @@
############################################################################## ##############################################################################
from erp5.component.document.ERP5ProjectUnitTestDistributor import ERP5ProjectUnitTestDistributor from erp5.component.document.ERP5ProjectUnitTestDistributor import ERP5ProjectUnitTestDistributor
from DateTime import DateTime
from zLOG import LOG,DEBUG,ERROR,INFO
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
import json import json
...@@ -65,41 +67,115 @@ class SlapOSAgentDistributor(ERP5ProjectUnitTestDistributor): ...@@ -65,41 +67,115 @@ class SlapOSAgentDistributor(ERP5ProjectUnitTestDistributor):
""" """
return 'SlapOSAgentTest' return 'SlapOSAgentTest'
security.declarePublic("createTestResult")
def createTestResult(self, name, revision, test_name_list, allow_restart,
test_title=None, node_title=None, project_title=None):
"""
Here this is only a proxy to the task distribution tool
"""
LOG('SlapOSAgentDistributor.createTestResult', INFO, (node_title, test_title, revision))
portal = self.getPortalObject()
if node_title:
test_node = self._getTestNodeFromTitle(node_title)
test_node.setPingDate()
test_suite = self._getTestSuiteFromTitle(test_title)
LOG('SlapOSAgentDistributor.createTestResult 2', INFO, (test_suite))
if test_suite is not None:
if not allow_restart and test_suite.isEnabled():
# in case if allow_restart is not enforced by client and test_node
# periodicity is enabled control the restartability based on test_suite
# periodicity
current_date = DateTime()
alarm_date = test_suite.getAlarmDate()
if alarm_date is None or alarm_date <= current_date:
allow_restart = True
test_suite.setAlarmDate(
test_suite.getNextPeriodicalDate(current_date, alarm_date))
#test_suite.setPingDate()
return portal.portal_task_distribution.createTestResult(name,
revision, test_name_list, allow_restart,
test_title=test_title, node_title=node_title,
project_title=project_title)
def _getTestNodeFromTitle(self, node_title):
test_node_list = self._getTestNodeModule().searchFolder(
portal_type="Test Node",
title=SimpleQuery(comparison_operator='=', title=node_title),
limit=2
)
assert len(test_node_list) == 1, "We found %i test nodes for %s" % (
len(test_node_list), node_title)
test_node = test_node_list[0].getObject()
return test_node
def _getTestSuiteFromTitle(self, suite_title):
LOG('SlapOSAgentDistributor._getTestSuiteFromTitle', INFO, (suite_title, self._getTestSuiteModule()))
test_suite_list = self._getTestSuiteModule().searchFolder(
portal_type='SlapOS Agent Test Suite',
title=SimpleQuery(comparison_operator='=', title=suite_title),
validation_state='validated',
limit=2)
assert len(test_suite_list) <= 1, "We found %i test suite for %s" % (
len(test_suite_list), suite_title)
test_suite = None
if len(test_suite_list):
test_suite = test_suite_list[0].getObject()
return test_suite
security.declarePublic("generateConfiguration") security.declarePublic("generateConfiguration")
def generateConfiguration(self, test_suite_title, batch_mode=0): def generateConfiguration(self, test_suite_title, batch_mode=0):
""" """
generateConfiguration : this is just a proxy to an external method generateConfiguration : not used for slapos agent
""" """
test_suite_module = self._getTestSuiteModule() return json.dumps({"configuration_list": [{}]})
security.declarePublic("getServiceList")
def getServiceList(self, test_suite_title):
"""
getServiceList : return a dict containing the list of services to request to slapos master before running the test
"""
LOG('[SlapOSAgentDistributor] getServiceList', INFO, test_suite_title)
test_suite_module = self._getTestSuiteModule()
test_suite_list = test_suite_module.searchFolder( test_suite_list = test_suite_module.searchFolder(
title=test_suite_title, title=test_suite_title,
validation_state="validated", validation_state="validated",
specialise_uid=self.getUid()) specialise_uid=self.getUid())
service_list = {}
if len(test_suite_list) == 0: if len(test_suite_list) == 0:
return json.dumps({}) error_message = 'Error getting test suite information. Bad test suite title? '
LOG('[SlapOSAgentDistributor] getServiceList', ERROR, error_message)
return json.dumps({'error_message': error_message})
generated_configuration = {}
for unit_test in test_suite_list[0].searchFolder( for unit_test in test_suite_list[0].searchFolder(
portal_type="SlapOS Software Release Unit Test"): portal_type="SlapOS Software Release Unit Test"):
generated_configuration[unit_test.getTitle()] = { LOG('[SlapOSAgentDistributor] getServiceList, unit_test: ', INFO, unit_test.getTitle())
service_list[unit_test.getTitle()] = {
"title": unit_test.getTitle(), "title": unit_test.getTitle(),
"url": unit_test.getUrlString(), "url": unit_test.getUrlString(),
"group": unit_test.getGroupReference("default")} "group": unit_test.getGroupReference("default"),
"shared" : unit_test.getShared(),
if unit_test.getTextContent() is not None: "software_type" : unit_test.getSoftwareType(),
generated_configuration[unit_test.getTitle()]['request_kw'] = unit_test.getTextContent() "partition_parameter_kw" : unit_test.getTextContent(),
"filter_kw" : unit_test.getFilterKw()
}
if unit_test.getSupplyComputer() is not None: if unit_test.getSupplyComputer() is not None:
generated_configuration[unit_test.getTitle()]['supply_computer'] = unit_test.getSupplyComputer() service_list[unit_test.getTitle()]['supply_computer'] = unit_test.getSupplyComputer()
return json.dumps(generated_configuration)
LOG('[SlapOSAgentDistributor] getServiceList, final service_list: ', INFO, service_list)
return json.dumps(service_list)
def _getSortedNodeTestSuiteToRun(self, test_node):
"""
Returned ordered list of test suites of a test node.
For now do nothing
"""
test_suite_list = test_node.getAggregateValueList()
return test_suite_list
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple/> <tuple>
<string>W: 30, 0: Unused DEBUG imported from zLOG (unused-import)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -110,7 +110,7 @@ def generateConfigurationList(self, test_suite_title): ...@@ -110,7 +110,7 @@ def generateConfigurationList(self, test_suite_title):
remaining_nodes = list(available_nodes) remaining_nodes = list(available_nodes)
launcher_nodes = [] launcher_nodes = []
launcher_nodes.append( remaining_nodes.pop() ) launcher_nodes.append( remaining_nodes.pop() )
# Make list with only the computer_guid property of each node (to be used directly by template) # Make list with only the computer_guid property of each node (to be used directly by template)
remaining_nodes_computer_guid = [unvalid_node] + [ node.getReference() for node in remaining_nodes ] + [unvalid_node] remaining_nodes_computer_guid = [unvalid_node] + [ node.getReference() for node in remaining_nodes ] + [unvalid_node]
launcher_nodes_computer_guid = [ node.getReference() for node in launcher_nodes ] launcher_nodes_computer_guid = [ node.getReference() for node in launcher_nodes ]
...@@ -149,6 +149,6 @@ def generateConfigurationList(self, test_suite_title): ...@@ -149,6 +149,6 @@ def generateConfigurationList(self, test_suite_title):
computer_guid = node.getReference() computer_guid = node.getReference()
if _isInMyDictOrListRec(return_dict, computer_guid): if _isInMyDictOrListRec(return_dict, computer_guid):
involved_nodes_computer_guid.append(computer_guid) involved_nodes_computer_guid.append(computer_guid)
return_dict['involved_nodes_computer_guid'] = involved_nodes_computer_guid return_dict['involved_nodes_computer_guid'] = involved_nodes_computer_guid
return return_dict return return_dict
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Standard Property" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>elementary_type/text</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>filter_kw_property</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Standard Property</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Standard Property" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>elementary_type/boolean</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Is it shared instance</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>shared_property</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Standard Property</string> </value>
</item>
<item>
<key> <string>property_default</string> </key>
<value>
<none/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Standard Property" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>elementary_type/text</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>software_type used for the service</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>software_type_property</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Standard Property</string> </value>
</item>
<item>
<key> <string>property_default</string> </key>
<value>
<none/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -104,6 +104,9 @@ ...@@ -104,6 +104,9 @@
<string>my_url_string</string> <string>my_url_string</string>
<string>my_supply_computer</string> <string>my_supply_computer</string>
<string>my_group_reference</string> <string>my_group_reference</string>
<string>my_software_type</string>
<string>my_shared</string>
<string>my_filter_kw</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="StringField" module="Products.Formulator.StandardFields"/> <global name="TextAreaField" module="Products.Formulator.StandardFields"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>your_real_duration</string> </value> <value> <string>my_filter_kw</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
...@@ -18,13 +18,21 @@ ...@@ -18,13 +18,21 @@
<key> <string>external_validator_failed</string> </key> <key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value> <value> <string>The input failed the external validator.</string> </value>
</item> </item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item> <item>
<key> <string>required_not_found</string> </key> <key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value> <value> <string>Input is required but no input given.</string> </value>
</item> </item>
<item> <item>
<key> <string>too_long</string> </key> <key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value> <value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item> </item>
</dictionary> </dictionary>
</value> </value>
...@@ -50,39 +58,39 @@ ...@@ -50,39 +58,39 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>display_maxwidth</string> </key> <key> <string>editable</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>display_width</string> </key> <key> <string>enabled</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>editable</string> </key> <key> <string>external_validator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>extra</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>external_validator</string> </key> <key> <string>height</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>extra</string> </key> <key> <string>hidden</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>hidden</string> </key> <key> <string>max_length</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>max_linelength</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>max_lines</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -94,15 +102,15 @@ ...@@ -94,15 +102,15 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>truncate</string> </key> <key> <string>unicode</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>unicode</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>width</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -122,48 +130,46 @@ ...@@ -122,48 +130,46 @@
</item> </item>
<item> <item>
<key> <string>default</string> </key> <key> <string>default</string> </key>
<value> <value> <string></string> </value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>display_maxwidth</string> </key> <key> <string>editable</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>display_width</string> </key> <key> <string>enabled</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>editable</string> </key> <key> <string>external_validator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>extra</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>external_validator</string> </key> <key> <string>height</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>extra</string> </key> <key> <string>hidden</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>hidden</string> </key> <key> <string>max_length</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>max_linelength</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>max_lines</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -175,15 +181,15 @@ ...@@ -175,15 +181,15 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>truncate</string> </key> <key> <string>unicode</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>unicode</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>width</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -207,19 +213,11 @@ ...@@ -207,19 +213,11 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Difference between end date and start date</string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item> <item>
<key> <string>editable</string> </key> <key> <string>editable</string> </key>
<value> <int>0</int> </value> <value> <int>1</int> </value>
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>enabled</string> </key>
...@@ -233,16 +231,24 @@ ...@@ -233,16 +231,24 @@
<key> <string>extra</string> </key> <key> <string>extra</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item> <item>
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>max_length</string> </key>
<value> <string>text</string> </value> <value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>max_lines</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -251,11 +257,7 @@ ...@@ -251,11 +257,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Duration</string> </value> <value> <string>filter_kw (json format)</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>unicode</string> </key> <key> <string>unicode</string> </key>
...@@ -263,7 +265,11 @@ ...@@ -263,7 +265,11 @@
</item> </item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value> <value> <int>1</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item> </item>
</dictionary> </dictionary>
</value> </value>
...@@ -271,17 +277,4 @@ ...@@ -271,17 +277,4 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.getStopDate().asdatetime() - context.getStartDate().asdatetime() if context.hasStopDate() else \'\'</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="CheckBoxField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_shared</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>This field is mandatory.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Shared</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>listbox_duration</string> </value> <value> <string>my_software_type</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
...@@ -77,10 +77,6 @@ ...@@ -77,10 +77,6 @@
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>input_type</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>max_length</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -122,9 +118,7 @@ ...@@ -122,9 +118,7 @@
</item> </item>
<item> <item>
<key> <string>default</string> </key> <key> <string>default</string> </key>
<value> <value> <string></string> </value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
...@@ -158,10 +152,6 @@ ...@@ -158,10 +152,6 @@
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>input_type</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>max_length</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -251,7 +241,7 @@ ...@@ -251,7 +241,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Duration</string> </value> <value> <string>Software Type</string> </value>
</item> </item>
<item> <item>
<key> <string>truncate</string> </key> <key> <string>truncate</string> </key>
...@@ -271,17 +261,4 @@ ...@@ -271,17 +261,4 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: modules[\'datetime\'].timedelta(seconds=cell.getProperty(\'duration\'))</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Request KW (json format)</string> </value> <value> <string>partition_parameter_kw (json format)</string> </value>
</item> </item>
<item> <item>
<key> <string>unicode</string> </key> <key> <string>unicode</string> </key>
......
from DateTime import DateTime from DateTime import DateTime
now = DateTime() now = DateTime()
#Clean-up invalidated Test Nodes and #Clean-up invalidated Test Nodes and
# invalidate inactive ones # invalidate inactive ones
list_node = context.portal_catalog( list_node = context.portal_catalog(
portal_type="Test Node", portal_type="Test Node",
) )
...@@ -30,7 +30,7 @@ for test_node in list_node: ...@@ -30,7 +30,7 @@ for test_node in list_node:
portal = context.getPortalObject() portal = context.getPortalObject()
distributor_list = portal.portal_task_distribution.objectValues() distributor_list = portal.portal_task_distribution.objectValues()
for distributor in distributor_list: for distributor in distributor_list:
distributor.activate(tag=tag).optimizeConfiguration() distributor.activate(tag=tag).optimizeConfiguration()
context.activate(after_tag=tag).getId() context.activate(after_tag=tag).getId()
......
...@@ -23,7 +23,7 @@ expected_title = context.getTitle() ...@@ -23,7 +23,7 @@ expected_title = context.getTitle()
for tr in context.portal_catalog(**query_params): for tr in context.portal_catalog(**query_params):
line_found = False line_found = False
tr = tr.getObject() tr = tr.getObject()
# Optimisation: the test result line probably have the same id in the previous # Optimisation: the test result line probably have the same id in the previous
# test result. # test result.
line = getattr(tr, expected_id, None) line = getattr(tr, expected_id, None)
...@@ -45,5 +45,5 @@ for tr in context.portal_catalog(**query_params): ...@@ -45,5 +45,5 @@ for tr in context.portal_catalog(**query_params):
# return as many test result line as the count method returns. # return as many test result line as the count method returns.
if not line_found: if not line_found:
result_list.append(tr.asContext(string_index='NOT_EXECUTED')) result_list.append(tr.asContext(string_index='NOT_EXECUTED'))
return result_list return result_list
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="StringField" module="Products.Formulator.StandardFields"/> <global name="FloatField" module="Products.Formulator.StandardFields"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -19,12 +19,12 @@ ...@@ -19,12 +19,12 @@
<value> <string>The input failed the external validator.</string> </value> <value> <string>The input failed the external validator.</string> </value>
</item> </item>
<item> <item>
<key> <string>required_not_found</string> </key> <key> <string>not_float</string> </key>
<value> <string>Input is required but no input given.</string> </value> <value> <string>You did not enter a floating point number.</string> </value>
</item> </item>
<item> <item>
<key> <string>too_long</string> </key> <key> <string>required_not_found</string> </key>
<value> <string>Too much input was given.</string> </value> <value> <string>Input is required but no input given.</string> </value>
</item> </item>
</dictionary> </dictionary>
</value> </value>
...@@ -78,11 +78,11 @@ ...@@ -78,11 +78,11 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>input_style</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>precision</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -93,14 +93,6 @@ ...@@ -93,14 +93,6 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -122,9 +114,7 @@ ...@@ -122,9 +114,7 @@
</item> </item>
<item> <item>
<key> <string>default</string> </key> <key> <string>default</string> </key>
<value> <value> <string></string> </value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
...@@ -159,11 +149,11 @@ ...@@ -159,11 +149,11 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>input_style</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>precision</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -174,14 +164,6 @@ ...@@ -174,14 +164,6 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -238,12 +220,12 @@ ...@@ -238,12 +220,12 @@
<value> <int>0</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>input_style</string> </key>
<value> <string>text</string> </value> <value> <string>-1 234.5</string> </value>
</item> </item>
<item> <item>
<key> <string>max_length</string> </key> <key> <string>precision</string> </key>
<value> <string></string> </value> <value> <int>3</int> </value>
</item> </item>
<item> <item>
<key> <string>required</string> </key> <key> <string>required</string> </key>
...@@ -253,14 +235,6 @@ ...@@ -253,14 +235,6 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Duration</string> </value> <value> <string>Duration</string> </value>
</item> </item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item> <item>
<key> <string>whitespace_preserve</string> </key> <key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
...@@ -271,17 +245,4 @@ ...@@ -271,17 +245,4 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: modules[\'datetime\'].timedelta(seconds=context.getProperty(\'duration\'))</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -43,7 +43,7 @@ for test_id, test_result in all_test_results.items(): ...@@ -43,7 +43,7 @@ for test_id, test_result in all_test_results.items():
cmdline=log_files.get('cmdline'), cmdline=log_files.get('cmdline'),
stdout=log_files.get('stdout'), stdout=log_files.get('stdout'),
stderr=log_files.get('stderr'),) stderr=log_files.get('stderr'),)
test_report.edit(string_index=form.get('result'), test_report.edit(string_index=form.get('result'),
all_tests=all_tests, all_tests=all_tests,
......
import json import json
# Get result lines # Get result lines
test_result_lines = context.objectValues(portal_type="Test Result Line", test_result_lines = context.objectValues(portal_type="Test Result Line",
sort_on="int_index") sort_on="int_index")
# Create a dict containing stats for each test # Create a dict containing stats for each test
...@@ -24,7 +24,7 @@ for tl in test_result_lines: ...@@ -24,7 +24,7 @@ for tl in test_result_lines:
# initial init # initial init
if test_name not in results.keys(): if test_name not in results.keys():
results[test_name] = [] results[test_name] = []
results[test_name].append({'created_docs': test_documents_created, results[test_name].append({'created_docs': test_documents_created,
'duration':3600}) 'duration':3600})
test_suite = context.getPortalObject().test_suite_module.searchFolder(title=context.getTitle())[0] test_suite = context.getPortalObject().test_suite_module.searchFolder(title=context.getTitle())[0]
...@@ -35,5 +35,5 @@ xs = map(int, test_suite.getGraphCoordinate()) ...@@ -35,5 +35,5 @@ xs = map(int, test_suite.getGraphCoordinate())
# viewer shows only one graph thus return only one test # viewer shows only one graph thus return only one test
tests = results[test_suite_name] tests = results[test_suite_name]
return json.dumps({"test": tests, return json.dumps({"test": tests,
"xs": xs}) "xs": xs})
...@@ -10,7 +10,7 @@ def makeVCSLink(repository_url, revision): ...@@ -10,7 +10,7 @@ def makeVCSLink(repository_url, revision):
if 'lab.nexedi' in repository_url and repository_url.endswith('.git'): if 'lab.nexedi' in repository_url and repository_url.endswith('.git'):
repository_url = repository_url[:-len('.git')] repository_url = repository_url[:-len('.git')]
if '@' in repository_url: # remove credentials if '@' in repository_url: # remove credentials
scheme = repository_url.split(':')[0] scheme = repository_url.split(':')[0]
url = '%s://%s/commit/%s' % (scheme, repository_url.split('@')[1], revision ) url = '%s://%s/commit/%s' % (scheme, repository_url.split('@')[1], revision )
else: else:
url = '%s/commit/%s' % (repository_url, revision ) url = '%s/commit/%s' % (repository_url, revision )
...@@ -21,14 +21,14 @@ def makeVCSLink(repository_url, revision): ...@@ -21,14 +21,14 @@ def makeVCSLink(repository_url, revision):
def getListItemUrl(*args, **kw): def getListItemUrl(*args, **kw):
return url return url
return Object( return Object(
uid='new_', uid='new_',
getUid=lambda: 'new_', getUid=lambda: 'new_',
getListItemUrl=getListItemUrl, getListItemUrl=getListItemUrl,
repository=repository_url, repository=repository_url,
revision=revision) revision=revision)
for repository in test_suite_data['repository_dict'].values(): for repository in test_suite_data['repository_dict'].values():
result_list.append( result_list.append(
makeVCSLink( makeVCSLink(
......
...@@ -3,21 +3,21 @@ test_result = context ...@@ -3,21 +3,21 @@ test_result = context
result = [] result = []
p = result.append p = result.append
if len([x for x in test_result.contentValues(portal_type='Test Result Node') if len([x for x in test_result.contentValues(portal_type='Test Result Node')
if x.getSimulationState() == 'failed']): if x.getSimulationState() == 'failed']):
p('Result: %s (Building Failed)' % test_result.getStringIndex() ) p('Result: %s (Building Failed)' % test_result.getStringIndex() )
else: else:
p('Result: %s' % test_result.getStringIndex()) p('Result: %s' % test_result.getStringIndex())
#p('Test Suite: %s' % test_result.getTitle()) #p('Test Suite: %s' % test_result.getTitle())
p('Revision: %s' % test_result.getReference() or test_result.getIntIndex()) p('Revision: %s' % test_result.getReference() or test_result.getIntIndex())
p('Launch Date: %s' % test_result.getStartDate()) p('Launch Date: %s' % test_result.getStartDate())
comment = test_result.getProperty('comment') comment = test_result.getProperty('comment')
if comment: if comment:
p(comment) p(comment)
p('') p('')
p('All tests: %s, Failures: %s, Errors: %s, Skips: %s' % \ p('All tests: %s, Failures: %s, Errors: %s, Skips: %s' % \
(test_result.getProperty('all_tests'), (test_result.getProperty('all_tests'),
test_result.getProperty('failures'), test_result.getProperty('failures'),
test_result.getProperty('errors'), test_result.getProperty('errors'),
test_result.getProperty('skips'))) test_result.getProperty('skips')))
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
""" """
test_suite_list = [] test_suite_list = []
test_result_line_list = context.objectValues( test_result_line_list = context.objectValues(
portal_type = 'Test Result Line', portal_type = 'Test Result Line',
sort_on="int_index") sort_on="int_index")
if len(test_result_line_list) > 0: if len(test_result_line_list) > 0:
......
test_result = context test_result = context
return "%s (T:%s/F:%s/E:%s/S:%s)" % (context.getTitle(), return "%s (T:%s/F:%s/E:%s/S:%s)" % (context.getTitle(),
test_result.getProperty('all_tests'), test_result.getProperty('all_tests'),
test_result.getProperty('failures'), test_result.getProperty('failures'),
test_result.getProperty('errors'), test_result.getProperty('errors'),
test_result.getProperty('skips')) test_result.getProperty('skips'))
import datetime
from Products.PythonScripts.standard import Object from Products.PythonScripts.standard import Object
return [Object(duration=datetime.timedelta(seconds=context.getProperty('duration', 0)), return [Object(duration=int(context.getProperty('duration', 0)),
all_tests=context.getProperty('all_tests'), all_tests=context.getProperty('all_tests'),
errors=context.getProperty('errors'), errors=context.getProperty('errors'),
failures=context.getProperty('failures'), failures=context.getProperty('failures'),
......
...@@ -87,7 +87,6 @@ ...@@ -87,7 +87,6 @@
<list> <list>
<string>listbox_string_index</string> <string>listbox_string_index</string>
<string>listbox_start_date</string> <string>listbox_start_date</string>
<string>listbox_duration</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -100,7 +99,6 @@ ...@@ -100,7 +99,6 @@
<string>my_id</string> <string>my_id</string>
<string>my_start_date</string> <string>my_start_date</string>
<string>my_stop_date</string> <string>my_stop_date</string>
<string>your_real_duration</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -12,7 +12,7 @@ test_suite = context.newContent( ...@@ -12,7 +12,7 @@ test_suite = context.newContent(
test_suite = config['test_suite'], test_suite = config['test_suite'],
int_index = config['int_index'], int_index = config['int_index'],
vcs_repository = test_suite_repository vcs_repository = test_suite_repository
) )
if batch_mode: if batch_mode:
return test_suite return test_suite
from Products.ERP5Type.Core.Workflow import ValidationFailed from Products.ERP5Type.Core.Workflow import ValidationFailed
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
import json import json
from time import sleep from time import sleep
from DateTime import DateTime from DateTime import DateTime
import responses import responses
...@@ -75,7 +75,7 @@ class TaskDistributionTestCase(ERP5TypeTestCase): ...@@ -75,7 +75,7 @@ class TaskDistributionTestCase(ERP5TypeTestCase):
original_class = self.distributor.__class__ original_class = self.distributor.__class__
original_scalability_class = self.scalability_distributor.__class__ original_scalability_class = self.scalability_distributor.__class__
original_performance_class = self.performance_distributor.__class__ original_performance_class = self.performance_distributor.__class__
original_class._getTestNodeModule = self._original_getTestNodeModule original_class._getTestNodeModule = self._original_getTestNodeModule
original_class._getTestSuiteModule = self._original_getTestSuiteModule original_class._getTestSuiteModule = self._original_getTestSuiteModule
original_scalability_class._getTestNodeModule = self._original_getTestNodeModule original_scalability_class._getTestNodeModule = self._original_getTestNodeModule
...@@ -164,9 +164,9 @@ class TaskDistributionTestCase(ERP5TypeTestCase): ...@@ -164,9 +164,9 @@ class TaskDistributionTestCase(ERP5TypeTestCase):
self.assertEqual(test_result.getSimulationState(), "started") self.assertEqual(test_result.getSimulationState(), "started")
self.tic() self.tic()
if stop_count == 2: if stop_count == 2:
self.assertEqual(test_result.getSimulationState(), "stopped") self.assertEquals(test_result.getSimulationState(), "stopped")
else: else:
self.assertEqual(test_result.getSimulationState(), "started") self.assertEquals(test_result.getSimulationState(), "started")
def _cleanupTestResult(self): def _cleanupTestResult(self):
self.tic() self.tic()
...@@ -209,16 +209,16 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -209,16 +209,16 @@ class TestTaskDistribution(TaskDistributionTestCase):
def test_02_createTestSuite(self): def test_02_createTestSuite(self):
# Test Test Suite # Test Test Suite
test_suite = self._createTestSuite()[0] test_suite = self._createTestSuite()[0]
self.assertEqual(test_suite.getPortalType(), "Test Suite") self.assertEquals(test_suite.getPortalType(), "Test Suite")
self.assertEqual(test_suite.getSpecialise(), self.distributor.getRelativeUrl()) self.assertEquals(test_suite.getSpecialise(), self.distributor.getRelativeUrl())
# Test Scalability Test Suite # Test Scalability Test Suite
scalability_test_suite = self._createTestSuite( scalability_test_suite = self._createTestSuite(
portal_type="Scalability Test Suite", portal_type="Scalability Test Suite",
specialise_value = self.scalability_distributor specialise_value = self.scalability_distributor
)[0] )[0]
self.assertEqual(scalability_test_suite.getPortalType(), self.assertEquals(scalability_test_suite.getPortalType(),
"Scalability Test Suite") "Scalability Test Suite")
self.assertEqual(scalability_test_suite.getSpecialise(), self.assertEquals(scalability_test_suite.getSpecialise(),
self.scalability_distributor.getRelativeUrl()) self.scalability_distributor.getRelativeUrl())
def test_02b_checkConsistencyOnTestSuite(self): def test_02b_checkConsistencyOnTestSuite(self):
...@@ -338,7 +338,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -338,7 +338,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
title="COMP42-Node1")) title="COMP42-Node1"))
return ["%s" % x["test_suite_title"] for x in config_list] return ["%s" % x["test_suite_title"] for x in config_list]
# By default we have random order between test suites # By default we have random order between test suites
self.assertEqual(set(["test suite 1", "test suite 2", "test suite 3"]), self.assertEquals(set(["test suite 1", "test suite 2", "test suite 3"]),
set(getTestSuiteList())) set(getTestSuiteList()))
# Check that if test suite 1 and test suite 2 are recently processed, # Check that if test suite 1 and test suite 2 are recently processed,
...@@ -349,19 +349,19 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -349,19 +349,19 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.processTest("test suite 2", "r0=b") self.processTest("test suite 2", "r0=b")
self.tic() self.tic()
sleep(1) sleep(1)
self.assertEqual(getTestSuiteList()[0], "test suite 3") self.assertEquals(getTestSuiteList()[0], "test suite 3")
self.processTest("test suite 3", "r0=b") self.processTest("test suite 3", "r0=b")
# after test suite 3, we now have to process test suite 1 # after test suite 3, we now have to process test suite 1
# since it is the oldest one # since it is the oldest one
self.tic() self.tic()
sleep(1) sleep(1)
self.assertEqual(getTestSuiteList()[0], "test suite 1") self.assertEquals(getTestSuiteList()[0], "test suite 1")
self.processTest("test suite 1", "r0=c") self.processTest("test suite 1", "r0=c")
# after test suite 1, we now have to process test suite 2 # after test suite 1, we now have to process test suite 2
# since it is the oldest one # since it is the oldest one
self.tic() self.tic()
sleep(1) sleep(1)
self.assertEqual(getTestSuiteList()[0], "test suite 2") self.assertEquals(getTestSuiteList()[0], "test suite 2")
self.processTest("test suite 2", "r0=d") self.processTest("test suite 2", "r0=d")
self.tic() self.tic()
sleep(1) sleep(1)
...@@ -370,20 +370,20 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -370,20 +370,20 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.tic() self.tic()
sleep(1) sleep(1)
# we should then have by order 3, 2, 1 # we should then have by order 3, 2, 1
self.assertEqual(["test suite 3", "test suite 2", "test suite 1"], self.assertEquals(["test suite 3", "test suite 2", "test suite 1"],
getTestSuiteList()) getTestSuiteList())
# now launch all test of test 3, even if they are not finished yet # now launch all test of test 3, even if they are not finished yet
self.processTest("test suite 3", "r0=f", stop_count=1) self.processTest("test suite 3", "r0=f", stop_count=1)
self.tic() self.tic()
sleep(1) sleep(1)
self.assertEqual(["test suite 2", "test suite 1", "test suite 3"], self.assertEquals(["test suite 2", "test suite 1", "test suite 3"],
getTestSuiteList()) getTestSuiteList())
# now launch partially tests of suite 2, it must have priority over # now launch partially tests of suite 2, it must have priority over
# test 3, even if test 3 is older because all tests of test 3 are ongoing # test 3, even if test 3 is older because all tests of test 3 are ongoing
self.processTest("test suite 2", "r0=g", start_count=1, stop_count=0) self.processTest("test suite 2", "r0=g", start_count=1, stop_count=0)
self.tic() self.tic()
sleep(1) sleep(1)
self.assertEqual(["test suite 1", "test suite 2", "test suite 3"], self.assertEquals(["test suite 1", "test suite 2", "test suite 3"],
getTestSuiteList()) getTestSuiteList())
def test_04c_startTestSuiteOrderWithManyTestNodes(self): def test_04c_startTestSuiteOrderWithManyTestNodes(self):
...@@ -435,9 +435,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -435,9 +435,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.pinDateTime(now + 2.0/86400) self.pinDateTime(now + 2.0/86400)
self.processTest("test suite 3", "r0=a", node_title="COMP1-Node1") self.processTest("test suite 3", "r0=a", node_title="COMP1-Node1")
# so by default, when no test is running, older test suite is given first # so by default, when no test is running, older test suite is given first
self.assertEqual(["test suite 1", "test suite 2", "test suite 3"], self.assertEquals(["test suite 1", "test suite 2", "test suite 3"],
getTestSuiteList("COMP0-Node1")) getTestSuiteList("COMP0-Node1"))
self.assertEqual(["test suite 2", "test suite 3"], self.assertEquals(["test suite 2", "test suite 3"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
# Start some work # Start some work
self.pinDateTime(now + 3.0/86400) self.pinDateTime(now + 3.0/86400)
...@@ -445,9 +445,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -445,9 +445,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP1-Node1 : test suite 2 # COMP1-Node1 : test suite 2
# suite 1 is now the newest, it is checked last, test suite 3 has priority on test suite 2 # suite 1 is now the newest, it is checked last, test suite 3 has priority on test suite 2
# since no test is running for it # since no test is running for it
self.assertEqual(["test suite 1", "test suite 3", "test suite 2"], self.assertEquals(["test suite 1", "test suite 3", "test suite 2"],
getTestSuiteList("COMP0-Node1")) getTestSuiteList("COMP0-Node1"))
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
# Now let's say test suite 3 is starting too # Now let's say test suite 3 is starting too
self.pinDateTime(now + 4.0/86400) self.pinDateTime(now + 4.0/86400)
...@@ -456,7 +456,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -456,7 +456,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP6-Node1 : test suite 3 # COMP6-Node1 : test suite 3
# test suite 3 still should have the priority other test suite 2, because it # test suite 3 still should have the priority other test suite 2, because it
# has higher priority # has higher priority
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
# another test node working on test suite 3 # another test node working on test suite 3
self.processTest("test suite 3", "r0=b", node_title="COMP7-Node1", start_count=0, stop_count=0) self.processTest("test suite 3", "r0=b", node_title="COMP7-Node1", start_count=0, stop_count=0)
...@@ -465,9 +465,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -465,9 +465,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3 # COMP7-Node1 : test suite 3
# Now we have 2 testnodes for test suite 3, and only 1 for test suite 2, time to give # Now we have 2 testnodes for test suite 3, and only 1 for test suite 2, time to give
# more priority to test suite 2 # more priority to test suite 2
self.assertEqual(["test suite 2", "test suite 3"], self.assertEquals(["test suite 2", "test suite 3"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.assertEqual(["test suite 1", "test suite 2", "test suite 3"], self.assertEquals(["test suite 1", "test suite 2", "test suite 3"],
getTestSuiteList("COMP0-Node1")) getTestSuiteList("COMP0-Node1"))
# so now a testnode working on test suite 2 # so now a testnode working on test suite 2
self.processTest("test suite 2", "r0=b", node_title="COMP2-Node1", start_count=0, stop_count=0) self.processTest("test suite 2", "r0=b", node_title="COMP2-Node1", start_count=0, stop_count=0)
...@@ -477,7 +477,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -477,7 +477,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3 # COMP7-Node1 : test suite 3
# Now we have 2 testnodes for test suite 3, and 2 for test suite 2, time to give # Now we have 2 testnodes for test suite 3, and 2 for test suite 2, time to give
# more priority to test suite 3 # more priority to test suite 3
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.processTest("test suite 3", "r0=b", node_title="COMP8-Node1", start_count=0, stop_count=0) self.processTest("test suite 3", "r0=b", node_title="COMP8-Node1", start_count=0, stop_count=0)
# COMP1-Node1 : test suite 2 # COMP1-Node1 : test suite 2
...@@ -487,7 +487,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -487,7 +487,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP8-Node1 : test suite 3 # COMP8-Node1 : test suite 3
# Now we have 3 testnodes for test suite 3, and 2 for test suite 2, test suite 3 still # Now we have 3 testnodes for test suite 3, and 2 for test suite 2, test suite 3 still
# need priority due to higher priority # need priority due to higher priority
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.processTest("test suite 3", "r0=b", node_title="COMP9-Node1", start_count=0, stop_count=0) self.processTest("test suite 3", "r0=b", node_title="COMP9-Node1", start_count=0, stop_count=0)
# COMP1-Node1 : test suite 2 # COMP1-Node1 : test suite 2
...@@ -498,9 +498,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -498,9 +498,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP9-Node1 : test suite 3 # COMP9-Node1 : test suite 3
# Now we have 4 testnodes for test suite 3, and 2 for test suite 2, test suite 2 will # Now we have 4 testnodes for test suite 3, and 2 for test suite 2, test suite 2 will
# have again priority # have again priority
self.assertEqual(["test suite 2", "test suite 3"], self.assertEquals(["test suite 2", "test suite 3"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.assertEqual(["test suite 1", "test suite 2", "test suite 3"], self.assertEquals(["test suite 1", "test suite 2", "test suite 3"],
getTestSuiteList("COMP0-Node1")) getTestSuiteList("COMP0-Node1"))
self.processTest("test suite 2", "r0=b", node_title="COMP3-Node1", start_count=0, stop_count=0) self.processTest("test suite 2", "r0=b", node_title="COMP3-Node1", start_count=0, stop_count=0)
# COMP1-Node1 : test suite 2 # COMP1-Node1 : test suite 2
...@@ -512,7 +512,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -512,7 +512,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP9-Node1 : test suite 3 # COMP9-Node1 : test suite 3
# Now we have 4 testnodes for test suite 3, and 3 for test suite 2, test suite 3 will # Now we have 4 testnodes for test suite 3, and 3 for test suite 2, test suite 3 will
# have again priority # have again priority
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.processTest("test suite 3", "r0=b", node_title="COMP4-Node1", start_count=0, stop_count=0) self.processTest("test suite 3", "r0=b", node_title="COMP4-Node1", start_count=0, stop_count=0)
# COMP1-Node1 : test suite 2 # COMP1-Node1 : test suite 2
...@@ -523,9 +523,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -523,9 +523,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3 # COMP7-Node1 : test suite 3
# COMP8-Node1 : test suite 3 # COMP8-Node1 : test suite 3
# COMP9-Node1 : test suite 3 # COMP9-Node1 : test suite 3
self.assertEqual(["test suite 3", "test suite 2"], self.assertEquals(["test suite 3", "test suite 2"],
getTestSuiteList("COMP5-Node1")) getTestSuiteList("COMP5-Node1"))
self.assertEqual(["test suite 1", "test suite 3", "test suite 2"], self.assertEquals(["test suite 1", "test suite 3", "test suite 2"],
getTestSuiteList("COMP0-Node1")) getTestSuiteList("COMP0-Node1"))
finally: finally:
self.unpinDateTime() self.unpinDateTime()
...@@ -654,7 +654,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -654,7 +654,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.tic() self.tic()
next_test_result_path, _ = self._createTestResult( next_test_result_path, _ = self._createTestResult(
test_list=['testFoo', 'testBar'], revision="r0=a,r1=b") test_list=['testFoo', 'testBar'], revision="r0=a,r1=b")
self.assertNotEqual(next_test_result_path, test_result_path) self.assertNotEquals(next_test_result_path, test_result_path)
line_url, test = self.tool.startUnitTest(next_test_result_path) line_url, test = self.tool.startUnitTest(next_test_result_path)
next_line_url, next_test = self.tool.startUnitTest(next_test_result_path) next_line_url, next_test = self.tool.startUnitTest(next_test_result_path)
self.assertEqual(['testFoo', 'testBar'], [test, next_test]) self.assertEqual(['testFoo', 'testBar'], [test, next_test])
...@@ -861,7 +861,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -861,7 +861,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
Is this really useful and used ? Is this really useful and used ?
""" """
self._checkCreateTestResultAndAllowRestart() self._checkCreateTestResultAndAllowRestart()
def test_09b_checkCreateTestResultAndAllowRestartWithTic(self): def test_09b_checkCreateTestResultAndAllowRestartWithTic(self):
""" """
...@@ -881,15 +881,15 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -881,15 +881,15 @@ class TestTaskDistribution(TaskDistributionTestCase):
""" """
test_suite, = self._createTestSuite(cluster_configuration=None) # pylint: disable=unbalanced-tuple-unpacking test_suite, = self._createTestSuite(cluster_configuration=None) # pylint: disable=unbalanced-tuple-unpacking
self.tic() self.tic()
self.assertEqual('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle())) self.assertEquals('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle()))
test_suite.setClusterConfiguration("{'foo': 3}") test_suite.setClusterConfiguration("{'foo': 3}")
self.assertEqual('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle())) self.assertEquals('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle()))
test_suite.setClusterConfiguration('{"foo": 3}') test_suite.setClusterConfiguration('{"foo": 3}')
self.assertEqual('{"configuration_list": [{"foo": 3}]}', self.distributor.generateConfiguration(test_suite.getTitle())) self.assertEquals('{"configuration_list": [{"foo": 3}]}', self.distributor.generateConfiguration(test_suite.getTitle()))
# make sure generateConfiguration does not fail if test suite is invalidated # make sure generateConfiguration does not fail if test suite is invalidated
test_suite.invalidate() test_suite.invalidate()
self.tic() self.tic()
self.assertEqual('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle())) self.assertEquals('{"configuration_list": [{}]}', self.distributor.generateConfiguration(test_suite.getTitle()))
def _checkTestSuiteAggregateList(self, *args): def _checkTestSuiteAggregateList(self, *args):
self.tic() self.tic()
...@@ -916,7 +916,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -916,7 +916,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
check = self._checkTestSuiteAggregateList check = self._checkTestSuiteAggregateList
check([test_node_one, ["one"]], check([test_node_one, ["one"]],
[test_node_two, ["two"]]) [test_node_two, ["two"]])
# first test suite is invalidated, so it should be removed from nodes, # first test suite is invalidated, so it should be removed from nodes,
# but this should not change assignment of second test suite # but this should not change assignment of second test suite
test_suite_one.invalidate() test_suite_one.invalidate()
check([test_node_one, []], check([test_node_one, []],
...@@ -1042,7 +1042,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1042,7 +1042,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.tool.TestTaskDistribution.setMaxTestSuite(10) self.tool.TestTaskDistribution.setMaxTestSuite(10)
self._callOptimizeAlarm() self._callOptimizeAlarm()
self.assertEqual(5, len(set(test_node.getAggregateList()))) self.assertEqual(5, len(set(test_node.getAggregateList())))
self.assertEqual(set(test_node.getAggregateList()), self.assertEqual(set(test_node.getAggregateList()),
set([x.getRelativeUrl() for x in test_suite_list])) set([x.getRelativeUrl() for x in test_suite_list]))
def test_12_checkCloudPerformanceOptimizationIsStable(self): def test_12_checkCloudPerformanceOptimizationIsStable(self):
...@@ -1062,7 +1062,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1062,7 +1062,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
check = self._checkTestSuiteAggregateList check = self._checkTestSuiteAggregateList
check([test_node_one, ["one", "two"]], check([test_node_one, ["one", "two"]],
[test_node_two, ["one", "two"]]) [test_node_two, ["one", "two"]])
# first test suite is invalidated, so it should be removed from nodes, # first test suite is invalidated, so it should be removed from nodes,
# but this should not change assignment of second test suite # but this should not change assignment of second test suite
test_suite_one.invalidate() test_suite_one.invalidate()
check([test_node_one, ["two"]], check([test_node_one, ["two"]],
...@@ -1130,7 +1130,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1130,7 +1130,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
Check test node subscription. Check test node subscription.
""" """
test_node_module = self.test_node_module test_node_module = self.test_node_module
# Generate informations for nodes to subscribe # Generate informations for nodes to subscribe
nodes = dict([("COMP%d-Scalability-Node_test14" %i, "COMP-%d" %i) for i in range(0,5)]) nodes = dict([("COMP%d-Scalability-Node_test14" %i, "COMP-%d" %i) for i in range(0,5)])
# Subscribe nodes # Subscribe nodes
...@@ -1143,7 +1143,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1143,7 +1143,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
test_node_titles = [x.getTitle() for x in test_nodes] test_node_titles = [x.getTitle() for x in test_nodes]
# Check subscription # Check subscription
for node_title in nodes.keys(): for node_title in nodes.keys():
self.assertIn(node_title, test_node_titles) self.assertTrue(node_title in test_node_titles)
# Check ping date # Check ping date
# TODO.. # TODO..
...@@ -1153,7 +1153,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1153,7 +1153,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
- Check the master election - Check the master election
""" """
test_node_module = self.test_node_module test_node_module = self.test_node_module
## 1 (check election, classic) ## 1 (check election, classic)
# Subscribe nodes # Subscribe nodes
self.scalability_distributor.subscribeNode("COMP1-Scalability-Node1", computer_guid="COMP-1") self.scalability_distributor.subscribeNode("COMP1-Scalability-Node1", computer_guid="COMP-1")
...@@ -1175,13 +1175,13 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1175,13 +1175,13 @@ class TestTaskDistribution(TaskDistributionTestCase):
master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList() master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList()
# -Only one master must be elected # -Only one master must be elected
self.assertEqual(1, len(master_test_node_list)) self.assertEquals(1, len(master_test_node_list))
# -Others test node must not be the matser # -Others test node must not be the matser
self.assertEqual(3, len(slave_test_node_list)) self.assertEquals(3, len(slave_test_node_list))
# Get the current master test node # Get the current master test node
current_master_test_node_1 = master_test_node_list[0] current_master_test_node_1 = master_test_node_list[0]
## 2 (check election, with adding new nodes) ## 2 (check election, with adding new nodes)
# Add new nodes # Add new nodes
self.scalability_distributor.subscribeNode("COMP5-Scalability-Node5", computer_guid="COMP-5") self.scalability_distributor.subscribeNode("COMP5-Scalability-Node5", computer_guid="COMP-5")
...@@ -1190,14 +1190,14 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1190,14 +1190,14 @@ class TestTaskDistribution(TaskDistributionTestCase):
# Check test node election # Check test node election
master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList() master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList()
# -Only one master must be elected # -Only one master must be elected
self.assertEqual(1, len(master_test_node_list)) self.assertEquals(1, len(master_test_node_list))
# -Others test node must not be the matser # -Others test node must not be the matser
self.assertEqual(5, len(slave_test_node_list)) self.assertEquals(5, len(slave_test_node_list))
# Get the current master test node # Get the current master test node
current_master_test_node_2 = master_test_node_list[0] current_master_test_node_2 = master_test_node_list[0]
# Master test node while he is alive # Master test node while he is alive
self.assertEqual(current_master_test_node_1.getTitle(), self.assertEquals(current_master_test_node_1.getTitle(),
current_master_test_node_2.getTitle()) current_master_test_node_2.getTitle())
## 3 (check election, with master deletion) ## 3 (check election, with master deletion)
...@@ -1206,16 +1206,16 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1206,16 +1206,16 @@ class TestTaskDistribution(TaskDistributionTestCase):
# Check test node election # Check test node election
master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList() master_test_node_list, slave_test_node_list = getMasterAndSlaveNodeList()
# -Only one master must be elected # -Only one master must be elected
self.assertEqual(1, len(master_test_node_list)) self.assertEquals(1, len(master_test_node_list))
# -Others test node must not be the matser # -Others test node must not be the matser
self.assertEqual(4, len(slave_test_node_list)) self.assertEquals(4, len(slave_test_node_list))
# Get the current master test node # Get the current master test node
current_master_test_node_3 = master_test_node_list[0] current_master_test_node_3 = master_test_node_list[0]
# Master test node must be an other test node than previously # Master test node must be an other test node than previously
self.assertNotEqual(current_master_test_node_2.getTitle(), self.assertNotEquals(current_master_test_node_2.getTitle(),
current_master_test_node_3.getTitle()) current_master_test_node_3.getTitle())
def test_16_startTestSuiteERP5ScalabilityDistributor(self): def test_16_startTestSuiteERP5ScalabilityDistributor(self):
""" """
...@@ -1231,12 +1231,12 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1231,12 +1231,12 @@ class TestTaskDistribution(TaskDistributionTestCase):
self.scalability_distributor.subscribeNode("COMP4-Scalability-Node4", computer_guid="COMP-4") self.scalability_distributor.subscribeNode("COMP4-Scalability-Node4", computer_guid="COMP-4")
# Create test suite # Create test suite
self._createTestSuite(quantity=1,priority=1, reference_correction=0, self._createTestSuite(quantity=1,priority=1, reference_correction=0,
specialise_value=self.scalability_distributor, portal_type="Scalability Test Suite") specialise_value=self.scalability_distributor, portal_type="Scalability Test Suite")
self.tic() self.tic()
self._callOptimizeAlarm() self._callOptimizeAlarm()
# Get current master test node # Get current master test node
master_test_nodes = [x for x in test_node_module.searchFolder()\ master_test_nodes = [x for x in test_node_module.searchFolder()\
if (x.getMaster() == True and x.getValidationState() == "validated")] if (x.getMaster() == True and x.getValidationState() == "validated")]
current_master_test_node = master_test_nodes[0] current_master_test_node = master_test_nodes[0]
self.tic() self.tic()
# Each node run startTestSuite # Each node run startTestSuite
...@@ -1255,12 +1255,12 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1255,12 +1255,12 @@ class TestTaskDistribution(TaskDistributionTestCase):
title="COMP4-Scalability-Node4")) title="COMP4-Scalability-Node4"))
} }
# Check if master has got a non empty configuration # Check if master has got a non empty configuration
self.assertNotEqual(config_nodes[current_master_test_node.getTitle()], []) self.assertNotEquals(config_nodes[current_master_test_node.getTitle()], [])
# -Delete master test node suite from dict # -Delete master test node suite from dict
del config_nodes[current_master_test_node.getTitle()] del config_nodes[current_master_test_node.getTitle()]
# Check if slave test node have got empty list # Check if slave test node have got empty list
for suite in config_nodes.values(): for suite in config_nodes.values():
self.assertEqual(suite, []) self.assertEquals(suite, [])
def test_16A_startTestSuiteERP5ScalabilityDistributorWithRunningTestResult(self): def test_16A_startTestSuiteERP5ScalabilityDistributorWithRunningTestResult(self):
# Subscribe nodes # Subscribe nodes
...@@ -1277,7 +1277,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1277,7 +1277,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
test_result.start() test_result.start()
self.tic() self.tic()
configuration = self.scalability_distributor.startTestSuite(title="COMP1-Scalability-Node1") configuration = self.scalability_distributor.startTestSuite(title="COMP1-Scalability-Node1")
self.assertNotEqual(configuration, []) self.assertNotEquals(configuration, [])
def test_17_isMasterTestnodeERP5ScalabilityDistributor(self): def test_17_isMasterTestnodeERP5ScalabilityDistributor(self):
...@@ -1296,7 +1296,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1296,7 +1296,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# Optimize configuration # Optimize configuration
self.scalability_distributor.optimizeConfiguration() self.scalability_distributor.optimizeConfiguration()
self.tic() self.tic()
# Get test nodes # Get test nodes
master_test_nodes = [x for x in test_node_module.searchFolder() master_test_nodes = [x for x in test_node_module.searchFolder()
if (x.getMaster() == True and x.getValidationState() == 'validated')] if (x.getMaster() == True and x.getValidationState() == 'validated')]
slave_test_nodes = [x for x in test_node_module.searchFolder() slave_test_nodes = [x for x in test_node_module.searchFolder()
...@@ -1330,7 +1330,7 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1330,7 +1330,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
partition_dict += ' "instance-count": {{ count }},\n' partition_dict += ' "instance-count": {{ count }},\n'
partition_dict += ' "family": "%s",\n' %family_name partition_dict += ' "family": "%s",\n' %family_name
partition_dict += ' "computer_guid": "%s"\n' %node_list[j][0] partition_dict += ' "computer_guid": "%s"\n' %node_list[j][0]
partition_dict += '}' partition_dict += '}'
if j != i-1: if j != i-1:
partition_dict += ',\n' partition_dict += ',\n'
else: else:
...@@ -1363,9 +1363,9 @@ class TestTaskDistribution(TaskDistributionTestCase): ...@@ -1363,9 +1363,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# break # break
# # Get configuration list generated from test suite # # Get configuration list generated from test suite
## configuration_list = self.scalability_distributor.generateConfiguration(test_suite_title) ## configuration_list = self.scalability_distributor.generateConfiguration(test_suite_title)
# #
# # logs # # logs
## log(configuration_list) ## log(configuration_list)
def test_19_testMultiDistributor(self): def test_19_testMultiDistributor(self):
pass pass
......
...@@ -31,7 +31,7 @@ from AccessControl import ClassSecurityInfo ...@@ -31,7 +31,7 @@ from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from Products.ERP5Type.Tool.BaseTool import BaseTool from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, NegatedQuery from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, NegatedQuery
from zLOG import LOG, DEBUG from zLOG import LOG, DEBUG, INFO
from xmlrpclib import Binary from xmlrpclib import Binary
class TaskDistributionTool(BaseTool): class TaskDistributionTool(BaseTool):
...@@ -89,7 +89,7 @@ class TaskDistributionTool(BaseTool): ...@@ -89,7 +89,7 @@ class TaskDistributionTool(BaseTool):
-> (test_result_path, revision) or None if already completed -> (test_result_path, revision) or None if already completed
""" """
LOG('createTestResult', DEBUG, (name, revision, test_title, project_title)) LOG('tool.erp5.TaskDistributionTool.createTestResult', INFO, (name, revision, test_title, project_title))
portal = self.getPortalObject() portal = self.getPortalObject()
if test_title is None: if test_title is None:
test_title = name test_title = name
...@@ -215,6 +215,7 @@ class TaskDistributionTool(BaseTool): ...@@ -215,6 +215,7 @@ class TaskDistributionTool(BaseTool):
# following 2 functions only call 'newContent' on test_result # following 2 functions only call 'newContent' on test_result
createTestResultLineList(test_result, test_name_list) createTestResultLineList(test_result, test_name_list)
createNode(test_result, node_title) createNode(test_result, node_title)
LOG('createTestResult RESULT', INFO, (test_result.getRelativeUrl(), revision))
return test_result.getRelativeUrl(), revision return test_result.getRelativeUrl(), revision
security.declarePublic('startUnitTest') security.declarePublic('startUnitTest')
......
...@@ -15,4 +15,4 @@ if test_result.getPortalType() == 'Test Result Node': ...@@ -15,4 +15,4 @@ if test_result.getPortalType() == 'Test Result Node':
edit_kw[key] = key_value edit_kw[key] = key_value
test_result.edit(**edit_kw) test_result.edit(**edit_kw)
else: else:
container.script_TestResult_complete(sci) context.TestResult_complete(sci)
...@@ -18,7 +18,7 @@ if test_suite.getReference() is None: ...@@ -18,7 +18,7 @@ if test_suite.getReference() is None:
test_suite.setReference(int2letter(new_id)) test_suite.setReference(int2letter(new_id))
def generateRandomString(size): def generateRandomString(size):
tab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" tab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
my_string = '' my_string = ''
for _ in range(size): for _ in range(size):
my_string = my_string + choice(tab) my_string = my_string + choice(tab)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment