Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade wptrunner #13614

Merged
merged 4 commits into from Oct 18, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Upgrade wptrunner to 83fb6b727817a7dfeb24763d099aca95bc674b8e.

  • Loading branch information
jdm committed Oct 18, 2016
commit d6318c8ea5dc3c8e249631973a444ba95310c676
@@ -0,0 +1,20 @@
language: python
python: 2.7

sudo: false

cache:
directories:
- $HOME/.cache/pip

env:
- TOXENV="{py27,pypy}-base"
- TOXENV="{py27,pypy}-chrome"
- TOXENV="{py27,pypy}-firefox"
- TOXENV="{py27,pypy}-servo"

install:
- pip install -U tox

script:
- tox
@@ -0,0 +1,15 @@
[pytest]
xfail_strict=true

[tox]
envlist = {py27,pypy}-{base,b2g,chrome,firefox,servo}

[testenv]
deps =
pytest>=2.9
-r{toxinidir}/requirements.txt
chrome: -r{toxinidir}/requirements_chrome.txt
firefox: -r{toxinidir}/requirements_firefox.txt
servo: -r{toxinidir}/requirements_servo.txt

commands = py.test []
@@ -26,8 +26,8 @@
module global scope.
"""

product_list = ["b2g",
"chrome",
product_list = ["chrome",
"edge",
"firefox",
"servo",
"servodriver"]
@@ -0,0 +1,71 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.

from .base import Browser, ExecutorBrowser, require_arg
from ..webdriver_server import EdgeDriverServer
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorselenium import (SeleniumTestharnessExecutor,
SeleniumRefTestExecutor)

__wptrunner__ = {"product": "edge",
"check_args": "check_args",
"browser": "EdgeBrowser",
"executor": {"testharness": "SeleniumTestharnessExecutor",
"reftest": "SeleniumRefTestExecutor"},
"browser_kwargs": "browser_kwargs",
"executor_kwargs": "executor_kwargs",
"env_options": "env_options"}


def check_args(**kwargs):
require_arg(kwargs, "webdriver_binary")

def browser_kwargs(**kwargs):
return {"webdriver_binary": kwargs["webdriver_binary"]}

def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
**kwargs):
from selenium.webdriver import DesiredCapabilities

executor_kwargs = base_executor_kwargs(test_type, server_config,
cache_manager, **kwargs)
executor_kwargs["close_after_done"] = True
executor_kwargs["capabilities"] = dict(DesiredCapabilities.EDGE.items())
return executor_kwargs

def env_options():
return {"host": "web-platform.test",
"bind_hostname": "true",
"supports_debugger": False}

class EdgeBrowser(Browser):
used_ports = set()

def __init__(self, logger, webdriver_binary):
Browser.__init__(self, logger)
self.server = EdgeDriverServer(self.logger, binary=webdriver_binary)
self.webdriver_host = "localhost"
self.webdriver_port = self.server.port

def start(self):
print self.server.url
self.server.start()

def stop(self):
self.server.stop()

def pid(self):
return self.server.pid

def is_alive(self):
# TODO(ato): This only indicates the server is alive,
# and doesn't say anything about whether a browser session
# is active.
return self.server.is_alive()

def cleanup(self):
self.stop()

def executor_browser(self):
return ExecutorBrowser, {"webdriver_url": self.server.url}
@@ -3,6 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import os
import platform
import subprocess
import sys

@@ -128,10 +129,16 @@ def start(self):
self.profile.set_preferences({"marionette.defaultPrefs.enabled": True,
"marionette.defaultPrefs.port": self.marionette_port,
"dom.disable_open_during_load": False,
"network.dns.localDomains": ",".join(hostnames)})
"network.dns.localDomains": ",".join(hostnames),
"places.history.enabled": False})
if self.e10s:
self.profile.set_preferences({"browser.tabs.remote.autostart": True})

# Bug 1262954: winxp + e10s, disable hwaccel
if (self.e10s and platform.system() in ("Windows", "Microsoft") and
'5.1' in platform.version()):
self.profile.set_preferences({"layers.acceleration.disabled": True})

if self.ca_certificate_path is not None:
self.setup_ssl()

@@ -6,15 +6,16 @@

from .base import NullBrowser, ExecutorBrowser, require_arg
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor
from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor, ServoWdspecExecutor

here = os.path.join(os.path.split(__file__)[0])

__wptrunner__ = {"product": "servo",
"check_args": "check_args",
"browser": "ServoBrowser",
"executor": {"testharness": "ServoTestharnessExecutor",
"reftest": "ServoRefTestExecutor"},
"reftest": "ServoRefTestExecutor",
"wdspec": "ServoWdspecExecutor"},
"browser_kwargs": "browser_kwargs",
"executor_kwargs": "executor_kwargs",
"env_options": "env_options",
@@ -17,11 +17,11 @@

errors = None
marionette = None
pytestrunner = None
webdriver = None

here = os.path.join(os.path.split(__file__)[0])

from . import pytestrunner
from .base import (ExecutorException,
Protocol,
RefTestExecutor,
@@ -41,7 +41,7 @@


def do_delayed_imports():
global errors, marionette, webdriver
global errors, marionette

# Marionette client used to be called marionette, recently it changed
# to marionette_driver for unfathomable reasons
@@ -51,8 +51,6 @@ def do_delayed_imports():
except ImportError:
from marionette_driver import marionette, errors

import webdriver


class MarionetteProtocol(Protocol):
def __init__(self, executor, browser):
@@ -292,7 +290,7 @@ def is_alive(self):
class ExecuteAsyncScriptRun(object):
def __init__(self, logger, func, marionette, url, timeout):
self.logger = logger
self.result = None
self.result = (None, None)
self.marionette = marionette
self.func = func
self.url = url
@@ -323,11 +321,9 @@ def run(self):
wait_timeout = None

flag = self.result_flag.wait(wait_timeout)
if self.result is None:
if self.result[1] is None:
self.logger.debug("Timed out waiting for a result")
assert not flag
self.result = False, ("EXTERNAL-TIMEOUT", None)

return self.result

def _run(self):
@@ -409,7 +405,8 @@ def do_testharness(self, marionette, url, timeout):
"timeout": timeout_ms,
"explicit_timeout": timeout is None}

return marionette.execute_async_script(script, new_sandbox=False)
rv = marionette.execute_async_script(script, new_sandbox=False)
return rv


class MarionetteRefTestExecutor(RefTestExecutor):
@@ -487,7 +484,7 @@ def _screenshot(self, marionette, url, timeout):
class WdspecRun(object):
def __init__(self, func, session, path, timeout):
self.func = func
self.result = None
self.result = (None, None)
self.session = session
self.path = path
self.timeout = timeout
@@ -504,8 +501,7 @@ def run(self):
executor.start()

flag = self.result_flag.wait(self.timeout)
if self.result is None:
assert not flag
if self.result[1] is None:
self.result = False, ("EXTERNAL-TIMEOUT", None)

return self.result
@@ -528,6 +524,7 @@ def _run(self):
class MarionetteWdspecExecutor(WdspecExecutor):
def __init__(self, browser, server_config, webdriver_binary,
timeout_multiplier=1, close_after_done=True, debug_info=None):
self.do_delayed_imports()
WdspecExecutor.__init__(self, browser, server_config,
timeout_multiplier=timeout_multiplier,
debug_info=debug_info)
@@ -557,3 +554,8 @@ def do_wdspec(self, session, path, timeout):
harness_result = ("OK", None)
subtest_results = pytestrunner.run(path, session, timeout=timeout)
return (harness_result, subtest_results)

def do_delayed_imports(self):
global pytestrunner, webdriver
from . import pytestrunner
import webdriver
@@ -22,20 +22,21 @@
strip_server)
from ..testrunner import Stop


here = os.path.join(os.path.split(__file__)[0])

webdriver = None
exceptions = None
RemoteConnection = None

extra_timeout = 5

def do_delayed_imports():
global webdriver
global exceptions
global RemoteConnection
from selenium import webdriver
from selenium.common import exceptions

from selenium.webdriver.remote.remote_connection import RemoteConnection

class SeleniumProtocol(Protocol):
def __init__(self, executor, browser, capabilities, **kwargs):
@@ -53,8 +54,9 @@ def setup(self, runner):

session_started = False
try:
self.webdriver = webdriver.Remote(
self.url, desired_capabilities=self.capabilities)
self.webdriver = webdriver.Remote(command_executor=RemoteConnection(self.url.strip("/"),
resolve_ip=False),
desired_capabilities=self.capabilities)
except:
self.logger.warning(
"Connecting to Selenium failed:\n%s" % traceback.format_exc())
@@ -231,17 +233,7 @@ def is_alive(self):
def do_test(self, test):
self.logger.info("Test requires OS-level window focus")

if self.close_after_done and self.has_window:
self.protocol.webdriver.close()
self.protocol.webdriver.switch_to_window(
self.protocol.webdriver.window_handles[-1])
self.has_window = False

if not self.has_window:
self.protocol.webdriver.execute_script(self.script)
self.protocol.webdriver.switch_to_window(
self.protocol.webdriver.window_handles[-1])
self.has_window = True
self.protocol.webdriver.set_window_size(600, 600)

result = self.implementation.run_test(test)

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.