Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
140
Merge Requests
140
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
erp5
Commits
da44845a
Commit
da44845a
authored
Feb 20, 2023
by
Thomas Gambier
🚴🏼
Committed by
Lu Xu
Mar 27, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
erp5_test_result: rework slapos agent distributor
parent
27c22d64
Changes
28
Show whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
562 additions
and
256 deletions
+562
-256
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.ERP5ProjectUnitTestDistributor.py
...omponents/document.erp5.ERP5ProjectUnitTestDistributor.py
+6
-4
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.ERP5ScalabilityDistributor.py
...al_components/document.erp5.ERP5ScalabilityDistributor.py
+1
-1
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.SlapOSAgentDistributor.py
...portal_components/document.erp5.SlapOSAgentDistributor.py
+91
-15
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.SlapOSAgentDistributor.xml
...ortal_components/document.erp5.SlapOSAgentDistributor.xml
+3
-1
bt5/erp5_test_result/ExtensionTemplateItem/portal_components/extension.erp5.ScalabilityTestSuiteUtils.py
...al_components/extension.erp5.ScalabilityTestSuiteUtils.py
+2
-2
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/filter_kw_property.xml
...eets/SlapOSSoftwareReleaseUnitTest/filter_kw_property.xml
+34
-0
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/shared_property.xml
..._sheets/SlapOSSoftwareReleaseUnitTest/shared_property.xml
+38
-0
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/software_type_property.xml
.../SlapOSSoftwareReleaseUnitTest/software_type_property.xml
+38
-0
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view.xml
...s/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view.xml
+3
-0
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_filter_kw.xml
...esult/SlapOSSoftwareReleaseUnitTest_view/my_filter_kw.xml
+54
-61
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_shared.xml
...t_result/SlapOSSoftwareReleaseUnitTest_view/my_shared.xml
+184
-0
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_software_type.xml
...t/SlapOSSoftwareReleaseUnitTest_view/my_software_type.xml
+3
-26
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_text_content.xml
...lt/SlapOSSoftwareReleaseUnitTest_view/my_text_content.xml
+1
-1
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TaskDistributorAlarm_optimize.py
...l_skins/erp5_test_result/TaskDistributorAlarm_optimize.py
+2
-2
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultLine_getResultHistoryList.py
...s/erp5_test_result/TestResultLine_getResultHistoryList.py
+2
-2
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultLine_view/my_duration.xml
...kins/erp5_test_result/TestResultLine_view/my_duration.xml
+14
-53
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultModule_reportCompleted.py
...kins/erp5_test_result/TestResultModule_reportCompleted.py
+1
-1
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getJsonScalabilityStats.py
...ns/erp5_test_result/TestResult_getJsonScalabilityStats.py
+3
-3
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getJumpVCSResultList.py
...skins/erp5_test_result/TestResult_getJumpVCSResultList.py
+3
-3
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getSummaryForRSS.py
...tal_skins/erp5_test_result/TestResult_getSummaryForRSS.py
+8
-8
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getTestSuiteList.py
...tal_skins/erp5_test_result/TestResult_getTestSuiteList.py
+1
-1
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getTitleForRSS.py
...ortal_skins/erp5_test_result/TestResult_getTitleForRSS.py
+1
-1
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_statTestResultLineList.py
...ins/erp5_test_result/TestResult_statTestResultLineList.py
+1
-2
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_view.xml
...ateItem/portal_skins/erp5_test_result/TestResult_view.xml
+0
-2
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestSuiteModule_addTestSuite.py
...al_skins/erp5_test_result/TestSuiteModule_addTestSuite.py
+1
-1
bt5/erp5_test_result/TestTemplateItem/portal_components/test.erp5.testTaskDistribution.py
...eItem/portal_components/test.erp5.testTaskDistribution.py
+63
-63
bt5/erp5_test_result/ToolComponentTemplateItem/portal_components/tool.erp5.TaskDistributionTool.py
...eItem/portal_components/tool.erp5.TaskDistributionTool.py
+3
-2
bt5/erp5_test_result/WorkflowTemplateItem/portal_workflow/test_result_workflow/script_TestResult_fail.py
...l_workflow/test_result_workflow/script_TestResult_fail.py
+1
-1
No files found.
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.ERP5ProjectUnitTestDistributor.py
View file @
da44845a
...
...
@@ -28,7 +28,7 @@ from Products.ERP5Type.XMLObject import XMLObject
from
DateTime
import
DateTime
import
json
import
random
from
zLOG
import
LOG
,
DEBUG
,
ERROR
from
zLOG
import
LOG
,
DEBUG
,
ERROR
,
INFO
from
AccessControl
import
ClassSecurityInfo
from
Products.ERP5Type
import
Permissions
from
Products.ZSQLCatalog.SQLCatalog
import
SimpleQuery
...
...
@@ -271,7 +271,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
if
test_node
.
getValidationState
()
!=
'validated'
:
try
:
test_node
.
validate
()
except
Exception
as
e
:
except
Exception
,
e
:
LOG
(
'Test Node Validate'
,
ERROR
,
'%s'
%
e
)
if
test_node
is
None
:
test_node
=
test_node_module
.
newContent
(
portal_type
=
"Test Node"
,
title
=
title
,
computer_guid
=
computer_guid
,
...
...
@@ -384,7 +384,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
for
x
in
to_delete_key_list
:
config
.
pop
(
x
)
config_list
.
append
(
config
)
LOG
(
'ERP5ProjectUnitTestDistributor.startTestSuite, config_list'
,
DEBUG
,
config_list
)
LOG
(
'ERP5ProjectUnitTestDistributor.startTestSuite, config_list'
,
INFO
,
config_list
)
if
batch_mode
:
return
config_list
return
json
.
dumps
(
config_list
)
...
...
@@ -395,12 +395,13 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
"""
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
()
if
node_title
:
test_node
=
self
.
_getTestNodeFromTitle
(
node_title
)
test_node
.
setPingDate
()
test_suite
=
self
.
_getTestSuiteFromTitle
(
test_title
)
LOG
(
'ERP5ProjectUnitTestDistributor.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
...
...
@@ -430,6 +431,7 @@ class ERP5ProjectUnitTestDistributor(XMLObject):
return
test_node
def
_getTestSuiteFromTitle
(
self
,
suite_title
):
LOG
(
'ERP5ProjectUnitTestDistributor._getTestSuiteFromTitle'
,
INFO
,
(
suite_title
,
self
.
_getTestSuiteModule
()))
test_suite_list
=
self
.
_getTestSuiteModule
().
searchFolder
(
portal_type
=
'Test Suite'
,
title
=
SimpleQuery
(
comparison_operator
=
'='
,
title
=
suite_title
),
...
...
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.ERP5ScalabilityDistributor.py
View file @
da44845a
...
...
@@ -128,7 +128,7 @@ class ERP5ScalabilityDistributor(ERP5ProjectUnitTestDistributor, object):
if
test_node
.
getValidationState
()
!=
'validated'
:
try
:
test_node
.
validate
()
except
Exception
as
e
:
except
Exception
,
e
:
LOG
(
'Test Node Validate'
,
ERROR
,
'%s'
%
e
)
return
test_node
return
None
...
...
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.SlapOSAgentDistributor.py
View file @
da44845a
...
...
@@ -26,7 +26,9 @@
##############################################################################
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
Products.ERP5Type
import
Permissions
import
json
...
...
@@ -65,41 +67,115 @@ class SlapOSAgentDistributor(ERP5ProjectUnitTestDistributor):
"""
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"
)
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
(
title
=
test_suite_title
,
validation_state
=
"validated"
,
specialise_uid
=
self
.
getUid
())
service_list
=
{}
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
(
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
(),
"url"
:
unit_test
.
getUrlString
(),
"group"
:
unit_test
.
getGroupReference
(
"default"
)}
if
unit_test
.
getTextContent
()
is
not
None
:
generated_configuration
[
unit_test
.
getTitle
()][
'request_kw'
]
=
unit_test
.
getTextContent
()
"group"
:
unit_test
.
getGroupReference
(
"default"
),
"shared"
:
unit_test
.
getShared
(),
"software_type"
:
unit_test
.
getSoftwareType
(),
"partition_parameter_kw"
:
unit_test
.
getTextContent
(),
"filter_kw"
:
unit_test
.
getFilterKw
()
}
if
unit_test
.
getSupplyComputer
()
is
not
None
:
generated_configuration
[
unit_test
.
getTitle
()][
'supply_computer'
]
=
unit_test
.
getSupplyComputer
()
return
json
.
dumps
(
generated_configuration
)
service_list
[
unit_test
.
getTitle
()][
'supply_computer'
]
=
unit_test
.
getSupplyComputer
()
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
...
...
bt5/erp5_test_result/DocumentTemplateItem/portal_components/document.erp5.SlapOSAgentDistributor.xml
View file @
da44845a
...
...
@@ -39,7 +39,9 @@
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
<tuple>
<string>
W: 30, 0: Unused DEBUG imported from zLOG (unused-import)
</string>
</tuple>
</value>
</item>
<item>
...
...
bt5/erp5_test_result/ExtensionTemplateItem/portal_components/extension.erp5.ScalabilityTestSuiteUtils.py
View file @
da44845a
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/filter_kw_property.xml
0 → 100644
View file @
da44845a
<?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>
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/shared_property.xml
0 → 100644
View file @
da44845a
<?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>
bt5/erp5_test_result/PropertySheetTemplateItem/portal_property_sheets/SlapOSSoftwareReleaseUnitTest/software_type_property.xml
0 → 100644
View file @
da44845a
<?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>
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view.xml
View file @
da44845a
...
...
@@ -104,6 +104,9 @@
<string>
my_url_string
</string>
<string>
my_supply_computer
</string>
<string>
my_group_reference
</string>
<string>
my_software_type
</string>
<string>
my_shared
</string>
<string>
my_filter_kw
</string>
</list>
</value>
</item>
...
...
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/
TestResult_view/your_real_duration
.xml
→
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/
SlapOSSoftwareReleaseUnitTest_view/my_filter_kw
.xml
View file @
da44845a
...
...
@@ -2,13 +2,13 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
String
Field"
module=
"Products.Formulator.StandardFields"
/>
<global
name=
"
TextArea
Field"
module=
"Products.Formulator.StandardFields"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
your_real_duration
</string>
</value>
<value>
<string>
my_filter_kw
</string>
</value>
</item>
<item>
<key>
<string>
message_values
</string>
</key>
...
...
@@ -18,13 +18,21 @@
<key>
<string>
external_validator_failed
</string>
</key>
<value>
<string>
The input failed the external validator.
</string>
</value>
</item>
<item>
<key>
<string>
line_too_long
</string>
</key>
<value>
<string>
A line was too long.
</string>
</value>
</item>
<item>
<key>
<string>
required_not_found
</string>
</key>
<value>
<string>
Input is required but no input given.
</string>
</value>
</item>
<item>
<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>
</dictionary>
</value>
...
...
@@ -50,39 +58,39 @@
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
display_maxwidth
</string>
</key>
<key>
<string>
editable
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<key>
<string>
enabled
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
e
ditable
</string>
</key>
<key>
<string>
e
xternal_validator
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
e
nabled
</string>
</key>
<key>
<string>
e
xtra
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
external_validator
</string>
</key>
<key>
<string>
height
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
extra
</string>
</key>
<key>
<string>
hidden
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
hidden
</string>
</key>
<key>
<string>
max_length
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_type
</string>
</key>
<key>
<string>
max_linelength
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_l
ength
</string>
</key>
<key>
<string>
max_l
ines
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
...
...
@@ -94,15 +102,15 @@
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
truncat
e
</string>
</key>
<key>
<string>
unicod
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
unicod
e
</string>
</key>
<key>
<string>
whitespace_preserv
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
w
hitespace_preserve
</string>
</key>
<key>
<string>
w
idth
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
...
...
@@ -122,48 +130,46 @@
</item>
<item>
<key>
<string>
default
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
display_maxwidth
</string>
</key>
<key>
<string>
editable
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<key>
<string>
enabled
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
e
ditable
</string>
</key>
<key>
<string>
e
xternal_validator
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
e
nabled
</string>
</key>
<key>
<string>
e
xtra
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
external_validator
</string>
</key>
<key>
<string>
height
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
extra
</string>
</key>
<key>
<string>
hidden
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
hidden
</string>
</key>
<key>
<string>
max_length
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_type
</string>
</key>
<key>
<string>
max_linelength
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_l
ength
</string>
</key>
<key>
<string>
max_l
ines
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
...
...
@@ -175,15 +181,15 @@
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
truncat
e
</string>
</key>
<key>
<string>
unicod
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
unicod
e
</string>
</key>
<key>
<string>
whitespace_preserv
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
w
hitespace_preserve
</string>
</key>
<key>
<string>
w
idth
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
...
...
@@ -207,19 +213,11 @@
</item>
<item>
<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>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<value>
<int>
20
</int>
</value>
</item>
<item>
<key>
<string>
editable
</string>
</key>
<value>
<int>
0
</int>
</value>
<value>
<int>
1
</int>
</value>
</item>
<item>
<key>
<string>
enabled
</string>
</key>
...
...
@@ -233,16 +231,24 @@
<key>
<string>
extra
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
height
</string>
</key>
<value>
<int>
5
</int>
</value>
</item>
<item>
<key>
<string>
hidden
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
input_type
</string>
</key>
<value>
<string>
text
</string>
</value>
<key>
<string>
max_length
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
max_linelength
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_lines
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
...
...
@@ -251,11 +257,7 @@
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Duration
</string>
</value>
</item>
<item>
<key>
<string>
truncate
</string>
</key>
<value>
<int>
0
</int>
</value>
<value>
<string>
filter_kw (json format)
</string>
</value>
</item>
<item>
<key>
<string>
unicode
</string>
</key>
...
...
@@ -263,23 +265,14 @@
</item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<value>
<int>
0
</int>
</value>
<value>
<int>
1
</int>
</value>
</item>
</dictionary>
</value>
<item>
<key>
<string>
width
</string>
</key>
<value>
<int>
40
</int>
</value>
</item>
</dictionary>
</pickle>
</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>
</value>
</item>
</dictionary>
</pickle>
...
...
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_shared.xml
0 → 100644
View file @
da44845a
<?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>
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/
TestResult_view/listbox_duration
.xml
→
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/
SlapOSSoftwareReleaseUnitTest_view/my_software_type
.xml
View file @
da44845a
...
...
@@ -8,7 +8,7 @@
<dictionary>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
listbox_duration
</string>
</value>
<value>
<string>
my_software_type
</string>
</value>
</item>
<item>
<key>
<string>
message_values
</string>
</key>
...
...
@@ -77,10 +77,6 @@
<key>
<string>
hidden
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_type
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<value>
<string></string>
</value>
...
...
@@ -122,9 +118,7 @@
</item>
<item>
<key>
<string>
default
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
...
...
@@ -158,10 +152,6 @@
<key>
<string>
hidden
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_type
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<value>
<string></string>
</value>
...
...
@@ -251,7 +241,7 @@
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Duration
</string>
</value>
<value>
<string>
Software Type
</string>
</value>
</item>
<item>
<key>
<string>
truncate
</string>
</key>
...
...
@@ -271,17 +261,4 @@
</dictionary>
</pickle>
</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>
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/SlapOSSoftwareReleaseUnitTest_view/my_text_content.xml
View file @
da44845a
...
...
@@ -257,7 +257,7 @@
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Request KW
(json format)
</string>
</value>
<value>
<string>
partition_parameter_kw
(json format)
</string>
</value>
</item>
<item>
<key>
<string>
unicode
</string>
</key>
...
...
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TaskDistributorAlarm_optimize.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultLine_getResultHistoryList.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultLine_view/my_duration.xml
View file @
da44845a
...
...
@@ -2,7 +2,7 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
String
Field"
module=
"Products.Formulator.StandardFields"
/>
<global
name=
"
Float
Field"
module=
"Products.Formulator.StandardFields"
/>
</pickle>
<pickle>
<dictionary>
...
...
@@ -19,12 +19,12 @@
<value>
<string>
The input failed the external validator.
</string>
</value>
</item>
<item>
<key>
<string>
required_not_found
</string>
</key>
<value>
<string>
Input is required but no input given
.
</string>
</value>
<key>
<string>
not_float
</string>
</key>
<value>
<string>
You did not enter a floating point number
.
</string>
</value>
</item>
<item>
<key>
<string>
too_long
</string>
</key>
<value>
<string>
Too much input was
given.
</string>
</value>
<key>
<string>
required_not_found
</string>
</key>
<value>
<string>
Input is required but no input
given.
</string>
</value>
</item>
</dictionary>
</value>
...
...
@@ -78,11 +78,11 @@
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_
typ
e
</string>
</key>
<key>
<string>
input_
styl
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
precision
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
...
...
@@ -93,14 +93,6 @@
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
truncate
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
unicode
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<value>
<string></string>
</value>
...
...
@@ -122,9 +114,7 @@
</item>
<item>
<key>
<string>
default
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
...
...
@@ -159,11 +149,11 @@
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
input_
typ
e
</string>
</key>
<key>
<string>
input_
styl
e
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
precision
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
...
...
@@ -174,14 +164,6 @@
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
truncate
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
unicode
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<value>
<string></string>
</value>
...
...
@@ -238,12 +220,12 @@
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
input_
typ
e
</string>
</key>
<value>
<string>
text
</string>
</value>
<key>
<string>
input_
styl
e
</string>
</key>
<value>
<string>
-1 234.5
</string>
</value>
</item>
<item>
<key>
<string>
max_length
</string>
</key>
<value>
<
string></string
>
</value>
<key>
<string>
precision
</string>
</key>
<value>
<
int>
3
</int
>
</value>
</item>
<item>
<key>
<string>
required
</string>
</key>
...
...
@@ -253,14 +235,6 @@
<key>
<string>
title
</string>
</key>
<value>
<string>
Duration
</string>
</value>
</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>
<key>
<string>
whitespace_preserve
</string>
</key>
<value>
<int>
0
</int>
</value>
...
...
@@ -271,17 +245,4 @@
</dictionary>
</pickle>
</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>
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResultModule_reportCompleted.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getJsonScalabilityStats.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getJumpVCSResultList.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getSummaryForRSS.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getTestSuiteList.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_getTitleForRSS.py
View file @
da44845a
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_statTestResultLineList.py
View file @
da44845a
import
datetime
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'
),
errors
=
context
.
getProperty
(
'errors'
),
failures
=
context
.
getProperty
(
'failures'
),
...
...
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestResult_view.xml
View file @
da44845a
...
...
@@ -87,7 +87,6 @@
<list>
<string>
listbox_string_index
</string>
<string>
listbox_start_date
</string>
<string>
listbox_duration
</string>
</list>
</value>
</item>
...
...
@@ -100,7 +99,6 @@
<string>
my_id
</string>
<string>
my_start_date
</string>
<string>
my_stop_date
</string>
<string>
your_real_duration
</string>
</list>
</value>
</item>
...
...
bt5/erp5_test_result/SkinTemplateItem/portal_skins/erp5_test_result/TestSuiteModule_addTestSuite.py
View file @
da44845a
bt5/erp5_test_result/TestTemplateItem/portal_components/test.erp5.testTaskDistribution.py
View file @
da44845a
...
...
@@ -164,9 +164,9 @@ class TaskDistributionTestCase(ERP5TypeTestCase):
self
.
assertEqual
(
test_result
.
getSimulationState
(),
"started"
)
self
.
tic
()
if
stop_count
==
2
:
self
.
assertEqual
(
test_result
.
getSimulationState
(),
"stopped"
)
self
.
assertEqual
s
(
test_result
.
getSimulationState
(),
"stopped"
)
else
:
self
.
assertEqual
(
test_result
.
getSimulationState
(),
"started"
)
self
.
assertEqual
s
(
test_result
.
getSimulationState
(),
"started"
)
def
_cleanupTestResult
(
self
):
self
.
tic
()
...
...
@@ -209,16 +209,16 @@ class TestTaskDistribution(TaskDistributionTestCase):
def
test_02_createTestSuite
(
self
):
# Test Test Suite
test_suite
=
self
.
_createTestSuite
()[
0
]
self
.
assertEqual
(
test_suite
.
getPortalType
(),
"Test Suite"
)
self
.
assertEqual
(
test_suite
.
getSpecialise
(),
self
.
distributor
.
getRelativeUrl
())
self
.
assertEqual
s
(
test_suite
.
getPortalType
(),
"Test Suite"
)
self
.
assertEqual
s
(
test_suite
.
getSpecialise
(),
self
.
distributor
.
getRelativeUrl
())
# Test Scalability Test Suite
scalability_test_suite
=
self
.
_createTestSuite
(
portal_type
=
"Scalability Test Suite"
,
specialise_value
=
self
.
scalability_distributor
)[
0
]
self
.
assertEqual
(
scalability_test_suite
.
getPortalType
(),
self
.
assertEqual
s
(
scalability_test_suite
.
getPortalType
(),
"Scalability Test Suite"
)
self
.
assertEqual
(
scalability_test_suite
.
getSpecialise
(),
self
.
assertEqual
s
(
scalability_test_suite
.
getSpecialise
(),
self
.
scalability_distributor
.
getRelativeUrl
())
def
test_02b_checkConsistencyOnTestSuite
(
self
):
...
...
@@ -338,7 +338,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
title
=
"COMP42-Node1"
))
return
[
"%s"
%
x
[
"test_suite_title"
]
for
x
in
config_list
]
# By default we have random order between test suites
self
.
assertEqual
(
set
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
]),
self
.
assertEqual
s
(
set
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
]),
set
(
getTestSuiteList
()))
# Check that if test suite 1 and test suite 2 are recently processed,
...
...
@@ -349,19 +349,19 @@ class TestTaskDistribution(TaskDistributionTestCase):
self
.
processTest
(
"test suite 2"
,
"r0=b"
)
self
.
tic
()
sleep
(
1
)
self
.
assertEqual
(
getTestSuiteList
()[
0
],
"test suite 3"
)
self
.
assertEqual
s
(
getTestSuiteList
()[
0
],
"test suite 3"
)
self
.
processTest
(
"test suite 3"
,
"r0=b"
)
# after test suite 3, we now have to process test suite 1
# since it is the oldest one
self
.
tic
()
sleep
(
1
)
self
.
assertEqual
(
getTestSuiteList
()[
0
],
"test suite 1"
)
self
.
assertEqual
s
(
getTestSuiteList
()[
0
],
"test suite 1"
)
self
.
processTest
(
"test suite 1"
,
"r0=c"
)
# after test suite 1, we now have to process test suite 2
# since it is the oldest one
self
.
tic
()
sleep
(
1
)
self
.
assertEqual
(
getTestSuiteList
()[
0
],
"test suite 2"
)
self
.
assertEqual
s
(
getTestSuiteList
()[
0
],
"test suite 2"
)
self
.
processTest
(
"test suite 2"
,
"r0=d"
)
self
.
tic
()
sleep
(
1
)
...
...
@@ -370,20 +370,20 @@ class TestTaskDistribution(TaskDistributionTestCase):
self
.
tic
()
sleep
(
1
)
# we should then have by order 3, 2, 1
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
,
"test suite 1"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
,
"test suite 1"
],
getTestSuiteList
())
# 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
.
tic
()
sleep
(
1
)
self
.
assertEqual
([
"test suite 2"
,
"test suite 1"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 2"
,
"test suite 1"
,
"test suite 3"
],
getTestSuiteList
())
# 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
self
.
processTest
(
"test suite 2"
,
"r0=g"
,
start_count
=
1
,
stop_count
=
0
)
self
.
tic
()
sleep
(
1
)
self
.
assertEqual
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
())
def
test_04c_startTestSuiteOrderWithManyTestNodes
(
self
):
...
...
@@ -435,9 +435,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
self
.
pinDateTime
(
now
+
2.0
/
86400
)
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
self
.
assertEqual
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP0-Node1"
))
self
.
assertEqual
([
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP5-Node1"
))
# Start some work
self
.
pinDateTime
(
now
+
3.0
/
86400
)
...
...
@@ -445,9 +445,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP1-Node1 : 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
self
.
assertEqual
([
"test suite 1"
,
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP0-Node1"
))
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
# Now let's say test suite 3 is starting too
self
.
pinDateTime
(
now
+
4.0
/
86400
)
...
...
@@ -456,7 +456,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP6-Node1 : test suite 3
# test suite 3 still should have the priority other test suite 2, because it
# has higher priority
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
# 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
)
...
...
@@ -465,9 +465,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3
# 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
self
.
assertEqual
([
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
assertEqual
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP0-Node1"
))
# 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
)
...
...
@@ -477,7 +477,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3
# Now we have 2 testnodes for test suite 3, and 2 for test suite 2, time to give
# more priority to test suite 3
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
processTest
(
"test suite 3"
,
"r0=b"
,
node_title
=
"COMP8-Node1"
,
start_count
=
0
,
stop_count
=
0
)
# COMP1-Node1 : test suite 2
...
...
@@ -487,7 +487,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP8-Node1 : test suite 3
# 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
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
processTest
(
"test suite 3"
,
"r0=b"
,
node_title
=
"COMP9-Node1"
,
start_count
=
0
,
stop_count
=
0
)
# COMP1-Node1 : test suite 2
...
...
@@ -498,9 +498,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP9-Node1 : test suite 3
# Now we have 4 testnodes for test suite 3, and 2 for test suite 2, test suite 2 will
# have again priority
self
.
assertEqual
([
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
assertEqual
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 2"
,
"test suite 3"
],
getTestSuiteList
(
"COMP0-Node1"
))
self
.
processTest
(
"test suite 2"
,
"r0=b"
,
node_title
=
"COMP3-Node1"
,
start_count
=
0
,
stop_count
=
0
)
# COMP1-Node1 : test suite 2
...
...
@@ -512,7 +512,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP9-Node1 : test suite 3
# Now we have 4 testnodes for test suite 3, and 3 for test suite 2, test suite 3 will
# have again priority
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
processTest
(
"test suite 3"
,
"r0=b"
,
node_title
=
"COMP4-Node1"
,
start_count
=
0
,
stop_count
=
0
)
# COMP1-Node1 : test suite 2
...
...
@@ -523,9 +523,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
# COMP7-Node1 : test suite 3
# COMP8-Node1 : test suite 3
# COMP9-Node1 : test suite 3
self
.
assertEqual
([
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP5-Node1"
))
self
.
assertEqual
([
"test suite 1"
,
"test suite 3"
,
"test suite 2"
],
self
.
assertEqual
s
([
"test suite 1"
,
"test suite 3"
,
"test suite 2"
],
getTestSuiteList
(
"COMP0-Node1"
))
finally
:
self
.
unpinDateTime
()
...
...
@@ -654,7 +654,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
self
.
tic
()
next_test_result_path
,
_
=
self
.
_createTestResult
(
test_list
=
[
'testFoo'
,
'testBar'
],
revision
=
"r0=a,r1=b"
)
self
.
assertNotEqual
(
next_test_result_path
,
test_result_path
)
self
.
assertNotEqual
s
(
next_test_result_path
,
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
)
self
.
assertEqual
([
'testFoo'
,
'testBar'
],
[
test
,
next_test
])
...
...
@@ -881,15 +881,15 @@ class TestTaskDistribution(TaskDistributionTestCase):
"""
test_suite
,
=
self
.
_createTestSuite
(
cluster_configuration
=
None
)
# pylint: disable=unbalanced-tuple-unpacking
self
.
tic
()
self
.
assertEqual
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
self
.
assertEqual
s
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
test_suite
.
setClusterConfiguration
(
"{'foo': 3}"
)
self
.
assertEqual
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
self
.
assertEqual
s
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
test_suite
.
setClusterConfiguration
(
'{"foo": 3}'
)
self
.
assertEqual
(
'{"configuration_list": [{"foo": 3}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
self
.
assertEqual
s
(
'{"configuration_list": [{"foo": 3}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
# make sure generateConfiguration does not fail if test suite is invalidated
test_suite
.
invalidate
()
self
.
tic
()
self
.
assertEqual
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
self
.
assertEqual
s
(
'{"configuration_list": [{}]}'
,
self
.
distributor
.
generateConfiguration
(
test_suite
.
getTitle
()))
def
_checkTestSuiteAggregateList
(
self
,
*
args
):
self
.
tic
()
...
...
@@ -1143,7 +1143,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
test_node_titles
=
[
x
.
getTitle
()
for
x
in
test_nodes
]
# Check subscription
for
node_title
in
nodes
.
keys
():
self
.
assert
In
(
node_title
,
test_node_titles
)
self
.
assert
True
(
node_title
in
test_node_titles
)
# Check ping date
# TODO..
...
...
@@ -1175,9 +1175,9 @@ class TestTaskDistribution(TaskDistributionTestCase):
master_test_node_list
,
slave_test_node_list
=
getMasterAndSlaveNodeList
()
# -Only one master must be elected
self
.
assertEqual
(
1
,
len
(
master_test_node_list
))
self
.
assertEqual
s
(
1
,
len
(
master_test_node_list
))
# -Others test node must not be the matser
self
.
assertEqual
(
3
,
len
(
slave_test_node_list
))
self
.
assertEqual
s
(
3
,
len
(
slave_test_node_list
))
# Get the current master test node
current_master_test_node_1
=
master_test_node_list
[
0
]
...
...
@@ -1190,14 +1190,14 @@ class TestTaskDistribution(TaskDistributionTestCase):
# Check test node election
master_test_node_list
,
slave_test_node_list
=
getMasterAndSlaveNodeList
()
# -Only one master must be elected
self
.
assertEqual
(
1
,
len
(
master_test_node_list
))
self
.
assertEqual
s
(
1
,
len
(
master_test_node_list
))
# -Others test node must not be the matser
self
.
assertEqual
(
5
,
len
(
slave_test_node_list
))
self
.
assertEqual
s
(
5
,
len
(
slave_test_node_list
))
# Get the current master test node
current_master_test_node_2
=
master_test_node_list
[
0
]
# Master test node while he is alive
self
.
assertEqual
(
current_master_test_node_1
.
getTitle
(),
self
.
assertEqual
s
(
current_master_test_node_1
.
getTitle
(),
current_master_test_node_2
.
getTitle
())
## 3 (check election, with master deletion)
...
...
@@ -1206,14 +1206,14 @@ class TestTaskDistribution(TaskDistributionTestCase):
# Check test node election
master_test_node_list
,
slave_test_node_list
=
getMasterAndSlaveNodeList
()
# -Only one master must be elected
self
.
assertEqual
(
1
,
len
(
master_test_node_list
))
self
.
assertEqual
s
(
1
,
len
(
master_test_node_list
))
# -Others test node must not be the matser
self
.
assertEqual
(
4
,
len
(
slave_test_node_list
))
self
.
assertEqual
s
(
4
,
len
(
slave_test_node_list
))
# Get the current master test node
current_master_test_node_3
=
master_test_node_list
[
0
]
# Master test node must be an other test node than previously
self
.
assertNotEqual
(
current_master_test_node_2
.
getTitle
(),
self
.
assertNotEqual
s
(
current_master_test_node_2
.
getTitle
(),
current_master_test_node_3
.
getTitle
())
...
...
@@ -1255,12 +1255,12 @@ class TestTaskDistribution(TaskDistributionTestCase):
title
=
"COMP4-Scalability-Node4"
))
}
# Check if master has got a non empty configuration
self
.
assertNotEqual
(
config_nodes
[
current_master_test_node
.
getTitle
()],
[])
self
.
assertNotEqual
s
(
config_nodes
[
current_master_test_node
.
getTitle
()],
[])
# -Delete master test node suite from dict
del
config_nodes
[
current_master_test_node
.
getTitle
()]
# Check if slave test node have got empty list
for
suite
in
config_nodes
.
values
():
self
.
assertEqual
(
suite
,
[])
self
.
assertEqual
s
(
suite
,
[])
def
test_16A_startTestSuiteERP5ScalabilityDistributorWithRunningTestResult
(
self
):
# Subscribe nodes
...
...
@@ -1277,7 +1277,7 @@ class TestTaskDistribution(TaskDistributionTestCase):
test_result
.
start
()
self
.
tic
()
configuration
=
self
.
scalability_distributor
.
startTestSuite
(
title
=
"COMP1-Scalability-Node1"
)
self
.
assertNotEqual
(
configuration
,
[])
self
.
assertNotEqual
s
(
configuration
,
[])
def
test_17_isMasterTestnodeERP5ScalabilityDistributor
(
self
):
...
...
bt5/erp5_test_result/ToolComponentTemplateItem/portal_components/tool.erp5.TaskDistributionTool.py
View file @
da44845a
...
...
@@ -31,7 +31,7 @@ from AccessControl import ClassSecurityInfo
from
Products.ERP5Type
import
Permissions
from
Products.ERP5Type.Tool.BaseTool
import
BaseTool
from
Products.ZSQLCatalog.SQLCatalog
import
SimpleQuery
,
NegatedQuery
from
zLOG
import
LOG
,
DEBUG
from
zLOG
import
LOG
,
DEBUG
,
INFO
from
xmlrpclib
import
Binary
class
TaskDistributionTool
(
BaseTool
):
...
...
@@ -89,7 +89,7 @@ class TaskDistributionTool(BaseTool):
-> (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
()
if
test_title
is
None
:
test_title
=
name
...
...
@@ -215,6 +215,7 @@ class TaskDistributionTool(BaseTool):
# following 2 functions only call 'newContent' on test_result
createTestResultLineList
(
test_result
,
test_name_list
)
createNode
(
test_result
,
node_title
)
LOG
(
'createTestResult RESULT'
,
INFO
,
(
test_result
.
getRelativeUrl
(),
revision
))
return
test_result
.
getRelativeUrl
(),
revision
security
.
declarePublic
(
'startUnitTest'
)
...
...
bt5/erp5_test_result/WorkflowTemplateItem/portal_workflow/test_result_workflow/script_TestResult_fail.py
View file @
da44845a
...
...
@@ -15,4 +15,4 @@ if test_result.getPortalType() == 'Test Result Node':
edit_kw
[
key
]
=
key_value
test_result
.
edit
(
**
edit_kw
)
else
:
cont
ainer
.
script_
TestResult_complete
(
sci
)
cont
ext
.
TestResult_complete
(
sci
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment