Bug 1223277 - Improve Marionette unit tests for delayed crashes. r=ato

In case of delayed shutdowns of Firefox we currently miss to detect the
created minidump files because the mozcrash mock gets removed right after
the crash causing command has been executed. To prevent this the mock
has to be active from setUp until tearDown.

Also we should not silently ignore the case that the minidump folder
cannot be deleted. Because it means no crash happened, or the folder
has not been created.

MozReview-Commit-ID: KncJ5BHi7M5

--HG--
extra : rebase_source : 63c947b0a7fe16de0eed19a8e0359721d9f4051d
This commit is contained in:
Henrik Skupin 2017-06-22 11:45:10 +02:00
parent a4b02086a1
commit 505f86c3ab

View File

@ -31,7 +31,7 @@ class MockMozCrash(object):
def check_for_crashes(self, dump_directory, *args, **kwargs):
minidump_files = glob.glob('{}/*.dmp'.format(dump_directory))
shutil.rmtree(dump_directory, ignore_errors=True)
shutil.rmtree(dump_directory)
if self.crash_reporter_enabled:
return len(minidump_files)
@ -50,12 +50,18 @@ class BaseCrashTestCase(MarionetteTestCase):
def setUp(self):
super(BaseCrashTestCase, self).setUp()
self.mozcrash_mock = MockMozCrash(self.marionette)
# Monkey patch mozcrash to avoid crash info output only for our triggered crashes.
self.mozcrash = runner.mozcrash
runner.mozcrash = MockMozCrash(self.marionette)
self.crash_count = self.marionette.crashed
self.pid = self.marionette.process_id
self.remote_uri = self.marionette.absolute_url("javascriptPage.html")
def tearDown(self):
# Replace mockup with original mozcrash instance
runner.mozcrash = self.mozcrash
self.marionette.crashed = self.crash_count
super(BaseCrashTestCase, self).tearDown()
@ -64,15 +70,11 @@ class BaseCrashTestCase(MarionetteTestCase):
context = 'chrome' if chrome else 'content'
sandbox = None if chrome else 'system'
# Monkey patch mozcrash to avoid crash info output only for our triggered crashes.
mozcrash = runner.mozcrash
runner.mozcrash = self.mozcrash_mock
socket_timeout = self.marionette.client.socket_timeout
self.marionette.client.socket_timeout = self.socket_timeout
self.marionette.set_context(context)
try:
self.marionette.client.socket_timeout = self.socket_timeout
self.marionette.execute_script("""
// Copied from crash me simple
Components.utils.import("resource://gre/modules/ctypes.jsm");
@ -83,7 +85,6 @@ class BaseCrashTestCase(MarionetteTestCase):
var crash = badptr.contents;
""", sandbox=sandbox)
finally:
runner.mozcrash = mozcrash
self.marionette.client.socket_timeout = socket_timeout
@ -100,13 +101,10 @@ class TestCrash(BaseCrashTestCase):
self.marionette.start_session()
self.assertNotEqual(self.marionette.process_id, self.pid)
# TODO: Bug 1314594 - Causes a hang for the communication between the
# chrome and frame script.
# self.marionette.get_url()
self.marionette.get_url()
@run_if_e10s("Content crashes only exist in e10s mode")
def test_crash_content_process(self):
# If e10s is disabled the chrome process crashes
self.marionette.navigate(self.remote_uri)
self.assertRaisesRegexp(IOError, 'Content process crashed',