Bug 1361837 - Update restart unit tests to not activate sessionrestore. draft
authorHenrik Skupin <mail@hskupin.info>
Tue, 16 May 2017 07:55:50 +0200
changeset 578751 b5d3955a4a0e1fa1906d3b3e7dd7e22f34515d0e
parent 576745 8a7d0b15595f9916123848ca906f29c62d4914c9
child 628822 d7c500af8fa07154cfc263e65171bc24c65a8580
push id59044
push userbmo:hskupin@gmail.com
push dateTue, 16 May 2017 12:41:00 +0000
bugs1361837, 1363368
milestone55.0a1
Bug 1361837 - Update restart unit tests to not activate sessionrestore. The restart unit tests were using the preference browser.startup.page with its value set to 3. This actually causes sessionrestore to restore the session during the next startup. Given that there is a race condition in retrieving window handles (bug 1363368) it's better to use another default preference which does not trigger this behavior. MozReview-Commit-ID: 4m7qHxgI504
testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py
--- a/testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py
@@ -1,15 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from marionette_driver import errors
 
-from marionette_harness import MarionetteTestCase
+from marionette_harness import MarionetteTestCase, skip
 
 
 class TestServerQuitApplication(MarionetteTestCase):
 
     def tearDown(self):
         if self.marionette.session is None:
             self.marionette.start_session()
 
@@ -67,155 +67,174 @@ class TestServerQuitApplication(Marionet
 class TestQuitRestart(MarionetteTestCase):
 
     def setUp(self):
         MarionetteTestCase.setUp(self)
 
         self.pid = self.marionette.process_id
         self.session_id = self.marionette.session_id
 
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
-        self.marionette.set_pref("browser.startup.page", 3)
+        # Use a preference to check that the restart was successful. If its
+        # value has not been forced, a restart will cause a reset of it.
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
+        self.marionette.set_pref("startup.homepage_welcome_url", "about:")
 
     def tearDown(self):
         # Ensure to restart a session if none exist for clean-up
         if self.marionette.session is None:
             self.marionette.start_session()
 
-        self.marionette.clear_pref("browser.startup.page")
+        self.marionette.clear_pref("startup.homepage_welcome_url")
 
         MarionetteTestCase.tearDown(self)
 
+    def shutdown(self, restart=False):
+        self.marionette.set_context("chrome")
+        self.marionette.execute_script("""
+            Components.utils.import("resource://gre/modules/Services.jsm");
+            let flags = Ci.nsIAppStartup.eAttemptQuit;
+            if (arguments[0]) {
+              flags |= Ci.nsIAppStartup.eRestart;
+            }
+            Services.startup.quit(flags);
+        """, script_args=(restart,))
+
     def test_force_restart(self):
         self.marionette.restart()
         self.assertEqual(self.marionette.session_id, self.session_id)
 
         # A forced restart will cause a new process id
         self.assertNotEqual(self.marionette.process_id, self.pid)
-
-        # If a preference value is not forced, a restart will cause a reset
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
     def test_force_quit(self):
         self.marionette.quit()
 
         self.assertEqual(self.marionette.session, None)
         with self.assertRaisesRegexp(errors.MarionetteException, "Please start a session"):
             self.marionette.get_url()
 
         self.marionette.start_session()
         self.assertNotEqual(self.marionette.session_id, self.session_id)
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_in_app_clean_restart(self):
+        # Test that in_app and clean cannot be used in combination
         with self.assertRaises(ValueError):
             self.marionette.restart(in_app=True, clean=True)
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_in_app_restart(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         self.marionette.restart(in_app=True)
         self.assertEqual(self.marionette.session_id, self.session_id)
 
         # An in-app restart will keep the same process id only on Linux
         if self.marionette.session_capabilities["platformName"] == "linux":
             self.assertEqual(self.marionette.process_id, self.pid)
         else:
             self.assertNotEqual(self.marionette.process_id, self.pid)
 
-        # If a preference value is not forced, a restart will cause a reset
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_in_app_restart_with_callback(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         self.marionette.restart(in_app=True,
                                 callback=lambda: self.shutdown(restart=True))
 
         self.assertEqual(self.marionette.session_id, self.session_id)
 
         # An in-app restart will keep the same process id only on Linux
         if self.marionette.session_capabilities["platformName"] == "linux":
             self.assertEqual(self.marionette.process_id, self.pid)
         else:
             self.assertNotEqual(self.marionette.process_id, self.pid)
 
-        # If a preference value is not forced, a restart will cause a reset
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_in_app_quit(self):
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
+
         self.marionette.quit(in_app=True)
 
         self.assertEqual(self.marionette.session, None)
         with self.assertRaisesRegexp(errors.MarionetteException, "Please start a session"):
             self.marionette.get_url()
 
         self.marionette.start_session()
         self.assertNotEqual(self.marionette.session_id, self.session_id)
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_in_app_quit_with_callback(self):
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
+
         self.marionette.quit(in_app=True, callback=self.shutdown)
         self.assertEqual(self.marionette.session, None)
         with self.assertRaisesRegexp(errors.MarionetteException, "Please start a session"):
             self.marionette.get_url()
 
         self.marionette.start_session()
         self.assertNotEqual(self.marionette.session_id, self.session_id)
-        self.assertNotEqual(
-            self.marionette.get_pref("browser.startup.page"), 3)
+        self.assertNotEqual(self.marionette.get_pref("startup.homepage_welcome_url"),
+                            "about:")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_reset_context_after_quit_by_set_context(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         # Check that we are in content context which is used by default in
         # Marionette
         self.assertNotIn("chrome://", self.marionette.get_url(),
                          "Context does not default to content")
 
         self.marionette.set_context("chrome")
         self.marionette.quit(in_app=True)
         self.assertEqual(self.marionette.session, None)
         self.marionette.start_session()
         self.assertNotIn("chrome://", self.marionette.get_url(),
                          "Not in content context after quit with using_context")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_reset_context_after_quit_by_using_context(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         # Check that we are in content context which is used by default in
         # Marionette
         self.assertNotIn("chrome://", self.marionette.get_url(),
                          "Context does not default to content")
 
         with self.marionette.using_context("chrome"):
             self.marionette.quit(in_app=True)
             self.assertEqual(self.marionette.session, None)
             self.marionette.start_session()
             self.assertNotIn("chrome://", self.marionette.get_url(),
                              "Not in content context after quit with using_context")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_keep_context_after_restart_by_set_context(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         # Check that we are in content context which is used by default in
         # Marionette
         self.assertNotIn("chrome://", self.marionette.get_url(),
                          "Context doesn't default to content")
 
         # restart while we are in chrome context
         self.marionette.set_context("chrome")
@@ -225,20 +244,20 @@ class TestQuitRestart(MarionetteTestCase
         if self.marionette.session_capabilities["platformName"] == "linux":
             self.assertEqual(self.marionette.process_id, self.pid)
         else:
             self.assertNotEqual(self.marionette.process_id, self.pid)
 
         self.assertIn("chrome://", self.marionette.get_url(),
                       "Not in chrome context after a restart with set_context")
 
+    @skip("Bug 1363368 - Wrong window handles after in_app restarts")
     def test_keep_context_after_restart_by_using_context(self):
-        # Bug 1361837
-        if self.marionette.session_capabilities["platformName"] == "darwin":
-            return
+        if self.marionette.session_capabilities["platformName"] != "windows_nt":
+            skip("Bug 1363368 - Wrong window handles after in_app restarts")
 
         # Check that we are in content context which is used by default in
         # Marionette
         self.assertNotIn("chrome://", self.marionette.get_url(),
                          "Context does not default to content")
 
         # restart while we are in chrome context
         with self.marionette.using_context('chrome'):
@@ -247,19 +266,8 @@ class TestQuitRestart(MarionetteTestCase
             # An in-app restart will keep the same process id only on Linux
             if self.marionette.session_capabilities["platformName"] == "linux":
                 self.assertEqual(self.marionette.process_id, self.pid)
             else:
                 self.assertNotEqual(self.marionette.process_id, self.pid)
 
             self.assertIn("chrome://", self.marionette.get_url(),
                           "Not in chrome context after a restart with using_context")
-
-    def shutdown(self, restart=False):
-        self.marionette.set_context("chrome")
-        self.marionette.execute_script("""
-            Components.utils.import("resource://gre/modules/Services.jsm");
-            let flags = Ci.nsIAppStartup.eAttemptQuit;
-            if (arguments[0]) {
-              flags |= Ci.nsIAppStartup.eRestart;
-            }
-            Services.startup.quit(flags);
-        """, script_args=(restart,))