From 1d4232b5ae7c147dc1b4f63a757eaa3dd97058fd Mon Sep 17 00:00:00 2001 From: James Graham Date: Thu, 5 Mar 2015 19:29:10 +0000 Subject: [PATCH 1/2] Make the cache manager owned by the TestEnvironment so it can be shut down correctly. This should fix a hang on Windows 8 --- wptrunner/browsers/b2g.py | 5 ++++- wptrunner/browsers/chrome.py | 5 +++-- wptrunner/browsers/firefox.py | 5 +++-- wptrunner/browsers/servo.py | 5 +++-- wptrunner/environment.py | 5 +++++ wptrunner/executors/base.py | 3 +-- wptrunner/wptrunner.py | 1 + 7 files changed, 20 insertions(+), 9 deletions(-) diff --git a/wptrunner/browsers/b2g.py b/wptrunner/browsers/b2g.py index 1679606713eabc..c908c0688f0833 100644 --- a/wptrunner/browsers/b2g.py +++ b/wptrunner/browsers/b2g.py @@ -41,11 +41,14 @@ def browser_kwargs(test_environment, **kwargs): "no_backup": kwargs.get("b2g_no_backup", False)} -def executor_kwargs(test_type, http_server_url, **kwargs): +def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): timeout_multiplier = kwargs["timeout_multiplier"] if timeout_multiplier is None: timeout_multiplier = 2 + if test_type == "reftest": + executor_kwargs["cache_manager"] = cache_manager + executor_kwargs = {"http_server_url": http_server_url, "timeout_multiplier": timeout_multiplier, "close_after_done": False} diff --git a/wptrunner/browsers/chrome.py b/wptrunner/browsers/chrome.py index 92c58e3cb919ef..f99f2db2faf4bd 100644 --- a/wptrunner/browsers/chrome.py +++ b/wptrunner/browsers/chrome.py @@ -28,10 +28,11 @@ def browser_kwargs(**kwargs): "webdriver_binary": kwargs["webdriver_binary"]} -def executor_kwargs(test_type, http_server_url, **kwargs): +def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): from selenium.webdriver import DesiredCapabilities - executor_kwargs = base_executor_kwargs(test_type, http_server_url, **kwargs) + executor_kwargs = base_executor_kwargs(test_type, http_server_url, + cache_manager, **kwargs) executor_kwargs["close_after_done"] = True executor_kwargs["capabilities"] = dict(DesiredCapabilities.CHROME.items() + {"chromeOptions": diff --git a/wptrunner/browsers/firefox.py b/wptrunner/browsers/firefox.py index a11df67508a7c4..bb900aab7bcb3c 100644 --- a/wptrunner/browsers/firefox.py +++ b/wptrunner/browsers/firefox.py @@ -45,8 +45,9 @@ def browser_kwargs(**kwargs): "ca_certificate_path": kwargs["ssl_env"].ca_cert_path()} -def executor_kwargs(test_type, http_server_url, **kwargs): - executor_kwargs = base_executor_kwargs(test_type, http_server_url, **kwargs) +def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): + executor_kwargs = base_executor_kwargs(test_type, http_server_url, + cache_manager, **kwargs) executor_kwargs["close_after_done"] = True return executor_kwargs diff --git a/wptrunner/browsers/servo.py b/wptrunner/browsers/servo.py index afcc0be147d7ef..e8652da29b3c7c 100644 --- a/wptrunner/browsers/servo.py +++ b/wptrunner/browsers/servo.py @@ -30,8 +30,9 @@ def browser_kwargs(**kwargs): "interactive": kwargs["interactive"]} -def executor_kwargs(test_type, http_server_url, **kwargs): - rv = base_executor_kwargs(test_type, http_server_url, **kwargs) +def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): + rv = base_executor_kwargs(test_type, http_server_url, + cache_manager, **kwargs) rv["pause_after_test"] = kwargs["pause_after_test"] return rv diff --git a/wptrunner/environment.py b/wptrunner/environment.py index 7da5c456bd7364..4ef21399219801 100644 --- a/wptrunner/environment.py +++ b/wptrunner/environment.py @@ -4,6 +4,7 @@ import json import os +import multiprocessing import socket import sys import time @@ -97,8 +98,11 @@ def __init__(self, test_paths, ssl_env, pause_after_test, options): self.test_server_port = options.pop("test_server_port", True) self.options = options if options is not None else {} + self.cache_manager = multiprocessing.Manager() + def __enter__(self): self.ssl_env.__enter__() + self.cache_manager.__enter__() self.setup_server_logging() self.setup_routes() self.config = self.load_config() @@ -107,6 +111,7 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): + self.cache_manager.__exit__(exc_type, exc_val, exc_tb) self.ssl_env.__exit__(exc_type, exc_val, exc_tb) for scheme, servers in self.servers.iteritems(): diff --git a/wptrunner/executors/base.py b/wptrunner/executors/base.py index 264cefcec61fe7..2015972f71511a 100644 --- a/wptrunner/executors/base.py +++ b/wptrunner/executors/base.py @@ -13,9 +13,8 @@ here = os.path.split(__file__)[0] -cache_manager = Manager() -def executor_kwargs(test_type, http_server_url, **kwargs): +def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): timeout_multiplier = kwargs["timeout_multiplier"] if timeout_multiplier is None: timeout_multiplier = 1 diff --git a/wptrunner/wptrunner.py b/wptrunner/wptrunner.py index 06bbfd7fbb893b..b1b9704e9ab6f9 100644 --- a/wptrunner/wptrunner.py +++ b/wptrunner/wptrunner.py @@ -158,6 +158,7 @@ def run_tests(config, test_paths, product, **kwargs): executor_cls = executor_classes.get(test_type) executor_kwargs = get_executor_kwargs(test_type, base_server, + test_environment.cache_manager, **kwargs) if executor_cls is None: From 492538df14df76f9bfbcaa2dbef9ec2a7abbe07d Mon Sep 17 00:00:00 2001 From: James Graham Date: Thu, 5 Mar 2015 22:07:19 +0000 Subject: [PATCH 2/2] fixup! Make the cache manager owned by the TestEnvironment so it can be shut down correctly. --- wptrunner/browsers/b2g.py | 7 ++++--- wptrunner/executors/base.py | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wptrunner/browsers/b2g.py b/wptrunner/browsers/b2g.py index c908c0688f0833..93e28b83679676 100644 --- a/wptrunner/browsers/b2g.py +++ b/wptrunner/browsers/b2g.py @@ -46,12 +46,13 @@ def executor_kwargs(test_type, http_server_url, cache_manager, **kwargs): if timeout_multiplier is None: timeout_multiplier = 2 - if test_type == "reftest": - executor_kwargs["cache_manager"] = cache_manager - executor_kwargs = {"http_server_url": http_server_url, "timeout_multiplier": timeout_multiplier, "close_after_done": False} + + if test_type == "reftest": + executor_kwargs["cache_manager"] = cache_manager + return executor_kwargs diff --git a/wptrunner/executors/base.py b/wptrunner/executors/base.py index 2015972f71511a..d10c20e3ea7a5c 100644 --- a/wptrunner/executors/base.py +++ b/wptrunner/executors/base.py @@ -7,7 +7,6 @@ import os import traceback from abc import ABCMeta, abstractmethod -from multiprocessing import Manager from ..testrunner import Stop