Bug 1411611 - Don't wait for the browser after a wpt test if it crashed, r=ato
When setting up waiting for the browser after a wpt test with
--pause-after-test, we try to communicate with a possibly-defunct
browser instance. In this case we should instead just retun since
waiting doesn't make sense.
MozReview-Commit-ID: ILrXOOIagK1
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
@@ -162,19 +162,27 @@ class MarionetteProtocol(Protocol):
self.marionette.switch_to_window(handle)
self.marionette.close()
self.marionette.switch_to_window(runner_handle)
if runner_handle != self.runner_handle:
self.load_runner(protocol)
def wait(self):
- socket_timeout = self.marionette.client.sock.gettimeout()
+ try:
+ socket_timeout = self.marionette.client.sock.gettimeout()
+ except AttributeError:
+ # 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:
try:
self.marionette.execute_async_script("")
except errors.NoSuchWindowException:
# The window closed
break
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/testrunner.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/testrunner.py
@@ -587,17 +587,17 @@ class TestRunnerManager(threading.Thread
return self.after_test_end(test, restart_before_next)
def wait_finished(self):
assert isinstance(self.state, RunnerManagerState.running)
# The browser should be stopped already, but this ensures we do any post-stop
# processing
self.logger.debug("Wait finished")
- return self.after_test_end(True)
+ return self.after_test_end(self.state.test, True)
def after_test_end(self, test, restart):
assert isinstance(self.state, RunnerManagerState.running)
if self.run_count == self.rerun:
test, test_group, group_metadata = self.get_next_test()
if test is None:
return RunnerManagerState.stop()
if test_group != self.state.test_group: