blob: d8c05ec2411f2c3fe8639328d4f652f3642b3aea [file] [log] [blame]
Jamie Madillcf4f8c72021-05-20 19:24:231#!/usr/bin/env python3
Brian Sheedya31578e2020-05-18 20:24:362# Copyright 2020 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import unittest
7
8import buildbot_json_magic_substitutions as magic_substitutions
9
10
Ben Pastene2ea8ba52020-10-16 21:43:2511def CreateConfigWithPool(pool, device_type=None):
12 dims = {
Brian Sheedy9517d1c2022-04-08 01:17:0113 'name': 'test_name',
14 'swarming': {
15 'dimension_sets': [
16 {
17 'pool': pool,
18 },
19 ],
20 },
Brian Sheedya31578e2020-05-18 20:24:3621 }
Ben Pastene2ea8ba52020-10-16 21:43:2522 if device_type:
23 dims['swarming']['dimension_sets'][0]['device_type'] = device_type
24 return dims
Brian Sheedya31578e2020-05-18 20:24:3625
26
27class ChromeOSTelemetryRemoteTest(unittest.TestCase):
28
29 def testVirtualMachineSubstitutions(self):
30 test_config = CreateConfigWithPool('chromium.tests.cros.vm')
Brian Sheedy5f173bb2021-11-24 00:45:5431 self.assertEqual(
32 magic_substitutions.ChromeOSTelemetryRemote(test_config, None), [
33 '--remote=127.0.0.1',
34 '--remote-ssh-port=9222',
35 ])
Brian Sheedya31578e2020-05-18 20:24:3636
37 def testPhysicalHardwareSubstitutions(self):
Ben Pastene2ea8ba52020-10-16 21:43:2538 test_config = CreateConfigWithPool('chromium.tests', device_type='eve')
Brian Sheedy5f173bb2021-11-24 00:45:5439 self.assertEqual(
40 magic_substitutions.ChromeOSTelemetryRemote(test_config, None),
41 ['--remote=variable_chromeos_device_hostname'])
Brian Sheedya31578e2020-05-18 20:24:3642
43 def testNoPool(self):
44 test_config = CreateConfigWithPool(None)
Brian Sheedy5f173bb2021-11-24 00:45:5445 with self.assertRaisesRegex(RuntimeError, 'No pool *'):
46 magic_substitutions.ChromeOSTelemetryRemote(test_config, None)
Brian Sheedya31578e2020-05-18 20:24:3647
48 def testUnknownPool(self):
49 test_config = CreateConfigWithPool('totally-legit-pool')
Brian Sheedy5f173bb2021-11-24 00:45:5450 with self.assertRaisesRegex(RuntimeError, 'Unknown CrOS pool *'):
51 magic_substitutions.ChromeOSTelemetryRemote(test_config, None)
Brian Sheedya31578e2020-05-18 20:24:3652
53
Brian Sheedy9517d1c2022-04-08 01:17:0154class ChromeOSGtestFilterFileTest(unittest.TestCase):
55 def testVirtualMachineFile(self):
56 test_config = CreateConfigWithPool('chromium.tests.cros.vm')
57 self.assertEqual(
58 magic_substitutions.ChromeOSGtestFilterFile(test_config, None), [
59 '--test-launcher-filter-file=../../testing/buildbot/filters/'
60 'chromeos.amd64-generic.test_name.filter',
61 ])
62
63 def testPhysicalHardwareFile(self):
64 test_config = CreateConfigWithPool('chromium.tests', device_type='eve')
65 self.assertEqual(
66 magic_substitutions.ChromeOSGtestFilterFile(test_config, None), [
67 '--test-launcher-filter-file=../../testing/buildbot/filters/'
68 'chromeos.eve.test_name.filter',
69 ])
70
71 def testNoPool(self):
72 test_config = CreateConfigWithPool(None)
73 with self.assertRaisesRegex(RuntimeError, 'No pool *'):
74 magic_substitutions.ChromeOSTelemetryRemote(test_config, None)
75
76 def testUnknownPool(self):
77 test_config = CreateConfigWithPool('totally-legit-pool')
78 with self.assertRaisesRegex(RuntimeError, 'Unknown CrOS pool *'):
79 magic_substitutions.ChromeOSTelemetryRemote(test_config, None)
80
81
Brian Sheedyb18cb762020-06-30 00:09:2982def CreateConfigWithGpus(gpus):
83 dimension_sets = []
84 for g in gpus:
85 dimension_sets.append({'gpu': g})
86 return {
87 'swarming': {
88 'dimension_sets': dimension_sets,
89 },
90 }
91
92
93class GPUExpectedDeviceId(unittest.TestCase):
94 def assertDeviceIdCorrectness(self, retval, device_ids):
95 self.assertEqual(len(retval), 2 * len(device_ids))
Jamie Madillcf4f8c72021-05-20 19:24:2396 for i in range(0, len(retval), 2):
Brian Sheedyb18cb762020-06-30 00:09:2997 self.assertEqual(retval[i], '--expected-device-id')
98 for d in device_ids:
99 self.assertIn(d, retval)
100
101 def testSingleGpuSingleDimension(self):
102 test_config = CreateConfigWithGpus(['vendor:device1-driver'])
103 self.assertDeviceIdCorrectness(
Brian Sheedy5f173bb2021-11-24 00:45:54104 magic_substitutions.GPUExpectedDeviceId(test_config, None), ['device1'])
Brian Sheedyb18cb762020-06-30 00:09:29105
106 def testSingleGpuDoubleDimension(self):
107 test_config = CreateConfigWithGpus(
108 ['vendor:device1-driver', 'vendor:device2-driver'])
109 self.assertDeviceIdCorrectness(
Brian Sheedy5f173bb2021-11-24 00:45:54110 magic_substitutions.GPUExpectedDeviceId(test_config, None),
Brian Sheedyb18cb762020-06-30 00:09:29111 ['device1', 'device2'])
112
113 def testDoubleGpuSingleDimension(self):
114 test_config = CreateConfigWithGpus(
115 ['vendor:device1-driver|vendor:device2-driver'])
116 self.assertDeviceIdCorrectness(
Brian Sheedy5f173bb2021-11-24 00:45:54117 magic_substitutions.GPUExpectedDeviceId(test_config, None),
Brian Sheedyb18cb762020-06-30 00:09:29118 ['device1', 'device2'])
119
120 def testDoubleGpuDoubleDimension(self):
121 test_config = CreateConfigWithGpus([
122 'vendor:device1-driver|vendor:device2-driver',
123 'vendor:device1-driver|vendor:device3-driver'
124 ])
125 self.assertDeviceIdCorrectness(
Brian Sheedy5f173bb2021-11-24 00:45:54126 magic_substitutions.GPUExpectedDeviceId(test_config, None),
Brian Sheedyb18cb762020-06-30 00:09:29127 ['device1', 'device2', 'device3'])
128
129 def testNoGpu(self):
130 self.assertDeviceIdCorrectness(
131 magic_substitutions.GPUExpectedDeviceId(
132 {'swarming': {
133 'dimension_sets': [{}]
Brian Sheedy5f173bb2021-11-24 00:45:54134 }}, None), ['0'])
Brian Sheedyb18cb762020-06-30 00:09:29135
136 def testNoDimensions(self):
137 with self.assertRaises(AssertionError):
Brian Sheedy5f173bb2021-11-24 00:45:54138 magic_substitutions.GPUExpectedDeviceId({}, None)
139
140
Brian Sheedy910cda82022-07-19 11:58:34141class GPUParallelJobs(unittest.TestCase):
142 def testNoOsType(self):
Austin Eng479701f2022-08-19 13:32:50143 test_config = CreateConfigWithGpus(['vendor:device1-driver'])
Brian Sheedy910cda82022-07-19 11:58:34144 with self.assertRaises(AssertionError):
Austin Eng479701f2022-08-19 13:32:50145 magic_substitutions.GPUParallelJobs(test_config, None, {})
Brian Sheedy910cda82022-07-19 11:58:34146
147 def testParallelJobs(self):
Austin Eng479701f2022-08-19 13:32:50148 test_config = CreateConfigWithGpus(['vendor:device1-driver'])
Brian Sheedy910cda82022-07-19 11:58:34149 for os_type in ['lacros', 'linux', 'mac', 'win']:
Austin Eng479701f2022-08-19 13:32:50150 retval = magic_substitutions.GPUParallelJobs(test_config, None,
Brian Sheedy910cda82022-07-19 11:58:34151 {'os_type': os_type})
152 self.assertEqual(retval, ['--jobs=4'])
153
154 def testSerialJobs(self):
Austin Eng479701f2022-08-19 13:32:50155 test_config = CreateConfigWithGpus(['vendor:device1-driver'])
Brian Sheedy910cda82022-07-19 11:58:34156 for os_type in ['android', 'chromeos', 'fuchsia']:
Austin Eng479701f2022-08-19 13:32:50157 retval = magic_substitutions.GPUParallelJobs(test_config, None,
Brian Sheedy910cda82022-07-19 11:58:34158 {'os_type': os_type})
159 self.assertEqual(retval, ['--jobs=1'])
160
Austin Eng479701f2022-08-19 13:32:50161 def testWebGPUCTSWindowsIntelSerialJobs(self):
162 intel_config = CreateConfigWithGpus(['8086:device1-driver'])
163 nvidia_config = CreateConfigWithGpus(['10de:device1-driver'])
164
165 for gpu_config in [intel_config, nvidia_config]:
166 for name, telemetry_test_name in [('webgpu_cts', None),
167 (None, 'webgpu_cts')]:
168 is_intel = intel_config == gpu_config
169 c = gpu_config.copy()
170 if name:
171 c['name'] = name
172 if telemetry_test_name:
173 c['telemetry_test_name'] = telemetry_test_name
174 for os_type in ['lacros', 'linux', 'mac', 'win']:
175 retval = magic_substitutions.GPUParallelJobs(c, None,
176 {'os_type': os_type})
177 if is_intel and os_type == 'win':
178 self.assertEqual(retval, ['--jobs=1'])
179 else:
180 self.assertEqual(retval, ['--jobs=4'])
181
Brian Sheedy910cda82022-07-19 11:58:34182
Brian Sheedya31578e2020-05-18 20:24:36183if __name__ == '__main__':
184 unittest.main()