Bug 1411611 - Don't wait for the browser after a wpt test if it crashed, r=ato draft
authorJames Graham <james@hoppipolla.co.uk>
Tue, 24 Oct 2017 17:53:53 +0100
changeset 686165 f272be436bbbdd602817d7d76f3afdf03ff87460
parent 686043 e56ae7213756d93da1c1c72805c8f8b8ddb9dcdd
child 737316 b96f8ecf89daf19f3c9fe3da7c9301d8a03f6de3
push id86113
push userbmo:james@hoppipolla.co.uk
push dateWed, 25 Oct 2017 14:45:08 +0000
reviewersato
bugs1411611
milestone58.0a1
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
testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
testing/web-platform/tests/tools/wptrunner/wptrunner/testrunner.py
--- 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: