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