• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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