aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/benchmark_runner_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/benchmark_runner_unittest.py')
-rw-r--r--catapult/telemetry/telemetry/benchmark_runner_unittest.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/benchmark_runner_unittest.py b/catapult/telemetry/telemetry/benchmark_runner_unittest.py
new file mode 100644
index 00000000..618b6d56
--- /dev/null
+++ b/catapult/telemetry/telemetry/benchmark_runner_unittest.py
@@ -0,0 +1,116 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from telemetry import benchmark
+from telemetry import benchmark_runner
+from telemetry.testing import stream
+import mock
+
+
+class BenchmarkFoo(benchmark.Benchmark):
+ """ Benchmark Foo for testing."""
+
+ @classmethod
+ def Name(cls):
+ return 'FooBenchmark'
+
+
+class BenchmarkBar(benchmark.Benchmark):
+ """ Benchmark Bar for testing long description line."""
+
+ @classmethod
+ def Name(cls):
+ return 'BarBenchmarkkkkk'
+
+class UnusualBenchmark(benchmark.Benchmark):
+ @classmethod
+ def Name(cls):
+ return 'I have a very unusual name'
+
+
+class BenchmarkRunnerUnittest(unittest.TestCase):
+ def setUp(self):
+ self._stream = stream.TestOutputStream()
+ self._mock_possible_browser = mock.MagicMock()
+ self._mock_possible_browser.browser_type = 'TestBrowser'
+
+ def testPrintBenchmarkListWithNoDisabledBenchmark(self):
+ expected_printed_stream = (
+ 'Available benchmarks for TestBrowser are:\n'
+ ' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
+ ' FooBenchmark Benchmark Foo for testing.\n'
+ 'Pass --browser to list benchmarks for another browser.\n\n')
+ with mock.patch('telemetry.benchmark_runner.decorators') as mock_module:
+ mock_module.IsEnabled.return_value = (True, None)
+ benchmark_runner.PrintBenchmarkList(
+ [BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
+ self.assertEquals(expected_printed_stream, self._stream.output_data)
+
+ def testPrintBenchmarkListWithOneDisabledBenchmark(self):
+ expected_printed_stream = (
+ 'Available benchmarks for TestBrowser are:\n'
+ ' FooBenchmark Benchmark Foo for testing.\n'
+ '\n'
+ 'Disabled benchmarks for TestBrowser are (force run with -d):\n'
+ ' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
+ 'Pass --browser to list benchmarks for another browser.\n\n')
+ with mock.patch('telemetry.benchmark_runner.decorators') as mock_module:
+ def FakeIsEnabled(benchmark_class, _):
+ if benchmark_class is BenchmarkFoo:
+ return True
+ else:
+ return False
+
+ mock_module.IsBenchmarkEnabled = FakeIsEnabled
+ benchmark_runner.PrintBenchmarkList(
+ [BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
+ self.assertEquals(expected_printed_stream, self._stream.output_data)
+
+ def testShouldDisable(self):
+ """Ensure that overridden ShouldDisable class methods are respected."""
+ expected_printed_stream = (
+ 'Available benchmarks for TestBrowser are:\n'
+ ' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
+ '\n'
+ 'Disabled benchmarks for TestBrowser are (force run with -d):\n'
+ ' FooBenchmark Benchmark Foo for testing.\n'
+ 'Pass --browser to list benchmarks for another browser.\n\n')
+ @classmethod
+ def FakeShouldDisable(cls, possible_browser):
+ del possible_browser # unused
+ return cls is BenchmarkFoo
+ BenchmarkFoo.ShouldDisable = FakeShouldDisable
+ BenchmarkBar.ShouldDisable = FakeShouldDisable
+ benchmark_runner.PrintBenchmarkList(
+ [BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
+ self.assertEquals(expected_printed_stream, self._stream.output_data)
+
+ def testShouldDisableComplex(self):
+ """Ensure that browser-dependent ShouldDisable overrides are respected."""
+ expected_printed_stream = (
+ # Expected output for 'TestBrowser':
+ 'Available benchmarks for TestBrowser are:\n'
+ ' FooBenchmark Benchmark Foo for testing.\n'
+ '\n'
+ 'Disabled benchmarks for TestBrowser are (force run with -d):\n'
+ ' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
+ 'Pass --browser to list benchmarks for another browser.\n\n'
+ # Expected output for 'MockBrowser':
+ 'Available benchmarks for MockBrowser are:\n'
+ ' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
+ ' FooBenchmark Benchmark Foo for testing.\n'
+ 'Pass --browser to list benchmarks for another browser.\n\n')
+ @classmethod
+ def FakeShouldDisable(cls, possible_browser):
+ return cls is BenchmarkBar and not 'Mock' in possible_browser.browser_type
+ BenchmarkFoo.ShouldDisable = FakeShouldDisable
+ BenchmarkBar.ShouldDisable = FakeShouldDisable
+ benchmark_runner.PrintBenchmarkList(
+ [BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
+ self._mock_possible_browser.browser_type = 'MockBrowser'
+ benchmark_runner.PrintBenchmarkList(
+ [BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
+ self.assertEquals(expected_printed_stream, self._stream.output_data)