From c3f9d66a33900be4a0201f24a993a7b4728d6a24 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Fri, 11 Aug 2017 12:11:14 +0200 Subject: [PATCH] Backed out changeset 2cf4290c2eef (bug 1388424) for failing marionette's test_quit_restart.py TestQuitRestart.test_force_clean_restart. r=backout --- .../client/marionette_driver/marionette.py | 26 +++++-------------- testing/marionette/driver.js | 5 ++-- .../tests/unit/test_session.py | 7 +++++ 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/testing/marionette/client/marionette_driver/marionette.py b/testing/marionette/client/marionette_driver/marionette.py index efbb663cd00e..fb689d029ede 100644 --- a/testing/marionette/client/marionette_driver/marionette.py +++ b/testing/marionette/client/marionette_driver/marionette.py @@ -1126,6 +1126,7 @@ class Marionette(object): "on Gecko instances launched by Marionette") context = self._send_message("getContext", key="value") + session_id = self.session_id if in_app: if clean: @@ -1154,7 +1155,7 @@ class Marionette(object): self.instance.restart(clean=clean) self.raise_for_port(timeout=self.DEFAULT_STARTUP_TIMEOUT) - self.start_session() + self.start_session(session_id=session_id) # Restore the context as used before the restart self.set_context(context) @@ -1174,7 +1175,7 @@ class Marionette(object): return "{0}{1}".format(self.baseurl, relative_url) @do_process_check - def start_session(self, capabilities=None, timeout=60): + def start_session(self, capabilities=None, session_id=None, timeout=60): """Create a new WebDriver session. This method must be called before performing any other action. @@ -1186,6 +1187,8 @@ class Marionette(object): or requriedCapabilities), and only recognises extension capabilities that are specific to Marionette. :param timeout: Timeout in seconds for the server to be ready. + :param session_id: Unique identifier for the session. If no + session ID is passed in then one will be generated. :returns: A dictionary of the capabilities offered. @@ -1209,24 +1212,7 @@ class Marionette(object): self.wait_for_port(timeout=timeout) self.protocol, _ = self.client.connect() - body = capabilities - if body is None: - body = {} - - # Duplicate capabilities object so the body we end up - # sending looks like this: - # - # {acceptInsecureCerts: true, {capabilities: {acceptInsecureCerts: true}}} - # - # We do this because geckodriver sends the capabilities at the - # top-level, and after bug 1388424 removed support for overriding - # the session ID, we also do this with this client. However, - # because this client is used with older Firefoxen (through upgrade - # tests et al.) we need to preserve backwards compatibility until - # Firefox 60. - if "capabilities" not in body and capabilities is not None: - body["capabilities"] = dict(capabilities) - + body = {"capabilities": capabilities, "sessionId": session_id} resp = self._send_message("newSession", body) self.session_id = resp["sessionId"] diff --git a/testing/marionette/driver.js b/testing/marionette/driver.js index 56a764cd2259..37bdc0d0742f 100644 --- a/testing/marionette/driver.js +++ b/testing/marionette/driver.js @@ -772,11 +772,12 @@ GeckoDriver.prototype.newSession = function* (cmd, resp) { throw new SessionNotCreatedError("Maximum number of active sessions"); } - this.sessionID = element.generateUUID(); + this.sessionID = cmd.parameters.sessionId || element.generateUUID(); this.newSessionCommandId = cmd.id; try { - this.capabilities = session.Capabilities.fromJSON(cmd.parameters); + this.capabilities = session.Capabilities.fromJSON( + cmd.parameters.capabilities); } catch (e) { throw new SessionNotCreatedError(e); } diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_session.py b/testing/marionette/harness/marionette_harness/tests/unit/test_session.py index b181beb9b3ac..1676df51fa46 100644 --- a/testing/marionette/harness/marionette_harness/tests/unit/test_session.py +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_session.py @@ -36,6 +36,13 @@ class TestSession(MarionetteTestCase): self.assertTrue(self.marionette.session_id is not None) self.assertTrue(isinstance(self.marionette.session_id, unicode)) + def test_set_the_session_id(self): + # Sends newSession + self.marionette.start_session(session_id="ILoveCheese") + + self.assertEqual(self.marionette.session_id, "ILoveCheese") + self.assertTrue(isinstance(self.marionette.session_id, unicode)) + def test_session_already_started(self): self.marionette.start_session() self.assertTrue(isinstance(self.marionette.session_id, unicode))