Bug 1414882 - Marionette executor has to use raise_for_port. draft
authorHenrik Skupin <mail@hskupin.info>
Wed, 08 Nov 2017 21:30:38 +0100
changeset 695741 4d7eeeb41488c901fc52e5e62c5162cffc3995c0
parent 695740 dda43afaf669f182e33e1612528c2830833602a3
child 695742 c4a1424cef5f998b6a9987b0bb1200d04e232deb
push id88528
push userbmo:hskupin@gmail.com
push dateThu, 09 Nov 2017 19:48:28 +0000
bugs1414882
milestone58.0a1
Bug 1414882 - Marionette executor has to use raise_for_port. To allow more fine-grained failure details when waiting for a port, raise_for_port has to be used. MozReview-Commit-ID: 5Anfd9yRVY0
testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executormarionette.py
@@ -57,40 +57,37 @@ class MarionetteProtocol(Protocol):
         """Connect to browser via Marionette."""
         Protocol.setup(self, runner)
 
         self.logger.debug("Connecting to Marionette on port %i" % self.marionette_port)
         startup_timeout = marionette.Marionette.DEFAULT_STARTUP_TIMEOUT * self.timeout_multiplier
         self.marionette = marionette.Marionette(host='localhost',
                                                 port=self.marionette_port,
                                                 socket_timeout=None,
-                                                startup_timeout=None)
-
-        # XXX Move this timeout somewhere
-        self.logger.debug("Waiting for Marionette connection")
-        while True:
-            success = self.marionette.wait_for_port(startup_timeout)
-            #When running in a debugger wait indefinitely for firefox to start
-            if success or self.executor.debug_info is None:
-                break
+                                                startup_timeout=startup_timeout)
 
-        session_started = False
-        if success:
-            try:
-                self.logger.debug("Starting Marionette session")
-                self.marionette.start_session()
-            except Exception as e:
-                self.logger.warning("Starting marionette session failed: %s" % e)
-            else:
-                self.logger.debug("Marionette session started")
-                session_started = True
+        try:
+            self.logger.debug("Waiting for Marionette connection")
+            while True:
+                try:
+                    self.marionette.raise_for_port()
+                    break
+                except IOError:
+                    # When running in a debugger wait indefinitely for Firefox to start
+                    if self.executor.debug_info is None:
+                        raise
 
-        if not success or not session_started:
-            self.logger.warning("Failed to connect to Marionette")
+            self.logger.debug("Starting Marionette session")
+            self.marionette.start_session()
+            self.logger.debug("Marionette session started")
+
+        except Exception as e:
+            self.logger.warning("Failed to start a Marionette session: %s" % e)
             self.executor.runner.send_message("init_failed")
+
         else:
             try:
                 self.after_connect()
             except Exception:
                 self.logger.warning("Post-connection steps failed")
                 self.logger.error(traceback.format_exc())
                 self.executor.runner.send_message("init_failed")
             else: