Index: tools/telemetry/telemetry/page/page_measurement_unittest_base.py |
diff --git a/tools/telemetry/telemetry/page/page_measurement_unittest_base.py b/tools/telemetry/telemetry/page/page_measurement_unittest_base.py |
index 35c3db806ca6e6877fc6651d1f9168357acf58a6..b1e70ebb1c6c74f072c606fd27c6f42175abccae 100644 |
--- a/tools/telemetry/telemetry/page/page_measurement_unittest_base.py |
+++ b/tools/telemetry/telemetry/page/page_measurement_unittest_base.py |
@@ -51,3 +51,35 @@ class PageMeasurementUnitTestBase(unittest.TestCase): |
page_runner.ProcessCommandLineArgs(temp_parser, options) |
measurement.ProcessCommandLineArgs(temp_parser, options) |
return page_runner.Run(measurement, ps, expectations, options) |
+ |
+ def TestTracingCleanedUp(self, measurement_class, options=None): |
+ ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html') |
+ start_tracing_called = [False] |
+ tracing_closed_called = [False] |
+ |
+ class BuggyMeasurement(measurement_class): |
+ def __init__(self, *args, **kwargs): |
+ measurement_class.__init__(self, *args, **kwargs) |
+ |
+ # Inject fake tracing methods to browser |
+ def TabForPage(self, page, browser): |
+ ActualStartTracing = browser.StartTracing |
+ def FakeStartTracing(*args, **kwargs): |
+ ActualStartTracing(*args, **kwargs) |
+ start_tracing_called[0] = True |
+ raise Exception('Intentional exception') |
+ browser.StartTracing = FakeStartTracing |
+ |
+ ActualStopTracing = browser.StopTracing |
+ def FakeStopTracing(*args, **kwargs): |
+ ActualStopTracing(*args, **kwargs) |
+ tracing_closed_called[0] = True |
+ browser.StopTracing = FakeStopTracing |
+ |
+ return measurement_class.TabForPage(self, page, browser) |
+ |
+ measurement = BuggyMeasurement() |
+ self.RunMeasurement(measurement, ps, options=options) |
+ assert start_tracing_called[0], ("%s measurement doesn't start tracing" % |
+ measurement_class) |
+ self.assertTrue(tracing_closed_called[0]) |