Skip to content

Commit

Permalink
Merge r226708 - Unreviewed. Update W3C WebDriver imported tests.
Browse files Browse the repository at this point in the history
* imported/w3c/importer.json:
* imported/w3c/tools/wptrunner/wptrunner/browsers/firefox.py:
* imported/w3c/tools/wptrunner/wptrunner/browsers/servo.py:
* imported/w3c/tools/wptrunner/wptrunner/environment.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/base.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/executormarionette.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/executorservo.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py:
* imported/w3c/tools/wptrunner/wptrunner/testrunner.py:
* imported/w3c/tools/wptrunner/wptrunner/update/update.py:
* imported/w3c/tools/wptrunner/wptrunner/webdriver_server.py:
* imported/w3c/tools/wptrunner/wptrunner/wptlogging.py:
* imported/w3c/tools/wptrunner/wptrunner/wptrunner.py:
* imported/w3c/webdriver/OWNERS:
* imported/w3c/webdriver/interface/interface.html: Removed.
* imported/w3c/webdriver/tests/actions/modifier_click.py:
* imported/w3c/webdriver/tests/actions/mouse.py:
* imported/w3c/webdriver/tests/actions/mouse_dblclick.py: Added.
* imported/w3c/webdriver/tests/actions/sequence.py:
* imported/w3c/webdriver/tests/actions/support/mouse.py: Added.
* imported/w3c/webdriver/tests/cookies/add_cookie.py:
* imported/w3c/webdriver/tests/cookies/get_named_cookie.py:
* imported/w3c/webdriver/tests/element_retrieval/__init__.py: Copied from WebDriverTests/imported/w3c/webdriver/tests/retrieval/__init__.py.
* imported/w3c/webdriver/tests/element_retrieval/find_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element.py.
* imported/w3c/webdriver/tests/element_retrieval/find_element_from_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element_from_element.py.
* imported/w3c/webdriver/tests/element_retrieval/find_elements.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_elements.py.
* imported/w3c/webdriver/tests/element_retrieval/find_elements_from_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element_from_elements.py.
* imported/w3c/webdriver/tests/element_send_keys/__init__.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/__init__.py.
* imported/w3c/webdriver/tests/element_send_keys/interactability.py: Added.
* imported/w3c/webdriver/tests/element_send_keys/scroll_into_view.py: Added.
* imported/w3c/webdriver/tests/execute_script/cyclic.py: Added.
* imported/w3c/webdriver/tests/get_window_rect.py:
* imported/w3c/webdriver/tests/interface.html:
* imported/w3c/webdriver/tests/navigation/current_url.py:
* imported/w3c/webdriver/tests/support/asserts.py:
* imported/w3c/webdriver/tests/support/fixtures.py:
  • Loading branch information
carlosgcampos committed Jan 12, 2018
1 parent 60d64d0 commit bd4f15a
Show file tree
Hide file tree
Showing 37 changed files with 722 additions and 259 deletions.
41 changes: 41 additions & 0 deletions WebDriverTests/ChangeLog
@@ -1,3 +1,44 @@
2018-01-10 Carlos Garcia Campos <cgarcia@igalia.com>

Unreviewed. Update W3C WebDriver imported tests.

* imported/w3c/importer.json:
* imported/w3c/tools/wptrunner/wptrunner/browsers/firefox.py:
* imported/w3c/tools/wptrunner/wptrunner/browsers/servo.py:
* imported/w3c/tools/wptrunner/wptrunner/environment.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/base.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/executormarionette.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/executorservo.py:
* imported/w3c/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py:
* imported/w3c/tools/wptrunner/wptrunner/testrunner.py:
* imported/w3c/tools/wptrunner/wptrunner/update/update.py:
* imported/w3c/tools/wptrunner/wptrunner/webdriver_server.py:
* imported/w3c/tools/wptrunner/wptrunner/wptlogging.py:
* imported/w3c/tools/wptrunner/wptrunner/wptrunner.py:
* imported/w3c/webdriver/OWNERS:
* imported/w3c/webdriver/interface/interface.html: Removed.
* imported/w3c/webdriver/tests/actions/modifier_click.py:
* imported/w3c/webdriver/tests/actions/mouse.py:
* imported/w3c/webdriver/tests/actions/mouse_dblclick.py: Added.
* imported/w3c/webdriver/tests/actions/sequence.py:
* imported/w3c/webdriver/tests/actions/support/mouse.py: Added.
* imported/w3c/webdriver/tests/cookies/add_cookie.py:
* imported/w3c/webdriver/tests/cookies/get_named_cookie.py:
* imported/w3c/webdriver/tests/element_retrieval/__init__.py: Copied from WebDriverTests/imported/w3c/webdriver/tests/retrieval/__init__.py.
* imported/w3c/webdriver/tests/element_retrieval/find_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element.py.
* imported/w3c/webdriver/tests/element_retrieval/find_element_from_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element_from_element.py.
* imported/w3c/webdriver/tests/element_retrieval/find_elements.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_elements.py.
* imported/w3c/webdriver/tests/element_retrieval/find_elements_from_element.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/find_element_from_elements.py.
* imported/w3c/webdriver/tests/element_send_keys/__init__.py: Renamed from WebDriverTests/imported/w3c/webdriver/tests/retrieval/__init__.py.
* imported/w3c/webdriver/tests/element_send_keys/interactability.py: Added.
* imported/w3c/webdriver/tests/element_send_keys/scroll_into_view.py: Added.
* imported/w3c/webdriver/tests/execute_script/cyclic.py: Added.
* imported/w3c/webdriver/tests/get_window_rect.py:
* imported/w3c/webdriver/tests/interface.html:
* imported/w3c/webdriver/tests/navigation/current_url.py:
* imported/w3c/webdriver/tests/support/asserts.py:
* imported/w3c/webdriver/tests/support/fixtures.py:

2017-12-14 Carlos Garcia Campos <cgarcia@igalia.com>

WebDriver: add a common way to run tests with pytest
Expand Down
2 changes: 1 addition & 1 deletion WebDriverTests/imported/w3c/importer.json
@@ -1,6 +1,6 @@
{
"repository": "https://github.com/w3c/web-platform-tests.git",
"revision": "267d6b27ffd416577702653c0987b30239daae3f",
"revision": "941f6aa2949e24475a7dcd53fd1cb70142059d37",
"paths_to_import": [
"tools/webdriver",
"tools/wptrunner",
Expand Down
Expand Up @@ -51,7 +51,10 @@ def get_timeout_multiplier(test_type, run_info_data, **kwargs):
else:
return 2
elif run_info_data["debug"] or run_info_data.get("asan"):
return 3
if run_info_data.get("ccov"):
return 4
else:
return 3
return 1


Expand Down
Expand Up @@ -42,6 +42,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
rv = base_executor_kwargs(test_type, server_config,
cache_manager, **kwargs)
rv["pause_after_test"] = kwargs["pause_after_test"]
if test_type == "wdspec":
rv["capabilities"] = {}
return rv


Expand Down
Expand Up @@ -36,8 +36,6 @@ def do_delayed_imports(logger, test_paths):

try:
from tools.serve import serve
except ImportError:
from wpt_tools.serve import serve
except ImportError:
failed.append("serve")

Expand Down Expand Up @@ -86,7 +84,6 @@ def __init__(self, test_paths, ssl_env, pause_after_test, debug_info, options, e
self.ssl_env = ssl_env
self.server = None
self.config = None
self.external_config = None
self.pause_after_test = pause_after_test
self.test_server_port = options.pop("test_server_port", True)
self.debug_info = debug_info
Expand All @@ -105,9 +102,10 @@ def __enter__(self):
cm.__enter__(self.options)
self.setup_server_logging()
self.config = self.load_config()
serve.set_computed_defaults(self.config)
self.external_config, self.servers = serve.start(self.config, self.ssl_env,
self.get_routes())
ports = serve.get_ports(self.config, self.ssl_env)
self.config = serve.normalise_config(self.config, ports)
self.servers = serve.start(self.config, self.ssl_env,
self.get_routes())
if self.options.get("supports_debugger") and self.debug_info and self.debug_info.interactive:
self.ignore_interrupts()
return self
Expand Down Expand Up @@ -160,6 +158,8 @@ def load_config(self):
config["key_file"] = key_file
config["certificate"] = certificate

serve.set_computed_defaults(config)

return config

def setup_server_logging(self):
Expand Down
Expand Up @@ -113,7 +113,7 @@ def __init__(self, browser, server_config, timeout_multiplier=1,
:param browser: ExecutorBrowser instance providing properties of the
browser that will be tested.
:param server_config: Dictionary of wptserve server configuration of the
form stored in TestEnvironment.external_config
form stored in TestEnvironment.config
:param timeout_multiplier: Multiplier relative to base timeout to use
when setting test timeout.
"""
Expand Down
Expand Up @@ -175,7 +175,11 @@ def wait(self):
# This can happen if there was a crash
return
if socket_timeout:
self.marionette.timeout.script = socket_timeout / 2
try:
self.marionette.timeout.script = socket_timeout / 2
except (socket.error, IOError):
self.logger.debug("Socket closed")
return

self.marionette.switch_to_window(self.runner_handle)
while True:
Expand Down Expand Up @@ -564,7 +568,7 @@ def teardown(self):
self.executor.protocol.marionette.set_context(self.executor.protocol.marionette.CONTEXT_CONTENT)
except Exception as e:
# Ignore errors during teardown
self.logger.warning(traceback.traceback.format_exc(e))
self.logger.warning(traceback.format_exc(e))



Expand Down
Expand Up @@ -18,7 +18,7 @@
RefTestImplementation,
testharness_result_converter,
reftest_result_converter,
WdspecExecutor)
WdspecExecutor, WebDriverProtocol)
from .process import ProcessTestExecutor
from ..browsers.base import browser_command
from ..wpttest import WdspecResult, WdspecSubtestResult
Expand Down Expand Up @@ -286,82 +286,9 @@ def on_output(self, line):
line,
" ".join(self.command))

class ServoWdspecProtocol(Protocol):
def __init__(self, executor, browser):
self.do_delayed_imports()
Protocol.__init__(self, executor, browser)
self.session = None
self.server = None

def setup(self, runner):
try:
self.server = ServoDriverServer(self.logger, binary=self.browser.binary, binary_args=self.browser.binary_args)
self.server.start(block=False)
self.logger.info(
"WebDriver HTTP server listening at %s" % self.server.url)

self.logger.info(
"Establishing new WebDriver session with %s" % self.server.url)
self.session = webdriver.Session(
self.server.host, self.server.port, self.server.base_path)
except Exception:
self.logger.error(traceback.format_exc())
self.executor.runner.send_message("init_failed")
else:
self.executor.runner.send_message("init_succeeded")

def teardown(self):
if self.server is not None:
try:
if self.session.session_id is not None:
self.session.end()
except Exception:
pass
if self.server.is_alive:
self.server.stop()

@property
def is_alive(self):
conn = httplib.HTTPConnection(self.server.host, self.server.port)
conn.request("HEAD", self.server.base_path + "invalid")
res = conn.getresponse()
return res.status == 404

def do_delayed_imports(self):
global pytestrunner, webdriver
from . import pytestrunner
import webdriver

class ServoDriverProtocol(WebDriverProtocol):
server_cls = ServoDriverServer

class ServoWdspecExecutor(WdspecExecutor):
def __init__(self, browser, server_config,
timeout_multiplier=1, close_after_done=True, debug_info=None,
**kwargs):
WdspecExecutor.__init__(self, browser, server_config,
timeout_multiplier=timeout_multiplier,
debug_info=debug_info)
self.protocol = ServoWdspecProtocol(self, browser)

def is_alive(self):
return self.protocol.is_alive

def on_environment_change(self, new_environment):
pass

def do_test(self, test):
timeout = test.timeout * self.timeout_multiplier + extra_timeout

success, data = WdspecRun(self.do_wdspec,
self.protocol.session,
test.path,
timeout).run()

if success:
return self.convert_result(test, data)

return (test.result_cls(*data), [])

def do_wdspec(self, session, path, timeout):
harness_result = ("OK", None)
subtest_results = pytestrunner.run(path, session, timeout=timeout)
return (harness_result, subtest_results)
protocol_cls = ServoDriverProtocol
Expand Up @@ -117,7 +117,7 @@ def record_skip(self, report):
def record(self, test, status, message=None, stack=None):
if stack is not None:
stack = str(stack)
new_result = (test, status, message, stack)
new_result = (test.split("::")[-1], status, message, stack)
self.results.append(new_result)


Expand Down
Expand Up @@ -120,6 +120,13 @@ def start_runner(runner_command_queue, runner_result_queue,
executor_browser_cls, executor_browser_kwargs,
stop_flag):
"""Launch a TestRunner in a new process"""
def log(level, msg):
runner_result_queue.put(("log", (level, {"message": msg})))

def handle_error(e):
log("critical", traceback.format_exc())
stop_flag.set()

try:
browser = executor_browser_cls(**executor_browser_kwargs)
executor = executor_cls(browser, **executor_kwargs)
Expand All @@ -128,10 +135,10 @@ def start_runner(runner_command_queue, runner_result_queue,
runner.run()
except KeyboardInterrupt:
stop_flag.set()
except Exception:
runner_result_queue.put(("log", ("critical", {"message": traceback.format_exc()})))
print >> sys.stderr, traceback.format_exc()
stop_flag.set()
except Exception as e:
handle_error(e)
except Exception as e:
handle_error(e)
finally:
runner_command_queue = None
runner_result_queue = None
Expand Down Expand Up @@ -389,6 +396,7 @@ def wait_event(self):
}
try:
command, data = self.command_queue.get(True, 1)
self.logger.debug("Got command: %r" % command)
except IOError:
self.logger.error("Got IOError from poll")
return RunnerManagerState.restarting(0)
Expand Down Expand Up @@ -676,7 +684,18 @@ def cleanup(self):
self.browser.cleanup()
while True:
try:
self.logger.warning(" ".join(map(repr, self.command_queue.get_nowait())))
cmd, data = self.command_queue.get_nowait()
except Empty:
break
else:
if cmd == "log":
self.log(*data)
else:
self.logger.warning("%r: %r" % (cmd, data))
while True:
try:
cmd, data = self.remote_queue.get_nowait()
self.logger.warning("%r: %r" % (cmd, data))
except Empty:
break

Expand Down
Expand Up @@ -11,10 +11,7 @@

def setup_paths(sync_path):
sys.path.insert(0, os.path.abspath(sync_path))
try:
from tools import localpaths
except ImportError:
from wpt_tools import localpaths
from tools import localpaths

class LoadConfig(Step):
"""Step for loading configuration from the ini file and kwargs."""
Expand Down
Expand Up @@ -195,10 +195,11 @@ def make_command(self):


class ServoDriverServer(WebDriverServer):
def __init__(self, logger, binary="servo", binary_args=None, host="127.0.0.1", port=None):
def __init__(self, logger, binary="servo", binary_args=None, host="127.0.0.1",
port=None, args=None):
env = os.environ.copy()
env["RUST_BACKTRACE"] = "1"
WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env)
WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env, args=args)
self.binary_args = binary_args

def make_command(self):
Expand Down
@@ -1,13 +1,20 @@
import logging
import sys
import threading
from Queue import Empty
from StringIO import StringIO
from multiprocessing import Queue

from mozlog import commandline, stdadapter
from mozlog import commandline, stdadapter, set_default_logger
from mozlog.structuredlog import StructuredLogger

def setup(args, defaults):
logger = commandline.setup_logging("web-platform-tests", args, defaults)
logger = args.pop('log', None)
if logger:
set_default_logger(logger)
StructuredLogger._logger_states["web-platform-tests"] = logger._state
else:
logger = commandline.setup_logging("web-platform-tests", args, defaults)
setup_stdlib_logger()

for name in args.keys():
Expand Down Expand Up @@ -45,7 +52,6 @@ def __call__(self, data):
return self.inner(data)



class LogThread(threading.Thread):
def __init__(self, queue, logger, level):
self.queue = queue
Expand Down Expand Up @@ -120,5 +126,10 @@ def __exit__(self, *args, **kwargs):
self.logging_queue.put(None)
if self.logging_thread is not None:
self.logging_thread.join(10)
while not self.logging_queue.empty():
try:
self.logger.warning("Dropping log message: %r", self.logging_queue.get())
except Exception:
pass
self.logging_queue.close()
self.logger.info("queue closed")
Expand Up @@ -201,7 +201,7 @@ def run_tests(config, test_paths, product, **kwargs):
logger.info("Repetition %i / %i" % (repeat_count, repeat))

unexpected_count = 0
logger.suite_start(test_loader.test_ids, run_info)
logger.suite_start(test_loader.test_ids, name='web-platform-test', run_info=run_info)
for test_type in kwargs["test_types"]:
logger.info("Running %s tests" % test_type)

Expand All @@ -222,7 +222,7 @@ def run_tests(config, test_paths, product, **kwargs):

executor_cls = executor_classes.get(test_type)
executor_kwargs = get_executor_kwargs(test_type,
test_environment.external_config,
test_environment.config,
test_environment.cache_manager,
run_info,
**kwargs)
Expand Down
1 change: 1 addition & 0 deletions WebDriverTests/imported/w3c/webdriver/OWNERS
Expand Up @@ -4,3 +4,4 @@
@lukeis
@mjzffr
@shs96c
@whimboo

0 comments on commit bd4f15a

Please sign in to comment.