Commit c0b7aed7 authored by Jérome Perrin's avatar Jérome Perrin

Support seleniumserver in ERP5 tests

See merge request nexedi/slapos!999
parents 0e4c73a9 597b53b8
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
"type": "string" "type": "string"
}, },
"developer-list": { "developer-list": {
"description": "List of logins which should get the Developper role (required to modify portal_components' content), defaulting to inituser-login's value", "description": "List of logins which should get the Developer role (required to modify portal_components' content), defaulting to inituser-login's value",
"items": { "items": {
"pattern": "^\\S+$", "pattern": "^\\S+$",
"type": "string" "type": "string"
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
"type": "integer" "type": "integer"
}, },
"timerserver-interval": { "timerserver-interval": {
"description": "Timerserver tick perdiod, in seconds, or 0 to disable", "description": "Timerserver tick period, in seconds, or 0 to disable",
"default": 5, "default": 5,
"type": "number" "type": "number"
}, },
...@@ -439,7 +439,7 @@ ...@@ -439,7 +439,7 @@
"type": "string" "type": "string"
}, },
{ {
"description": "Override value (parameter for maching nodes).", "description": "Override value (parameter for matching nodes).",
"type": [ "type": [
"integer", "integer",
"string" "string"
...@@ -517,7 +517,7 @@ ...@@ -517,7 +517,7 @@
"type": "boolean" "type": "boolean"
}, },
"node-count": { "node-count": {
"description": "Number of tests this instance can execute in parrallel. This must be at least equal to the number of nodes configured on testnode running the test", "description": "Number of tests this instance can execute in parallel. This must be at least equal to the number of nodes configured on testnode running the test",
"default": 3, "default": 3,
"type": "integer" "type": "integer"
}, },
...@@ -525,6 +525,101 @@ ...@@ -525,6 +525,101 @@
"description": "Number of extra databases this instance tests will need.", "description": "Number of extra databases this instance tests will need.",
"default": 3, "default": 3,
"type": "integer" "type": "integer"
},
"selenium": {
"default": {
"target": "firefox"
},
"examples": [
{
"target": "selenium-server",
"server-url": "https://selenium.example.com",
"desired-capabilities": {
"browserName": "firefox",
"version": "68.0.2esr",
"acceptInsecureCerts": true
}
},
{
"target": "selenium-server",
"server-url": "https://selenium.example.com",
"desired-capabilities": {
"browserName": "chrome",
"version": "91.0.4472.101"
}
}
],
"oneOf": [
{
"type": "object",
"title": "Selenium Server",
"description": "Configuration for Selenium server",
"additionalProperties": false,
"required": [
"desired-capabilities",
"server-url",
"target"
],
"properties": {
"target": {
"description": "Target system",
"type": "string",
"const": "selenium-server"
},
"server-url": {
"description": "URL of the selenium server",
"type": "string",
"format": "uri"
},
"verify-server-certificate": {
"description": "Verify the SSL/TLS certificate of the selenium server when using HTTPS",
"type": "boolean",
"default": true
},
"server-ca-certificate": {
"description": "PEM encoded bundle of CA certificates to verify the SSL/TLS certificate of the selenium server when using HTTPS",
"type": "string",
"default": "Root certificates from http://certifi.io/en/latest/"
},
"desired-capabilities": {
"description": "Desired browser capabilities",
"required": [
"browserName"
],
"type": "object",
"properties": {
"browserName": {
"description": "Name of the browser being used",
"type": "string",
"examples": [
"firefox",
"chrome",
"safari"
]
},
"version": {
"description": "The browser version",
"type": "string"
}
}
}
}
},
{
"type": "object",
"title": "Firefox",
"description": "Configuration for using firefox running as a sub-process",
"additionalProperties": false,
"properties": {
"target": {
"description": "Target system",
"const": "firefox",
"type": "string",
"default": "firefox"
}
}
}
]
} }
}, },
"type": "object" "type": "object"
......
...@@ -218,6 +218,45 @@ class TestBalancerPorts(ERP5InstanceTestCase): ...@@ -218,6 +218,45 @@ class TestBalancerPorts(ERP5InstanceTestCase):
])) ]))
class TestSeleniumTestRunner(ERP5InstanceTestCase, TestPublishedURLIsReachableMixin):
"""Test ERP5 can be instantiated with selenium server for test runner.
"""
__partition_reference__ = 'sel'
@classmethod
def getInstanceParameterDict(cls):
return {
'_':
json.dumps({
'test-runner': {
'selenium': {
"target": "selenium-server",
"server-url": "https://example.com",
"verify-server-certificate": False,
"desired-capabilities": {
"browserName": "firefox",
"version": "68.0.2esr",
}
}
}
})
}
def test_test_runner_configuration_json_file(self):
runUnitTest_script, = glob.glob(
self.computer_partition_root_path + "/../*/bin/runUnitTest.real")
config_file = None
with open(runUnitTest_script) as f:
for line in f:
if 'ERP5_TEST_RUNNER_CONFIGURATION' in line:
_, config_file = line.split('=')
assert config_file
with open(config_file.strip()) as f:
self.assertEqual(
f.read(),
json.dumps(json.loads(self.getInstanceParameterDict()['_'])['test-runner']))
class TestDisableTestRunner(ERP5InstanceTestCase, TestPublishedURLIsReachableMixin): class TestDisableTestRunner(ERP5InstanceTestCase, TestPublishedURLIsReachableMixin):
"""Test ERP5 can be instantiated without test runner. """Test ERP5 can be instantiated without test runner.
""" """
......
...@@ -23,6 +23,31 @@ ...@@ -23,6 +23,31 @@
"example": "https://softinst1234.host.vifib.net/" "example": "https://softinst1234.host.vifib.net/"
}, },
"test-runner": { "test-runner": {
"default": {
"target": "firefox"
},
"examples": [
{
"target": "selenium-server",
"server-url": "https://selenium.example.com",
"desired-capabilities": {
"browserName": "firefox",
"version": "68.0.2esr",
"acceptInsecureCerts": true
}
},
{
"target": "selenium-server",
"server-url": "https://selenium.example.com",
"desired-capabilities": {
"browserName": "chrome",
"version": "91.0.4472.101"
}
},
{
"target": "node"
}
],
"oneOf": [ "oneOf": [
{ {
"type": "object", "type": "object",
...@@ -46,14 +71,14 @@ ...@@ -46,14 +71,14 @@
"format": "uri" "format": "uri"
}, },
"verify-server-certificate": { "verify-server-certificate": {
"description": "Verify the SSL/TLS Certificats of the selenium server when using HTTPS", "description": "Verify the SSL/TLS certificate of the selenium server when using HTTPS",
"type": "boolean", "type": "boolean",
"default": true "default": true
}, },
"server-ca-certificate": { "server-ca-certificate": {
"description": "PEM encoded bundle of CA Certificates to verify the SSL/TLS Certificate of the selenium server when using HTTPS", "description": "PEM encoded bundle of CA certificates to verify the SSL/TLS certificate of the selenium server when using HTTPS",
"type": "string", "type": "string",
"default": "root certificates from http://certifi.io/en/latest/" "default": "Root certificates from http://certifi.io/en/latest/"
}, },
"desired-capabilities": { "desired-capabilities": {
"description": "Desired browser capabilities", "description": "Desired browser capabilities",
...@@ -63,8 +88,13 @@ ...@@ -63,8 +88,13 @@
"type": "object", "type": "object",
"properties": { "properties": {
"browserName": { "browserName": {
"description": "Name of the browser being used, for example firefox, chrome", "description": "Name of the browser being used",
"type": "string" "type": "string",
"examples": [
"firefox",
"chrome",
"safari"
]
}, },
"version": { "version": {
"description": "The browser version", "description": "The browser version",
...@@ -77,7 +107,7 @@ ...@@ -77,7 +107,7 @@
{ {
"type": "object", "type": "object",
"title": "Firefox", "title": "Firefox",
"description": "Configuration for Firefox", "description": "Configuration for using firefox running as a sub-process",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"target": { "target": {
......
...@@ -708,7 +708,7 @@ uuid = 1.30 ...@@ -708,7 +708,7 @@ uuid = 1.30
validictory = 1.1.0 validictory = 1.1.0
xfw = 0.10 xfw = 0.10
xupdate-processor = 0.4 xupdate-processor = 0.4
selenium = 3.8.0 selenium = 3.14.1
scikit-image = 0.14.0 scikit-image = 0.14.0
PyWavelets = 0.5.2 PyWavelets = 0.5.2
networkx = 2.1 networkx = 2.1
......
...@@ -70,11 +70,11 @@ md5sum = 7a14019abf48ca100eb94d9add20f5ae ...@@ -70,11 +70,11 @@ md5sum = 7a14019abf48ca100eb94d9add20f5ae
[template] [template]
filename = instance.cfg.in filename = instance.cfg.in
md5sum = 8bd7f89b7c1e453ecc952659a01347e6 md5sum = bbef65b4edeb342f08309604ca3717d5
[template-erp5] [template-erp5]
filename = instance-erp5.cfg.in filename = instance-erp5.cfg.in
md5sum = f33e82cb68924decb77142b79dce4fab md5sum = 49b7e029c7fca7c95d3bfd8876d1a632
[template-zeo] [template-zeo]
filename = instance-zeo.cfg.in filename = instance-zeo.cfg.in
...@@ -86,7 +86,7 @@ md5sum = bc821f9f9696953b10a03ad7b59a1936 ...@@ -86,7 +86,7 @@ md5sum = bc821f9f9696953b10a03ad7b59a1936
[template-zope] [template-zope]
filename = instance-zope.cfg.in filename = instance-zope.cfg.in
md5sum = e495f7225a49f61c501ccc496a976d63 md5sum = 4f0db10bc08074178e05b32cba0cb3f2
[template-balancer] [template-balancer]
filename = instance-balancer.cfg.in filename = instance-balancer.cfg.in
......
...@@ -260,6 +260,7 @@ config-wsgi = {{ dumps(slapparameter_dict.get('wsgi', True)) }} ...@@ -260,6 +260,7 @@ config-wsgi = {{ dumps(slapparameter_dict.get('wsgi', True)) }}
config-test-runner-enabled = {{ dumps(test_runner_enabled) }} config-test-runner-enabled = {{ dumps(test_runner_enabled) }}
config-test-runner-node-count = {{ dumps(test_runner_node_count) }} config-test-runner-node-count = {{ dumps(test_runner_node_count) }}
config-wcfs_enable = {{ dumps(wcfs_enable) }} config-wcfs_enable = {{ dumps(wcfs_enable) }}
config-test-runner-configuration = {{ dumps(slapparameter_dict.get('test-runner', {})) }}
software-type = zope software-type = zope
{% set global_publisher_timeout = slapparameter_dict.get('publisher-timeout') -%} {% set global_publisher_timeout = slapparameter_dict.get('publisher-timeout') -%}
......
...@@ -470,6 +470,7 @@ environment-extra = ...@@ -470,6 +470,7 @@ environment-extra =
REAL_INSTANCE_HOME=${:instance-home} REAL_INSTANCE_HOME=${:instance-home}
SQLBENCH_PATH={{ parameter_dict['sqlbench_path'] }} SQLBENCH_PATH={{ parameter_dict['sqlbench_path'] }}
TEST_CA_PATH=${directory:ca-dir} TEST_CA_PATH=${directory:ca-dir}
ERP5_TEST_RUNNER_CONFIGURATION=${test-runner-configuration:rendered}
{%- if wsgi %} {%- if wsgi %}
erp5_wsgi=1 erp5_wsgi=1
{%- endif %} {%- endif %}
...@@ -488,6 +489,12 @@ command-line = ...@@ -488,6 +489,12 @@ command-line =
--persistent_memcached_server_hostname=erp5-memcached-persistent --persistent_memcached_server_hostname=erp5-memcached-persistent
--persistent_memcached_server_port={{ port_dict['erp5-memcached-persistent'] }} --persistent_memcached_server_port={{ port_dict['erp5-memcached-persistent'] }}
[test-runner-configuration]
recipe = slapos.recipe.template:jinja2
rendered = ${directory:etc}/${:_buildout_section_name_}.json
template = inline:
{{ json.dumps(slapparameter_dict['test-runner-configuration']) }}
[{{ section('runUnitTest') }}] [{{ section('runUnitTest') }}]
< = run-test-common < = run-test-common
command-name = runUnitTest command-name = runUnitTest
......
...@@ -128,6 +128,7 @@ extra-context = ...@@ -128,6 +128,7 @@ extra-context =
import urlparse urlparse import urlparse urlparse
import hashlib hashlib import hashlib hashlib
import itertools itertools import itertools itertools
import json json
import-list = import-list =
file instance_zodb_base context:template-zodb-base file instance_zodb_base context:template-zodb-base
......
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