mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
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:
parent
a4b02086a1
commit
505f86c3ab
@ -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',
|
||||
|
Loading…
Reference in New Issue
Block a user