1# Copyright 2023 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from __future__ import annotations 6 7import datetime as dt 8from typing import Optional 9from unittest import mock 10 11from crossbench.benchmarks.manual.manual_benchmark import ManualBenchmark 12from crossbench.env import HostEnvironmentConfig, ValidationMode 13from crossbench.runner.runner import Runner 14from tests import test_helper 15from tests.crossbench.benchmarks.helper import BaseBenchmarkTestCase 16 17 18class TestManualBenchmark(BaseBenchmarkTestCase): 19 20 @property 21 def benchmark_cls(self): 22 return ManualBenchmark 23 24 def test_run_default(self): 25 with mock.patch("builtins.input", lambda *args: "y"): 26 self._test_run() 27 for browser in self.browsers: 28 urls = self.filter_splashscreen_urls(browser.url_list) 29 # No automatic URLS. 30 self.assertFalse(urls) 31 32 def test_run_auto_start(self): 33 with mock.patch("builtins.input", lambda *args: "y"): 34 self._test_run(start_after=dt.timedelta(seconds=0.2)) 35 for browser in self.browsers: 36 urls = self.filter_splashscreen_urls(browser.url_list) 37 # No automatic URLS. 38 self.assertFalse(urls) 39 40 def test_run_custom_duration(self): 41 with mock.patch("builtins.input", lambda *args: "y"): 42 self._test_run(run_for=dt.timedelta(seconds=0.2)) 43 for browser in self.browsers: 44 urls = self.filter_splashscreen_urls(browser.url_list) 45 # No automatic URLS. 46 self.assertFalse(urls) 47 48 def _test_run(self, 49 start_after: Optional[dt.timedelta] = None, 50 run_for: Optional[dt.timedelta] = None): 51 repetitions = 3 52 benchmark = ManualBenchmark(start_after, run_for) # pytype: disable=not-instantiable 53 self.assertTrue(len(benchmark.describe()) > 0) 54 runner = Runner( 55 self.out_dir, 56 self.browsers, 57 benchmark, 58 env_config=HostEnvironmentConfig(), 59 env_validation_mode=ValidationMode.SKIP, 60 platform=self.platform, 61 repetitions=repetitions, 62 throw=True) 63 64 with self.assertLogs(level="INFO") as cm: 65 runner.run() 66 output = "\n".join(cm.output) 67 self.assertIn("Starting Manual Benchmark", output) 68 69 for browser in self.browsers: 70 urls = self.filter_splashscreen_urls(browser.url_list) 71 # No automatic URLS. 72 self.assertFalse(urls) 73 74 75del BaseBenchmarkTestCase 76 77if __name__ == "__main__": 78 test_helper.run_pytest(__file__) 79