blob: f36c5741e77d977cc6349d0df0d80e8d6ab0b4d9 [file] [log] [blame]
Jamie Madillcf4f8c72021-05-20 19:24:231#!/usr/bin/env vpython3
Avi Drissmandfd880852022-09-15 20:11:092# Copyright 2017 The Chromium Authors
Kenneth Russelleb60cbd22017-12-05 07:54:283# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for generate_buildbot_json.py."""
7
Garrett Beaty777c2912020-05-07 00:54:338import contextlib
9import json
Zhiling Huangbe008172018-03-08 19:13:1110import os
Garrett Beaty807011ab2023-04-12 00:52:3911import re
Kenneth Russelleb60cbd22017-12-05 07:54:2812import unittest
Garrett Beaty777c2912020-05-07 00:54:3313
Kenneth Russelleb60cbd22017-12-05 07:54:2814import generate_buildbot_json
Garrett Beaty1afaccc2020-06-25 19:58:1515from pyfakefs import fake_filesystem_unittest
Kenneth Russelleb60cbd22017-12-05 07:54:2816
Joshua Hood56c673c2022-03-02 20:29:3317# pylint: disable=super-with-arguments
18
Nodir Turakulovfce34292019-12-18 17:05:4119EMPTY_PYL_FILE = """\
20{
21}
22"""
23
Garrett Beaty1afaccc2020-06-25 19:58:1524# Use this value to refer to the directory containing this code
25# The tests use a fake filesystem and python filesystem calls are monkey-patched
26# to use the fake filesystem, which affects abspath
27THIS_DIR = os.path.dirname(os.path.abspath(__file__))
28
29
30class TestCase(fake_filesystem_unittest.TestCase):
31 def setUp(self):
32 self.setUpPyfakefs()
33 self.fs.cwd = THIS_DIR
Garrett Beaty79339e182023-04-10 20:45:4734
35 expectations_dir = os.path.join(THIS_DIR, 'unittest_expectations')
36 self.output_dir = os.path.join(expectations_dir, self.id().split('.')[-1])
Garrett Beaty1afaccc2020-06-25 19:58:1537
Ben Pastenef21cda32023-03-30 22:00:5738 # This allows reads into this directory to fallback to the real fs, which we
39 # want so each test case's json can be checked-in.
Garrett Beaty79339e182023-04-10 20:45:4740 self.fs.add_real_directory(expectations_dir)
Ben Pastenef21cda32023-03-30 22:00:5741
Garrett Beaty79339e182023-04-10 20:45:4742 self.set_args()
43
44 def set_args(self, *args):
Garrett Beatyade673d2023-08-04 22:00:2545 self.args = generate_buildbot_json.BBJSONGenerator.parse_args((
46 '--output-dir',
47 self.output_dir,
48 ) + args)
Garrett Beaty1afaccc2020-06-25 19:58:1549
Ben Pastenef21cda32023-03-30 22:00:5750 def regen_test_json(self, fakebb):
51 """Regenerates a unittest's json files.
52
53 Useful when making sweeping changes to pyl inputs in many test cases. Can be
54 used by simply inserting a call to this method in a unit test after
55 initializing its FakeBBGen object.
56 """
57 contents = fakebb.generate_outputs()
58 with fake_filesystem_unittest.Pause(self.fs):
Garrett Beaty4c35b142023-06-23 21:01:2359 try:
60 os.mkdir(self.output_dir)
61 except FileExistsError:
62 if not os.path.isdir(self.output_dir):
63 raise
64
Ben Pastenef21cda32023-03-30 22:00:5765 fakebb.write_json_result(contents)
Garrett Beaty1afaccc2020-06-25 19:58:1566
Kenneth Russelleb60cbd22017-12-05 07:54:2867
Garrett Beaty777c2912020-05-07 00:54:3368@contextlib.contextmanager
69def dump_on_failure(fbb, dump=True):
70 try:
71 yield
72 except:
73 if dump:
74 for l in fbb.printed_lines:
Jamie Madillcf4f8c72021-05-20 19:24:2375 print(l)
Garrett Beaty777c2912020-05-07 00:54:3376 raise
77
Kenneth Russelleb60cbd22017-12-05 07:54:2878class FakeBBGen(generate_buildbot_json.BBJSONGenerator):
Garrett Beaty1afaccc2020-06-25 19:58:1579 def __init__(self,
80 args,
81 waterfalls,
82 test_suites,
83 luci_milo_cfg,
Garrett Beaty4f3e9212020-06-25 20:21:4984 project_pyl='{"validate_source_side_specs_have_builder": True}',
Nodir Turakulovfce34292019-12-18 17:05:4185 exceptions=EMPTY_PYL_FILE,
Stephanie Kim572b43c02023-04-13 14:24:1386 autoshard_exceptions=json.dumps({}),
Nodir Turakulovfce34292019-12-18 17:05:4187 mixins=EMPTY_PYL_FILE,
Jeff Yoonda581c32020-03-06 03:56:0588 gn_isolate_map=EMPTY_PYL_FILE,
89 variants=EMPTY_PYL_FILE):
Garrett Beaty1afaccc2020-06-25 19:58:1590 super(FakeBBGen, self).__init__(args)
91
92 pyl_files_dir = args.pyl_files_dir or THIS_DIR
93 infra_config_dir = args.infra_config_dir
94
95 files = {
Garrett Beaty79339e182023-04-10 20:45:4796 args.waterfalls_pyl_path: waterfalls,
97 args.test_suites_pyl_path: test_suites,
98 args.test_suite_exceptions_pyl_path: exceptions,
Stephanie Kim572b43c02023-04-13 14:24:1399 args.autoshard_exceptions_json_path: autoshard_exceptions,
Garrett Beaty79339e182023-04-10 20:45:47100 args.mixins_pyl_path: mixins,
101 args.gn_isolate_map_pyl_path: gn_isolate_map,
102 args.variants_pyl_path: variants,
103 os.path.join(pyl_files_dir, 'gn_isolate_map2.pyl'):
104 GPU_TELEMETRY_GN_ISOLATE_MAP,
105 os.path.join(infra_config_dir, 'generated/project.pyl'): project_pyl,
106 os.path.join(infra_config_dir, 'generated/luci/luci-milo.cfg'):
107 luci_milo_cfg,
108 os.path.join(infra_config_dir, 'generated/luci/luci-milo-dev.cfg'): '',
Kenneth Russelleb60cbd22017-12-05 07:54:28109 }
Garrett Beaty79339e182023-04-10 20:45:47110 for path, content in files.items():
Garrett Beaty4f3e9212020-06-25 20:21:49111 if content is None:
112 continue
Garrett Beaty1afaccc2020-06-25 19:58:15113 parent = os.path.abspath(os.path.dirname(path))
114 if not os.path.exists(parent):
115 os.makedirs(parent)
116 with open(path, 'w') as f:
117 f.write(content)
118
Stephen Martinis7eb8b612018-09-21 00:17:50119 self.printed_lines = []
120
121 def print_line(self, line):
122 self.printed_lines.append(line)
Kenneth Russelleb60cbd22017-12-05 07:54:28123
Kenneth Russell73c3bd8b2018-10-19 22:30:19124 # pragma pylint: disable=arguments-differ
125 def check_output_file_consistency(self, verbose=False, dump=True):
Garrett Beaty777c2912020-05-07 00:54:33126 with dump_on_failure(self, dump=verbose and dump):
Kenneth Russell73c3bd8b2018-10-19 22:30:19127 super(FakeBBGen, self).check_output_file_consistency(verbose)
Joshua Hood56c673c2022-03-02 20:29:33128 # pragma pylint: enable=arguments-differ
Kenneth Russell73c3bd8b2018-10-19 22:30:19129
Kenneth Russelleb60cbd22017-12-05 07:54:28130
131FOO_GTESTS_WATERFALL = """\
132[
133 {
Greg Gutermanf60eb052020-03-12 17:40:01134 'project': 'chromium',
135 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28136 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43137 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28138 'Fake Tester': {
139 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25140 'dimensions':{
141 'kvm': '1',
142 'os': 'Linux',
143 },
Kenneth Russelleb60cbd22017-12-05 07:54:28144 },
145 'test_suites': {
146 'gtest_tests': 'foo_tests',
147 },
148 },
149 },
150 },
151]
152"""
153
Kenneth Russell650995a2018-05-03 21:17:01154FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
155[
156 {
Greg Gutermanf60eb052020-03-12 17:40:01157 'project': 'chromium',
158 'bucket': 'ci',
Kenneth Russell650995a2018-05-03 21:17:01159 'name': 'chromium.test',
160 'machines': {
161 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:45162 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25163 'dimensions': {
164 'os': 'Linux',
165 },
Ben Pastene338f56b2023-03-31 21:24:45166 },
Kenneth Russell650995a2018-05-03 21:17:01167 'test_suites': {
168 'gtest_tests': 'foo_tests',
169 },
170 'args': [
171 '--enable-features=Baz',
172 ],
173 },
174 },
175 },
176]
177"""
178
Ben Pastenea9e583b2019-01-16 02:57:26179FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL = """\
180[
181 {
Greg Gutermanf60eb052020-03-12 17:40:01182 'project': 'chromium',
183 'bucket': 'ci',
Ben Pastenea9e583b2019-01-16 02:57:26184 'name': 'chromium.test',
185 'machines': {
186 'Fake Tester': {
187 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25188 'dimensions': {
189 "device_type": "foo_device",
190 },
Ben Pastenea9e583b2019-01-16 02:57:26191 },
192 'test_suites': {
193 'gtest_tests': 'foo_tests',
194 },
195 'os_type': 'chromeos',
196 },
197 },
198 },
199]
200"""
Stephen Martinisf83893722018-09-19 00:02:18201
Kenneth Russell8a386d42018-06-02 09:48:01202FOO_LINUX_GTESTS_WATERFALL = """\
203[
204 {
Greg Gutermanf60eb052020-03-12 17:40:01205 'project': 'chromium',
206 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01207 'name': 'chromium.test',
208 'machines': {
209 'Fake Tester': {
210 'os_type': 'linux',
Ben Pastene338f56b2023-03-31 21:24:45211 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25212 'dimensions': {
213 'os': 'Linux',
214 },
Ben Pastene338f56b2023-03-31 21:24:45215 },
Kenneth Russell8a386d42018-06-02 09:48:01216 'test_suites': {
217 'gtest_tests': 'foo_tests',
218 },
219 },
220 },
221 },
222]
223"""
224
Kenneth Russelleb60cbd22017-12-05 07:54:28225COMPOSITION_GTEST_SUITE_WATERFALL = """\
226[
227 {
Greg Gutermanf60eb052020-03-12 17:40:01228 'project': 'chromium',
229 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28230 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43231 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28232 'Fake Tester': {
233 'test_suites': {
234 'gtest_tests': 'composition_tests',
235 },
236 },
237 },
238 },
239]
240"""
241
John Budorickedfe7f872018-01-23 15:27:22242COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
243[
244 {
Greg Gutermanf60eb052020-03-12 17:40:01245 'project': 'chromium',
246 'bucket': 'ci',
John Budorickedfe7f872018-01-23 15:27:22247 'name': 'chromium.test',
248 'machines': {
249 'Fake Tester': {
250 'test_suites': {
251 'gtest_tests': 'composition_tests',
252 },
253 'args': [
254 '--this-is-an-argument',
255 ],
256 },
257 },
258 },
259]
260"""
261
Kenneth Russelleb60cbd22017-12-05 07:54:28262FOO_ISOLATED_SCRIPTS_WATERFALL = """\
263[
264 {
Greg Gutermanf60eb052020-03-12 17:40:01265 'project': 'chromium',
266 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28267 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43268 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28269 'Fake Tester': {
270 'test_suites': {
271 'isolated_scripts': 'composition_tests',
272 },
273 },
274 },
275 },
276]
277"""
278
Dirk Pranke0e879b22020-07-16 23:53:56279FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID = """\
280[
281 {
282 'project': 'chromium',
283 'bucket': 'ci',
284 'name': 'chromium.test',
285 'machines': {
286 'Fake Tester': {
Yuly Novikov26dd47052021-02-11 00:57:14287 'os_type': 'android',
Dirk Pranke0e879b22020-07-16 23:53:56288 'test_suites': {
289 'isolated_scripts': 'composition_tests',
290 },
291 'use_android_presentation': True,
292 },
293 },
294 },
295]
296"""
297
Kenneth Russelleb60cbd22017-12-05 07:54:28298FOO_SCRIPT_WATERFALL = """\
299[
300 {
Greg Gutermanf60eb052020-03-12 17:40:01301 'project': 'chromium',
302 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28303 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43304 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28305 'Fake Tester': {
306 'test_suites': {
307 'scripts': 'foo_scripts',
308 },
309 },
310 },
311 },
312]
313"""
314
Brian Sheedy158cd0f2019-04-26 01:12:44315FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS = """\
316[
317 {
Greg Gutermanf60eb052020-03-12 17:40:01318 'project': 'chromium',
319 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44320 'name': 'chromium.test',
321 'machines': {
322 'Fake Tester': {
323 'forbid_script_tests': True,
324 'test_suites': {
325 'scripts': 'foo_scripts',
326 },
327 },
328 },
329 },
330]
331"""
332
333FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS = """\
334[
335 {
Greg Gutermanf60eb052020-03-12 17:40:01336 'project': 'chromium',
337 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44338 'name': 'chromium.test',
339 'forbid_script_tests': True,
340 'machines': {
341 'Fake Tester': {
342 'test_suites': {
343 'scripts': 'foo_scripts',
344 },
345 },
346 },
347 },
348]
349"""
350
Kenneth Russelleb60cbd22017-12-05 07:54:28351FOO_JUNIT_WATERFALL = """\
352[
353 {
Greg Gutermanf60eb052020-03-12 17:40:01354 'project': 'chromium',
355 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28356 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43357 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28358 'Fake Tester': {
359 'test_suites': {
360 'junit_tests': 'composition_tests',
361 },
362 },
363 },
364 },
365]
366"""
367
Kenneth Russell8a386d42018-06-02 09:48:01368FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
369[
370 {
Greg Gutermanf60eb052020-03-12 17:40:01371 'project': 'chromium',
372 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01373 'name': 'chromium.test',
374 'machines': {
375 'Fake Tester': {
376 'os_type': 'win',
377 'browser_config': 'release',
378 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25379 'dimensions': {
380 'gpu': '10de:1cb3',
381 },
Kenneth Russell8a386d42018-06-02 09:48:01382 },
383 'test_suites': {
384 'gpu_telemetry_tests': 'composition_tests',
385 },
386 },
387 },
388 },
389]
390"""
391
Brian Sheedyf74819b2021-06-04 01:38:38392FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID = """\
393[
394 {
395 'project': 'chromium',
396 'bucket': 'ci',
397 'name': 'chromium.test',
398 'machines': {
399 'Fake Tester': {
400 'os_type': 'android',
401 'browser_config': 'android-chromium',
402 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25403 'dimensions': {
404 'device_type': 'bullhead',
405 },
Brian Sheedyf74819b2021-06-04 01:38:38406 },
407 'test_suites': {
408 'gpu_telemetry_tests': 'composition_tests',
409 },
410 },
411 },
412 },
413]
414"""
415
416FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW = """\
417[
418 {
419 'project': 'chromium',
420 'bucket': 'ci',
421 'name': 'chromium.test',
422 'machines': {
423 'Fake Tester': {
424 'os_type': 'android',
425 'browser_config': 'not-a-real-browser',
426 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25427 'dimensions': {
428 'device_type': 'bullhead',
429 },
Brian Sheedyf74819b2021-06-04 01:38:38430 },
431 'test_suites': {
432 'android_webview_gpu_telemetry_tests': 'composition_tests',
433 },
434 },
435 },
436 },
437]
438"""
439
Chong Guc2ca5d02022-01-11 19:52:17440FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA = """\
441[
442 {
443 'project': 'chromium',
444 'bucket': 'ci',
445 'name': 'chromium.test',
446 'machines': {
447 'Fake Tester': {
448 'os_type': 'fuchsia',
449 'browser_config': 'fuchsia-chrome',
450 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25451 'dimensions': {
452 'kvm': '1',
453 },
Chong Guc2ca5d02022-01-11 19:52:17454 },
455 'test_suites': {
456 'gpu_telemetry_tests': 'composition_tests',
457 },
458 },
459 },
460 },
461]
462"""
463
Fabrice de Ganscbd655f2022-08-04 20:15:30464FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING = """\
465[
466 {
467 'project': 'chromium',
468 'bucket': 'ci',
469 'name': 'chromium.test',
470 'machines': {
471 'Fake Tester': {
472 'os_type': 'fuchsia',
473 'browser_config': 'not-a-real-browser',
474 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25475 'dimensions': {
476 'kvm': '1',
477 },
Fabrice de Ganscbd655f2022-08-04 20:15:30478 },
479 'test_suites': {
480 'cast_streaming_tests': 'composition_tests',
481 },
482 },
483 },
484 },
485]
486"""
487
Brian Sheedyb6491ba2022-09-26 20:49:49488FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB = """\
489[
490 {
491 'project': 'chromium',
492 'bucket': 'ci',
493 'name': 'chromium.test',
494 'machines': {
495 'Fake Tester': {
496 'os_type': 'chromeos',
497 'browser_config': 'cros-chrome',
498 'use_swarming': False,
499 'swarming': {
500 'some_key': 'some_value',
501 },
502 'test_suites': {
503 'skylab_gpu_telemetry_tests': 'composition_tests',
504 },
505 },
506 },
507 },
508]
509"""
510
Kenneth Russell384a1732019-03-16 02:36:02511NVIDIA_GPU_TELEMETRY_TEST_WATERFALL = """\
512[
513 {
Greg Gutermanf60eb052020-03-12 17:40:01514 'project': 'chromium',
515 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02516 'name': 'chromium.test',
517 'machines': {
518 'Fake Tester': {
519 'os_type': 'win',
520 'browser_config': 'release',
521 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25522 'dimensions': {
523 'gpu': '10de:1cb3-26.21.14.3102',
524 },
Kenneth Russell384a1732019-03-16 02:36:02525 },
526 'test_suites': {
527 'gpu_telemetry_tests': 'composition_tests',
528 },
529 },
530 },
531 },
532]
533"""
534
535INTEL_GPU_TELEMETRY_TEST_WATERFALL = """\
536[
537 {
Greg Gutermanf60eb052020-03-12 17:40:01538 'project': 'chromium',
539 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02540 'name': 'chromium.test',
541 'machines': {
542 'Fake Tester': {
543 'os_type': 'win',
544 'browser_config': 'release',
545 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25546 'dimensions': {
547 'gpu': '8086:5912-24.20.100.6286',
548 },
Kenneth Russell384a1732019-03-16 02:36:02549 },
550 'test_suites': {
551 'gpu_telemetry_tests': 'composition_tests',
552 },
553 },
554 },
555 },
556]
557"""
558
Brian Sheedyf9387db7b2019-08-05 19:26:10559INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL = """\
560[
561 {
Greg Gutermanf60eb052020-03-12 17:40:01562 'project': 'chromium',
563 'bucket': 'ci',
Brian Sheedyf9387db7b2019-08-05 19:26:10564 'name': 'chromium.test',
565 'machines': {
566 'Fake Tester': {
567 'os_type': 'win',
568 'browser_config': 'release',
569 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25570 'dimensions': {
571 'gpu': '8086:3e92-24.20.100.6286',
572 },
Brian Sheedyf9387db7b2019-08-05 19:26:10573 },
574 'test_suites': {
575 'gpu_telemetry_tests': 'composition_tests',
576 },
577 },
578 },
579 },
580]
581"""
582
Ben Pastene5f231cf22022-05-05 18:03:07583GPU_TELEMETRY_TEST_VARIANTS_WATERFALL = """\
584[
585 {
586 'project': 'chromium',
587 'bucket': 'ci',
588 'name': 'chromium.test',
589 'machines': {
590 'Fake Tester': {
591 'os_type': 'win',
592 'browser_config': 'release',
593 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25594 'dimensions': {
595 'gpu': '8086:3e92-24.20.100.6286',
596 'os': 'Linux',
597 },
Ben Pastene5f231cf22022-05-05 18:03:07598 },
599 'test_suites': {
600 'gpu_telemetry_tests': 'matrix_tests',
601 },
602 },
603 },
604 },
605]
606"""
607
Kenneth Russelleb60cbd22017-12-05 07:54:28608UNKNOWN_TEST_SUITE_WATERFALL = """\
609[
610 {
Greg Gutermanf60eb052020-03-12 17:40:01611 'project': 'chromium',
612 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28613 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43614 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28615 'Fake Tester': {
616 'test_suites': {
617 'gtest_tests': 'baz_tests',
618 },
619 },
620 },
621 },
622]
623"""
624
625UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
626[
627 {
Greg Gutermanf60eb052020-03-12 17:40:01628 'project': 'chromium',
629 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28630 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43631 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28632 'Fake Tester': {
633 'test_suites': {
634 'gtest_tests': 'foo_tests',
635 'foo_test_type': 'foo_tests',
636 },
637 },
638 },
639 },
640]
641"""
642
643ANDROID_WATERFALL = """\
644[
645 {
Greg Gutermanf60eb052020-03-12 17:40:01646 'project': 'chromium',
647 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28648 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43649 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28650 'Android Builder': {
651 'additional_compile_targets': [
652 'bar_test',
653 ],
654 },
Kenneth Russelleb60cbd22017-12-05 07:54:28655 'Fake Android K Tester': {
656 'additional_compile_targets': [
657 'bar_test',
658 ],
659 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25660 'dimensions': {
661 'device_os': 'KTU84P',
662 'device_type': 'hammerhead',
663 'os': 'Android',
664 },
Kenneth Russelleb60cbd22017-12-05 07:54:28665 },
666 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49667 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28668 'test_suites': {
669 'gtest_tests': 'foo_tests',
670 },
671 },
672 'Fake Android L Tester': {
673 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25674 'dimensions': {
675 'device_os': 'LMY41U',
676 'device_os_type': 'user',
677 'device_type': 'hammerhead',
678 'os': 'Android',
679 },
Kenneth Russelleb60cbd22017-12-05 07:54:28680 },
681 'os_type': 'android',
682 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28683 'test_suites': {
684 'gtest_tests': 'foo_tests',
685 },
686 },
687 'Fake Android M Tester': {
688 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25689 'dimensions': {
690 'device_os': 'MMB29Q',
691 'device_type': 'bullhead',
692 'os': 'Android',
693 },
Kenneth Russelleb60cbd22017-12-05 07:54:28694 },
695 'os_type': 'android',
696 'use_swarming': False,
697 'test_suites': {
698 'gtest_tests': 'foo_tests',
699 },
700 },
701 },
702 },
703]
704"""
705
Nico Weberd18b8962018-05-16 19:39:38706UNKNOWN_BOT_GTESTS_WATERFALL = """\
707[
708 {
Greg Gutermanf60eb052020-03-12 17:40:01709 'project': 'chromium',
710 'bucket': 'ci',
Nico Weberd18b8962018-05-16 19:39:38711 'name': 'chromium.test',
712 'machines': {
713 'Unknown Bot': {
714 'test_suites': {
715 'gtest_tests': 'foo_tests',
716 },
717 },
718 },
719 },
720]
721"""
722
Jeff Yoon8154e582019-12-03 23:30:01723MATRIX_GTEST_SUITE_WATERFALL = """\
724[
725 {
Greg Gutermanf60eb052020-03-12 17:40:01726 'project': 'chromium',
727 'bucket': 'ci',
Jeff Yoon8154e582019-12-03 23:30:01728 'name': 'chromium.test',
729 'machines': {
730 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:45731 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25732 'dimensions': {
733 'os': 'Linux',
734 },
Ben Pastene338f56b2023-03-31 21:24:45735 },
Jeff Yoon8154e582019-12-03 23:30:01736 'test_suites': {
737 'gtest_tests': 'matrix_tests',
738 },
739 },
740 },
741 },
742]
743"""
744
Jeff Yoon67c3e832020-02-08 07:39:38745MATRIX_GTEST_SUITE_WATERFALL_MIXINS = """\
746[
747 {
Greg Gutermanf60eb052020-03-12 17:40:01748 'project': 'chromium',
749 'bucket': 'ci',
Jeff Yoon67c3e832020-02-08 07:39:38750 'name': 'chromium.test',
751 'machines': {
752 'Fake Tester': {
753 'mixins': ['dimension_mixin'],
754 'test_suites': {
755 'gtest_tests': 'matrix_tests',
756 },
757 },
758 },
759 },
760]
761"""
762
Kenneth Russelleb60cbd22017-12-05 07:54:28763FOO_TEST_SUITE = """\
764{
Stephen Martinis54d64ad2018-09-21 22:16:20765 'basic_suites': {
766 'foo_tests': {
767 'foo_test': {
768 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25769 'dimensions': {
770 'integrity': 'high',
771 'os': 'Linux',
772 },
Stephen Martinis54d64ad2018-09-21 22:16:20773 'expiration': 120,
774 },
Kenneth Russelleb60cbd22017-12-05 07:54:28775 },
776 },
777 },
778}
779"""
780
Garrett Beatye3a606ceb2024-04-30 22:13:13781FOO_TEST_SUITE_ANDROID_SWARMING = """\
782{
783 'basic_suites': {
784 'foo_tests': {
785 'foo_test': {
786 'android_swarming': {
787 'shards': 100,
788 },
789 },
790 },
791 },
792}
793"""
794
Brian Sheedycae63b22020-06-10 22:52:11795FOO_TEST_SUITE_NO_DIMENSIONS = """\
796{
797 'basic_suites': {
798 'foo_tests': {
799 'foo_test': {
800 },
801 },
802 },
803}
804"""
805
Stephen Martinis5bef0fc2020-01-06 22:47:53806FOO_TEST_SUITE_NOT_SORTED = """\
807{
808 'basic_suites': {
809 'foo_tests': {
810 'foo_test': {},
811 'a_test': {},
812 },
813 },
814}
815"""
816
Kenneth Russell8ceeabf2017-12-11 17:53:28817FOO_TEST_SUITE_WITH_ARGS = """\
818{
Stephen Martinis54d64ad2018-09-21 22:16:20819 'basic_suites': {
820 'foo_tests': {
821 'foo_test': {
822 'args': [
823 '--c_arg',
824 ],
825 },
Kenneth Russell8ceeabf2017-12-11 17:53:28826 },
827 },
828}
829"""
830
Garrett Beatyade673d2023-08-04 22:00:25831FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS = """\
832{
833 'basic_suites': {
834 'foo_tests': {
835 'foo_test': {
836 'swarming': {
837 'dimension_sets': [
838 {
839 'foo': 'bar',
840 },
841 ],
842 },
843 },
844 },
845 },
846}
847"""
848
Garrett Beaty235c1412023-08-29 20:26:29849FOO_TEST_SUITE_WITH_NAME = """\
850{
851 'basic_suites': {
852 'foo_tests': {
853 'foo_test': {
854 'name': 'bar_test',
855 },
856 },
857 },
858}
859"""
860
Garrett Beatydca3d882023-09-14 23:50:32861FOO_TEST_SUITE_WITH_ISOLATE_NAME = """\
862{
863 'basic_suites': {
864 'foo_tests': {
865 'foo_test': {
866 'isolate_name': 'bar_test',
867 },
868 },
869 },
870}
871"""
872
Zhaoyang Li473dd0ae2021-05-10 18:28:28873FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES = """\
874{
875 'basic_suites': {
876 'foo_tests': {
877 'foo_test': {
878 'swarming': {
879 'named_caches': [
880 {
881 'name': 'cache_in_test',
882 'file': 'cache_in_test_file',
883 },
884 ],
885 },
886 },
887 },
888 },
889}
890"""
891
Kenneth Russell8a386d42018-06-02 09:48:01892FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
893{
Stephen Martinis54d64ad2018-09-21 22:16:20894 'basic_suites': {
895 'foo_tests': {
896 'foo_test': {
897 'linux_args': [
898 '--no-xvfb',
899 ],
900 },
Kenneth Russell8a386d42018-06-02 09:48:01901 },
902 },
903}
904"""
905
Kenneth Russell650995a2018-05-03 21:17:01906FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
907{
Stephen Martinis54d64ad2018-09-21 22:16:20908 'basic_suites': {
909 'foo_tests': {
910 'foo_test': {
911 'args': [
912 '--enable-features=Foo,Bar',
913 ],
914 },
Kenneth Russell650995a2018-05-03 21:17:01915 },
916 },
917}
918"""
919
Brian Sheedy7658c982020-01-08 02:27:58920FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN = """\
921{
922 'basic_suites': {
923 'foo_tests': {
924 'foo_test': {
925 'remove_mixins': ['waterfall_mixin'],
926 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25927 'dimensions': {
928 'integrity': 'high',
929 },
Brian Sheedy7658c982020-01-08 02:27:58930 'expiration': 120,
931 },
932 },
933 },
934 },
935}
936"""
937
938FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN = """\
939{
940 'basic_suites': {
941 'foo_tests': {
942 'foo_test': {
943 'remove_mixins': ['builder_mixin'],
944 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25945 'dimensions': {
946 'integrity': 'high',
947 },
Brian Sheedy7658c982020-01-08 02:27:58948 'expiration': 120,
949 },
950 },
951 },
952 },
953}
954"""
955
Kenneth Russelleb60cbd22017-12-05 07:54:28956FOO_SCRIPT_SUITE = """\
957{
Stephen Martinis54d64ad2018-09-21 22:16:20958 'basic_suites': {
959 'foo_scripts': {
960 'foo_test': {
961 'script': 'foo.py',
962 },
963 'bar_test': {
964 'script': 'bar.py',
965 },
Kenneth Russelleb60cbd22017-12-05 07:54:28966 },
967 },
968}
969"""
970
Kenneth Russelleb60cbd22017-12-05 07:54:28971GOOD_COMPOSITION_TEST_SUITES = """\
972{
Stephen Martinis54d64ad2018-09-21 22:16:20973 'basic_suites': {
974 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:45975 'bar_test': {
976 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25977 'dimensions': {
978 'os': 'Linux',
979 },
Ben Pastene338f56b2023-03-31 21:24:45980 },
981 },
Stephen Martinis54d64ad2018-09-21 22:16:20982 },
983 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:45984 'foo_test': {
985 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25986 'dimensions': {
987 'os': 'Linux',
988 },
Ben Pastene338f56b2023-03-31 21:24:45989 },
990 },
Stephen Martinis54d64ad2018-09-21 22:16:20991 },
Kenneth Russelleb60cbd22017-12-05 07:54:28992 },
Stephen Martinis54d64ad2018-09-21 22:16:20993 'compound_suites': {
994 'composition_tests': [
995 'foo_tests',
996 'bar_tests',
997 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28998 },
Kenneth Russelleb60cbd22017-12-05 07:54:28999}
1000"""
1001
1002BAD_COMPOSITION_TEST_SUITES = """\
1003{
Stephen Martinis54d64ad2018-09-21 22:16:201004 'basic_suites': {
1005 'bar_tests': {},
1006 'foo_tests': {},
1007 },
1008 'compound_suites': {
1009 'buggy_composition_tests': [
1010 'bar_tests',
1011 ],
1012 'composition_tests': [
1013 'foo_tests',
1014 'buggy_composition_tests',
1015 ],
1016 },
1017}
1018"""
1019
Andrew Luo0f1dee02019-09-06 16:50:471020CONFLICTING_COMPOSITION_TEST_SUITES = """\
1021{
1022 'basic_suites': {
1023 'bar_tests': {
1024 'baz_tests': {
1025 'args': [
1026 '--bar',
1027 ],
1028 }
1029 },
1030 'foo_tests': {
1031 'baz_tests': {
1032 'args': [
1033 '--foo',
1034 ],
1035 }
1036 },
1037 },
1038 'compound_suites': {
1039 'foobar_tests': [
1040 'foo_tests',
1041 'bar_tests',
1042 ],
1043 },
1044}
1045"""
1046
Stephen Martinis54d64ad2018-09-21 22:16:201047DUPLICATES_COMPOSITION_TEST_SUITES = """\
1048{
1049 'basic_suites': {
1050 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:011051 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:201052 'foo_tests': {},
1053 },
1054 'compound_suites': {
1055 'bar_tests': [
1056 'foo_tests',
1057 ],
1058 'composition_tests': [
1059 'foo_tests',
1060 'buggy_composition_tests',
1061 ],
1062 },
Kenneth Russelleb60cbd22017-12-05 07:54:281063}
1064"""
1065
Dirk Pranke1b767092017-12-07 04:44:231066SCRIPT_SUITE = """\
1067{
Stephen Martinis54d64ad2018-09-21 22:16:201068 'basic_suites': {
1069 'foo_scripts': {
1070 'foo_test': {
1071 'script': 'foo.py',
1072 },
Dirk Pranke1b767092017-12-07 04:44:231073 },
1074 },
1075}
1076"""
1077
Kenneth Russelleb60cbd22017-12-05 07:54:281078UNREFED_TEST_SUITE = """\
1079{
Stephen Martinis54d64ad2018-09-21 22:16:201080 'basic_suites': {
1081 'bar_tests': {},
1082 'foo_tests': {},
1083 },
Kenneth Russelleb60cbd22017-12-05 07:54:281084}
1085"""
1086
1087REUSING_TEST_WITH_DIFFERENT_NAME = """\
1088{
Stephen Martinis54d64ad2018-09-21 22:16:201089 'basic_suites': {
1090 'foo_tests': {
1091 'foo_test': {},
1092 'variation_test': {
1093 'args': [
1094 '--variation',
1095 ],
1096 'test': 'foo_test',
1097 },
Kenneth Russelleb60cbd22017-12-05 07:54:281098 },
1099 },
1100}
1101"""
1102
Garrett Beaty235c1412023-08-29 20:26:291103COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME = """\
Kenneth Russell8a386d42018-06-02 09:48:011104{
Stephen Martinis54d64ad2018-09-21 22:16:201105 'basic_suites': {
1106 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:451107 'foo': {
Garrett Beaty235c1412023-08-29 20:26:291108 'telemetry_test_name': 'foo',
1109 'swarming': {
1110 'dimensions': {
1111 'os': 'Linux',
1112 },
1113 },
1114 },
1115 },
1116 },
1117 'compound_suites': {
1118 'composition_tests': [
1119 'foo_tests',
1120 ],
1121 },
1122}
1123"""
1124
1125COMPOSITION_SUITE_WITH_TELEMETRY_TEST = """\
1126{
1127 'basic_suites': {
1128 'foo_tests': {
1129 'foo_tests': {
1130 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451131 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251132 'dimensions': {
1133 'os': 'Linux',
1134 },
Xinan Linedcf05b32023-10-19 23:13:501135 'shards': 2,
Ben Pastene338f56b2023-03-31 21:24:451136 },
1137 },
Stephen Martinis54d64ad2018-09-21 22:16:201138 },
1139 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451140 'bar_test': {
1141 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251142 'dimensions': {
1143 'os': 'Linux',
1144 },
Ben Pastene338f56b2023-03-31 21:24:451145 },
1146 },
Stephen Martinis54d64ad2018-09-21 22:16:201147 },
Kenneth Russell8a386d42018-06-02 09:48:011148 },
Stephen Martinis54d64ad2018-09-21 22:16:201149 'compound_suites': {
1150 'composition_tests': [
1151 'foo_tests',
1152 'bar_tests',
1153 ],
Kenneth Russell8a386d42018-06-02 09:48:011154 },
Kenneth Russell8a386d42018-06-02 09:48:011155}
1156"""
1157
Kenneth Russell384a1732019-03-16 02:36:021158COMPOSITION_SUITE_WITH_GPU_ARGS = """\
1159{
1160 'basic_suites': {
1161 'foo_tests': {
Garrett Beaty235c1412023-08-29 20:26:291162 'foo_tests': {
1163 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451164 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251165 'dimensions': {
1166 'os': 'Linux',
1167 },
Ben Pastene338f56b2023-03-31 21:24:451168 },
Kenneth Russell384a1732019-03-16 02:36:021169 'args': [
1170 '--gpu-vendor-id',
1171 '${gpu_vendor_id}',
1172 '--gpu-device-id',
1173 '${gpu_device_id}',
1174 ],
1175 },
1176 },
1177 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451178 'bar_test': {
1179 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251180 'dimensions': {
1181 'os': 'Linux',
1182 },
Ben Pastene338f56b2023-03-31 21:24:451183 },
1184 },
Kenneth Russell384a1732019-03-16 02:36:021185 },
1186 },
1187 'compound_suites': {
1188 'composition_tests': [
1189 'foo_tests',
1190 'bar_tests',
1191 ],
1192 },
1193}
1194"""
1195
Brian Sheedyd8c0c73d2021-07-05 02:11:301196COMPOSITION_SUITE_WITH_PIXEL_AND_FILTER = """\
1197{
1198 'basic_suites': {
1199 'foo_tests': {
1200 'pixel': {
1201 'args': [
1202 '--git-revision=aaaa',
1203 '--test-filter=bar',
1204 ],
1205 },
1206 },
1207 'bar_tests': {
1208 'bar_test': {},
1209 },
1210 },
1211 'compound_suites': {
1212 'composition_tests': [
1213 'foo_tests',
1214 'bar_tests',
1215 ],
1216 },
1217}
1218"""
1219
Jamie Madilla8be0d72020-10-02 05:24:041220GTEST_AS_ISOLATED_SCRIPT_SUITE = """\
1221{
1222 'basic_suites': {
1223 'foo_tests': {
1224 'foo_test': {
1225 'script': 'foo.py',
1226 'use_isolated_scripts_api': True,
1227 },
1228 },
1229 },
1230}
1231"""
1232
Dirk Pranke1b767092017-12-07 04:44:231233SCRIPT_WITH_ARGS_EXCEPTIONS = """\
1234{
1235 'foo_test': {
1236 'modifications': {
1237 'Fake Tester': {
1238 'args': ['--fake-arg'],
1239 },
1240 },
1241 },
1242}
1243"""
1244
Stephen Martinis0382bc12018-09-17 22:29:071245SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
1246{
1247 'foo_test': {
1248 'modifications': {
1249 'Fake Tester': {
1250 'swarming': {
1251 'value': 'exception',
1252 },
1253 },
1254 },
1255 },
1256}
1257"""
1258
Stephanie Kim572b43c02023-04-13 14:24:131259AUTOSHARD_EXCEPTIONS = json.dumps({
1260 'chromium.test': {
1261 'Fake Tester': {
1262 'foo_test': {
1263 'shards': 20,
1264 },
1265 'foo_test_apk': {
1266 'shards': 2,
1267 },
1268 'swarming_test a_variant': {
1269 'shards': 10,
1270 },
1271 }
1272 },
1273})
1274
Kenneth Russelleb60cbd22017-12-05 07:54:281275NO_BAR_TEST_EXCEPTIONS = """\
1276{
1277 'bar_test': {
1278 'remove_from': [
1279 'Fake Tester',
1280 ]
1281 }
1282}
1283"""
1284
1285EMPTY_BAR_TEST_EXCEPTIONS = """\
1286{
1287 'bar_test': {
1288 }
1289}
1290"""
1291
Stephen Martinis54d64ad2018-09-21 22:16:201292EXCEPTIONS_SORTED = """\
1293{
1294 'suite_c': {
1295 'modifications': {
1296 'Fake Tester': {
1297 'foo': 'bar',
1298 },
1299 },
1300 },
1301 'suite_d': {
1302 'modifications': {
1303 'Fake Tester': {
1304 'foo': 'baz',
1305 },
1306 },
1307 },
1308}
1309"""
1310
1311EXCEPTIONS_UNSORTED = """\
1312{
1313 'suite_d': {
1314 'modifications': {
1315 'Fake Tester': {
1316 'foo': 'baz',
1317 },
1318 },
1319 },
1320 'suite_c': {
1321 'modifications': {
1322 'Fake Tester': {
1323 'foo': 'bar',
1324 },
1325 },
1326 },
1327}
1328"""
1329
Stephen Martinis5bef0fc2020-01-06 22:47:531330EXCEPTIONS_PER_TEST_UNSORTED = """\
1331{
1332 'suite_d': {
1333 'modifications': {
1334 'Other Tester': {
1335 'foo': 'baz',
1336 },
1337 'Fake Tester': {
1338 'foo': 'baz',
1339 },
1340 },
1341 },
1342}
1343"""
1344
1345EXCEPTIONS_DUPS_REMOVE_FROM = """\
1346{
1347 'suite_d': {
1348 'remove_from': [
1349 'Fake Tester',
1350 'Fake Tester',
1351 ],
1352 'modifications': {
1353 'Fake Tester': {
1354 'foo': 'baz',
1355 },
1356 },
1357 },
1358}
1359"""
1360
Kenneth Russelleb60cbd22017-12-05 07:54:281361FOO_TEST_MODIFICATIONS = """\
1362{
1363 'foo_test': {
1364 'modifications': {
1365 'Fake Tester': {
1366 'args': [
1367 '--bar',
1368 ],
1369 'swarming': {
1370 'hard_timeout': 600,
1371 },
1372 },
1373 },
1374 }
1375}
1376"""
1377
John Budorick5bc387fe2019-05-09 20:02:531378FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
1379{
1380 'foo_test': {
1381 'modifications': {
1382 'Fake Tester': {
1383 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251384 'dimensions': {
1385 'integrity': None,
1386 },
John Budorick5bc387fe2019-05-09 20:02:531387 },
1388 },
1389 },
1390 },
1391}
1392"""
1393
Kenneth Russelleb60cbd22017-12-05 07:54:281394NONEXISTENT_REMOVAL = """\
1395{
1396 'foo_test': {
1397 'remove_from': [
1398 'Nonexistent Tester',
1399 ]
1400 }
1401}
1402"""
1403
1404NONEXISTENT_MODIFICATION = """\
1405{
1406 'foo_test': {
1407 'modifications': {
1408 'Nonexistent Tester': {
1409 'args': [],
1410 },
1411 },
1412 }
1413}
1414"""
1415
Kenneth Russell78fd8702018-05-17 01:15:521416LUCI_MILO_CFG = """\
1417consoles {
1418 builders {
1419 name: "buildbucket/luci.chromium.ci/Fake Tester"
1420 }
1421}
1422"""
1423
Stephen Martinis54d64ad2018-09-21 22:16:201424LUCI_MILO_CFG_WATERFALL_SORTING = """\
1425consoles {
1426 builders {
1427 name: "buildbucket/luci.chromium.ci/Fake Tester"
1428 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1429 }
1430}
1431"""
1432
Stephen Martinis54d64ad2018-09-21 22:16:201433TEST_SUITE_SORTING_WATERFALL = """
1434[
1435 {
Greg Gutermanf60eb052020-03-12 17:40:011436 'project': 'chromium',
1437 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201438 'name': 'chromium.test',
1439 'machines': {
1440 'Fake Tester': {
1441 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561442 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201443 'scripts': 'suite_b',
1444 },
1445 },
1446 },
1447 },
1448]
1449"""
1450
1451TEST_SUITE_SORTED_WATERFALL = """
1452[
1453 {
Greg Gutermanf60eb052020-03-12 17:40:011454 'project': 'chromium',
1455 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201456 'name': 'chromium.test',
1457 'machines': {
1458 'Fake Tester': {
1459 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561460 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201461 'scripts': 'suite_b',
1462 },
1463 },
1464 'Really Fake Tester': {
1465 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561466 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201467 'scripts': 'suite_b',
1468 },
1469 },
1470 },
1471 },
1472 {
Greg Gutermanf60eb052020-03-12 17:40:011473 'project': 'chromium',
1474 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201475 'name': 'chromium.zz.test',
1476 'machines': {
1477 'Fake Tester': {
1478 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561479 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201480 'scripts': 'suite_b',
1481 },
1482 },
1483 'Really Fake Tester': {
1484 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561485 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201486 'scripts': 'suite_b',
1487 },
1488 },
1489 },
1490 },
1491]
1492"""
1493
1494TEST_SUITE_UNSORTED_WATERFALL_1 = """
1495[
1496 {
Greg Gutermanf60eb052020-03-12 17:40:011497 'project': 'chromium',
1498 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201499 'name': 'chromium.zz.test',
1500 'machines': {
1501 'Fake Tester': {
1502 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561503 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201504 'scripts': 'suite_b',
1505 },
1506 },
1507 'Really Fake Tester': {
1508 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561509 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201510 'scripts': 'suite_b',
1511 },
1512 },
1513 },
1514 },
1515 {
Greg Gutermanf60eb052020-03-12 17:40:011516 'project': 'chromium',
1517 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201518 'name': 'chromium.test',
1519 'machines': {
1520 'Fake Tester': {
1521 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561522 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201523 'scripts': 'suite_b',
1524 },
1525 },
1526 'Really Fake Tester': {
1527 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561528 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201529 'scripts': 'suite_b',
1530 },
1531 },
1532 },
1533 },
1534]
1535"""
1536
1537TEST_SUITE_UNSORTED_WATERFALL_2 = """
1538[
1539 {
Greg Gutermanf60eb052020-03-12 17:40:011540 'project': 'chromium',
1541 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201542 'name': 'chromium.test',
1543 'machines': {
1544 'Really Fake Tester': {
1545 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561546 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201547 'scripts': 'suite_b',
1548 },
1549 },
1550 'Fake Tester': {
1551 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561552 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201553 'scripts': 'suite_b',
1554 },
1555 },
1556 },
1557 },
1558 {
Greg Gutermanf60eb052020-03-12 17:40:011559 'project': 'chromium',
1560 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201561 'name': 'chromium.zz.test',
1562 'machines': {
1563 'Fake Tester': {
1564 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561565 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201566 'scripts': 'suite_b',
1567 },
1568 },
1569 'Really Fake Tester': {
1570 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561571 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201572 'scripts': 'suite_b',
1573 },
1574 },
1575 },
1576 },
1577]
1578"""
1579
1580# Note that the suites in basic_suites would be sorted after the suites in
1581# compound_suites. This is valid though, because each set of suites is sorted
1582# separately.
Dirk Pranke0e879b22020-07-16 23:53:561583# suite_c is a 'gtest_tests' test
1584# suite_d is a 'scripts' test
Stephen Martinis54d64ad2018-09-21 22:16:201585TEST_SUITE_SORTED = """\
1586{
1587 'basic_suites': {
1588 'suite_c': {
1589 'suite_c': {},
1590 },
1591 'suite_d': {
1592 'script': {
1593 'script': 'suite_d.py',
1594 }
1595 },
1596 },
1597 'compound_suites': {
1598 'suite_a': [
1599 'suite_c',
1600 ],
1601 'suite_b': [
1602 'suite_d',
1603 ],
1604 },
1605}
1606"""
1607
1608TEST_SUITE_UNSORTED_1 = """\
1609{
1610 'basic_suites': {
1611 'suite_d': {
1612 'a': 'b',
1613 },
1614 'suite_c': {
1615 'a': 'b',
1616 },
1617 },
1618 'compound_suites': {
1619 'suite_a': [
1620 'suite_c',
1621 ],
1622 'suite_b': [
1623 'suite_d',
1624 ],
1625 },
1626}
1627"""
1628
1629TEST_SUITE_UNSORTED_2 = """\
1630{
1631 'basic_suites': {
1632 'suite_c': {
1633 'a': 'b',
1634 },
1635 'suite_d': {
1636 'a': 'b',
1637 },
1638 },
1639 'compound_suites': {
1640 'suite_b': [
1641 'suite_c',
1642 ],
1643 'suite_a': [
1644 'suite_d',
1645 ],
1646 },
1647}
1648"""
1649TEST_SUITE_UNSORTED_3 = """\
1650{
1651 'basic_suites': {
1652 'suite_d': {
1653 'a': 'b',
1654 },
1655 'suite_c': {
1656 'a': 'b',
1657 },
1658 },
1659 'compound_suites': {
1660 'suite_b': [
1661 'suite_c',
1662 ],
1663 'suite_a': [
1664 'suite_d',
1665 ],
1666 },
1667}
1668"""
1669
1670
1671TEST_SUITES_SYNTAX_ERROR = """\
1672{
1673 'basic_suites': {
1674 3: {
1675 'suite_c': {},
1676 },
1677 },
1678 'compound_suites': {},
1679}
1680"""
1681
Nodir Turakulovfce34292019-12-18 17:05:411682GN_ISOLATE_MAP="""\
1683{
1684 'foo_test': {
1685 'label': '//chrome/test:foo_test',
1686 'type': 'windowed_test_launcher',
1687 }
1688}
1689"""
1690
Chan Liab7d8dd82020-04-24 23:42:191691GPU_TELEMETRY_GN_ISOLATE_MAP="""\
1692{
1693 'telemetry_gpu_integration_test': {
1694 'label': '//chrome/test:telemetry_gpu_integration_test',
1695 'type': 'script',
1696 }
1697}
1698"""
Brian Sheedyf74819b2021-06-04 01:38:381699
1700GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID = """\
1701{
1702 'telemetry_gpu_integration_test_android_chrome': {
1703 'label': '//chrome/test:telemetry_gpu_integration_test_android_chrome',
1704 'type': 'script',
1705 }
1706}
1707"""
1708
1709GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW = """\
1710{
1711 'telemetry_gpu_integration_test_android_webview': {
1712 'label': '//chrome/test:telemetry_gpu_integration_test_android_webview',
1713 'type': 'script',
1714 }
1715}
1716"""
1717
Chong Guc2ca5d02022-01-11 19:52:171718GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA = """\
1719{
1720 'telemetry_gpu_integration_test_fuchsia': {
1721 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1722 'type': 'script',
1723 }
1724}
1725"""
1726
Fabrice de Ganscbd655f2022-08-04 20:15:301727GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING = """\
1728{
1729 'telemetry_gpu_integration_test_fuchsia': {
1730 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1731 'type': 'script',
1732 }
1733}
1734"""
1735
Corentin Wallez55b8e772020-04-24 17:39:281736GN_ISOLATE_MAP_KEY_LABEL_MISMATCH="""\
1737{
1738 'foo_test': {
1739 'label': '//chrome/test:foo_test_tmp',
1740 'type': 'windowed_test_launcher',
1741 }
1742}
1743"""
1744
1745GN_ISOLATE_MAP_USING_IMPLICIT_NAME="""\
1746{
1747 'foo_test': {
1748 'label': '//chrome/foo_test',
1749 'type': 'windowed_test_launcher',
1750 }
1751}
1752"""
1753
Garrett Beaty1afaccc2020-06-25 19:58:151754class UnitTest(TestCase):
Kenneth Russelleb60cbd22017-12-05 07:54:281755
Garrett Beatyade673d2023-08-04 22:00:251756 def test_dimension_sets_causes_error(self):
1757 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1758 FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS, LUCI_MILO_CFG)
1759 fbb.check_input_file_consistency(verbose=True)
1760 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1761 r'.*dimension_sets is no longer supported.*'):
1762 fbb.check_output_file_consistency(verbose=True)
1763 self.assertFalse(fbb.printed_lines)
1764
Garrett Beaty235c1412023-08-29 20:26:291765 def test_name_causes_error(self):
1766 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1767 FOO_TEST_SUITE_WITH_NAME, LUCI_MILO_CFG)
1768 fbb.check_input_file_consistency(verbose=True)
1769 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
Garrett Beatydca3d882023-09-14 23:50:321770 r'.*\bname field is set\b.*'):
1771 fbb.check_output_file_consistency(verbose=True)
1772 self.assertFalse(fbb.printed_lines)
1773
1774 def test_isolate_name_causes_error(self):
1775 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1776 FOO_TEST_SUITE_WITH_ISOLATE_NAME, LUCI_MILO_CFG)
1777 fbb.check_input_file_consistency(verbose=True)
1778 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1779 r'.*\bisolate_name field is set\b.*'):
Garrett Beaty235c1412023-08-29 20:26:291780 fbb.check_output_file_consistency(verbose=True)
1781 self.assertFalse(fbb.printed_lines)
1782
Kenneth Russelleb60cbd22017-12-05 07:54:281783 def test_good_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151784 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521785 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501786 fbb.check_input_file_consistency(verbose=True)
1787 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281788
1789 def test_good_composition_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151790 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1791 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501792 fbb.check_input_file_consistency(verbose=True)
1793 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281794
1795 def test_bad_composition_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151796 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1797 BAD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231798 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1799 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501800 fbb.check_input_file_consistency(verbose=True)
1801 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281802
Andrew Luo0f1dee02019-09-06 16:50:471803 def test_composition_test_suites_no_conflicts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151804 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1805 CONFLICTING_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231806 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1807 'Conflicting test definitions.*'):
Andrew Luo0f1dee02019-09-06 16:50:471808 fbb.check_input_file_consistency(verbose=True)
1809 self.assertFalse(fbb.printed_lines)
1810
Stephen Martinis54d64ad2018-09-21 22:16:201811 def test_composition_test_suites_no_duplicate_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:151812 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1813 DUPLICATES_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231814 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1815 '.*may not duplicate basic test suite.*'):
Stephen Martinis54d64ad2018-09-21 22:16:201816 fbb.check_input_file_consistency(verbose=True)
1817 self.assertFalse(fbb.printed_lines)
1818
Kenneth Russelleb60cbd22017-12-05 07:54:281819 def test_unknown_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151820 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521821 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231822 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1823 'Test suite baz_tests from machine.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501824 fbb.check_input_file_consistency(verbose=True)
1825 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281826
1827 def test_unknown_test_suite_types_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151828 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1829 FOO_TEST_SUITE, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231830 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1831 'Unknown test suite type foo_test_type.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501832 fbb.check_input_file_consistency(verbose=True)
1833 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281834
1835 def test_unrefed_test_suite_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151836 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521837 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231838 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1839 '.*unreferenced.*bar_tests.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501840 fbb.check_input_file_consistency(verbose=True)
1841 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281842
1843 def test_good_waterfall_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:151844 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1845 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281846 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501847 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281848
1849 def test_reusing_gtest_targets(self):
Garrett Beaty1afaccc2020-06-25 19:58:151850 fbb = FakeBBGen(self.args,
1851 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281852 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:411853 LUCI_MILO_CFG,
1854 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russelleb60cbd22017-12-05 07:54:281855 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501856 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281857
Chong Guee622242020-10-28 18:17:351858 def test_load_multiple_isolate_map_files_with_duplicates(self):
1859 self.args.isolate_map_files = ['gn_isolate_map.pyl']
1860 fbb = FakeBBGen(self.args,
1861 FOO_GTESTS_WATERFALL,
1862 REUSING_TEST_WITH_DIFFERENT_NAME,
1863 LUCI_MILO_CFG,
1864 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madillcf4f8c72021-05-20 19:24:231865 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1866 'Duplicate targets in isolate map files.*'):
Chong Guee622242020-10-28 18:17:351867 fbb.load_configuration_files()
1868
1869 def test_load_multiple_isolate_map_files_without_duplicates(self):
1870 self.args.isolate_map_files = ['gn_isolate_map2.pyl']
1871 fbb = FakeBBGen(self.args,
1872 FOO_GTESTS_WATERFALL,
1873 REUSING_TEST_WITH_DIFFERENT_NAME,
1874 LUCI_MILO_CFG,
1875 gn_isolate_map=GN_ISOLATE_MAP)
1876 fbb.load_configuration_files()
1877 isolate_dict = {}
1878 isolate_map_1 = fbb.load_pyl_file('gn_isolate_map.pyl')
1879 isolate_map_2 = fbb.load_pyl_file('gn_isolate_map2.pyl')
1880 isolate_dict.update(isolate_map_1)
1881 isolate_dict.update(isolate_map_2)
Jamie Madillcf4f8c72021-05-20 19:24:231882 self.assertEqual(isolate_dict, fbb.gn_isolate_map)
Chong Guee622242020-10-28 18:17:351883
Corentin Wallez55b8e772020-04-24 17:39:281884 def test_gn_isolate_map_with_label_mismatch(self):
Garrett Beaty1afaccc2020-06-25 19:58:151885 fbb = FakeBBGen(self.args,
1886 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281887 FOO_TEST_SUITE,
1888 LUCI_MILO_CFG,
1889 gn_isolate_map=GN_ISOLATE_MAP_KEY_LABEL_MISMATCH)
Jamie Madillcf4f8c72021-05-20 19:24:231890 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1891 'key name.*foo_test.*label.*'
1892 'foo_test_tmp.*'):
Corentin Wallez55b8e772020-04-24 17:39:281893 fbb.check_input_file_consistency(verbose=True)
1894 self.assertFalse(fbb.printed_lines)
1895
1896 def test_gn_isolate_map_using_implicit_gn_name(self):
Garrett Beaty1afaccc2020-06-25 19:58:151897 fbb = FakeBBGen(self.args,
1898 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281899 FOO_TEST_SUITE,
1900 LUCI_MILO_CFG,
1901 gn_isolate_map=GN_ISOLATE_MAP_USING_IMPLICIT_NAME)
Jamie Madillcf4f8c72021-05-20 19:24:231902 with self.assertRaisesRegex(
1903 generate_buildbot_json.BBGenErr,
1904 'Malformed.*//chrome/foo_test.*for key.*'
1905 'foo_test.*'):
Corentin Wallez55b8e772020-04-24 17:39:281906 fbb.check_input_file_consistency(verbose=True)
1907 self.assertFalse(fbb.printed_lines)
1908
Kenneth Russelleb60cbd22017-12-05 07:54:281909 def test_noop_exception_does_nothing(self):
Garrett Beaty1afaccc2020-06-25 19:58:151910 fbb = FakeBBGen(self.args,
1911 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281912 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411913 LUCI_MILO_CFG,
1914 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281915 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501916 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281917
Kenneth Russell8ceeabf2017-12-11 17:53:281918 def test_test_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151919 fbb = FakeBBGen(self.args,
1920 FOO_GTESTS_WATERFALL,
Kenneth Russell8ceeabf2017-12-11 17:53:281921 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:411922 LUCI_MILO_CFG,
1923 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russell8ceeabf2017-12-11 17:53:281924 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501925 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:281926
Kenneth Russell650995a2018-05-03 21:17:011927 def test_enable_features_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151928 fbb = FakeBBGen(self.args, FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
1929 FOO_TEST_SUITE_WITH_ENABLE_FEATURES, LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:011930 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501931 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:011932
Kenneth Russell8a386d42018-06-02 09:48:011933 def test_linux_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151934 fbb = FakeBBGen(self.args, FOO_LINUX_GTESTS_WATERFALL,
1935 FOO_TEST_SUITE_WITH_LINUX_ARGS, LUCI_MILO_CFG)
Kenneth Russell8a386d42018-06-02 09:48:011936 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501937 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:011938
Kenneth Russelleb60cbd22017-12-05 07:54:281939 def test_test_filtering(self):
Garrett Beaty1afaccc2020-06-25 19:58:151940 fbb = FakeBBGen(self.args,
1941 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281942 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411943 LUCI_MILO_CFG,
1944 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281945 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501946 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281947
1948 def test_test_modifications(self):
Garrett Beaty1afaccc2020-06-25 19:58:151949 fbb = FakeBBGen(self.args,
1950 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281951 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411952 LUCI_MILO_CFG,
1953 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281954 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501955 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281956
John Budorick5bc387fe2019-05-09 20:02:531957 def test_test_with_explicit_none(self):
Garrett Beaty1afaccc2020-06-25 19:58:151958 fbb = FakeBBGen(self.args,
1959 FOO_GTESTS_WATERFALL,
John Budorick5bc387fe2019-05-09 20:02:531960 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411961 LUCI_MILO_CFG,
1962 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
1963 mixins=SWARMING_MIXINS)
John Budorick5bc387fe2019-05-09 20:02:531964 fbb.check_output_file_consistency(verbose=True)
1965 self.assertFalse(fbb.printed_lines)
1966
Kenneth Russelleb60cbd22017-12-05 07:54:281967 def test_isolated_script_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151968 fbb = FakeBBGen(self.args,
1969 FOO_ISOLATED_SCRIPTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281970 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411971 LUCI_MILO_CFG,
1972 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281973 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501974 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281975
Ben Pastenef21cda32023-03-30 22:00:571976 def test_isolated_script_tests_android(self):
Dirk Pranke0e879b22020-07-16 23:53:561977 fbb = FakeBBGen(self.args,
1978 FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID,
1979 GOOD_COMPOSITION_TEST_SUITES,
1980 LUCI_MILO_CFG,
1981 exceptions=NO_BAR_TEST_EXCEPTIONS)
Dirk Pranke0e879b22020-07-16 23:53:561982 fbb.check_output_file_consistency(verbose=True)
1983 self.assertFalse(fbb.printed_lines)
1984
Dirk Pranke1b767092017-12-07 04:44:231985 def test_script_with_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151986 fbb = FakeBBGen(self.args,
1987 FOO_SCRIPT_WATERFALL,
Dirk Pranke1b767092017-12-07 04:44:231988 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411989 LUCI_MILO_CFG,
1990 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Dirk Pranke1b767092017-12-07 04:44:231991 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501992 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:231993
1994 def test_script(self):
Garrett Beaty1afaccc2020-06-25 19:58:151995 fbb = FakeBBGen(self.args,
1996 FOO_SCRIPT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281997 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411998 LUCI_MILO_CFG,
1999 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282000 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502001 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282002
Brian Sheedy158cd0f2019-04-26 01:12:442003 def test_script_machine_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:152004 fbb = FakeBBGen(self.args,
2005 FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:442006 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412007 LUCI_MILO_CFG,
2008 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:232009 with self.assertRaisesRegex(
2010 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:442011 'Attempted to generate a script test on tester.*'):
2012 fbb.check_output_file_consistency(verbose=True)
2013
2014 def test_script_waterfall_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:152015 fbb = FakeBBGen(self.args,
2016 FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:442017 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412018 LUCI_MILO_CFG,
2019 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:232020 with self.assertRaisesRegex(
2021 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:442022 'Attempted to generate a script test on tester.*'):
2023 fbb.check_output_file_consistency(verbose=True)
2024
Kenneth Russelleb60cbd22017-12-05 07:54:282025 def test_junit_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152026 fbb = FakeBBGen(self.args,
2027 FOO_JUNIT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282028 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412029 LUCI_MILO_CFG,
2030 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282031 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502032 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282033
Garrett Beaty235c1412023-08-29 20:26:292034 def test_gpu_telemetry_test_with_invalid_name(self):
2035 fbb = FakeBBGen(self.args,
2036 FOO_GPU_TELEMETRY_TEST_WATERFALL,
2037 COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME,
2038 LUCI_MILO_CFG,
2039 exceptions=NO_BAR_TEST_EXCEPTIONS,
2040 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
2041 with self.assertRaisesRegex(
2042 generate_buildbot_json.BBGenErr,
2043 'telemetry test names must end with test or tests.*'):
2044 fbb.check_output_file_consistency(verbose=True)
2045 self.assertFalse(fbb.printed_lines)
2046
Kenneth Russell8a386d42018-06-02 09:48:012047 def test_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152048 fbb = FakeBBGen(self.args,
2049 FOO_GPU_TELEMETRY_TEST_WATERFALL,
Garrett Beaty235c1412023-08-29 20:26:292050 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Nodir Turakulovfce34292019-12-18 17:05:412051 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192052 exceptions=NO_BAR_TEST_EXCEPTIONS,
2053 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell8a386d42018-06-02 09:48:012054 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502055 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012056
Brian Sheedyf74819b2021-06-04 01:38:382057 def test_gpu_telemetry_tests_android(self):
2058 fbb = FakeBBGen(self.args,
2059 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID,
Garrett Beaty235c1412023-08-29 20:26:292060 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382061 LUCI_MILO_CFG,
2062 exceptions=NO_BAR_TEST_EXCEPTIONS,
2063 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID)
Brian Sheedyf74819b2021-06-04 01:38:382064 fbb.check_output_file_consistency(verbose=True)
2065 self.assertFalse(fbb.printed_lines)
2066
2067 def test_gpu_telemetry_tests_android_webview(self):
2068 fbb = FakeBBGen(self.args,
2069 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW,
Garrett Beaty235c1412023-08-29 20:26:292070 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382071 LUCI_MILO_CFG,
2072 exceptions=NO_BAR_TEST_EXCEPTIONS,
2073 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW)
Brian Sheedyf74819b2021-06-04 01:38:382074 fbb.check_output_file_consistency(verbose=True)
2075 self.assertFalse(fbb.printed_lines)
2076
Chong Guc2ca5d02022-01-11 19:52:172077 def test_gpu_telemetry_tests_fuchsia(self):
2078 fbb = FakeBBGen(self.args,
2079 FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA,
Garrett Beaty235c1412023-08-29 20:26:292080 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Chong Guc2ca5d02022-01-11 19:52:172081 LUCI_MILO_CFG,
2082 exceptions=NO_BAR_TEST_EXCEPTIONS,
2083 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA)
Chong Guc2ca5d02022-01-11 19:52:172084 fbb.check_output_file_consistency(verbose=True)
2085 self.assertFalse(fbb.printed_lines)
2086
Fabrice de Ganscbd655f2022-08-04 20:15:302087 def test_gpu_telemetry_tests_cast_streaming(self):
2088 fbb = FakeBBGen(self.args,
2089 FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING,
Garrett Beaty235c1412023-08-29 20:26:292090 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Fabrice de Ganscbd655f2022-08-04 20:15:302091 LUCI_MILO_CFG,
2092 exceptions=NO_BAR_TEST_EXCEPTIONS,
2093 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING)
Fabrice de Ganscbd655f2022-08-04 20:15:302094 fbb.check_output_file_consistency(verbose=True)
2095 self.assertFalse(fbb.printed_lines)
2096
Brian Sheedyb6491ba2022-09-26 20:49:492097 def test_gpu_telemetry_tests_skylab(self):
2098 fbb = FakeBBGen(self.args,
2099 FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB,
Garrett Beaty235c1412023-08-29 20:26:292100 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyb6491ba2022-09-26 20:49:492101 LUCI_MILO_CFG,
2102 exceptions=NO_BAR_TEST_EXCEPTIONS,
2103 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyb6491ba2022-09-26 20:49:492104 fbb.check_output_file_consistency(verbose=True)
2105 self.assertFalse(fbb.printed_lines)
2106
Kenneth Russell384a1732019-03-16 02:36:022107 def test_nvidia_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152108 fbb = FakeBBGen(self.args,
2109 NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022110 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412111 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192112 exceptions=NO_BAR_TEST_EXCEPTIONS,
2113 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022114 fbb.check_output_file_consistency(verbose=True)
2115 self.assertFalse(fbb.printed_lines)
2116
2117 def test_intel_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152118 fbb = FakeBBGen(self.args,
2119 INTEL_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022120 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412121 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192122 exceptions=NO_BAR_TEST_EXCEPTIONS,
2123 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022124 fbb.check_output_file_consistency(verbose=True)
2125 self.assertFalse(fbb.printed_lines)
2126
Ben Pastene5f231cf22022-05-05 18:03:072127 def test_gpu_telemetry_tests_with_variants(self):
2128 fbb = FakeBBGen(self.args,
2129 GPU_TELEMETRY_TEST_VARIANTS_WATERFALL,
2130 MATRIX_COMPOUND_MIXED_VARIANTS_REF,
2131 LUCI_MILO_CFG,
2132 exceptions=NO_BAR_TEST_EXCEPTIONS,
2133 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP,
2134 variants=MULTI_VARIANTS_FILE)
Ben Pastene5f231cf22022-05-05 18:03:072135 fbb.check_output_file_consistency(verbose=True)
2136 self.assertFalse(fbb.printed_lines)
2137
Brian Sheedyf9387db7b2019-08-05 19:26:102138 def test_intel_uhd_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152139 fbb = FakeBBGen(self.args,
2140 INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
Brian Sheedyf9387db7b2019-08-05 19:26:102141 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412142 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192143 exceptions=NO_BAR_TEST_EXCEPTIONS,
2144 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyf9387db7b2019-08-05 19:26:102145 fbb.check_output_file_consistency(verbose=True)
2146 self.assertFalse(fbb.printed_lines)
2147
Jamie Madilla8be0d72020-10-02 05:24:042148 def test_gtest_as_isolated_Script(self):
2149 fbb = FakeBBGen(self.args,
2150 FOO_GTESTS_WATERFALL,
2151 GTEST_AS_ISOLATED_SCRIPT_SUITE,
2152 LUCI_MILO_CFG,
2153 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madilla8be0d72020-10-02 05:24:042154 fbb.check_output_file_consistency(verbose=True)
2155 self.assertFalse(fbb.printed_lines)
2156
Kenneth Russelleb60cbd22017-12-05 07:54:282157 def test_ungenerated_output_files_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152158 fbb = FakeBBGen(self.args,
2159 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282160 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412161 LUCI_MILO_CFG,
2162 exceptions=NO_BAR_TEST_EXCEPTIONS)
Stephen Martinis7eb8b612018-09-21 00:17:502163 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192164 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502165 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232166 self.assertRegex(
Dirk Pranke6269d302020-10-01 00:14:392167 joined_lines, 'File chromium.test.json did not have the following'
Stephen Martinis7eb8b612018-09-21 00:17:502168 ' expected contents:.*')
Brian Sheedydb4416f2024-08-12 20:17:022169 self.assertRegex(joined_lines, r'.*--- expected.*')
2170 self.assertRegex(joined_lines, r'.*\+\+\+ current.*')
Stephen Martinis7eb8b612018-09-21 00:17:502171 fbb.printed_lines = []
2172 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282173
2174 def test_android_output_options(self):
Garrett Beaty1afaccc2020-06-25 19:58:152175 fbb = FakeBBGen(self.args, ANDROID_WATERFALL, FOO_TEST_SUITE, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282176 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502177 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282178
Garrett Beatye3a606ceb2024-04-30 22:13:132179 def test_android_swarming(self):
2180 fbb = FakeBBGen(self.args, ANDROID_WATERFALL,
2181 FOO_TEST_SUITE_ANDROID_SWARMING, LUCI_MILO_CFG)
2182 fbb.check_output_file_consistency(verbose=True)
2183 self.assertFalse(fbb.printed_lines)
2184
Kenneth Russelleb60cbd22017-12-05 07:54:282185 def test_nonexistent_removal_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152186 fbb = FakeBBGen(self.args,
2187 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282188 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412189 LUCI_MILO_CFG,
2190 exceptions=NONEXISTENT_REMOVAL)
Jamie Madillcf4f8c72021-05-20 19:24:232191 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2192 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502193 fbb.check_input_file_consistency(verbose=True)
2194 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282195
2196 def test_nonexistent_modification_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152197 fbb = FakeBBGen(self.args,
2198 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282199 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412200 LUCI_MILO_CFG,
2201 exceptions=NONEXISTENT_MODIFICATION)
Jamie Madillcf4f8c72021-05-20 19:24:232202 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2203 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502204 fbb.check_input_file_consistency(verbose=True)
2205 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282206
John Budorickedfe7f872018-01-23 15:27:222207 def test_waterfall_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152208 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2209 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222210 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502211 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222212
Ben Pastenea9e583b2019-01-16 02:57:262213 def test_chromeos_trigger_script_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152214 fbb = FakeBBGen(self.args, FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2215 FOO_TEST_SUITE, LUCI_MILO_CFG)
Ben Pastenea9e583b2019-01-16 02:57:262216 fbb.check_output_file_consistency(verbose=True)
2217 self.assertFalse(fbb.printed_lines)
2218
Zhiling Huangbe008172018-03-08 19:13:112219 def test_relative_pyl_file_dir(self):
Garrett Beaty79339e182023-04-10 20:45:472220 self.set_args('--pyl-files-dir=relative/path')
Garrett Beaty1afaccc2020-06-25 19:58:152221 fbb = FakeBBGen(self.args,
2222 FOO_GTESTS_WATERFALL,
Zhiling Huangbe008172018-03-08 19:13:112223 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412224 LUCI_MILO_CFG,
2225 gn_isolate_map=GN_ISOLATE_MAP)
Stephen Martinis7eb8b612018-09-21 00:17:502226 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112227 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502228 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112229
Nico Weberd18b8962018-05-16 19:39:382230 def test_nonexistent_bot_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152231 fbb = FakeBBGen(self.args, UNKNOWN_BOT_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522232 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382233 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502234 fbb.check_input_file_consistency(verbose=True)
2235 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382236
Garrett Beaty4f3e9212020-06-25 20:21:492237 def test_nonexistent_bot_raises_when_no_project_pyl_exists(self):
Garrett Beaty1afaccc2020-06-25 19:58:152238 fbb = FakeBBGen(self.args,
2239 UNKNOWN_BOT_GTESTS_WATERFALL,
Garrett Beaty2a02de3c2020-05-15 13:57:352240 FOO_TEST_SUITE,
2241 LUCI_MILO_CFG,
Garrett Beaty4f3e9212020-06-25 20:21:492242 project_pyl=None)
2243 with self.assertRaises(generate_buildbot_json.BBGenErr):
2244 fbb.check_input_file_consistency(verbose=True)
2245 self.assertFalse(fbb.printed_lines)
2246
2247 def test_nonexistent_bot_does_not_raise_when_validation_disabled(self):
2248 fbb = FakeBBGen(
2249 self.args,
2250 UNKNOWN_BOT_GTESTS_WATERFALL,
2251 FOO_TEST_SUITE,
2252 LUCI_MILO_CFG,
2253 project_pyl='{"validate_source_side_specs_have_builder": False}')
Garrett Beaty2a02de3c2020-05-15 13:57:352254 fbb.check_input_file_consistency(verbose=True)
2255
Stephen Martinis54d64ad2018-09-21 22:16:202256 def test_waterfalls_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152257 fbb = FakeBBGen(self.args, TEST_SUITE_SORTED_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202258 LUCI_MILO_CFG_WATERFALL_SORTING)
2259 fbb.check_input_file_consistency(verbose=True)
2260 self.assertFalse(fbb.printed_lines)
2261
Garrett Beaty1afaccc2020-06-25 19:58:152262 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_1,
2263 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232264 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202265 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472266 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392267 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472268 ):
Stephen Martinis54d64ad2018-09-21 22:16:202269 fbb.check_input_file_consistency(verbose=True)
2270 joined_lines = '\n'.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022271 self.assertRegex(joined_lines, r'.*\+ chromium\..*test.*')
2272 self.assertRegex(joined_lines, r'.*\- chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202273 fbb.printed_lines = []
2274 self.assertFalse(fbb.printed_lines)
2275
Garrett Beaty1afaccc2020-06-25 19:58:152276 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_2,
2277 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232278 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202279 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472280 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392281 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472282 ):
Stephen Martinis54d64ad2018-09-21 22:16:202283 fbb.check_input_file_consistency(verbose=True)
2284 joined_lines = ' '.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022285 self.assertRegex(joined_lines, r'.*\+.*Fake Tester.*')
2286 self.assertRegex(joined_lines, r'.*\-.*Fake Tester.*')
Stephen Martinis54d64ad2018-09-21 22:16:202287 fbb.printed_lines = []
2288 self.assertFalse(fbb.printed_lines)
2289
2290 def test_test_suite_exceptions_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152291 fbb = FakeBBGen(self.args,
2292 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202293 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412294 LUCI_MILO_CFG,
2295 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502296 fbb.check_input_file_consistency(verbose=True)
2297 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182298
Garrett Beaty1afaccc2020-06-25 19:58:152299 fbb = FakeBBGen(self.args,
2300 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202301 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412302 LUCI_MILO_CFG,
Stephen Martinis5bef0fc2020-01-06 22:47:532303 exceptions=EXCEPTIONS_DUPS_REMOVE_FROM)
2304 with self.assertRaises(generate_buildbot_json.BBGenErr):
2305 fbb.check_input_file_consistency(verbose=True)
2306 joined_lines = ' '.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022307 self.assertRegex(joined_lines, r'.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532308 fbb.printed_lines = []
2309 self.assertFalse(fbb.printed_lines)
2310
2311 def test_test_suite_exceptions_no_dups_remove_from(self):
Garrett Beaty1afaccc2020-06-25 19:58:152312 fbb = FakeBBGen(self.args,
2313 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532314 TEST_SUITE_SORTED,
2315 LUCI_MILO_CFG,
2316 exceptions=EXCEPTIONS_SORTED)
2317 fbb.check_input_file_consistency(verbose=True)
2318 self.assertFalse(fbb.printed_lines)
2319
Garrett Beaty1afaccc2020-06-25 19:58:152320 fbb = FakeBBGen(self.args,
2321 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532322 TEST_SUITE_SORTED,
2323 LUCI_MILO_CFG,
2324 exceptions=EXCEPTIONS_PER_TEST_UNSORTED)
Stephen Martinis5bef0fc2020-01-06 22:47:532325 with self.assertRaises(generate_buildbot_json.BBGenErr):
2326 fbb.check_input_file_consistency(verbose=True)
2327 joined_lines = ' '.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022328 self.assertRegex(joined_lines, r'.*\+ Fake Tester.*')
2329 self.assertRegex(joined_lines, r'.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532330 fbb.printed_lines = []
2331 self.assertFalse(fbb.printed_lines)
2332
2333 def test_test_suite_exceptions_per_test_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152334 fbb = FakeBBGen(self.args,
2335 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532336 TEST_SUITE_SORTED,
2337 LUCI_MILO_CFG,
2338 exceptions=EXCEPTIONS_SORTED)
2339 fbb.check_input_file_consistency(verbose=True)
2340 self.assertFalse(fbb.printed_lines)
2341
Garrett Beaty1afaccc2020-06-25 19:58:152342 fbb = FakeBBGen(self.args,
2343 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532344 TEST_SUITE_SORTED,
2345 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:412346 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202347 with self.assertRaises(generate_buildbot_json.BBGenErr):
2348 fbb.check_input_file_consistency(verbose=True)
2349 joined_lines = ' '.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022350 self.assertRegex(joined_lines, r'.*\+ suite_.*')
2351 self.assertRegex(joined_lines, r'.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202352 fbb.printed_lines = []
2353 self.assertFalse(fbb.printed_lines)
2354
2355 def test_test_suites_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152356 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202357 LUCI_MILO_CFG)
2358 fbb.check_input_file_consistency(verbose=True)
2359 self.assertFalse(fbb.printed_lines)
2360
2361 for unsorted in (
2362 TEST_SUITE_UNSORTED_1,
2363 TEST_SUITE_UNSORTED_2,
2364 TEST_SUITE_UNSORTED_3,
2365 ):
Garrett Beaty1afaccc2020-06-25 19:58:152366 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202367 LUCI_MILO_CFG)
2368 with self.assertRaises(generate_buildbot_json.BBGenErr):
2369 fbb.check_input_file_consistency(verbose=True)
2370 joined_lines = ' '.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022371 self.assertRegex(joined_lines, r'.*\+ suite_.*')
2372 self.assertRegex(joined_lines, r'.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202373 fbb.printed_lines = []
2374 self.assertFalse(fbb.printed_lines)
2375
Stephen Martinis11672542018-10-29 18:17:212376
2377FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2378[
2379 {
2380 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012381 'project': 'chromium',
2382 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212383 'name': 'chromium.test',
2384 'machines': {
2385 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:452386 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252387 'dimensions': {
2388 'os': 'Linux',
2389 },
Ben Pastene338f56b2023-03-31 21:24:452390 },
Stephen Martinis11672542018-10-29 18:17:212391 'test_suites': {
2392 'gtest_tests': 'foo_tests',
2393 },
2394 },
2395 },
2396 },
2397]
2398"""
2399
2400FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2401[
2402 {
Greg Gutermanf60eb052020-03-12 17:40:012403 'project': 'chromium',
2404 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212405 'name': 'chromium.test',
2406 'machines': {
2407 'Fake Tester': {
2408 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452409 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252410 'dimensions': {
2411 'os': 'Linux',
2412 },
Ben Pastene338f56b2023-03-31 21:24:452413 },
Stephen Martinis11672542018-10-29 18:17:212414 'test_suites': {
2415 'gtest_tests': 'foo_tests',
2416 },
2417 },
2418 },
2419 },
2420]
2421"""
2422
Austin Eng148d9f0f2022-02-08 19:18:532423FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2424[
2425 {
2426 'project': 'chromium',
2427 'bucket': 'ci',
2428 'name': 'chromium.test',
2429 'machines': {
2430 'Fake Tester': {
2431 'os_type': 'linux',
2432 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452433 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252434 'dimensions': {
2435 'os': 'Linux',
2436 },
Ben Pastene338f56b2023-03-31 21:24:452437 },
Austin Eng148d9f0f2022-02-08 19:18:532438 'test_suites': {
2439 'gtest_tests': 'foo_tests',
2440 },
2441 },
2442 },
2443 },
2444]
2445"""
2446
Stephen Martinis11672542018-10-29 18:17:212447FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2448[
2449 {
Greg Gutermanf60eb052020-03-12 17:40:012450 'project': 'chromium',
2451 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212452 'name': 'chromium.test',
2453 'machines': {
2454 'Fake Tester': {
2455 'mixins': ['random_mixin'],
2456 'swarming': {},
2457 'test_suites': {
2458 'gtest_tests': 'foo_tests',
2459 },
2460 },
2461 },
2462 },
2463]
2464"""
2465
2466FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2467[
2468 {
Greg Gutermanf60eb052020-03-12 17:40:012469 'project': 'chromium',
2470 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212471 'name': 'chromium.test',
2472 'machines': {
2473 'Fake Tester': {
2474 'mixins': ['dimension_mixin'],
2475 'swarming': {},
2476 'test_suites': {
2477 'gtest_tests': 'foo_tests',
2478 },
2479 },
2480 },
2481 },
2482]
2483"""
2484
2485FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2486[
2487 {
Greg Gutermanf60eb052020-03-12 17:40:012488 'project': 'chromium',
2489 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212490 'name': 'chromium.test',
2491 'machines': {
2492 'Fake Tester': {
2493 'mixins': ['dimension_mixin'],
2494 'os_type': 'win',
2495 'browser_config': 'release',
2496 'test_suites': {
2497 'gpu_telemetry_tests': 'foo_tests',
2498 },
2499 },
2500 },
2501 },
2502]
2503"""
2504
2505# Swarming mixins must be a list, a single string is not allowed.
2506FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2507[
2508 {
Greg Gutermanf60eb052020-03-12 17:40:012509 'project': 'chromium',
2510 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212511 'name': 'chromium.test',
2512 'machines': {
2513 'Fake Tester': {
2514 'mixins': 'dimension_mixin',
2515 'swarming': {},
2516 'test_suites': {
2517 'gtest_tests': 'foo_tests',
2518 },
2519 },
2520 },
2521 },
2522]
2523"""
2524FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
2525[
2526 {
Greg Gutermanf60eb052020-03-12 17:40:012527 'project': 'chromium',
2528 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212529 'name': 'chromium.test',
2530 'machines': {
2531 'Fake Tester': {
2532 'mixins': ['nonexistant'],
2533 'swarming': {},
2534 'test_suites': {
2535 'gtest_tests': 'foo_tests',
2536 },
2537 },
2538 },
2539 },
2540]
2541"""
2542
2543FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
2544[
2545 {
Greg Gutermanf60eb052020-03-12 17:40:012546 'project': 'chromium',
2547 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212548 'name': 'chromium.test',
Greg Gutermanf60eb052020-03-12 17:40:012549 'mixins': ['waterfall_mixin'],
Stephen Martinis11672542018-10-29 18:17:212550 'machines': {
2551 'Fake Tester': {
2552 'swarming': {},
2553 'test_suites': {
2554 'gtest_tests': 'foo_tests',
2555 },
2556 },
2557 },
2558 },
2559]
2560"""
2561
2562FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2563[
2564 {
2565 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012566 'project': 'chromium',
2567 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212568 'name': 'chromium.test',
2569 'machines': {
2570 'Fake Tester': {
2571 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252572 'dimensions': {
2573 'kvm': '1',
2574 },
Stephen Martinis11672542018-10-29 18:17:212575 },
2576 'test_suites': {
2577 'gtest_tests': 'foo_tests',
2578 },
2579 },
2580 },
2581 },
2582]
2583"""
2584
2585FOO_TEST_SUITE_WITH_MIXIN = """\
2586{
2587 'basic_suites': {
2588 'foo_tests': {
2589 'foo_test': {
2590 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252591 'dimensions': {
2592 'integrity': 'high',
2593 'os': 'Linux',
2594 },
Stephen Martinis11672542018-10-29 18:17:212595 'expiration': 120,
2596 },
2597 'mixins': ['test_mixin'],
2598 },
2599 },
2600 },
2601}
2602"""
2603
Garrett Beaty4c35b142023-06-23 21:01:232604MIXIN_ARGS = """\
2605{
2606 'builder_mixin': {
2607 'args': [],
2608 },
2609}
2610"""
2611
2612MIXIN_ARGS_NOT_LIST = """\
2613{
2614 'builder_mixin': {
2615 'args': 'I am not a list',
2616 },
2617}
2618"""
2619
Garrett Beatyb061e69d2023-06-27 16:15:352620MIXIN_LINUX_ARGS = """\
2621{
2622 'builder_mixin': {
2623 'args': [ '--mixin-argument' ],
2624 'linux_args': [ '--linux-mixin-argument' ],
2625 },
2626}
2627"""
2628
2629MIXIN_APPEND = """\
2630{
2631 'builder_mixin': {
2632 '$mixin_append': {
2633 'args': [ '--mixin-argument' ],
2634 },
2635 },
2636}
2637"""
2638
Stephen Martinis11672542018-10-29 18:17:212639# These mixins are invalid; if passed to check_input_file_consistency, they will
2640# fail. These are used for output file consistency checks.
2641SWARMING_MIXINS = """\
2642{
2643 'builder_mixin': {
2644 'swarming': {
2645 'value': 'builder',
2646 },
2647 },
2648 'dimension_mixin': {
2649 'swarming': {
2650 'dimensions': {
2651 'iama': 'mixin',
2652 },
2653 },
2654 },
2655 'random_mixin': {
2656 'value': 'random',
2657 },
2658 'test_mixin': {
2659 'swarming': {
2660 'value': 'test',
2661 },
2662 },
2663 'waterfall_mixin': {
2664 'swarming': {
2665 'value': 'waterfall',
2666 },
2667 },
2668}
2669"""
2670
Garrett Beaty4c35b142023-06-23 21:01:232671SWARMING_NAMED_CACHES = """\
2672{
2673 'builder_mixin': {
2674 'swarming': {
2675 'named_caches': [
2676 {
2677 'name': 'cache',
2678 'file': 'cache_file',
2679 },
2680 ],
2681 },
2682 },
2683}
2684"""
2685
Stephen Martinis11672542018-10-29 18:17:212686SWARMING_MIXINS_DUPLICATED = """\
2687{
2688 'builder_mixin': {
2689 'value': 'builder',
2690 },
2691 'builder_mixin': {
2692 'value': 'builder',
2693 },
2694}
2695"""
2696
2697SWARMING_MIXINS_UNSORTED = """\
2698{
2699 'b_mixin': {
2700 'b': 'b',
2701 },
2702 'a_mixin': {
2703 'a': 'a',
2704 },
2705 'c_mixin': {
2706 'c': 'c',
2707 },
2708}
2709"""
2710
2711SWARMING_MIXINS_SORTED = """\
2712{
2713 'a_mixin': {
2714 'a': 'a',
2715 },
2716 'b_mixin': {
2717 'b': 'b',
2718 },
2719 'c_mixin': {
2720 'c': 'c',
2721 },
2722}
2723"""
2724
Garrett Beaty1afaccc2020-06-25 19:58:152725
2726class MixinTests(TestCase):
Stephen Martinis11672542018-10-29 18:17:212727 """Tests for the mixins feature."""
2728 def test_mixins_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152729 fbb = FakeBBGen(self.args,
2730 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212731 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412732 LUCI_MILO_CFG,
2733 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:212734 fbb.check_input_file_consistency(verbose=True)
2735 self.assertFalse(fbb.printed_lines)
2736
Garrett Beaty1afaccc2020-06-25 19:58:152737 fbb = FakeBBGen(self.args,
2738 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212739 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412740 LUCI_MILO_CFG,
2741 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:212742 with self.assertRaises(generate_buildbot_json.BBGenErr):
2743 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532744 joined_lines = '\n'.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022745 self.assertRegex(joined_lines, r'.*\+ ._mixin.*')
2746 self.assertRegex(joined_lines, r'.*\- ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:212747 fbb.printed_lines = []
2748 self.assertFalse(fbb.printed_lines)
2749
2750 def test_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152751 fbb = FakeBBGen(self.args,
2752 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212753 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412754 LUCI_MILO_CFG,
2755 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212756 fbb.check_output_file_consistency(verbose=True)
2757 self.assertFalse(fbb.printed_lines)
2758
2759 def test_waterfall_exception_overrides(self):
Garrett Beaty1afaccc2020-06-25 19:58:152760 fbb = FakeBBGen(self.args,
2761 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212762 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412763 LUCI_MILO_CFG,
2764 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2765 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212766 fbb.check_output_file_consistency(verbose=True)
2767 self.assertFalse(fbb.printed_lines)
2768
Stephanie Kim572b43c02023-04-13 14:24:132769 def test_autoshard_exceptions(self):
2770 fbb = FakeBBGen(self.args,
2771 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2772 FOO_TEST_SUITE,
2773 LUCI_MILO_CFG,
2774 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2775 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2776 mixins=SWARMING_MIXINS)
2777 fbb.check_output_file_consistency(verbose=True)
2778 self.assertFalse(fbb.printed_lines)
2779
2780 def test_autoshard_exceptions_variant_names(self):
2781 fbb = FakeBBGen(self.args,
2782 MATRIX_GTEST_SUITE_WATERFALL,
2783 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
2784 LUCI_MILO_CFG,
2785 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2786 variants=VARIANTS_FILE)
2787 fbb.check_output_file_consistency(verbose=True)
2788 self.assertFalse(fbb.printed_lines)
2789
Stephen Martinis11672542018-10-29 18:17:212790 def test_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152791 fbb = FakeBBGen(self.args,
2792 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212793 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412794 LUCI_MILO_CFG,
2795 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212796 fbb.check_output_file_consistency(verbose=True)
2797 self.assertFalse(fbb.printed_lines)
2798
2799 def test_builder_non_swarming(self):
Garrett Beaty1afaccc2020-06-25 19:58:152800 fbb = FakeBBGen(self.args,
2801 FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212802 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412803 LUCI_MILO_CFG,
2804 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212805 fbb.check_output_file_consistency(verbose=True)
2806 self.assertFalse(fbb.printed_lines)
2807
2808 def test_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152809 fbb = FakeBBGen(self.args,
2810 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212811 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412812 LUCI_MILO_CFG,
2813 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212814 fbb.check_output_file_consistency(verbose=True)
2815 self.assertFalse(fbb.printed_lines)
2816
2817 def test_dimension(self):
Garrett Beaty1afaccc2020-06-25 19:58:152818 fbb = FakeBBGen(self.args,
2819 FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212820 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412821 LUCI_MILO_CFG,
2822 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212823 fbb.check_output_file_consistency(verbose=True)
2824 self.assertFalse(fbb.printed_lines)
2825
2826 def test_dimension_gpu(self):
Garrett Beaty1afaccc2020-06-25 19:58:152827 fbb = FakeBBGen(self.args,
2828 FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212829 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412830 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192831 mixins=SWARMING_MIXINS,
2832 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Stephen Martinis11672542018-10-29 18:17:212833 fbb.check_output_file_consistency(verbose=True)
2834 self.assertFalse(fbb.printed_lines)
2835
2836 def test_unreferenced(self):
Garrett Beaty1afaccc2020-06-25 19:58:152837 fbb = FakeBBGen(self.args,
2838 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212839 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412840 LUCI_MILO_CFG,
2841 mixins=SWARMING_MIXINS)
Jamie Madillcf4f8c72021-05-20 19:24:232842 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2843 '.*mixins are unreferenced.*'):
Stephen Martinis11672542018-10-29 18:17:212844 fbb.check_input_file_consistency(verbose=True)
2845 self.assertFalse(fbb.printed_lines)
2846
Stephen Martinis11672542018-10-29 18:17:212847 def test_unused(self):
Garrett Beaty1afaccc2020-06-25 19:58:152848 fbb = FakeBBGen(self.args,
2849 FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212850 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412851 LUCI_MILO_CFG,
2852 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212853 with self.assertRaises(generate_buildbot_json.BBGenErr):
2854 fbb.check_output_file_consistency(verbose=True)
2855 self.assertFalse(fbb.printed_lines)
2856
2857 def test_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:152858 fbb = FakeBBGen(self.args,
2859 FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212860 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412861 LUCI_MILO_CFG,
2862 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212863 with self.assertRaises(generate_buildbot_json.BBGenErr):
2864 fbb.check_output_file_consistency(verbose=True)
2865 self.assertFalse(fbb.printed_lines)
2866
2867
2868 def test_no_duplicate_keys(self):
Garrett Beaty1afaccc2020-06-25 19:58:152869 fbb = FakeBBGen(self.args,
2870 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202871 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412872 LUCI_MILO_CFG,
2873 mixins=SWARMING_MIXINS_DUPLICATED)
Jamie Madillcf4f8c72021-05-20 19:24:232874 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202875 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392876 ('The following files have invalid keys: ' +
2877 re.escape(self.args.mixins_pyl_path)),
2878 ):
Stephen Martinis54d64ad2018-09-21 22:16:202879 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532880 joined_lines = '\n'.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022881 self.assertRegex(joined_lines, r'.*\- builder_mixin')
Stephen Martinis5bef0fc2020-01-06 22:47:532882 fbb.printed_lines = []
2883 self.assertFalse(fbb.printed_lines)
2884
2885 def test_no_duplicate_keys_basic_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152886 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE_NOT_SORTED,
Stephen Martinis5bef0fc2020-01-06 22:47:532887 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:232888 with self.assertRaisesRegex(
Stephen Martinis5bef0fc2020-01-06 22:47:532889 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472890 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392891 re.escape(self.args.test_suites_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472892 ):
Stephen Martinis5bef0fc2020-01-06 22:47:532893 fbb.check_input_file_consistency(verbose=True)
2894 joined_lines = '\n'.join(fbb.printed_lines)
Brian Sheedydb4416f2024-08-12 20:17:022895 self.assertRegex(joined_lines, r'.*\- a_test')
2896 self.assertRegex(joined_lines, r'.*\+ a_test')
Stephen Martinis54d64ad2018-09-21 22:16:202897 fbb.printed_lines = []
2898 self.assertFalse(fbb.printed_lines)
2899
2900 def test_type_assert_printing_help(self):
Garrett Beaty1afaccc2020-06-25 19:58:152901 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:202902 LUCI_MILO_CFG)
Garrett Beaty79339e182023-04-10 20:45:472903 with self.assertRaisesRegex(
2904 generate_buildbot_json.BBGenErr,
Brian Sheedydb4416f2024-08-12 20:17:022905 f'Invalid \\.pyl file '
2906 f"'{re.escape(self.args.test_suites_pyl_path)}'.*",
Garrett Beaty807011ab2023-04-12 00:52:392907 ):
Stephen Martinis54d64ad2018-09-21 22:16:202908 fbb.check_input_file_consistency(verbose=True)
Jamie Madillcf4f8c72021-05-20 19:24:232909 self.assertEqual(fbb.printed_lines, [
Garrett Beaty79339e182023-04-10 20:45:472910 f'== {self.args.test_suites_pyl_path} ==',
Jamie Madillcf4f8c72021-05-20 19:24:232911 '<snip>',
2912 '1 {',
2913 "2 'basic_suites': {",
2914 '--------------------------------------------------------------------'
2915 '------------',
2916 '3 3: {',
2917 '-------^------------------------------------------------------------'
2918 '------------',
2919 "4 'suite_c': {},",
2920 '5 },',
2921 '<snip>',
2922 ])
Stephen Martinis54d64ad2018-09-21 22:16:202923
Garrett Beatyb061e69d2023-06-27 16:15:352924 def test_mixin_append(self):
Garrett Beaty1afaccc2020-06-25 19:58:152925 fbb = FakeBBGen(self.args,
2926 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:412927 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412928 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352929 mixins=MIXIN_APPEND)
2930 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2931 r'.*\$mixin_append is no longer supported.*'):
2932 fbb.check_input_file_consistency(verbose=True)
Austin Eng148d9f0f2022-02-08 19:18:532933 self.assertFalse(fbb.printed_lines)
2934
Garrett Beaty4c35b142023-06-23 21:01:232935 def test_swarming_named_caches(self):
2936 fbb = FakeBBGen(self.args,
2937 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2938 FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES,
2939 LUCI_MILO_CFG,
2940 mixins=SWARMING_NAMED_CACHES)
2941 fbb.check_output_file_consistency(verbose=True)
2942 self.assertFalse(fbb.printed_lines)
2943
Garrett Beaty4c35b142023-06-23 21:01:232944 def test_args_field_not_list(self):
2945 fbb = FakeBBGen(self.args,
2946 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2947 FOO_TEST_SUITE_WITH_ARGS,
2948 LUCI_MILO_CFG,
2949 mixins=MIXIN_ARGS_NOT_LIST)
2950 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2951 '"args" must be a list'):
2952 fbb.check_output_file_consistency(verbose=True)
2953 self.assertFalse(fbb.printed_lines)
2954
2955 def test_args_field_merging(self):
2956 fbb = FakeBBGen(self.args,
2957 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2958 FOO_TEST_SUITE_WITH_ARGS,
2959 LUCI_MILO_CFG,
2960 mixins=MIXIN_ARGS)
Garrett Beaty4c35b142023-06-23 21:01:232961 fbb.check_output_file_consistency(verbose=True)
2962 self.assertFalse(fbb.printed_lines)
2963
Garrett Beatyb061e69d2023-06-27 16:15:352964 def test_linux_args_field_merging(self):
Garrett Beaty1afaccc2020-06-25 19:58:152965 fbb = FakeBBGen(self.args,
Garrett Beatyb061e69d2023-06-27 16:15:352966 FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL,
2967 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412968 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352969 mixins=MIXIN_LINUX_ARGS)
2970 fbb.check_output_file_consistency(verbose=True)
Wezc0e835b702018-10-30 00:38:412971 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:202972
Brian Sheedy7658c982020-01-08 02:27:582973 def test_remove_mixin_test_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152974 fbb = FakeBBGen(self.args,
2975 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582976 FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN,
2977 LUCI_MILO_CFG,
2978 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582979 fbb.check_output_file_consistency(verbose=True)
2980 self.assertFalse(fbb.printed_lines)
2981
2982 def test_remove_mixin_test_remove_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152983 fbb = FakeBBGen(self.args,
2984 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582985 FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN,
2986 LUCI_MILO_CFG,
2987 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582988 fbb.check_output_file_consistency(verbose=True)
2989 self.assertFalse(fbb.printed_lines)
2990
Karen Qiane24b7ee2019-02-12 23:37:062991TEST_SUITE_WITH_PARAMS = """\
2992{
2993 'basic_suites': {
2994 'bar_tests': {
2995 'bar_test': {
2996 'args': ['--no-xvfb'],
2997 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252998 'dimensions': {
2999 'device_os': 'NMF26U'
3000 },
Karen Qiane24b7ee2019-02-12 23:37:063001 },
3002 'should_retry_with_patch': False,
Karen Qiane24b7ee2019-02-12 23:37:063003 },
3004 'bar_test_test': {
3005 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253006 'dimensions': {
3007 'kvm': '1'
3008 },
Karen Qiane24b7ee2019-02-12 23:37:063009 'hard_timeout': 1000
3010 },
3011 'should_retry_with_patch': True
3012 }
3013 },
3014 'foo_tests': {
3015 'foo_test_empty': {},
3016 'foo_test': {
3017 'args': [
3018 '--jobs=1',
3019 '--verbose'
3020 ],
3021 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253022 'dimensions': {
3023 'device_os': 'MMB29Q'
3024 },
Karen Qiane24b7ee2019-02-12 23:37:063025 'hard_timeout': 1800
3026 }
3027 },
Garrett Beaty235c1412023-08-29 20:26:293028 'pls': {
Karen Qiane24b7ee2019-02-12 23:37:063029 'swarming': {
3030 },
Karen Qiane24b7ee2019-02-12 23:37:063031 },
3032 },
3033 },
3034 'compound_suites': {
3035 'composition_tests': [
3036 'foo_tests',
3037 'bar_tests',
3038 ],
3039 },
3040}
3041"""
3042TEST_QUERY_BOTS_OUTPUT = {
Brian Sheedy0d2300f32024-08-13 23:14:413043 'Fake Android M Tester': {
3044 'gtest_tests': [{
3045 'name': 'foo_test',
3046 'test': 'foo_test',
Garrett Beatybb18d532023-06-26 22:16:333047 }]
3048 },
Brian Sheedy0d2300f32024-08-13 23:14:413049 'Fake Android L Tester': {
3050 'gtest_tests': [{
3051 'test':
3052 'foo_test',
3053 'args': [
3054 '--gs-results-bucket=chromium-result-details',
3055 '--recover-devices'
Garrett Beatybb18d532023-06-26 22:16:333056 ],
Brian Sheedy0d2300f32024-08-13 23:14:413057 'merge': {
3058 'script': '//testing/merge_scripts/standard_gtest_merge.py'
Garrett Beatybb18d532023-06-26 22:16:333059 },
Brian Sheedy0d2300f32024-08-13 23:14:413060 'name':
3061 'foo_test',
3062 'swarming': {
3063 'dimensions': {
3064 'device_os': 'LMY41U',
3065 'device_os_type': 'user',
3066 'device_type': 'hammerhead',
Garrett Beatybb18d532023-06-26 22:16:333067 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253068 },
Karen Qiane24b7ee2019-02-12 23:37:063069 }
Garrett Beatybb18d532023-06-26 22:16:333070 }]
3071 },
Brian Sheedy0d2300f32024-08-13 23:14:413072 'Fake Android K Tester': {
3073 'additional_compile_targets': ['bar_test'],
3074 'gtest_tests': [{
3075 'test':
3076 'foo_test',
3077 'args': [
3078 '--gs-results-bucket=chromium-result-details',
3079 '--recover-devices'
Garrett Beatybb18d532023-06-26 22:16:333080 ],
Brian Sheedy0d2300f32024-08-13 23:14:413081 'merge': {
3082 'script': '//testing/merge_scripts/standard_gtest_merge.py'
Garrett Beatybb18d532023-06-26 22:16:333083 },
Brian Sheedy0d2300f32024-08-13 23:14:413084 'name':
3085 'foo_test',
3086 'swarming': {
3087 'dimensions': {
3088 'device_os': 'KTU84P',
3089 'device_os_type': 'userdebug',
3090 'device_type': 'hammerhead',
3091 'os': 'Android',
Garrett Beatyade673d2023-08-04 22:00:253092 },
Karen Qiane24b7ee2019-02-12 23:37:063093 }
Garrett Beatybb18d532023-06-26 22:16:333094 }]
3095 },
Brian Sheedy0d2300f32024-08-13 23:14:413096 'Android Builder': {
3097 'additional_compile_targets': ['bar_test']
Garrett Beatybb18d532023-06-26 22:16:333098 }
Karen Qiane24b7ee2019-02-12 23:37:063099}
3100TEST_QUERY_BOTS_TESTS_OUTPUT = {
Brian Sheedy0d2300f32024-08-13 23:14:413101 'Fake Android M Tester': [{
3102 'name': 'foo_test',
3103 'test': 'foo_test',
Garrett Beatybb18d532023-06-26 22:16:333104 }],
Brian Sheedy0d2300f32024-08-13 23:14:413105 'Fake Android L Tester': [{
3106 'test':
3107 'foo_test',
3108 'args':
3109 ['--gs-results-bucket=chromium-result-details', '--recover-devices'],
3110 'merge': {
3111 'script': '//testing/merge_scripts/standard_gtest_merge.py'
Garrett Beatybb18d532023-06-26 22:16:333112 },
Brian Sheedy0d2300f32024-08-13 23:14:413113 'name':
3114 'foo_test',
3115 'swarming': {
3116 'dimensions': {
3117 'device_os': 'LMY41U',
3118 'device_os_type': 'user',
3119 'device_type': 'hammerhead',
3120 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253121 },
Garrett Beatybb18d532023-06-26 22:16:333122 }
3123 }],
Brian Sheedy0d2300f32024-08-13 23:14:413124 'Android Builder': [],
3125 'Fake Android K Tester': [{
3126 'test':
3127 'foo_test',
3128 'args':
3129 ['--gs-results-bucket=chromium-result-details', '--recover-devices'],
3130 'merge': {
3131 'script': '//testing/merge_scripts/standard_gtest_merge.py'
Garrett Beatybb18d532023-06-26 22:16:333132 },
Brian Sheedy0d2300f32024-08-13 23:14:413133 'name':
3134 'foo_test',
3135 'swarming': {
3136 'dimensions': {
3137 'device_os': 'KTU84P',
3138 'device_os_type': 'userdebug',
3139 'device_type': 'hammerhead',
3140 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253141 },
Garrett Beatybb18d532023-06-26 22:16:333142 }
3143 }]
Karen Qiane24b7ee2019-02-12 23:37:063144}
3145
3146TEST_QUERY_BOT_OUTPUT = {
Brian Sheedy0d2300f32024-08-13 23:14:413147 'additional_compile_targets': ['bar_test'],
3148 'gtest_tests': [
Garrett Beatyade673d2023-08-04 22:00:253149 {
Brian Sheedy0d2300f32024-08-13 23:14:413150 'test':
3151 'foo_test',
3152 'args': [
3153 '--gs-results-bucket=chromium-result-details',
3154 '--recover-devices',
Garrett Beatyade673d2023-08-04 22:00:253155 ],
Brian Sheedy0d2300f32024-08-13 23:14:413156 'merge': {
3157 'script': '//testing/merge_scripts/standard_gtest_merge.py',
Garrett Beatyade673d2023-08-04 22:00:253158 },
Brian Sheedy0d2300f32024-08-13 23:14:413159 'name':
3160 'foo_test',
3161 'swarming': {
3162 'dimensions': {
3163 'device_os': 'KTU84P',
3164 'device_os_type': 'userdebug',
3165 'device_type': 'hammerhead',
3166 'os': 'Android',
Garrett Beatyade673d2023-08-04 22:00:253167 },
Garrett Beatyade673d2023-08-04 22:00:253168 },
3169 },
3170 ],
Karen Qiane24b7ee2019-02-12 23:37:063171}
Garrett Beatybb18d532023-06-26 22:16:333172TEST_QUERY_BOT_TESTS_OUTPUT = [{
Brian Sheedy0d2300f32024-08-13 23:14:413173 'test':
3174 'foo_test',
3175 'args':
3176 ['--gs-results-bucket=chromium-result-details', '--recover-devices'],
3177 'merge': {
3178 'script': '//testing/merge_scripts/standard_gtest_merge.py'
Stephen Martinisbc7b7772019-05-01 22:01:433179 },
Brian Sheedy0d2300f32024-08-13 23:14:413180 'name':
3181 'foo_test',
3182 'swarming': {
3183 'dimensions': {
3184 'device_os': 'LMY41U',
3185 'device_os_type': 'user',
3186 'device_type': 'hammerhead',
3187 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253188 },
Karen Qiane24b7ee2019-02-12 23:37:063189 }
Garrett Beatybb18d532023-06-26 22:16:333190}]
Karen Qiane24b7ee2019-02-12 23:37:063191
3192TEST_QUERY_TESTS_OUTPUT = {
Brian Sheedy0d2300f32024-08-13 23:14:413193 'bar_test': {
Garrett Beatyffe83c4f2023-09-08 19:07:373194 'name': 'bar_test',
Ben Pastene338f56b2023-03-31 21:24:453195 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253196 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453197 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253198 },
Ben Pastene338f56b2023-03-31 21:24:453199 }
3200 },
Brian Sheedy0d2300f32024-08-13 23:14:413201 'foo_test': {
Garrett Beatyffe83c4f2023-09-08 19:07:373202 'name': 'foo_test',
Ben Pastene338f56b2023-03-31 21:24:453203 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253204 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453205 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253206 },
Ben Pastene338f56b2023-03-31 21:24:453207 }
3208 }
Karen Qiane24b7ee2019-02-12 23:37:063209}
3210
Brian Sheedy0d2300f32024-08-13 23:14:413211TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ['foo_test']
Karen Qiane24b7ee2019-02-12 23:37:063212
Brian Sheedy0d2300f32024-08-13 23:14:413213TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ['bar_test']
Karen Qiane24b7ee2019-02-12 23:37:063214
Brian Sheedy0d2300f32024-08-13 23:14:413215TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ['bar_test_test']
Karen Qiane24b7ee2019-02-12 23:37:063216
3217TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3218
3219TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3220
Garrett Beatyffe83c4f2023-09-08 19:07:373221TEST_QUERY_TEST_OUTPUT = {
3222 'name': 'foo_test',
3223 'swarming': {
3224 'dimensions': {
3225 'os': 'Linux',
3226 },
3227 },
3228}
Karen Qiane24b7ee2019-02-12 23:37:063229
3230TEST_QUERY_TEST_BOTS_OUTPUT = [
Brian Sheedy0d2300f32024-08-13 23:14:413231 'Fake Android K Tester',
3232 'Fake Android L Tester',
3233 'Fake Android M Tester',
Karen Qiane24b7ee2019-02-12 23:37:063234]
3235
3236TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT = ['Fake Tester']
3237
3238TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT = []
3239
Garrett Beaty1afaccc2020-06-25 19:58:153240
3241class QueryTests(TestCase):
Karen Qiane24b7ee2019-02-12 23:37:063242 """Tests for the query feature."""
3243 def test_query_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473244 self.set_args('--query=bots')
Garrett Beaty1afaccc2020-06-25 19:58:153245 fbb = FakeBBGen(self.args,
3246 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063247 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413248 LUCI_MILO_CFG,
3249 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063250 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413251 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063252 self.assertEqual(query_json, TEST_QUERY_BOTS_OUTPUT)
3253
3254 def test_query_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473255 self.set_args('--query=bots/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153256 fbb = FakeBBGen(self.args,
3257 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063258 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413259 LUCI_MILO_CFG,
3260 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063261 with self.assertRaises(SystemExit) as cm:
3262 fbb.query(fbb.args)
3263 self.assertEqual(cm.exception.code, 1)
3264 self.assertTrue(fbb.printed_lines)
3265
3266 def test_query_bots_json(self):
Garrett Beaty79339e182023-04-10 20:45:473267 self.set_args('--query=bots', '--json=result.json')
Garrett Beaty1afaccc2020-06-25 19:58:153268 fbb = FakeBBGen(self.args,
3269 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063270 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413271 LUCI_MILO_CFG,
3272 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063273 fbb.query(fbb.args)
3274 self.assertFalse(fbb.printed_lines)
3275
3276 def test_query_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473277 self.set_args('--query=bots/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153278 fbb = FakeBBGen(self.args,
3279 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063280 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413281 LUCI_MILO_CFG,
3282 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063283 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413284 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063285 self.assertEqual(query_json, TEST_QUERY_BOTS_TESTS_OUTPUT)
3286
3287 def test_query_invalid_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473288 self.set_args('--query=bots/tdfjdk')
Garrett Beaty1afaccc2020-06-25 19:58:153289 fbb = FakeBBGen(self.args,
3290 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063291 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413292 LUCI_MILO_CFG,
3293 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063294 with self.assertRaises(SystemExit) as cm:
3295 fbb.query(fbb.args)
3296 self.assertEqual(cm.exception.code, 1)
3297 self.assertTrue(fbb.printed_lines)
3298
3299 def test_query_bot(self):
Garrett Beaty79339e182023-04-10 20:45:473300 self.set_args('--query=bot/Fake Android K Tester')
Garrett Beaty1afaccc2020-06-25 19:58:153301 fbb = FakeBBGen(self.args,
3302 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063303 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413304 LUCI_MILO_CFG,
3305 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063306 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413307 query_json = json.loads(''.join(fbb.printed_lines))
Garrett Beaty1afaccc2020-06-25 19:58:153308 self.maxDiff = None # pragma pylint: disable=attribute-defined-outside-init
Karen Qiane24b7ee2019-02-12 23:37:063309 self.assertEqual(query_json, TEST_QUERY_BOT_OUTPUT)
3310
3311 def test_query_bot_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473312 self.set_args('--query=bot/bot1')
Garrett Beaty1afaccc2020-06-25 19:58:153313 fbb = FakeBBGen(self.args,
3314 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063315 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413316 LUCI_MILO_CFG,
3317 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063318 with self.assertRaises(SystemExit) as cm:
3319 fbb.query(fbb.args)
3320 self.assertEqual(cm.exception.code, 1)
3321 self.assertTrue(fbb.printed_lines)
3322
3323 def test_query_bot_invalid_query_too_many(self):
Garrett Beaty79339e182023-04-10 20:45:473324 self.set_args('--query=bot/Fake Android K Tester/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153325 fbb = FakeBBGen(self.args,
3326 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063327 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413328 LUCI_MILO_CFG,
3329 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063330 with self.assertRaises(SystemExit) as cm:
3331 fbb.query(fbb.args)
3332 self.assertEqual(cm.exception.code, 1)
3333 self.assertTrue(fbb.printed_lines)
3334
3335 def test_query_bot_invalid_query_no_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473336 self.set_args('--query=bot/Fake Android K Tester/blahs')
Garrett Beaty1afaccc2020-06-25 19:58:153337 fbb = FakeBBGen(self.args,
3338 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063339 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413340 LUCI_MILO_CFG,
3341 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063342 with self.assertRaises(SystemExit) as cm:
3343 fbb.query(fbb.args)
3344 self.assertEqual(cm.exception.code, 1)
3345 self.assertTrue(fbb.printed_lines)
3346
3347 def test_query_bot_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473348 self.set_args('--query=bot/Fake Android L Tester/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153349 fbb = FakeBBGen(self.args,
3350 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063351 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413352 LUCI_MILO_CFG,
3353 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063354 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413355 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063356 self.assertEqual(query_json, TEST_QUERY_BOT_TESTS_OUTPUT)
3357
3358 def test_query_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473359 self.set_args('--query=tests')
Garrett Beaty1afaccc2020-06-25 19:58:153360 fbb = FakeBBGen(self.args,
3361 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063362 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413363 LUCI_MILO_CFG,
3364 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063365 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413366 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063367 self.assertEqual(query_json, TEST_QUERY_TESTS_OUTPUT)
3368
3369 def test_query_tests_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473370 self.set_args('--query=tests/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153371 fbb = FakeBBGen(self.args,
3372 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063373 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413374 LUCI_MILO_CFG,
3375 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063376 with self.assertRaises(SystemExit) as cm:
3377 fbb.query(fbb.args)
3378 self.assertEqual(cm.exception.code, 1)
3379 self.assertTrue(fbb.printed_lines)
3380
3381 def test_query_tests_multiple_params(self):
Garrett Beaty79339e182023-04-10 20:45:473382 self.set_args('--query=tests/--jobs=1&--verbose')
Garrett Beaty1afaccc2020-06-25 19:58:153383 fbb = FakeBBGen(self.args,
3384 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063385 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413386 LUCI_MILO_CFG,
3387 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063388 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413389 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063390 self.assertEqual(query_json, TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT)
3391
3392 def test_query_tests_invalid_params(self):
Garrett Beaty79339e182023-04-10 20:45:473393 self.set_args('--query=tests/device_os?')
Garrett Beaty1afaccc2020-06-25 19:58:153394 fbb = FakeBBGen(self.args,
3395 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063396 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413397 LUCI_MILO_CFG,
3398 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063399 with self.assertRaises(SystemExit) as cm:
3400 fbb.query(fbb.args)
3401 self.assertEqual(cm.exception.code, 1)
3402 self.assertTrue(fbb.printed_lines)
3403
3404 def test_query_tests_dimension_params(self):
Garrett Beaty79339e182023-04-10 20:45:473405 self.set_args('--query=tests/device_os:NMF26U')
Garrett Beaty1afaccc2020-06-25 19:58:153406 fbb = FakeBBGen(self.args,
3407 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063408 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413409 LUCI_MILO_CFG,
3410 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063411 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413412 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063413 self.assertEqual(query_json, TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT)
3414
3415 def test_query_tests_swarming_params(self):
Garrett Beaty79339e182023-04-10 20:45:473416 self.set_args('--query=tests/hard_timeout:1000')
Garrett Beaty1afaccc2020-06-25 19:58:153417 fbb = FakeBBGen(self.args,
3418 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063419 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413420 LUCI_MILO_CFG,
3421 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063422 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413423 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063424 self.assertEqual(query_json, TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT)
3425
3426 def test_query_tests_params(self):
Garrett Beaty79339e182023-04-10 20:45:473427 self.set_args('--query=tests/should_retry_with_patch:true')
Garrett Beaty1afaccc2020-06-25 19:58:153428 fbb = FakeBBGen(self.args,
3429 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063430 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413431 LUCI_MILO_CFG,
3432 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063433 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413434 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063435 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_OUTPUT)
3436
3437 def test_query_tests_params_false(self):
Garrett Beaty79339e182023-04-10 20:45:473438 self.set_args('--query=tests/should_retry_with_patch:false')
Garrett Beaty1afaccc2020-06-25 19:58:153439 fbb = FakeBBGen(self.args,
3440 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063441 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413442 LUCI_MILO_CFG,
3443 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063444 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413445 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063446 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT)
3447
3448 def test_query_test(self):
Garrett Beaty79339e182023-04-10 20:45:473449 self.set_args('--query=test/foo_test')
Garrett Beaty1afaccc2020-06-25 19:58:153450 fbb = FakeBBGen(self.args,
3451 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063452 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413453 LUCI_MILO_CFG,
3454 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063455 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413456 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063457 self.assertEqual(query_json, TEST_QUERY_TEST_OUTPUT)
3458
3459 def test_query_test_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473460 self.set_args('--query=test/foo_foo')
Garrett Beaty1afaccc2020-06-25 19:58:153461 fbb = FakeBBGen(self.args,
3462 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063463 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413464 LUCI_MILO_CFG,
3465 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063466 with self.assertRaises(SystemExit) as cm:
3467 fbb.query(fbb.args)
3468 self.assertEqual(cm.exception.code, 1)
3469 self.assertTrue(fbb.printed_lines)
3470
3471 def test_query_test_invalid_length(self):
Garrett Beaty79339e182023-04-10 20:45:473472 self.set_args('--query=test/foo_tests/foo/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153473 fbb = FakeBBGen(self.args,
3474 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063475 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413476 LUCI_MILO_CFG,
3477 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063478 with self.assertRaises(SystemExit) as cm:
3479 fbb.query(fbb.args)
3480 self.assertEqual(cm.exception.code, 1)
3481 self.assertTrue(fbb.printed_lines)
3482
3483 def test_query_test_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473484 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153485 fbb = FakeBBGen(self.args,
3486 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063487 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413488 LUCI_MILO_CFG,
3489 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063490 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413491 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063492 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_OUTPUT)
3493
3494 def test_query_test_bots_isolated_scripts(self):
Garrett Beaty79339e182023-04-10 20:45:473495 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153496 fbb = FakeBBGen(self.args,
3497 FOO_ISOLATED_SCRIPTS_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063498 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413499 LUCI_MILO_CFG,
3500 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063501 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413502 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063503 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT)
3504
3505 def test_query_test_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473506 self.set_args('--query=test/foo_tests/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153507 fbb = FakeBBGen(self.args,
3508 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063509 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413510 LUCI_MILO_CFG,
3511 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063512 with self.assertRaises(SystemExit) as cm:
3513 fbb.query(fbb.args)
3514 self.assertEqual(cm.exception.code, 1)
3515 self.assertTrue(fbb.printed_lines)
3516
3517 def test_query_test_bots_no_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473518 self.set_args('--query=test/bar_tests/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153519 fbb = FakeBBGen(self.args,
3520 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063521 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413522 LUCI_MILO_CFG,
3523 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063524 fbb.query(fbb.args)
Brian Sheedy0d2300f32024-08-13 23:14:413525 query_json = json.loads(''.join(fbb.printed_lines))
Karen Qiane24b7ee2019-02-12 23:37:063526 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT)
3527
3528 def test_query_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473529 self.set_args('--query=foo')
Garrett Beaty1afaccc2020-06-25 19:58:153530 fbb = FakeBBGen(self.args,
3531 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063532 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413533 LUCI_MILO_CFG,
3534 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063535 with self.assertRaises(SystemExit) as cm:
3536 fbb.query(fbb.args)
3537 self.assertEqual(cm.exception.code, 1)
3538 self.assertTrue(fbb.printed_lines)
3539
Brian Sheedye6ea0ee2019-07-11 02:54:373540
3541FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES = """\
3542{
3543 'basic_suites': {
3544 'foo_tests': {
3545 'foo_test': {
3546 'args': [
3547 '--enable-features',
3548 'Foo,Bar',
3549 ],
3550 },
3551 },
3552 },
3553}
3554"""
3555
3556
3557FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE = """\
3558{
3559 'foo_test': {
3560 'replacements': {
3561 'Fake Tester': {
3562 'args': {
3563 '--c_arg': None,
3564 },
3565 },
3566 },
3567 },
3568}
3569"""
3570
3571
3572FOO_TEST_REPLACEMENTS_REMOVE_VALUE = """\
3573{
3574 'foo_test': {
3575 'replacements': {
3576 'Fake Tester': {
3577 'args': {
3578 '--enable-features': None,
3579 },
3580 },
3581 },
3582 },
3583}
3584"""
3585
3586
3587FOO_TEST_REPLACEMENTS_REPLACE_VALUE = """\
3588{
3589 'foo_test': {
3590 'replacements': {
3591 'Fake Tester': {
3592 'args': {
3593 '--enable-features': 'Bar,Baz',
3594 },
3595 },
3596 },
3597 },
3598}
3599"""
3600
3601
3602FOO_TEST_REPLACEMENTS_INVALID_KEY = """\
3603{
3604 'foo_test': {
3605 'replacements': {
3606 'Fake Tester': {
3607 'invalid': {
3608 '--enable-features': 'Bar,Baz',
3609 },
3610 },
3611 },
3612 },
3613}
3614"""
3615
3616
Garrett Beaty1afaccc2020-06-25 19:58:153617class ReplacementTests(TestCase):
Brian Sheedye6ea0ee2019-07-11 02:54:373618 """Tests for the arg replacement feature."""
3619 def test_replacement_valid_remove_no_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153620 fbb = FakeBBGen(self.args,
3621 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373622 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413623 LUCI_MILO_CFG,
3624 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373625 fbb.check_output_file_consistency(verbose=True)
3626 self.assertFalse(fbb.printed_lines)
3627
3628 def test_replacement_valid_remove_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153629 fbb = FakeBBGen(self.args,
3630 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373631 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413632 LUCI_MILO_CFG,
3633 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373634 fbb.check_output_file_consistency(verbose=True)
3635 self.assertFalse(fbb.printed_lines)
3636
3637 def test_replacement_valid_replace_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153638 fbb = FakeBBGen(self.args,
3639 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373640 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413641 LUCI_MILO_CFG,
3642 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373643 fbb.check_output_file_consistency(verbose=True)
3644 self.assertFalse(fbb.printed_lines)
3645
3646 def test_replacement_valid_replace_value_separate_entries(self):
Garrett Beaty1afaccc2020-06-25 19:58:153647 fbb = FakeBBGen(self.args,
3648 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373649 FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES,
Nodir Turakulovfce34292019-12-18 17:05:413650 LUCI_MILO_CFG,
3651 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373652 fbb.check_output_file_consistency(verbose=True)
3653 self.assertFalse(fbb.printed_lines)
3654
3655 def test_replacement_invalid_key_not_valid(self):
Garrett Beaty1afaccc2020-06-25 19:58:153656 fbb = FakeBBGen(self.args,
3657 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373658 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413659 LUCI_MILO_CFG,
3660 exceptions=FOO_TEST_REPLACEMENTS_INVALID_KEY)
Jamie Madillcf4f8c72021-05-20 19:24:233661 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3662 'Given replacement key *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373663 fbb.check_output_file_consistency(verbose=True)
3664
3665 def test_replacement_invalid_key_not_found(self):
Garrett Beaty1afaccc2020-06-25 19:58:153666 fbb = FakeBBGen(self.args,
3667 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373668 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413669 LUCI_MILO_CFG,
3670 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Jamie Madillcf4f8c72021-05-20 19:24:233671 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3672 'Could not find *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373673 fbb.check_output_file_consistency(verbose=True)
3674
Jeff Yoon8154e582019-12-03 23:30:013675
Brian Sheedya31578e2020-05-18 20:24:363676FOO_TEST_SUITE_WITH_MAGIC_ARGS = """\
3677{
3678 'basic_suites': {
3679 'foo_tests': {
3680 'foo_test': {
3681 'args': [
3682 '$$MAGIC_SUBSTITUTION_TestOnlySubstitution',
3683 ],
3684 },
3685 },
3686 },
3687}
3688"""
3689
3690
3691FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS = """\
3692{
3693 'basic_suites': {
3694 'foo_tests': {
3695 'foo_test': {
3696 'args': [
3697 '$$MAGIC_SUBSTITUTION_NotARealSubstitution',
3698 ],
3699 },
3700 },
3701 },
3702}
3703"""
3704
3705
Garrett Beaty1afaccc2020-06-25 19:58:153706class MagicSubstitutionTests(TestCase):
Brian Sheedya31578e2020-05-18 20:24:363707 """Tests for the magic substitution feature."""
3708 def test_valid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153709 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3710 FOO_TEST_SUITE_WITH_MAGIC_ARGS, LUCI_MILO_CFG)
Brian Sheedya31578e2020-05-18 20:24:363711 fbb.check_output_file_consistency(verbose=True)
3712 self.assertFalse(fbb.printed_lines)
3713
3714 def test_invalid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153715 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3716 FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:233717 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3718 'Magic substitution function *'):
Brian Sheedya31578e2020-05-18 20:24:363719 fbb.check_output_file_consistency(verbose=True)
3720
3721
Jeff Yoon8154e582019-12-03 23:30:013722# Matrix compound composition test suites
3723
3724MATRIX_COMPOUND_EMPTY = """\
3725{
3726 'basic_suites': {
3727 'bar_tests': {
3728 'bar_test': {},
3729 },
3730 'foo_tests': {
3731 'foo_test': {},
3732 },
3733 },
3734 'matrix_compound_suites': {
3735 'matrix_tests': {
3736 'foo_tests': {},
3737 'bar_tests': {},
3738 },
3739 },
3740}
3741"""
3742
Sven Zhengb51bd0482022-08-26 18:26:253743MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION = """\
3744{
3745 'basic_suites': {
3746 'bar_tests': {
3747 'bar_test': {
3748 'description': 'This is a bar test',
3749 },
3750 },
3751 'foo_tests': {
3752 'foo_test': {},
3753 },
3754 },
3755 'matrix_compound_suites': {
3756 'matrix_tests': {
3757 'foo_tests': {},
3758 'bar_tests': {},
3759 },
3760 },
3761}
3762"""
3763
Jeff Yoon67c3e832020-02-08 07:39:383764MATRIX_COMPOUND_MISSING_IDENTIFIER = """\
Jeff Yoon8154e582019-12-03 23:30:013765{
3766 'basic_suites': {
3767 'foo_tests': {
3768 'foo_test': {},
3769 },
3770 },
3771 'matrix_compound_suites': {
3772 'matrix_tests': {
3773 'foo_tests': {
Jeff Yoon67c3e832020-02-08 07:39:383774 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403775 'missing-identifier',
Jeff Yoon67c3e832020-02-08 07:39:383776 ],
Jeff Yoon8154e582019-12-03 23:30:013777 },
3778 },
3779 },
3780}
3781"""
3782
Garrett Beaty2022db42023-08-29 17:22:403783VARIANTS_FILE_MISSING_IDENTIFIER = """\
3784{
3785 'missing-identifier': {}
3786}
3787"""
3788
Sven Zhengef0d0872022-04-04 22:13:293789MATRIX_COMPOUND_EMPTY_IDENTIFIER = """\
3790{
3791 'basic_suites': {
3792 'foo_tests': {
3793 'foo_test': {},
3794 },
3795 },
3796 'matrix_compound_suites': {
3797 'matrix_tests': {
3798 'foo_tests': {
3799 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403800 'empty-identifier',
Sven Zhengef0d0872022-04-04 22:13:293801 ],
3802 },
3803 },
3804 },
3805}
3806"""
3807
Garrett Beaty2022db42023-08-29 17:22:403808EMPTY_IDENTIFIER_VARIANTS = """\
3809{
3810 'empty-identifier': {
3811 'identifier': '',
3812 'swarming': {
3813 'dimensions': {
3814 'foo': 'empty identifier not allowed',
3815 },
3816 },
3817 },
3818}
3819"""
3820
Sven Zhengef0d0872022-04-04 22:13:293821MATRIX_COMPOUND_TRAILING_IDENTIFIER = """\
3822{
3823 'basic_suites': {
3824 'foo_tests': {
3825 'foo_test': {},
3826 },
3827 },
3828 'matrix_compound_suites': {
3829 'matrix_tests': {
3830 'foo_tests': {
3831 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403832 'trailing-whitespace',
Sven Zhengef0d0872022-04-04 22:13:293833 ],
3834 },
Garrett Beaty2022db42023-08-29 17:22:403835 },
3836 },
3837}
3838"""
3839
3840TRAILING_WHITESPACE_VARIANTS = """\
3841{
3842 'trailing-whitespace': {
3843 'identifier': 'id ',
3844 'swarming': {
3845 'dimensions': {
3846 'foo': 'trailing whitespace not allowed',
Sven Zhengef0d0872022-04-04 22:13:293847 },
3848 },
3849 },
3850}
3851"""
3852
Jeff Yoon8154e582019-12-03 23:30:013853MATRIX_REF_NONEXISTENT = """\
3854{
3855 'basic_suites': {
3856 'foo_tests': {
3857 'foo_test': {},
3858 },
3859 },
3860 'matrix_compound_suites': {
3861 'matrix_tests': {
3862 'bar_test': {},
3863 },
3864 },
3865}
3866"""
3867
Jeff Yoon67c3e832020-02-08 07:39:383868MATRIX_COMPOUND_REF_COMPOSITION = """\
Jeff Yoon8154e582019-12-03 23:30:013869{
3870 'basic_suites': {
3871 'foo_tests': {
3872 'foo_test': {},
3873 },
3874 },
3875 'compound_suites': {
3876 'sample_composition': {
3877 'foo_tests': {},
3878 },
3879 },
3880 'matrix_compound_suites': {
3881 'matrix_tests': {
3882 'sample_composition': {},
3883 },
3884 },
3885}
3886"""
3887
3888MATRIX_COMPOSITION_REF_MATRIX = """\
3889{
3890 'basic_suites': {
3891 'foo_tests': {
3892 'foo_test': {},
3893 },
3894 },
3895 'matrix_compound_suites': {
3896 'a_test': {
3897 'foo_tests': {},
3898 },
3899 'matrix_tests': {
3900 'a_test': {},
3901 },
3902 },
3903}
3904"""
3905
Jeff Yoon67c3e832020-02-08 07:39:383906MATRIX_COMPOUND_VARIANTS_MIXINS_MERGE = """\
3907{
3908 'basic_suites': {
3909 'foo_tests': {
3910 'set': {
3911 'mixins': [ 'test_mixin' ],
3912 },
3913 },
3914 },
3915 'matrix_compound_suites': {
3916 'matrix_tests': {
3917 'foo_tests': {
3918 'variants': [
3919 {
3920 'mixins': [ 'dimension_mixin' ],
3921 },
3922 ],
3923 },
3924 },
3925 },
3926}
3927"""
3928
3929MATRIX_COMPOUND_VARIANTS_MIXINS = """\
3930{
3931 'basic_suites': {
3932 'foo_tests': {
3933 'set': {
3934 'mixins': [ 'test_mixin' ],
3935 },
3936 },
3937 },
3938 'matrix_compound_suites': {
3939 'matrix_tests': {
3940 'foo_tests': {
3941 'variants': [
3942 {
3943 'mixins': [
3944 'dimension_mixin',
3945 'waterfall_mixin',
3946 'builder_mixin',
3947 'random_mixin'
3948 ],
3949 },
3950 ],
3951 },
3952 },
3953 },
3954}
3955"""
3956
3957MATRIX_COMPOUND_VARIANTS_MIXINS_REMOVE = """\
3958{
3959 'basic_suites': {
3960 'foo_tests': {
3961 'set': {
3962 'remove_mixins': ['builder_mixin'],
3963 },
3964 },
3965 },
3966 'matrix_compound_suites': {
3967 'matrix_tests': {
3968 'foo_tests': {
3969 'variants': [
3970 {
3971 'mixins': [ 'builder_mixin' ],
3972 }
3973 ],
3974 },
3975 },
3976 },
3977}
3978"""
3979
3980MATRIX_COMPOUND_CONFLICTING_TEST_SUITES = """\
3981{
3982 'basic_suites': {
3983 'bar_tests': {
3984 'baz_tests': {
3985 'args': [
3986 '--bar',
3987 ],
3988 }
3989 },
3990 'foo_tests': {
3991 'baz_tests': {
3992 'args': [
3993 '--foo',
3994 ],
3995 }
3996 },
3997 },
3998 'matrix_compound_suites': {
3999 'matrix_tests': {
4000 'bar_tests': {
4001 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404002 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:384003 ],
4004 },
4005 'foo_tests': {
4006 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404007 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:384008 ]
4009 }
4010 },
4011 },
4012}
4013"""
4014
Garrett Beaty60a7b2a2023-09-13 23:00:404015MATRIX_COMPOUND_EMPTY_VARIANTS = """\
4016{
4017 'basic_suites': {
4018 'foo_tests': {
4019 'baz_tests': {
4020 'args': [
4021 '--foo',
4022 ],
4023 }
4024 },
4025 },
4026 'matrix_compound_suites': {
4027 'matrix_tests': {
4028 'foo_tests': {
4029 'variants': [],
4030 }
4031 },
4032 },
4033}
4034"""
4035
Jeff Yoon67c3e832020-02-08 07:39:384036MATRIX_COMPOUND_TARGETS_ARGS = """\
4037{
4038 'basic_suites': {
4039 'foo_tests': {
4040 'args_test': {
4041 'args': [
4042 '--iam'
4043 ],
4044 },
4045 }
4046 },
4047 'matrix_compound_suites': {
4048 'matrix_tests': {
4049 'foo_tests': {
4050 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404051 'an-arg',
Jeff Yoon67c3e832020-02-08 07:39:384052 ],
4053 },
4054 },
4055 },
4056}
4057"""
4058
Garrett Beaty2022db42023-08-29 17:22:404059ARGS_VARIANTS_FILE = """\
4060{
4061 'an-arg': {
4062 'identifier': 'args',
4063 'args': [
4064 '--anarg',
4065 ],
4066 },
4067}
4068"""
4069
Jeff Yoon67c3e832020-02-08 07:39:384070MATRIX_COMPOUND_TARGETS_MIXINS = """\
4071{
4072 'basic_suites': {
4073 'foo_tests': {
4074 'mixins_test': {
4075 'mixins': [ 'test_mixin' ],
4076 },
4077 }
4078 },
4079 'matrix_compound_suites': {
4080 'matrix_tests': {
4081 'foo_tests': {
Jeff Yoon85fb8df2020-08-20 16:47:434082 'mixins': [ 'random_mixin' ],
Jeff Yoon67c3e832020-02-08 07:39:384083 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404084 'mixins',
Jeff Yoon67c3e832020-02-08 07:39:384085 ],
4086 },
4087 },
4088 },
4089}
4090"""
4091
Garrett Beaty2022db42023-08-29 17:22:404092MIXINS_VARIANTS_FILE = """\
4093{
4094 'mixins': {
4095 'identifier': 'mixins',
4096 'mixins': [ 'dimension_mixin' ],
4097 },
4098}
4099"""
4100
Jeff Yoon67c3e832020-02-08 07:39:384101MATRIX_COMPOUND_TARGETS_SWARMING = """\
4102{
4103 'basic_suites': {
4104 'foo_tests': {
4105 'swarming_test': {
4106 'swarming': {
4107 'foo': 'bar',
Garrett Beatyade673d2023-08-04 22:00:254108 'dimensions': {
4109 'foo': 'bar',
4110 },
Jeff Yoon67c3e832020-02-08 07:39:384111 },
4112 },
4113 }
4114 },
4115 'matrix_compound_suites': {
4116 'matrix_tests': {
4117 'foo_tests': {
4118 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404119 'swarming-variant',
Jeff Yoon67c3e832020-02-08 07:39:384120 ],
4121 },
4122 },
4123 },
4124}
4125"""
Jeff Yoon8154e582019-12-03 23:30:014126
Garrett Beaty2022db42023-08-29 17:22:404127SWARMING_VARIANTS_FILE = """\
4128{
4129 'swarming-variant': {
4130 'identifier': 'swarming',
4131 'swarming': {
4132 'a': 'b',
4133 'dimensions': {
4134 'hello': 'world',
4135 },
4136 },
4137 },
4138}
4139"""
4140
Jeff Yoonda581c32020-03-06 03:56:054141MATRIX_COMPOUND_VARIANTS_REF = """\
4142{
4143 'basic_suites': {
4144 'foo_tests': {
4145 'swarming_test': {},
4146 }
4147 },
4148 'matrix_compound_suites': {
4149 'matrix_tests': {
4150 'foo_tests': {
4151 'variants': [
4152 'a_variant'
4153 ],
4154 },
4155 },
4156 },
4157}
4158"""
4159
Sven Zhengb51bd0482022-08-26 18:26:254160MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION = """\
4161{
4162 'basic_suites': {
4163 'foo_tests': {
4164 'swarming_test': {
4165 'description': 'This is a swarming test.'
4166 },
4167 }
4168 },
4169 'matrix_compound_suites': {
4170 'matrix_tests': {
4171 'foo_tests': {
4172 'variants': [
4173 'a_variant'
4174 ],
4175 },
4176 },
4177 },
4178}
4179"""
4180
Rakib M. Hasanc9e01c62020-07-27 22:48:124181MATRIX_COMPOUND_TEST_WITH_TEST_KEY = """\
4182{
4183 'basic_suites': {
4184 'foo_tests': {
4185 'swarming_test': {
4186 'test': 'foo_test_apk'
4187 },
4188 }
4189 },
4190 'matrix_compound_suites': {
4191 'matrix_tests': {
4192 'foo_tests': {
4193 'variants': [
4194 'a_variant',
4195 ],
4196 },
4197 },
4198 },
4199}
4200"""
4201
Jeff Yoonda581c32020-03-06 03:56:054202MATRIX_COMPOUND_MIXED_VARIANTS_REF = """\
4203{
4204 'basic_suites': {
4205 'foo_tests': {
4206 'swarming_test': {},
4207 }
4208 },
4209 'matrix_compound_suites': {
4210 'matrix_tests': {
4211 'foo_tests': {
4212 'variants': [
4213 'a_variant',
Garrett Beaty2022db42023-08-29 17:22:404214 'b_variant',
Jeff Yoonda581c32020-03-06 03:56:054215 ],
4216 },
4217 },
4218 },
4219}
4220"""
4221
4222VARIANTS_FILE = """\
4223{
4224 'a_variant': {
4225 'args': [
4226 '--platform',
4227 'device',
4228 '--version',
4229 '1'
4230 ],
4231 'identifier': 'a_variant'
4232 }
4233}
4234"""
4235
Sven Zhengb51bd0482022-08-26 18:26:254236VARIANTS_FILE_WITH_DESCRIPTION = """\
4237{
4238 'a_variant': {
4239 'identifier': 'a_variant',
4240 'description': 'Variant description.'
4241 }
4242}
4243"""
4244
Jeff Yoonda581c32020-03-06 03:56:054245MULTI_VARIANTS_FILE = """\
4246{
4247 'a_variant': {
4248 'args': [
4249 '--platform',
4250 'device',
4251 '--version',
4252 '1'
4253 ],
4254 'identifier': 'a_variant'
4255 },
4256 'b_variant': {
4257 'args': [
4258 '--platform',
4259 'sim',
4260 '--version',
4261 '2'
4262 ],
4263 'identifier': 'b_variant'
4264 }
4265}
4266"""
4267
Jeff Yoon8154e582019-12-03 23:30:014268# # Dictionary composition test suite outputs
4269
Xinan Lin05fb9c1752020-12-17 00:15:524270EMPTY_SKYLAB_TEST_EXCEPTIONS = """\
4271{
Sven Zhengef0d0872022-04-04 22:13:294272 'tast.foo OCTOPUS_TOT': {
Xinan Lin05fb9c1752020-12-17 00:15:524273 'remove_from': [
4274 'Fake Tester',
4275 ]
4276 },
Sven Zhengef0d0872022-04-04 22:13:294277 'tast.foo OCTOPUS_TOT-1': {
Xinan Lin05fb9c1752020-12-17 00:15:524278 'remove_from': [
4279 'Fake Tester',
4280 ]
4281 }
4282}
4283"""
4284
yoshiki iguchid1664ef2024-03-28 19:16:524285MATRIX_SKYLAB_WATERFALL_WITH_NO_CROS_BOARD = """\
4286[
4287 {
4288 'project': 'chromium',
4289 'bucket': 'ci',
4290 'name': 'chromium.test',
4291 'machines': {
4292 'Fake Tester': {
4293 'test_suites': {
4294 'skylab_tests': 'cros_skylab_basic_x86',
4295 },
4296 },
4297 },
4298 },
4299]
4300"""
4301
Xinan Lin05fb9c1752020-12-17 00:15:524302MATRIX_SKYLAB_WATERFALL = """\
4303[
4304 {
4305 'project': 'chromium',
4306 'bucket': 'ci',
4307 'name': 'chromium.test',
4308 'machines': {
4309 'Fake Tester': {
4310 'test_suites': {
4311 'skylab_tests': 'cros_skylab_basic_x86',
4312 },
yoshiki iguchid1664ef2024-03-28 19:16:524313 'cros_board': 'octopus',
4314 'cros_dut_pool': 'chromium',
Qijiang Fan107d40de2024-05-24 06:11:194315 'run_cft': True,
Xinan Lin05fb9c1752020-12-17 00:15:524316 },
4317 },
4318 },
4319]
4320"""
4321
Qijiang Fan9032762d2024-06-25 06:02:244322MATRIX_SKYLAB_WATERFALL_WITH_BUILD_TARGET_VARIANT = """\
4323[
4324 {
4325 'project': 'chromium',
4326 'bucket': 'ci',
4327 'name': 'chromium.test',
4328 'machines': {
4329 'Fake Tester': {
4330 'test_suites': {
4331 'skylab_tests': 'cros_skylab_basic_x86',
4332 },
4333 'cros_board': 'octopus',
4334 'cros_build_target': 'octopus-arc-t',
4335 'cros_dut_pool': 'chromium',
4336 'run_cft': True,
4337 },
4338 },
4339 },
4340]
4341"""
4342
Xinan Lin05fb9c1752020-12-17 00:15:524343MATRIX_COMPOUND_SKYLAB_REF = """\
4344{
4345 'basic_suites': {
Sven Zheng22ba6312023-10-16 22:59:354346 'autotest_suites': {
4347 'autotest_suite': {
4348 },
4349 },
Xinan Lin05fb9c1752020-12-17 00:15:524350 'cros_skylab_basic': {
Sven Zheng22ba6312023-10-16 22:59:354351 'benchmark_suite': {
4352 'benchmark': 'something',
4353 },
4354 'chrome_all_tast_tests': {
4355 'tast_expr': 'dummy expr',
Xinan Lin05fb9c1752020-12-17 00:15:524356 'timeout': 3600,
4357 },
Sven Zheng22ba6312023-10-16 22:59:354358 'gtest_suite': { },
4359 'lacros_all_tast_tests': {
4360 'tast_expr': 'lacros expr',
Xinan Lin05fb9c1752020-12-17 00:15:524361 'timeout': 3600,
4362 },
4363 },
4364 },
4365 'compound_suites': {},
4366 'matrix_compound_suites': {
4367 'cros_skylab_basic_x86': {
Sven Zheng22ba6312023-10-16 22:59:354368 'autotest_suites': {
4369 'variants': [
4370 'octopus-89-with-autotest-name',
4371 ],
4372 },
Xinan Lin05fb9c1752020-12-17 00:15:524373 'cros_skylab_basic': {
Sven Zheng22ba6312023-10-16 22:59:354374 'tast_expr': 'dummy expr',
Xinan Lin05fb9c1752020-12-17 00:15:524375 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404376 'octopus-89',
4377 'octopus-88',
4378 ],
Jieting Yangef6b1042021-11-30 21:33:484379 },
4380 },
4381 },
4382}
4383"""
4384
Garrett Beaty2022db42023-08-29 17:22:404385SKYLAB_VARIANTS = """\
4386{
4387 'octopus-89': {
4388 'skylab': {
4389 'cros_board': 'octopus',
yoshiki iguchid1664ef2024-03-28 19:16:524390 'cros_model': 'casta',
Garrett Beaty2022db42023-08-29 17:22:404391 'cros_chrome_version': '89.0.3234.0',
4392 'cros_img': 'octopus-release/R89-13655.0.0',
4393 },
4394 'enabled': True,
4395 'identifier': 'OCTOPUS_TOT',
4396 },
Sven Zheng22ba6312023-10-16 22:59:354397 'octopus-89-with-autotest-name': {
4398 'skylab': {
Sven Zheng22ba6312023-10-16 22:59:354399 'cros_chrome_version': '89.0.3234.0',
4400 'cros_img': 'octopus-release/R89-13655.0.0',
4401 'autotest_name': 'unique_autotest_name',
4402 },
4403 'enabled': True,
4404 'identifier': 'OCTOPUS_TOT',
4405 },
Garrett Beaty2022db42023-08-29 17:22:404406 'octopus-88': {
4407 'skylab': {
Garrett Beaty2022db42023-08-29 17:22:404408 'cros_chrome_version': '88.0.2324.0',
4409 'cros_img': 'octopus-release/R88-13597.23.0',
4410 },
4411 'enabled': True,
4412 'identifier': 'OCTOPUS_TOT-1',
4413 },
4414}
4415"""
4416
Qijiang Fan9032762d2024-06-25 06:02:244417SKYLAB_VARIANTS_WITH_BUILD_VARIANT = """\
4418{
4419 'octopus-89': {
4420 'skylab': {
4421 'cros_board': 'octopus',
4422 'cros_model': 'casta',
4423 'cros_chrome_version': '89.0.3234.0',
4424 'cros_img': 'octopus-arc-t-release/R89-13655.0.0',
4425 },
4426 'enabled': True,
4427 'identifier': 'OCTOPUS_TOT',
4428 },
4429 'octopus-89-with-autotest-name': {
4430 'skylab': {
4431 'cros_chrome_version': '89.0.3234.0',
4432 'cros_img': 'octopus-arc-t-release/R89-13655.0.0',
4433 'autotest_name': 'unique_autotest_name',
4434 },
4435 'enabled': True,
4436 'identifier': 'OCTOPUS_TOT',
4437 },
4438 'octopus-88': {
4439 'skylab': {
4440 'cros_chrome_version': '88.0.2324.0',
4441 'cros_img': 'octopus-arc-t-release/R88-13597.23.0',
4442 },
4443 'enabled': True,
4444 'identifier': 'OCTOPUS_TOT-1',
4445 },
4446}
4447"""
4448
Jieting Yangef6b1042021-11-30 21:33:484449ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF = """\
4450{
4451 'basic_suites': {
4452 'cros_skylab_basic': {
4453 'tast.basic': {
Sven Zheng22ba6312023-10-16 22:59:354454 'tast_expr': 'dummy expr',
Jieting Yangef6b1042021-11-30 21:33:484455 'suite': 'tast.basic',
yoshiki iguchia5f87c7d2024-06-19 02:48:344456 'shard_level_retries_on_ctp': 2,
Jieting Yangef6b1042021-11-30 21:33:484457 'timeout': 3600,
4458 },
4459 'tast.foo': {
Sven Zheng22ba6312023-10-16 22:59:354460 'tast_expr': 'dummy expr',
Jieting Yangef6b1042021-11-30 21:33:484461 'suite': 'tast.foo',
4462 'timeout': 3600,
4463 },
4464 },
4465 },
4466 'compound_suites': {},
4467 'matrix_compound_suites': {
4468 'cros_skylab_basic_x86': {
4469 'cros_skylab_basic': {
4470 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404471 'enabled',
4472 'disabled',
4473 ],
Xinan Lin05fb9c1752020-12-17 00:15:524474 },
4475 },
4476 },
4477}
4478"""
4479
Garrett Beaty2022db42023-08-29 17:22:404480ENABLED_AND_DISABLED_VARIANTS = """\
4481{
4482 'enabled': {
4483 'skylab': {
4484 'cros_board': 'octopus',
4485 'cros_chrome_version': '89.0.3234.0',
4486 'cros_img': 'octopus-release/R89-13655.0.0',
4487 },
4488 'enabled': True,
4489 'identifier': 'OCTOPUS_TOT',
4490 },
4491 'disabled': {
4492 'skylab': {
4493 'cros_board': 'octopus',
4494 'cros_chrome_version': '88.0.2324.0',
4495 'cros_img': 'octopus-release/R88-13597.23.0',
4496 },
4497 'enabled': False,
4498 'identifier': 'OCTOPUS_TOT-1',
4499 },
4500}
4501"""
4502
Garrett Beaty1afaccc2020-06-25 19:58:154503
4504class MatrixCompositionTests(TestCase):
Jeff Yoon8154e582019-12-03 23:30:014505
4506 def test_good_structure_no_configs(self):
4507 """
4508 Tests matrix compound test suite structure with no configs,
4509 no conflicts and no bad references
4510 """
Garrett Beaty1afaccc2020-06-25 19:58:154511 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4512 MATRIX_COMPOUND_EMPTY, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014513 fbb.check_output_file_consistency(verbose=True)
4514 self.assertFalse(fbb.printed_lines)
4515
Sven Zhengb51bd0482022-08-26 18:26:254516 def test_good_structure_with_description(self):
4517 """
4518 Tests matrix compound test suite structure with description.
4519 """
4520 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4521 MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION, LUCI_MILO_CFG)
Sven Zhengb51bd0482022-08-26 18:26:254522 fbb.check_output_file_consistency(verbose=True)
4523 self.assertFalse(fbb.printed_lines)
4524
Jeff Yoon67c3e832020-02-08 07:39:384525 def test_missing_identifier(self):
Jeff Yoon8154e582019-12-03 23:30:014526 """
Jeff Yoon67c3e832020-02-08 07:39:384527 Variant is missing an identifier
Jeff Yoon8154e582019-12-03 23:30:014528 """
Garrett Beaty2022db42023-08-29 17:22:404529 fbb = FakeBBGen(self.args,
4530 MATRIX_GTEST_SUITE_WATERFALL,
4531 MATRIX_COMPOUND_MISSING_IDENTIFIER,
4532 LUCI_MILO_CFG,
4533 variants=VARIANTS_FILE_MISSING_IDENTIFIER)
Jamie Madillcf4f8c72021-05-20 19:24:234534 with self.assertRaisesRegex(
4535 generate_buildbot_json.BBGenErr,
Jeff Yoon67c3e832020-02-08 07:39:384536 'Missing required identifier field in matrix compound suite*'):
4537 fbb.check_output_file_consistency(verbose=True)
Jeff Yoon8154e582019-12-03 23:30:014538
Sven Zhengef0d0872022-04-04 22:13:294539 def test_empty_identifier(self):
4540 """
4541 Variant identifier is empty.
4542 """
Garrett Beaty2022db42023-08-29 17:22:404543 fbb = FakeBBGen(self.args,
4544 MATRIX_GTEST_SUITE_WATERFALL,
4545 MATRIX_COMPOUND_EMPTY_IDENTIFIER,
4546 LUCI_MILO_CFG,
4547 variants=EMPTY_IDENTIFIER_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294548 with self.assertRaisesRegex(
4549 generate_buildbot_json.BBGenErr,
4550 'Identifier field can not be "" in matrix compound suite*'):
4551 fbb.check_output_file_consistency(verbose=True)
4552
4553 def test_trailing_identifier(self):
4554 """
4555 Variant identifier has trailing whitespace.
4556 """
Garrett Beaty2022db42023-08-29 17:22:404557 fbb = FakeBBGen(self.args,
4558 MATRIX_GTEST_SUITE_WATERFALL,
4559 MATRIX_COMPOUND_TRAILING_IDENTIFIER,
4560 LUCI_MILO_CFG,
4561 variants=TRAILING_WHITESPACE_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294562 with self.assertRaisesRegex(
4563 generate_buildbot_json.BBGenErr,
4564 'Identifier field can not have leading and trailing whitespace in'
4565 ' matrix compound suite*'):
4566 fbb.check_output_file_consistency(verbose=True)
4567
Jeff Yoon8154e582019-12-03 23:30:014568 def test_noexistent_ref(self):
4569 """
4570 Test referencing a non-existent basic test suite
4571 """
Garrett Beaty1afaccc2020-06-25 19:58:154572 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4573 MATRIX_REF_NONEXISTENT, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234574 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4575 'Unable to find reference to *'):
Jeff Yoon8154e582019-12-03 23:30:014576 fbb.check_output_file_consistency(verbose=True)
4577
4578 def test_ref_to_composition(self):
4579 """
4580 Test referencing another composition test suite
4581 """
Garrett Beaty1afaccc2020-06-25 19:58:154582 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4583 MATRIX_COMPOUND_REF_COMPOSITION, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234584 with self.assertRaisesRegex(
4585 generate_buildbot_json.BBGenErr,
4586 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014587 fbb.check_output_file_consistency(verbose=True)
4588
4589 def test_ref_to_matrix(self):
4590 """
4591 Test referencing another matrix test suite
4592 """
Garrett Beaty1afaccc2020-06-25 19:58:154593 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4594 MATRIX_COMPOSITION_REF_MATRIX, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234595 with self.assertRaisesRegex(
4596 generate_buildbot_json.BBGenErr,
4597 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014598 fbb.check_output_file_consistency(verbose=True)
4599
Jeff Yoon67c3e832020-02-08 07:39:384600 def test_conflicting_names(self):
Garrett Beaty2022db42023-08-29 17:22:404601 fbb = FakeBBGen(self.args,
4602 MATRIX_GTEST_SUITE_WATERFALL,
4603 MATRIX_COMPOUND_CONFLICTING_TEST_SUITES,
4604 LUCI_MILO_CFG,
4605 variants=VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234606 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4607 'Conflicting test definitions.*'):
Jeff Yoon67c3e832020-02-08 07:39:384608 fbb.check_input_file_consistency(verbose=True)
4609 self.assertFalse(fbb.printed_lines)
4610
Garrett Beaty60a7b2a2023-09-13 23:00:404611 def test_empty_variants(self):
4612 fbb = FakeBBGen(self.args,
4613 MATRIX_GTEST_SUITE_WATERFALL,
4614 MATRIX_COMPOUND_EMPTY_VARIANTS,
4615 LUCI_MILO_CFG,
4616 mixins=SWARMING_MIXINS)
4617 fbb.check_output_file_consistency(verbose=True)
4618 self.assertFalse(fbb.printed_lines)
4619
Jeff Yoon67c3e832020-02-08 07:39:384620 def test_variants_swarming_dict_merge_args(self):
4621 """
4622 Test targets with swarming dictionary defined by both basic and matrix
4623 """
Garrett Beaty1afaccc2020-06-25 19:58:154624 fbb = FakeBBGen(self.args,
4625 MATRIX_GTEST_SUITE_WATERFALL,
4626 MATRIX_COMPOUND_TARGETS_ARGS,
4627 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404628 mixins=SWARMING_MIXINS,
4629 variants=ARGS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384630 fbb.check_output_file_consistency(verbose=True)
4631 self.assertFalse(fbb.printed_lines)
4632
4633 def test_variants_swarming_dict_merge_mixins(self):
4634 """
4635 Test targets with swarming dictionary defined by both basic and matrix
4636 """
Garrett Beaty1afaccc2020-06-25 19:58:154637 fbb = FakeBBGen(self.args,
4638 MATRIX_GTEST_SUITE_WATERFALL,
4639 MATRIX_COMPOUND_TARGETS_MIXINS,
4640 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404641 mixins=SWARMING_MIXINS,
4642 variants=MIXINS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384643 fbb.check_output_file_consistency(verbose=True)
4644 self.assertFalse(fbb.printed_lines)
4645
4646 def test_variants_swarming_dict_swarming(self):
4647 """
4648 Test targets with swarming dictionary defined by both basic and matrix
4649 """
Garrett Beaty1afaccc2020-06-25 19:58:154650 fbb = FakeBBGen(self.args,
4651 MATRIX_GTEST_SUITE_WATERFALL,
4652 MATRIX_COMPOUND_TARGETS_SWARMING,
4653 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404654 variants=SWARMING_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384655 fbb.check_output_file_consistency(verbose=True)
4656 self.assertFalse(fbb.printed_lines)
4657
Rakib M. Hasanc9e01c62020-07-27 22:48:124658 def test_variant_test_suite_with_test_key(self):
4659 """
4660 Test targets in matrix compound test suites with variants
4661 """
4662 fbb = FakeBBGen(self.args,
4663 MATRIX_GTEST_SUITE_WATERFALL,
4664 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
4665 LUCI_MILO_CFG,
4666 variants=VARIANTS_FILE)
Rakib M. Hasanc9e01c62020-07-27 22:48:124667 fbb.check_output_file_consistency(verbose=True)
4668 self.assertFalse(fbb.printed_lines)
4669
Sven Zhengb51bd0482022-08-26 18:26:254670 def test_variants_with_description(self):
4671 """Test variants with description field"""
4672 fbb = FakeBBGen(self.args,
4673 MATRIX_GTEST_SUITE_WATERFALL,
4674 MATRIX_COMPOUND_VARIANTS_REF,
4675 LUCI_MILO_CFG,
4676 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254677 fbb.check_output_file_consistency(verbose=True)
4678 self.assertFalse(fbb.printed_lines)
4679
4680 def test_both_test_suite_and_variants_with_description(self):
4681 """Test both test suite and variants with description field"""
4682 fbb = FakeBBGen(self.args,
4683 MATRIX_GTEST_SUITE_WATERFALL,
4684 MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION,
4685 LUCI_MILO_CFG,
4686 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254687 fbb.check_output_file_consistency(verbose=True)
4688 self.assertFalse(fbb.printed_lines)
4689
Jeff Yoonda581c32020-03-06 03:56:054690 def test_variants_pyl_ref(self):
4691 """Test targets with variants string ref"""
Garrett Beaty1afaccc2020-06-25 19:58:154692 fbb = FakeBBGen(self.args,
4693 MATRIX_GTEST_SUITE_WATERFALL,
4694 MATRIX_COMPOUND_VARIANTS_REF,
4695 LUCI_MILO_CFG,
4696 variants=VARIANTS_FILE)
Jeff Yoonda581c32020-03-06 03:56:054697 fbb.check_output_file_consistency(verbose=True)
4698 self.assertFalse(fbb.printed_lines)
4699
4700 def test_variants_pyl_no_ref(self):
4701 """Test targets with variants string ref, not defined in variants.pyl"""
Garrett Beaty1afaccc2020-06-25 19:58:154702 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4703 MATRIX_COMPOUND_VARIANTS_REF, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234704 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4705 'Missing variant definition for *'):
Jeff Yoonda581c32020-03-06 03:56:054706 fbb.check_output_file_consistency(verbose=True)
4707
4708 def test_variants_pyl_all_unreferenced(self):
4709 """Test targets with variants in variants.pyl, unreferenced in tests"""
Garrett Beaty1afaccc2020-06-25 19:58:154710 fbb = FakeBBGen(self.args,
4711 MATRIX_GTEST_SUITE_WATERFALL,
Garrett Beaty2022db42023-08-29 17:22:404712 MATRIX_COMPOUND_VARIANTS_REF,
Garrett Beaty1afaccc2020-06-25 19:58:154713 LUCI_MILO_CFG,
4714 variants=MULTI_VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234715 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4716 'The following variants were unreferenced *'):
Jeff Yoonda581c32020-03-06 03:56:054717 fbb.check_input_file_consistency(verbose=True)
4718
Xinan Lin05fb9c1752020-12-17 00:15:524719 def test_good_skylab_matrix_with_variants(self):
4720 fbb = FakeBBGen(self.args,
4721 MATRIX_SKYLAB_WATERFALL,
4722 MATRIX_COMPOUND_SKYLAB_REF,
4723 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404724 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4725 variants=SKYLAB_VARIANTS)
Xinan Lin05fb9c1752020-12-17 00:15:524726 fbb.check_input_file_consistency(verbose=True)
4727 fbb.check_output_file_consistency(verbose=True)
4728 self.assertFalse(fbb.printed_lines)
4729
Qijiang Fan9032762d2024-06-25 06:02:244730 def test_good_skylab_matrix_with_build_target_variant_and_variants(self):
4731 fbb = FakeBBGen(self.args,
4732 MATRIX_SKYLAB_WATERFALL_WITH_BUILD_TARGET_VARIANT,
4733 MATRIX_COMPOUND_SKYLAB_REF,
4734 LUCI_MILO_CFG,
4735 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4736 variants=SKYLAB_VARIANTS_WITH_BUILD_VARIANT)
4737 fbb.check_input_file_consistency(verbose=True)
4738 fbb.check_output_file_consistency(verbose=True)
4739 self.assertFalse(fbb.printed_lines)
4740
Jieting Yangef6b1042021-11-30 21:33:484741 def test_enabled_and_disabled_skylab_matrix_with_variants(self):
4742 """Test with disabled variants"""
4743 fbb = FakeBBGen(self.args,
4744 MATRIX_SKYLAB_WATERFALL,
4745 ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF,
4746 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404747 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4748 variants=ENABLED_AND_DISABLED_VARIANTS)
Jieting Yangef6b1042021-11-30 21:33:484749 # some skylab test variant is disabled; the corresponding skylab tests
4750 # is not generated.
Jieting Yangef6b1042021-11-30 21:33:484751 fbb.check_input_file_consistency(verbose=True)
4752 fbb.check_output_file_consistency(verbose=True)
4753 self.assertFalse(fbb.printed_lines)
4754
yoshiki iguchid1664ef2024-03-28 19:16:524755 def test_invalid_skylab_matrix_with_variants(self):
4756 fbb = FakeBBGen(self.args,
4757 MATRIX_SKYLAB_WATERFALL_WITH_NO_CROS_BOARD,
4758 MATRIX_COMPOUND_SKYLAB_REF,
4759 LUCI_MILO_CFG,
4760 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4761 variants=SKYLAB_VARIANTS)
4762 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4763 'skylab tests must specify cros_board.'):
4764 fbb.check_output_file_consistency(verbose=True)
4765 self.assertFalse(fbb.printed_lines)
4766
Jeff Yoon8154e582019-12-03 23:30:014767
Dirk Pranke772f55f2021-04-28 04:51:164768MAC_TEST_SUITE = """\
4769{
4770 'basic_suites': {
4771 'foo_tests': {
4772 'foo_test': {
4773 },
4774 },
4775 },
4776}
4777"""
4778
Ben Pastene338f56b2023-03-31 21:24:454779NO_DIMENSIONS_GTESTS_WATERFALL = """\
Dirk Pranke772f55f2021-04-28 04:51:164780[
4781 {
4782 'project': 'chromium',
4783 'bucket': 'ci',
4784 'name': 'chromium.test',
4785 'machines': {
4786 'Mac': {
Garrett Beatybb18d532023-06-26 22:16:334787 'swarming': {},
Dirk Pranke772f55f2021-04-28 04:51:164788 'test_suites': {
4789 'gtest_tests': 'foo_tests',
4790 },
4791 },
4792 },
4793 },
4794]
4795"""
4796
Ben Pastene338f56b2023-03-31 21:24:454797NO_OS_GTESTS_WATERFALL = """\
4798[
4799 {
4800 'project': 'chromium',
4801 'bucket': 'ci',
4802 'name': 'chromium.test',
4803 'machines': {
4804 'Mac': {
4805 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254806 'dimensions': {
4807 'foo': 'bar',
4808 },
Ben Pastene338f56b2023-03-31 21:24:454809 },
4810 'test_suites': {
4811 'gtest_tests': 'foo_tests',
4812 },
4813 },
4814 },
4815 },
4816]
4817"""
4818
Dirk Pranke772f55f2021-04-28 04:51:164819MAC_ISOLATED_SCRIPTS_WATERFALL = """\
4820[
4821 {
4822 'project': 'chromium',
4823 'bucket': 'ci',
4824 'name': 'chromium.test',
4825 'machines': {
4826 'Mac': {
4827 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254828 'dimensions': {
4829 'os': 'Mac',
4830 },
Dirk Pranke772f55f2021-04-28 04:51:164831 },
4832 'test_suites': {
4833 'isolated_scripts': 'foo_tests',
4834 },
4835 },
4836 },
4837 },
4838]
4839"""
4840
Dirk Pranke772f55f2021-04-28 04:51:164841MAC_LUCI_MILO_CFG = """\
4842consoles {
4843 builders {
4844 name: "buildbucket/luci.chromium.ci/Mac"
4845 }
4846}
4847"""
4848
4849
4850class SwarmingTests(TestCase):
Ben Pastene338f56b2023-03-31 21:24:454851 def test_builder_with_no_dimension_fails(self):
4852 fbb = FakeBBGen(self.args, NO_DIMENSIONS_GTESTS_WATERFALL, MAC_TEST_SUITE,
Dirk Pranke772f55f2021-04-28 04:51:164853 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164854 fbb.check_input_file_consistency(verbose=True)
Tatsuhisa Yamaguchif1878d52023-11-06 06:02:254855 with self.assertRaisesRegex(
4856 generate_buildbot_json.BBGenErr,
4857 'dimensions must be specified for all swarmed tests'):
Garrett Beaty992342df2023-06-23 17:38:014858 fbb.check_output_file_consistency(verbose=True)
Ben Pastene338f56b2023-03-31 21:24:454859 self.assertFalse(fbb.printed_lines)
4860
4861 def test_builder_with_no_os_dimension_fails(self):
4862 fbb = FakeBBGen(self.args, NO_OS_GTESTS_WATERFALL, MAC_TEST_SUITE,
4863 MAC_LUCI_MILO_CFG)
4864 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014865 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4866 'os must be specified for all swarmed tests'):
4867 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164868 self.assertFalse(fbb.printed_lines)
4869
4870 def test_mac_builder_with_no_cpu_dimension_in_isolated_script_fails(self):
4871 fbb = FakeBBGen(self.args, MAC_ISOLATED_SCRIPTS_WATERFALL, MAC_TEST_SUITE,
4872 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164873 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014874 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4875 'cpu must be specified for mac'):
4876 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164877 self.assertFalse(fbb.printed_lines)
4878
4879
Kenneth Russelleb60cbd22017-12-05 07:54:284880if __name__ == '__main__':
4881 unittest.main()