Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos
Commits
1aaaa03c
Commit
1aaaa03c
authored
Mar 26, 2019
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
seleniumserver/test: use slapos.testing
parent
6ab16083
Changes
3
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
80 additions
and
404 deletions
+80
-404
software/seleniumserver/test/setup.py
software/seleniumserver/test/setup.py
+17
-15
software/seleniumserver/test/test.py
software/seleniumserver/test/test.py
+63
-67
software/seleniumserver/test/utils.py
software/seleniumserver/test/utils.py
+0
-322
No files found.
software/seleniumserver/test/setup.py
View file @
1aaaa03c
...
@@ -28,9 +28,11 @@ from setuptools import setup, find_packages
...
@@ -28,9 +28,11 @@ from setuptools import setup, find_packages
version
=
'0.0.1.dev0'
version
=
'0.0.1.dev0'
name
=
'slapos.test.seleniumserver'
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
,
version
=
version
,
description
=
"Test for SlapOS' Selenium Server"
,
description
=
"Test for SlapOS' Selenium Server"
,
long_description
=
long_description
,
long_description
=
long_description
,
...
@@ -52,4 +54,4 @@ setup(name=name,
...
@@ -52,4 +54,4 @@ setup(name=name,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
test_suite
=
'test'
,
test_suite
=
'test'
,
)
)
software/seleniumserver/test/test.py
View file @
1aaaa03c
...
@@ -47,14 +47,12 @@ from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
...
@@ -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
import
expected_conditions
as
EC
from
selenium.webdriver.support.ui
import
WebDriverWait
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'
)
setUpModule
,
SeleniumServerTestCase
=
makeModuleSetUpAndTestCaseClass
(
# for development: debugging logs and install Ctrl+C handler
os
.
path
.
abspath
(
if
debug_mode
:
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'software.cfg'
)))
import
logging
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
unittest
.
installHandler
()
class
WebServerMixin
(
object
):
class
WebServerMixin
(
object
):
...
@@ -71,12 +69,14 @@ class WebServerMixin(object):
...
@@ -71,12 +69,14 @@ class WebServerMixin(object):
- upload a file and the file content will be displayed in div.uploadedfile
- upload a file and the file content will be displayed in div.uploadedfile
"""
"""
def
log_message
(
self
,
*
args
,
**
kw
):
def
log_message
(
self
,
*
args
,
**
kw
):
if
debug_mode
:
if
SeleniumServerTestCase
.
_debug
:
BaseHTTPRequestHandler
.
log_message
(
self
,
*
args
,
**
kw
)
BaseHTTPRequestHandler
.
log_message
(
self
,
*
args
,
**
kw
)
def
do_GET
(
self
):
def
do_GET
(
self
):
self
.
send_response
(
200
)
self
.
send_response
(
200
)
self
.
end_headers
()
self
.
end_headers
()
self
.
wfile
.
write
(
'''
self
.
wfile
.
write
(
'''
<html>
<html>
<title>Test page</title>
<title>Test page</title>
<body>
<body>
...
@@ -87,18 +87,22 @@ class WebServerMixin(object):
...
@@ -87,18 +87,22 @@ class WebServerMixin(object):
</form>
</form>
</body>
</body>
</html>'''
)
</html>'''
)
def
do_POST
(
self
):
def
do_POST
(
self
):
form
=
cgi
.
FieldStorage
(
form
=
cgi
.
FieldStorage
(
fp
=
self
.
rfile
,
fp
=
self
.
rfile
,
headers
=
self
.
headers
,
headers
=
self
.
headers
,
environ
=
{
'REQUEST_METHOD'
:
'POST'
,
environ
=
{
'CONTENT_TYPE'
:
self
.
headers
[
'Content-Type'
],})
'REQUEST_METHOD'
:
'POST'
,
'CONTENT_TYPE'
:
self
.
headers
[
'Content-Type'
],
})
self
.
send_response
(
200
)
self
.
send_response
(
200
)
self
.
end_headers
()
self
.
end_headers
()
file_data
=
'no file'
file_data
=
'no file'
if
form
.
has_key
(
'f'
):
if
form
.
has_key
(
'f'
):
file_data
=
form
[
'f'
].
file
.
read
()
file_data
=
form
[
'f'
].
file
.
read
()
self
.
wfile
.
write
(
'''
self
.
wfile
.
write
(
'''
<html>
<html>
<title>%s</title>
<title>%s</title>
<div>%s</div>
<div>%s</div>
...
@@ -128,7 +132,8 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -128,7 +132,8 @@ class BrowserCompatibilityMixin(WebServerMixin):
def
setUp
(
self
):
def
setUp
(
self
):
super
(
BrowserCompatibilityMixin
,
self
).
setUp
()
super
(
BrowserCompatibilityMixin
,
self
).
setUp
()
self
.
driver
=
webdriver
.
Remote
(
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
)
desired_capabilities
=
self
.
desired_capabilities
)
def
tearDown
(
self
):
def
tearDown
(
self
):
...
@@ -158,9 +163,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -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[@name="f"]'
).
send_keys
(
f
.
name
)
self
.
driver
.
find_element_by_xpath
(
'//input[@type="submit"]'
).
click
()
self
.
driver
.
find_element_by_xpath
(
'//input[@type="submit"]'
).
click
()
self
.
assertEqual
(
self
.
assertEqual
(
self
.
id
(),
self
.
driver
.
find_element_by_xpath
(
'//div'
).
text
)
self
.
id
(),
self
.
driver
.
find_element_by_xpath
(
'//div'
).
text
)
def
test_screenshot
(
self
):
def
test_screenshot
(
self
):
self
.
driver
.
get
(
self
.
server_url
)
self
.
driver
.
get
(
self
.
server_url
)
...
@@ -169,7 +172,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -169,7 +172,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
self
.
assertGreater
(
len
(
screenshot
.
getcolors
(
maxcolors
=
512
)),
2
)
self
.
assertGreater
(
len
(
screenshot
.
getcolors
(
maxcolors
=
512
)),
2
)
def
test_window_and_screen_size
(
self
):
def
test_window_and_screen_size
(
self
):
size
=
json
.
loads
(
self
.
driver
.
execute_script
(
'''
size
=
json
.
loads
(
self
.
driver
.
execute_script
(
'''
return JSON.stringify({
return JSON.stringify({
'screen.width': window.screen.width,
'screen.width': window.screen.width,
'screen.height': window.screen.height,
'screen.height': window.screen.height,
...
@@ -188,7 +193,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -188,7 +193,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
def
test_resize_window
(
self
):
def
test_resize_window
(
self
):
self
.
driver
.
set_window_size
(
800
,
900
)
self
.
driver
.
set_window_size
(
800
,
900
)
size
=
json
.
loads
(
self
.
driver
.
execute_script
(
'''
size
=
json
.
loads
(
self
.
driver
.
execute_script
(
'''
return JSON.stringify({
return JSON.stringify({
'outerWidth': window.outerWidth,
'outerWidth': window.outerWidth,
'outerHeight': window.outerHeight
'outerHeight': window.outerHeight
...
@@ -201,6 +208,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -201,6 +208,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
webdriver_url
=
parameter_dict
[
'backend-url'
]
webdriver_url
=
parameter_dict
[
'backend-url'
]
queue
=
multiprocessing
.
Queue
()
queue
=
multiprocessing
.
Queue
()
def
_test
(
q
,
server_url
):
def
_test
(
q
,
server_url
):
driver
=
webdriver
.
Remote
(
driver
=
webdriver
.
Remote
(
command_executor
=
webdriver_url
,
command_executor
=
webdriver_url
,
...
@@ -213,10 +221,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -213,10 +221,9 @@ class BrowserCompatibilityMixin(WebServerMixin):
nb_workers
=
10
nb_workers
=
10
workers
=
[]
workers
=
[]
for
i
in
range
(
nb_workers
):
for
_
in
range
(
nb_workers
):
worker
=
multiprocessing
.
Process
(
worker
=
multiprocessing
.
Process
(
target
=
_test
,
target
=
_test
,
args
=
(
queue
,
self
.
server_url
))
args
=
(
queue
,
self
.
server_url
))
worker
.
start
()
worker
.
start
()
workers
.
append
(
worker
)
workers
.
append
(
worker
)
...
@@ -229,16 +236,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
...
@@ -229,16 +236,7 @@ class BrowserCompatibilityMixin(WebServerMixin):
del
_
# pylint
del
_
# pylint
self
.
assertEqual
(
self
.
assertEqual
(
[
True
]
*
nb_workers
,
[
True
]
*
nb_workers
,
[
queue
.
get
()
for
_
in
range
(
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'
)),
)
class
TestBrowserSelection
(
WebServerMixin
,
SeleniumServerTestCase
):
class
TestBrowserSelection
(
WebServerMixin
,
SeleniumServerTestCase
):
...
@@ -255,12 +253,9 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
...
@@ -255,12 +253,9 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
driver
.
get
(
self
.
server_url
)
driver
.
get
(
self
.
server_url
)
self
.
assertEqual
(
'Test page'
,
driver
.
title
)
self
.
assertEqual
(
'Test page'
,
driver
.
title
)
self
.
assertIn
(
self
.
assertIn
(
'Chrome'
,
driver
.
execute_script
(
'return navigator.userAgent'
))
'Chrome'
,
driver
.
execute_script
(
'return navigator.userAgent'
))
self
.
assertNotIn
(
self
.
assertNotIn
(
'Firefox'
,
'Firefox'
,
driver
.
execute_script
(
'return navigator.userAgent'
))
driver
.
execute_script
(
'return navigator.userAgent'
))
driver
.
quit
()
driver
.
quit
()
def
test_firefox
(
self
):
def
test_firefox
(
self
):
...
@@ -275,8 +270,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
...
@@ -275,8 +270,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
self
.
assertEqual
(
'Test page'
,
driver
.
title
)
self
.
assertEqual
(
'Test page'
,
driver
.
title
)
self
.
assertIn
(
self
.
assertIn
(
'Firefox'
,
'Firefox'
,
driver
.
execute_script
(
'return navigator.userAgent'
))
driver
.
execute_script
(
'return navigator.userAgent'
))
driver
.
quit
()
driver
.
quit
()
def
test_firefox_desired_version
(
self
):
def
test_firefox_desired_version
(
self
):
...
@@ -313,9 +307,7 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
...
@@ -313,9 +307,7 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
self
.
assertEqual
(
'admin'
,
parsed
.
username
)
self
.
assertEqual
(
'admin'
,
parsed
.
username
)
self
.
assertTrue
(
parsed
.
password
)
self
.
assertTrue
(
parsed
.
password
)
self
.
assertIn
(
self
.
assertIn
(
'Grid Console'
,
requests
.
get
(
admin_url
,
verify
=
False
).
text
)
'Grid Console'
,
requests
.
get
(
admin_url
,
verify
=
False
).
text
)
def
test_browser_use_hub
(
self
):
def
test_browser_use_hub
(
self
):
parameter_dict
=
self
.
computer_partition
.
getConnectionParameterDict
()
parameter_dict
=
self
.
computer_partition
.
getConnectionParameterDict
()
...
@@ -346,11 +338,13 @@ class TestSSHServer(SeleniumServerTestCase):
...
@@ -346,11 +338,13 @@ class TestSSHServer(SeleniumServerTestCase):
self
.
assertEqual
(
'ssh'
,
parsed
.
scheme
)
self
.
assertEqual
(
'ssh'
,
parsed
.
scheme
)
client
=
paramiko
.
SSHClient
()
client
=
paramiko
.
SSHClient
()
class
TestKeyPolicy
(
object
):
class
TestKeyPolicy
(
object
):
"""Accept server key and keep it in self.key for inspection
"""Accept server key and keep it in self.key for inspection
"""
"""
def
missing_host_key
(
self
,
client
,
hostname
,
key
):
def
missing_host_key
(
self
,
client
,
hostname
,
key
):
self
.
key
=
key
self
.
key
=
key
key_policy
=
TestKeyPolicy
()
key_policy
=
TestKeyPolicy
()
client
.
set_missing_host_key_policy
(
key_policy
)
client
.
set_missing_host_key_policy
(
key_policy
)
...
@@ -366,7 +360,8 @@ class TestSSHServer(SeleniumServerTestCase):
...
@@ -366,7 +360,8 @@ class TestSSHServer(SeleniumServerTestCase):
# The publish format is the raw output of ssh-keygen and is something like this:
# The publish format is the raw output of ssh-keygen and is something like this:
# 521 SHA256:9aZruv3LmFizzueIFdkd78eGtzghDoPSCBXFkkrHqXE user@hostname (ECDSA)
# 521 SHA256:9aZruv3LmFizzueIFdkd78eGtzghDoPSCBXFkkrHqXE user@hostname (ECDSA)
# we only want to parse SHA256:9aZruv3LmFizzueIFdkd78eGtzghDoPSCBXFkkrHqXE
# 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)'
)
self
.
assertEqual
(
key_type
,
'(ECDSA)'
)
fingerprint_algorithm
,
fingerprint
=
fingerprint_string
.
split
(
':'
,
1
)
fingerprint_algorithm
,
fingerprint
=
fingerprint_string
.
split
(
':'
,
1
)
...
@@ -376,8 +371,9 @@ class TestSSHServer(SeleniumServerTestCase):
...
@@ -376,8 +371,9 @@ class TestSSHServer(SeleniumServerTestCase):
self
.
assertEqual
(
self
.
assertEqual
(
fingerprint
,
fingerprint
,
# XXX with sha256, we need to remove that trailing =
# 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
=
client
.
invoke_shell
()
channel
.
settimeout
(
30
)
channel
.
settimeout
(
30
)
...
...
software/seleniumserver/test/utils.py
deleted
100644 → 0
View file @
6ab16083
This diff is collapsed.
Click to expand it.
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