Skip to content

Commit 7cf0eb5

Browse files
authored
Revert "Do not block waiting for chromedriver to start up (#46126)" (#46739)
We are seeing "connection refused" error on Safari and Chrome Mac and Windows. Revert for now and we will see if we can have a better way to do that. This reverts commit f9487b0. This reverts commit d6b7c6e.
1 parent ed9e930 commit 7cf0eb5

File tree

4 files changed

+35
-29
lines changed

4 files changed

+35
-29
lines changed

tools/wptrunner/wptrunner/browsers/base.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
import os
44
import platform
55
import socket
6+
import time
7+
import traceback
68
from abc import ABCMeta, abstractmethod
79
from typing import cast, Any, List, Mapping, Optional, Tuple, Type
810

911
import mozprocess
1012
from mozdebug import DebuggerInfo
1113
from mozlog.structuredlog import StructuredLogger
1214

15+
from ..environment import wait_for_service
1316
from ..testloader import GroupMetadata
1417
from ..wptcommandline import require_arg # noqa: F401
1518
from ..wpttest import Test
@@ -316,6 +319,7 @@ def __init__(self,
316319
self.env = os.environ.copy() if env is None else env
317320
self.webdriver_args = webdriver_args if webdriver_args is not None else []
318321

322+
self.init_deadline: Optional[float] = None
319323
self._output_handler: Optional[OutputHandler] = None
320324
self._cmd = None
321325
self._proc: Optional[mozprocess.ProcessHandler] = None
@@ -326,6 +330,7 @@ def make_command(self) -> List[str]:
326330
return [self.webdriver_binary] + self.webdriver_args
327331

328332
def start(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
333+
self.init_deadline = time.time() + self.init_timeout
329334
try:
330335
self._run_server(group_metadata, **kwargs)
331336
except KeyboardInterrupt:
@@ -340,6 +345,7 @@ def create_output_handler(self, cmd: List[str]) -> OutputHandler:
340345
return OutputHandler(self.logger, cmd)
341346

342347
def _run_server(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
348+
assert self.init_deadline is not None
343349
cmd = self.make_command()
344350
self._output_handler = self.create_output_handler(cmd)
345351

@@ -359,7 +365,21 @@ def _run_server(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
359365
raise
360366
self._output_handler.after_process_start(self._proc.pid)
361367

362-
self._output_handler.start(group_metadata=group_metadata, **kwargs)
368+
try:
369+
wait_for_service(
370+
self.logger,
371+
self.host,
372+
self.port,
373+
timeout=self.init_deadline - time.time(),
374+
server_process=self._proc,
375+
)
376+
except Exception:
377+
self.logger.error(
378+
"WebDriver was not accessible "
379+
f"within the timeout:\n{traceback.format_exc()}")
380+
raise
381+
finally:
382+
self._output_handler.start(group_metadata=group_metadata, **kwargs)
363383
self.logger.debug("_run complete")
364384

365385
def stop(self, force: bool = False) -> bool:

tools/wptrunner/wptrunner/browsers/chrome_ios.py

-18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# mypy: allow-untyped-defs
22

3-
import traceback
43
from .base import WebDriverBrowser, require_arg
54
from .base import get_timeout_multiplier # noqa: F401
6-
from ..environment import wait_for_service
75
from ..executors import executor_kwargs as base_executor_kwargs
86
from ..executors.base import WdspecExecutor # noqa: F401
97
from ..executors.executorwebdriver import (WebDriverCrashtestExecutor, # noqa: F401
@@ -60,19 +58,3 @@ class ChromeiOSBrowser(WebDriverBrowser):
6058
def make_command(self):
6159
return ([self.webdriver_binary, f"--port={self.port}"] +
6260
self.webdriver_args)
63-
64-
def start(self, group_metadata, **kwargs):
65-
super().start(group_metadata, **kwargs)
66-
try:
67-
wait_for_service(
68-
self.logger,
69-
self.host,
70-
self.port,
71-
timeout=self.init_timeout,
72-
server_process=self._proc,
73-
)
74-
except Exception:
75-
self.logger.error(
76-
"WebDriver was not accessible "
77-
f"within the timeout:\n{traceback.format_exc()}")
78-
raise

tools/wptrunner/wptrunner/browsers/firefox.py

-2
Original file line numberDiff line numberDiff line change
@@ -910,7 +910,6 @@ def __init__(self, logger, binary, package_name, prefs_root, webdriver_binary, w
910910
self.binary = binary
911911
self.package_name = package_name
912912
self.webdriver_binary = webdriver_binary
913-
self.init_deadline = None
914913

915914
self.stackfix_dir = stackfix_dir
916915
self.symbols_path = symbols_path
@@ -959,7 +958,6 @@ def create_output_handler(self, cmd):
959958

960959
def start(self, group_metadata, **kwargs):
961960
self.leak_report_file = setup_leak_report(self.leak_check, self.profile, self.env)
962-
self.init_deadline = time.time() + self.init_timeout
963961
super().start(group_metadata, **kwargs)
964962

965963
def stop(self, force=False):

tools/wptrunner/wptrunner/tests/browsers/test_base.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import sys
44
from os.path import dirname, join
5+
from unittest import mock
56

67
import pytest
78

@@ -29,14 +30,19 @@ def test_logging_immediate_exit():
2930
handler = MozLogTestHandler()
3031
logger.add_handler(handler)
3132

32-
browser = base.WebDriverBrowser(
33-
logger, webdriver_binary="echo", webdriver_args=["sample output"]
34-
)
35-
try:
36-
browser.start(group_metadata={})
37-
finally:
38-
# Ensure the `echo` process actually exits
39-
browser._proc.wait()
33+
class CustomException(Exception):
34+
pass
35+
36+
with mock.patch.object(base, "wait_for_service", side_effect=CustomException):
37+
browser = base.WebDriverBrowser(
38+
logger, webdriver_binary="echo", webdriver_args=["sample output"]
39+
)
40+
try:
41+
with pytest.raises(CustomException):
42+
browser.start(group_metadata={})
43+
finally:
44+
# Ensure the `echo` process actually exits
45+
browser._proc.wait()
4046

4147
process_output_actions = [
4248
data for data in handler.items if data["action"] == "process_output"

0 commit comments

Comments
 (0)