Bug 1275020 - Allow session tests to control life cycle of Firefox; r=maja_zf
MozReview-Commit-ID: Lxyyk6pllbJ
--- a/testing/marionette/harness/session/session_test.py
+++ b/testing/marionette/harness/session/session_test.py
@@ -226,32 +226,42 @@ class CommonTestCase(unittest.TestCase):
def id(self):
# TBPL starring requires that the "test name" field of a failure message
# not differ over time. The test name to be used is passed to
# mozlog via the test id, so this is overriden to maintain
# consistency.
return self.test_name
def setUp(self):
- # Convert the marionette weakref to an object, just for the
- # duration of the test; this is deleted in tearDown() to prevent
- # a persistent circular reference which in turn would prevent
- # proper garbage collection.
self.start_time = time.time()
self.pingServer = PingServer()
self.pingServer.start()
self.marionette = Marionette(bin=self.binary, profile=self.profile)
if self.marionette.session is None:
self.marionette.start_session()
if self.marionette.timeout is not None:
self.marionette.timeouts(self.marionette.TIMEOUT_SEARCH, self.marionette.timeout)
self.marionette.timeouts(self.marionette.TIMEOUT_SCRIPT, self.marionette.timeout)
self.marionette.timeouts(self.marionette.TIMEOUT_PAGE, self.marionette.timeout)
else:
self.marionette.timeouts(self.marionette.TIMEOUT_PAGE, 30000)
+ self.marionette.quit_in_app()
+
+ def start_session(self):
+ self.marionette.start_session(session_id=self.marionette.session_id)
+ self.marionette.reset_timeouts()
+
+ if self.marionette.session.get('processId'):
+ # In some cases Firefox restarts itself by spawning into a new process group.
+ # As long as mozprocess cannot track that behavior (bug 1284864) we assist by
+ # informing about the new process id.
+ self.marionette.instance.runner.process_handler.check_for_detached(self.session['processId'])
+
+ def stop_session(self):
+ self.marionette.quit_in_app()
def tearDown(self):
self.marionette.cleanup()
self.pingServer.stop()
def cleanTest(self):
self._deleteSession()
--- a/testing/marionette/harness/session/tests/test_session.py
+++ b/testing/marionette/harness/session/tests/test_session.py
@@ -11,43 +11,53 @@ from session.session_test import Session
class TestHelloWorld(TC):
def setUp(self):
TC.setUp(self)
def tearDown(self):
TC.tearDown(self)
def test_malformed_packet(self):
+ TC.start_session()
req = ["error", "message", "stacktrace"]
ps = []
for p in [p for i in range(0, len(req) + 1) for p in itertools.permutations(req, i)]:
ps.append(dict((x, None) for x in p))
for p in filter(lambda p: len(p) < 3, ps):
self.assertRaises(KeyError, self.marionette._handle_error, p)
+ TC.stop_session()
def test_known_error_code(self):
+ TC.start_session()
with self.assertRaises(errors.NoSuchElementException):
self.marionette._handle_error(
{"error": errors.NoSuchElementException.code[0],
"message": None,
"stacktrace": None})
+ TC.stop_session()
def test_known_error_status(self):
+ TC.start_session()
with self.assertRaises(errors.NoSuchElementException):
self.marionette._handle_error(
{"error": errors.NoSuchElementException.status,
"message": None,
"stacktrace": None})
+ TC.stop_session()
def test_unknown_error_code(self):
+ TC.start_session()
with self.assertRaises(errors.MarionetteException):
self.marionette._handle_error(
{"error": 123456,
"message": None,
"stacktrace": None})
+ TC.stop_session()
def test_unknown_error_status(self):
+ TC.start_session()
with self.assertRaises(errors.MarionetteException):
self.marionette._handle_error(
{"error": "barbera",
"message": None,
"stacktrace": None})
+ TC.stop_session()