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 #12223

Closed
wants to merge 8 commits into from

Upgrade wptrunner to 18c1cf0.

  • Loading branch information
jdm committed Jul 4, 2016
commit d5025a92ce16a26940ec59f07456ea505c93f781
@@ -0,0 +1,26 @@
language: python
python: 2.7

sudo: false

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

env:
- TOXENV=py27-base
- TOXENV=py27-b2g
- TOXENV=py27-chrome
- TOXENV=py27-firefox
- TOXENV=py27-servo
- TOXENV=pypy-base
- TOXENV=pypy-b2g
- TOXENV=pypy-chrome
- TOXENV=pypy-firefox
- TOXENV=pypy-servo

install:
- pip install -U tox

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

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

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

commands = py.test []
@@ -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",

This file was deleted.

@@ -292,7 +292,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 +323,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 +407,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 +486,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 +503,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
@@ -4,11 +4,13 @@

import base64
import hashlib
import httplib
import json
import os
import subprocess
import tempfile
import threading
import traceback
import urlparse
import uuid
from collections import defaultdict
@@ -19,15 +21,23 @@
Protocol,
RefTestImplementation,
testharness_result_converter,
reftest_result_converter)
reftest_result_converter,
WdspecExecutor)
from .process import ProcessTestExecutor
from ..browsers.base import browser_command
render_arg = None
from ..wpttest import WdspecResult, WdspecSubtestResult
from ..webdriver_server import ServoDriverServer
from .executormarionette import WdspecRun
from . import pytestrunner

render_arg = None
webdriver = None
extra_timeout = 5 # seconds

def do_delayed_imports():
global render_arg
global render_arg, webdriver
from ..browsers.servo import render_arg
import webdriver

hosts_text = """127.0.0.1 web-platform.test
127.0.0.1 www.web-platform.test
@@ -275,3 +285,77 @@ def on_output(self, line):
self.logger.process_output(self.proc.pid,
line,
" ".join(self.command))

class ServoWdspecProtocol(Protocol):
def __init__(self, executor, browser):
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, render_backend=self.browser.render_backend)
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

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)
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.