Commit 1aaaa03c authored by Jérome Perrin's avatar Jérome Perrin

seleniumserver/test: use slapos.testing

parent 6ab16083
......@@ -28,9 +28,11 @@ from setuptools import setup, find_packages
version = '0.0.1.dev0'
name = 'slapos.test.seleniumserver'
long_description = open("README.md").read()
with open("README.md") as f:
long_description = f.read()
setup(name=name,
setup(
name=name,
version=version,
description="Test for SlapOS' Selenium Server",
long_description=long_description,
......@@ -52,4 +54,4 @@ setup(name=name,
],
zip_safe=True,
test_suite='test',
)
)
......@@ -47,14 +47,12 @@ from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from utils import SlapOSInstanceTestCase, findFreeTCPPort
from slapos.testing.testcase import makeModuleSetUpAndTestCaseClass
from slapos.testing.utils import findFreeTCPPort
debug_mode = os.environ.get('SLAPOS_TEST_DEBUG')
# for development: debugging logs and install Ctrl+C handler
if debug_mode:
import logging
logging.basicConfig(level=logging.DEBUG)
unittest.installHandler()
setUpModule, SeleniumServerTestCase = makeModuleSetUpAndTestCaseClass(
os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', 'software.cfg')))
class WebServerMixin(object):
......@@ -71,12 +69,14 @@ class WebServerMixin(object):
- upload a file and the file content will be displayed in div.uploadedfile
"""
def log_message(self, *args, **kw):
if debug_mode:
if SeleniumServerTestCase._debug:
BaseHTTPRequestHandler.log_message(self, *args, **kw)
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write('''
self.wfile.write(
'''
<html>
<title>Test page</title>
<body>
......@@ -87,18 +87,22 @@ class WebServerMixin(object):
</form>
</body>
</html>''')
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],})
environ={
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
})
self.send_response(200)
self.end_headers()
file_data = 'no file'
if form.has_key('f'):
file_data = form['f'].file.read()
self.wfile.write('''
self.wfile.write(
'''
<html>
<title>%s</title>
<div>%s</div>
......@@ -128,7 +132,8 @@ class BrowserCompatibilityMixin(WebServerMixin):
def setUp(self):
super(BrowserCompatibilityMixin, self).setUp()
self.driver = webdriver.Remote(
command_executor=self.computer_partition.getConnectionParameterDict()['backend-url'],
command_executor=self.computer_partition.getConnectionParameterDict()
['backend-url'],
desired_capabilities=self.desired_capabilities)
def tearDown(self):
......@@ -158,9 +163,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
self.driver.find_element_by_xpath('//input[@name="f"]').send_keys(f.name)
self.driver.find_element_by_xpath('//input[@type="submit"]').click()
self.assertEqual(
self.id(),
self.driver.find_element_by_xpath('//div').text)
self.assertEqual(self.id(), self.driver.find_element_by_xpath('//div').text)
def test_screenshot(self):
self.driver.get(self.server_url)
......@@ -169,7 +172,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
self.assertGreater(len(screenshot.getcolors(maxcolors=512)), 2)
def test_window_and_screen_size(self):
size = json.loads(self.driver.execute_script('''
size = json.loads(
self.driver.execute_script(
'''
return JSON.stringify({
'screen.width': window.screen.width,
'screen.height': window.screen.height,
......@@ -188,7 +193,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
def test_resize_window(self):
self.driver.set_window_size(800, 900)
size = json.loads(self.driver.execute_script('''
size = json.loads(
self.driver.execute_script(
'''
return JSON.stringify({
'outerWidth': window.outerWidth,
'outerHeight': window.outerHeight
......@@ -201,6 +208,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
webdriver_url = parameter_dict['backend-url']
queue = multiprocessing.Queue()
def _test(q, server_url):
driver = webdriver.Remote(
command_executor=webdriver_url,
......@@ -213,10 +221,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
nb_workers = 10
workers = []
for i in range(nb_workers):
for _ in range(nb_workers):
worker = multiprocessing.Process(
target=_test,
args=(queue, self.server_url))
target=_test, args=(queue, self.server_url))
worker.start()
workers.append(worker)
......@@ -229,16 +236,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
del _ # pylint
self.assertEqual(
[True] * nb_workers,
[queue.get() for _ in range(nb_workers)])
class SeleniumServerTestCase(SlapOSInstanceTestCase):
"""Test the remote driver on a minimal web server.
"""
@classmethod
def getSoftwareURLList(cls):
return (os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'software.cfg')), )
[True] * nb_workers, [queue.get() for _ in range(nb_workers)])
class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
......@@ -255,12 +253,9 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
driver.get(self.server_url)
self.assertEqual('Test page', driver.title)
self.assertIn(
'Chrome',
driver.execute_script('return navigator.userAgent'))
self.assertIn('Chrome', driver.execute_script('return navigator.userAgent'))
self.assertNotIn(
'Firefox',
driver.execute_script('return navigator.userAgent'))
'Firefox', driver.execute_script('return navigator.userAgent'))
driver.quit()
def test_firefox(self):
......@@ -275,8 +270,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
self.assertEqual('Test page', driver.title)
self.assertIn(
'Firefox',
driver.execute_script('return navigator.userAgent'))
'Firefox', driver.execute_script('return navigator.userAgent'))
driver.quit()
def test_firefox_desired_version(self):
......@@ -313,9 +307,7 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
self.assertEqual('admin', parsed.username)
self.assertTrue(parsed.password)
self.assertIn(
'Grid Console',
requests.get(admin_url, verify=False).text)
self.assertIn('Grid Console', requests.get(admin_url, verify=False).text)
def test_browser_use_hub(self):
parameter_dict = self.computer_partition.getConnectionParameterDict()
......@@ -346,11 +338,13 @@ class TestSSHServer(SeleniumServerTestCase):
self.assertEqual('ssh', parsed.scheme)
client = paramiko.SSHClient()
class TestKeyPolicy(object):
"""Accept server key and keep it in self.key for inspection
"""
def missing_host_key(self, client, hostname, key):
self.key = key
key_policy = TestKeyPolicy()
client.set_missing_host_key_policy(key_policy)
......@@ -366,7 +360,8 @@ class TestSSHServer(SeleniumServerTestCase):
# The publish format is the raw output of ssh-keygen and is something like this:
# 521 SHA256:9aZruv3LmFizzueIFdkd78eGtzghDoPSCBXFkkrHqXE user@hostname (ECDSA)
# we only want to parse SHA256:9aZruv3LmFizzueIFdkd78eGtzghDoPSCBXFkkrHqXE
_, fingerprint_string, _, key_type = parameter_dict['ssh-fingerprint'].split()
_, fingerprint_string, _, key_type = parameter_dict[
'ssh-fingerprint'].split()
self.assertEqual(key_type, '(ECDSA)')
fingerprint_algorithm, fingerprint = fingerprint_string.split(':', 1)
......@@ -376,8 +371,9 @@ class TestSSHServer(SeleniumServerTestCase):
self.assertEqual(
fingerprint,
# XXX with sha256, we need to remove that trailing =
base64.b64encode(hashlib.new(fingerprint_algorithm, key_policy.key.asbytes()).digest())[:-1]
)
base64.b64encode(
hashlib.new(fingerprint_algorithm,
key_policy.key.asbytes()).digest())[:-1])
channel = client.invoke_shell()
channel.settimeout(30)
......
This diff is collapsed.
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