• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2024 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 typing import Iterable
6
7from crossbench.runner.groups.browsers import BrowsersRunGroup
8from crossbench.runner.groups.cache_temperatures import \
9    CacheTemperaturesRunGroup
10from crossbench.runner.groups.repetitions import RepetitionsRunGroup
11from crossbench.runner.groups.stories import StoriesRunGroup
12from crossbench.runner.run import Run
13from tests import test_helper
14from tests.crossbench.runner.groups.base import BaseRunGroupTestCase
15from tests.crossbench.runner.helper import MockRun
16
17
18class RunGroupTestCase(BaseRunGroupTestCase):
19
20  def create_groups(self, runs: Iterable[Run], throw: bool = True):
21    cache_temperatures_groups = CacheTemperaturesRunGroup.groups(
22        runs, throw=throw)
23    repetitions_groups = RepetitionsRunGroup.groups(cache_temperatures_groups,
24                                                    throw)
25    story_groups = StoriesRunGroup.groups(repetitions_groups, throw)
26    browser_group = BrowsersRunGroup(story_groups, throw)
27    return browser_group
28
29  def test_create_empty(self):
30    with self.assertRaises(ValueError):
31      self.create_groups([])
32
33  def test_create_single(self):
34    session = self.default_session(throw=True)
35    run_0 = MockRun(self.runner, session, "story 0")
36    browser_group = self.create_groups([run_0])
37    self.assertListEqual(list(browser_group.runs), [run_0])
38    story_groups = list(browser_group.story_groups)
39    self.assertEqual(len(story_groups), 1)
40    self.assertListEqual(list(story_groups[0].runs), [run_0])
41    repetitions_group = list(story_groups[0].repetitions_groups)
42    self.assertEqual(len(repetitions_group), 1)
43
44  def test_single_story_multiple_repetitions(self):
45    session = self.default_session(throw=True)
46    run_0 = MockRun(self.runner, session, "story 0", repetition=0)
47    run_1 = MockRun(self.runner, session, "story 0", repetition=1)
48    browser_group = self.create_groups([run_0, run_1])
49    self.assertListEqual(list(browser_group.runs), [run_0, run_1])
50    story_groups = list(browser_group.story_groups)
51    self.assertEqual(len(story_groups), 1)
52    repetitions_groups = list(story_groups[0].repetitions_groups)
53    self.assertEqual(len(repetitions_groups), 1)
54    repetitions_group = repetitions_groups[0]
55    cache_temp_groups = list(repetitions_group.cache_temperatures_groups)
56    self.assertEqual(len(cache_temp_groups), 2)
57    self.assertListEqual(list(cache_temp_groups[0].runs), [run_0])
58    self.assertListEqual(list(cache_temp_groups[1].runs), [run_1])
59    cache_temp_repetitions_group = list(
60        repetitions_group.cache_temperature_repetitions_groups)
61    self.assertEqual(len(cache_temp_repetitions_group), 1)
62    self.assertListEqual(
63        list(cache_temp_repetitions_group[0].runs), [run_0, run_1])
64    self.assertEqual(cache_temp_repetitions_group[0].cache_temperature,
65                     "default")
66
67  def test_single_story_multiple_repetitions_cache_temperatures(self):
68    session = self.default_session(throw=True)
69    run_0 = MockRun(
70        self.runner, session, "story 0", repetition=0, temperature="cold")
71    run_1 = MockRun(
72        self.runner, session, "story 0", repetition=0, temperature="warm")
73    run_2 = MockRun(
74        self.runner, session, "story 0", repetition=1, temperature="cold")
75    run_3 = MockRun(
76        self.runner, session, "story 0", repetition=1, temperature="warm")
77
78    browser_group = self.create_groups([run_0, run_1, run_2, run_3])
79    self.assertListEqual(list(browser_group.runs), [run_0, run_1, run_2, run_3])
80    story_groups = list(browser_group.story_groups)
81    self.assertEqual(len(story_groups), 1)
82    repetitions_groups = list(story_groups[0].repetitions_groups)
83    self.assertEqual(len(repetitions_groups), 1)
84    repetitions_group = repetitions_groups[0]
85    cache_temp_groups = list(repetitions_group.cache_temperatures_groups)
86    self.assertEqual(len(cache_temp_groups), 2)
87    self.assertListEqual(list(cache_temp_groups[0].runs), [run_0, run_1])
88    self.assertListEqual(list(cache_temp_groups[1].runs), [run_2, run_3])
89    cache_temp_repetitions_group = list(
90        repetitions_group.cache_temperature_repetitions_groups)
91    self.assertEqual(len(cache_temp_groups), 2)
92    self.assertListEqual(
93        list(cache_temp_repetitions_group[0].runs), [run_0, run_2])
94    self.assertListEqual(
95        list(cache_temp_repetitions_group[1].runs), [run_1, run_3])
96    self.assertEqual(cache_temp_repetitions_group[0].cache_temperature, "cold")
97    self.assertEqual(cache_temp_repetitions_group[1].cache_temperature, "warm")
98
99
100if __name__ == "__main__":
101  test_helper.run_pytest(__file__)
102