blob: feb9db658fe8dfd82fe9685ae3763824f2518434 [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,
683 'skip_output_links': True,
684 'test_suites': {
685 'gtest_tests': 'foo_tests',
686 },
687 },
688 'Fake Android M Tester': {
689 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25690 'dimensions': {
691 'device_os': 'MMB29Q',
692 'device_type': 'bullhead',
693 'os': 'Android',
694 },
Kenneth Russelleb60cbd22017-12-05 07:54:28695 },
696 'os_type': 'android',
697 'use_swarming': False,
698 'test_suites': {
699 'gtest_tests': 'foo_tests',
700 },
701 },
702 },
703 },
704]
705"""
706
Nico Weberd18b8962018-05-16 19:39:38707UNKNOWN_BOT_GTESTS_WATERFALL = """\
708[
709 {
Greg Gutermanf60eb052020-03-12 17:40:01710 'project': 'chromium',
711 'bucket': 'ci',
Nico Weberd18b8962018-05-16 19:39:38712 'name': 'chromium.test',
713 'machines': {
714 'Unknown Bot': {
715 'test_suites': {
716 'gtest_tests': 'foo_tests',
717 },
718 },
719 },
720 },
721]
722"""
723
Jeff Yoon8154e582019-12-03 23:30:01724MATRIX_GTEST_SUITE_WATERFALL = """\
725[
726 {
Greg Gutermanf60eb052020-03-12 17:40:01727 'project': 'chromium',
728 'bucket': 'ci',
Jeff Yoon8154e582019-12-03 23:30:01729 'name': 'chromium.test',
730 'machines': {
731 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:45732 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25733 'dimensions': {
734 'os': 'Linux',
735 },
Ben Pastene338f56b2023-03-31 21:24:45736 },
Jeff Yoon8154e582019-12-03 23:30:01737 'test_suites': {
738 'gtest_tests': 'matrix_tests',
739 },
740 },
741 },
742 },
743]
744"""
745
Jeff Yoon67c3e832020-02-08 07:39:38746MATRIX_GTEST_SUITE_WATERFALL_MIXINS = """\
747[
748 {
Greg Gutermanf60eb052020-03-12 17:40:01749 'project': 'chromium',
750 'bucket': 'ci',
Jeff Yoon67c3e832020-02-08 07:39:38751 'name': 'chromium.test',
752 'machines': {
753 'Fake Tester': {
754 'mixins': ['dimension_mixin'],
755 'test_suites': {
756 'gtest_tests': 'matrix_tests',
757 },
758 },
759 },
760 },
761]
762"""
763
Kenneth Russelleb60cbd22017-12-05 07:54:28764FOO_TEST_SUITE = """\
765{
Stephen Martinis54d64ad2018-09-21 22:16:20766 'basic_suites': {
767 'foo_tests': {
768 'foo_test': {
769 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25770 'dimensions': {
771 'integrity': 'high',
772 'os': 'Linux',
773 },
Stephen Martinis54d64ad2018-09-21 22:16:20774 'expiration': 120,
775 },
Kenneth Russelleb60cbd22017-12-05 07:54:28776 },
777 },
778 },
779}
780"""
781
Brian Sheedycae63b22020-06-10 22:52:11782FOO_TEST_SUITE_NO_DIMENSIONS = """\
783{
784 'basic_suites': {
785 'foo_tests': {
786 'foo_test': {
787 },
788 },
789 },
790}
791"""
792
Stephen Martinis5bef0fc2020-01-06 22:47:53793FOO_TEST_SUITE_NOT_SORTED = """\
794{
795 'basic_suites': {
796 'foo_tests': {
797 'foo_test': {},
798 'a_test': {},
799 },
800 },
801}
802"""
803
Kenneth Russell8ceeabf2017-12-11 17:53:28804FOO_TEST_SUITE_WITH_ARGS = """\
805{
Stephen Martinis54d64ad2018-09-21 22:16:20806 'basic_suites': {
807 'foo_tests': {
808 'foo_test': {
809 'args': [
810 '--c_arg',
811 ],
812 },
Kenneth Russell8ceeabf2017-12-11 17:53:28813 },
814 },
815}
816"""
817
Garrett Beatyade673d2023-08-04 22:00:25818FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS = """\
819{
820 'basic_suites': {
821 'foo_tests': {
822 'foo_test': {
823 'swarming': {
824 'dimension_sets': [
825 {
826 'foo': 'bar',
827 },
828 ],
829 },
830 },
831 },
832 },
833}
834"""
835
Garrett Beaty235c1412023-08-29 20:26:29836FOO_TEST_SUITE_WITH_NAME = """\
837{
838 'basic_suites': {
839 'foo_tests': {
840 'foo_test': {
841 'name': 'bar_test',
842 },
843 },
844 },
845}
846"""
847
Zhaoyang Li473dd0ae2021-05-10 18:28:28848FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES = """\
849{
850 'basic_suites': {
851 'foo_tests': {
852 'foo_test': {
853 'swarming': {
854 'named_caches': [
855 {
856 'name': 'cache_in_test',
857 'file': 'cache_in_test_file',
858 },
859 ],
860 },
861 },
862 },
863 },
864}
865"""
866
Kenneth Russell8a386d42018-06-02 09:48:01867FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
868{
Stephen Martinis54d64ad2018-09-21 22:16:20869 'basic_suites': {
870 'foo_tests': {
871 'foo_test': {
872 'linux_args': [
873 '--no-xvfb',
874 ],
875 },
Kenneth Russell8a386d42018-06-02 09:48:01876 },
877 },
878}
879"""
880
Kenneth Russell650995a2018-05-03 21:17:01881FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
882{
Stephen Martinis54d64ad2018-09-21 22:16:20883 'basic_suites': {
884 'foo_tests': {
885 'foo_test': {
886 'args': [
887 '--enable-features=Foo,Bar',
888 ],
889 },
Kenneth Russell650995a2018-05-03 21:17:01890 },
891 },
892}
893"""
894
Brian Sheedy7658c982020-01-08 02:27:58895FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN = """\
896{
897 'basic_suites': {
898 'foo_tests': {
899 'foo_test': {
900 'remove_mixins': ['waterfall_mixin'],
901 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25902 'dimensions': {
903 'integrity': 'high',
904 },
Brian Sheedy7658c982020-01-08 02:27:58905 'expiration': 120,
906 },
907 },
908 },
909 },
910}
911"""
912
913FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN = """\
914{
915 'basic_suites': {
916 'foo_tests': {
917 'foo_test': {
918 'remove_mixins': ['builder_mixin'],
919 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25920 'dimensions': {
921 'integrity': 'high',
922 },
Brian Sheedy7658c982020-01-08 02:27:58923 'expiration': 120,
924 },
925 },
926 },
927 },
928}
929"""
930
Kenneth Russelleb60cbd22017-12-05 07:54:28931FOO_SCRIPT_SUITE = """\
932{
Stephen Martinis54d64ad2018-09-21 22:16:20933 'basic_suites': {
934 'foo_scripts': {
935 'foo_test': {
936 'script': 'foo.py',
937 },
938 'bar_test': {
939 'script': 'bar.py',
940 },
Kenneth Russelleb60cbd22017-12-05 07:54:28941 },
942 },
943}
944"""
945
Kenneth Russelleb60cbd22017-12-05 07:54:28946GOOD_COMPOSITION_TEST_SUITES = """\
947{
Stephen Martinis54d64ad2018-09-21 22:16:20948 'basic_suites': {
949 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:45950 'bar_test': {
951 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25952 'dimensions': {
953 'os': 'Linux',
954 },
Ben Pastene338f56b2023-03-31 21:24:45955 },
956 },
Stephen Martinis54d64ad2018-09-21 22:16:20957 },
958 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:45959 'foo_test': {
960 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25961 'dimensions': {
962 'os': 'Linux',
963 },
Ben Pastene338f56b2023-03-31 21:24:45964 },
965 },
Stephen Martinis54d64ad2018-09-21 22:16:20966 },
Kenneth Russelleb60cbd22017-12-05 07:54:28967 },
Stephen Martinis54d64ad2018-09-21 22:16:20968 'compound_suites': {
969 'composition_tests': [
970 'foo_tests',
971 'bar_tests',
972 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28973 },
Kenneth Russelleb60cbd22017-12-05 07:54:28974}
975"""
976
977BAD_COMPOSITION_TEST_SUITES = """\
978{
Stephen Martinis54d64ad2018-09-21 22:16:20979 'basic_suites': {
980 'bar_tests': {},
981 'foo_tests': {},
982 },
983 'compound_suites': {
984 'buggy_composition_tests': [
985 'bar_tests',
986 ],
987 'composition_tests': [
988 'foo_tests',
989 'buggy_composition_tests',
990 ],
991 },
992}
993"""
994
Andrew Luo0f1dee02019-09-06 16:50:47995CONFLICTING_COMPOSITION_TEST_SUITES = """\
996{
997 'basic_suites': {
998 'bar_tests': {
999 'baz_tests': {
1000 'args': [
1001 '--bar',
1002 ],
1003 }
1004 },
1005 'foo_tests': {
1006 'baz_tests': {
1007 'args': [
1008 '--foo',
1009 ],
1010 }
1011 },
1012 },
1013 'compound_suites': {
1014 'foobar_tests': [
1015 'foo_tests',
1016 'bar_tests',
1017 ],
1018 },
1019}
1020"""
1021
Stephen Martinis54d64ad2018-09-21 22:16:201022DUPLICATES_COMPOSITION_TEST_SUITES = """\
1023{
1024 'basic_suites': {
1025 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:011026 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:201027 'foo_tests': {},
1028 },
1029 'compound_suites': {
1030 'bar_tests': [
1031 'foo_tests',
1032 ],
1033 'composition_tests': [
1034 'foo_tests',
1035 'buggy_composition_tests',
1036 ],
1037 },
Kenneth Russelleb60cbd22017-12-05 07:54:281038}
1039"""
1040
Dirk Pranke1b767092017-12-07 04:44:231041SCRIPT_SUITE = """\
1042{
Stephen Martinis54d64ad2018-09-21 22:16:201043 'basic_suites': {
1044 'foo_scripts': {
1045 'foo_test': {
1046 'script': 'foo.py',
1047 },
Dirk Pranke1b767092017-12-07 04:44:231048 },
1049 },
1050}
1051"""
1052
Kenneth Russelleb60cbd22017-12-05 07:54:281053UNREFED_TEST_SUITE = """\
1054{
Stephen Martinis54d64ad2018-09-21 22:16:201055 'basic_suites': {
1056 'bar_tests': {},
1057 'foo_tests': {},
1058 },
Kenneth Russelleb60cbd22017-12-05 07:54:281059}
1060"""
1061
1062REUSING_TEST_WITH_DIFFERENT_NAME = """\
1063{
Stephen Martinis54d64ad2018-09-21 22:16:201064 'basic_suites': {
1065 'foo_tests': {
1066 'foo_test': {},
1067 'variation_test': {
1068 'args': [
1069 '--variation',
1070 ],
1071 'test': 'foo_test',
1072 },
Kenneth Russelleb60cbd22017-12-05 07:54:281073 },
1074 },
1075}
1076"""
1077
Garrett Beaty235c1412023-08-29 20:26:291078COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME = """\
Kenneth Russell8a386d42018-06-02 09:48:011079{
Stephen Martinis54d64ad2018-09-21 22:16:201080 'basic_suites': {
1081 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:451082 'foo': {
Garrett Beaty235c1412023-08-29 20:26:291083 'telemetry_test_name': 'foo',
1084 'swarming': {
1085 'dimensions': {
1086 'os': 'Linux',
1087 },
1088 },
1089 },
1090 },
1091 },
1092 'compound_suites': {
1093 'composition_tests': [
1094 'foo_tests',
1095 ],
1096 },
1097}
1098"""
1099
1100COMPOSITION_SUITE_WITH_TELEMETRY_TEST = """\
1101{
1102 'basic_suites': {
1103 'foo_tests': {
1104 'foo_tests': {
1105 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451106 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251107 'dimensions': {
1108 'os': 'Linux',
1109 },
Ben Pastene338f56b2023-03-31 21:24:451110 },
1111 },
Stephen Martinis54d64ad2018-09-21 22:16:201112 },
1113 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451114 'bar_test': {
1115 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251116 'dimensions': {
1117 'os': 'Linux',
1118 },
Ben Pastene338f56b2023-03-31 21:24:451119 },
1120 },
Stephen Martinis54d64ad2018-09-21 22:16:201121 },
Kenneth Russell8a386d42018-06-02 09:48:011122 },
Stephen Martinis54d64ad2018-09-21 22:16:201123 'compound_suites': {
1124 'composition_tests': [
1125 'foo_tests',
1126 'bar_tests',
1127 ],
Kenneth Russell8a386d42018-06-02 09:48:011128 },
Kenneth Russell8a386d42018-06-02 09:48:011129}
1130"""
1131
Kenneth Russell384a1732019-03-16 02:36:021132COMPOSITION_SUITE_WITH_GPU_ARGS = """\
1133{
1134 'basic_suites': {
1135 'foo_tests': {
Garrett Beaty235c1412023-08-29 20:26:291136 'foo_tests': {
1137 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451138 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251139 'dimensions': {
1140 'os': 'Linux',
1141 },
Ben Pastene338f56b2023-03-31 21:24:451142 },
Kenneth Russell384a1732019-03-16 02:36:021143 'args': [
1144 '--gpu-vendor-id',
1145 '${gpu_vendor_id}',
1146 '--gpu-device-id',
1147 '${gpu_device_id}',
1148 ],
1149 },
1150 },
1151 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451152 'bar_test': {
1153 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251154 'dimensions': {
1155 'os': 'Linux',
1156 },
Ben Pastene338f56b2023-03-31 21:24:451157 },
1158 },
Kenneth Russell384a1732019-03-16 02:36:021159 },
1160 },
1161 'compound_suites': {
1162 'composition_tests': [
1163 'foo_tests',
1164 'bar_tests',
1165 ],
1166 },
1167}
1168"""
1169
Brian Sheedyd8c0c73d2021-07-05 02:11:301170COMPOSITION_SUITE_WITH_PIXEL_AND_FILTER = """\
1171{
1172 'basic_suites': {
1173 'foo_tests': {
1174 'pixel': {
1175 'args': [
1176 '--git-revision=aaaa',
1177 '--test-filter=bar',
1178 ],
1179 },
1180 },
1181 'bar_tests': {
1182 'bar_test': {},
1183 },
1184 },
1185 'compound_suites': {
1186 'composition_tests': [
1187 'foo_tests',
1188 'bar_tests',
1189 ],
1190 },
1191}
1192"""
1193
Jamie Madilla8be0d72020-10-02 05:24:041194GTEST_AS_ISOLATED_SCRIPT_SUITE = """\
1195{
1196 'basic_suites': {
1197 'foo_tests': {
1198 'foo_test': {
1199 'script': 'foo.py',
1200 'use_isolated_scripts_api': True,
1201 },
1202 },
1203 },
1204}
1205"""
1206
Dirk Pranke1b767092017-12-07 04:44:231207SCRIPT_WITH_ARGS_EXCEPTIONS = """\
1208{
1209 'foo_test': {
1210 'modifications': {
1211 'Fake Tester': {
1212 'args': ['--fake-arg'],
1213 },
1214 },
1215 },
1216}
1217"""
1218
Stephen Martinis0382bc12018-09-17 22:29:071219SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
1220{
1221 'foo_test': {
1222 'modifications': {
1223 'Fake Tester': {
1224 'swarming': {
1225 'value': 'exception',
1226 },
1227 },
1228 },
1229 },
1230}
1231"""
1232
Stephanie Kim572b43c02023-04-13 14:24:131233AUTOSHARD_EXCEPTIONS = json.dumps({
1234 'chromium.test': {
1235 'Fake Tester': {
1236 'foo_test': {
1237 'shards': 20,
1238 },
1239 'foo_test_apk': {
1240 'shards': 2,
1241 },
1242 'swarming_test a_variant': {
1243 'shards': 10,
1244 },
1245 }
1246 },
1247})
1248
Kenneth Russelleb60cbd22017-12-05 07:54:281249NO_BAR_TEST_EXCEPTIONS = """\
1250{
1251 'bar_test': {
1252 'remove_from': [
1253 'Fake Tester',
1254 ]
1255 }
1256}
1257"""
1258
1259EMPTY_BAR_TEST_EXCEPTIONS = """\
1260{
1261 'bar_test': {
1262 }
1263}
1264"""
1265
Stephen Martinis54d64ad2018-09-21 22:16:201266EXCEPTIONS_SORTED = """\
1267{
1268 'suite_c': {
1269 'modifications': {
1270 'Fake Tester': {
1271 'foo': 'bar',
1272 },
1273 },
1274 },
1275 'suite_d': {
1276 'modifications': {
1277 'Fake Tester': {
1278 'foo': 'baz',
1279 },
1280 },
1281 },
1282}
1283"""
1284
1285EXCEPTIONS_UNSORTED = """\
1286{
1287 'suite_d': {
1288 'modifications': {
1289 'Fake Tester': {
1290 'foo': 'baz',
1291 },
1292 },
1293 },
1294 'suite_c': {
1295 'modifications': {
1296 'Fake Tester': {
1297 'foo': 'bar',
1298 },
1299 },
1300 },
1301}
1302"""
1303
Stephen Martinis5bef0fc2020-01-06 22:47:531304EXCEPTIONS_PER_TEST_UNSORTED = """\
1305{
1306 'suite_d': {
1307 'modifications': {
1308 'Other Tester': {
1309 'foo': 'baz',
1310 },
1311 'Fake Tester': {
1312 'foo': 'baz',
1313 },
1314 },
1315 },
1316}
1317"""
1318
1319EXCEPTIONS_DUPS_REMOVE_FROM = """\
1320{
1321 'suite_d': {
1322 'remove_from': [
1323 'Fake Tester',
1324 'Fake Tester',
1325 ],
1326 'modifications': {
1327 'Fake Tester': {
1328 'foo': 'baz',
1329 },
1330 },
1331 },
1332}
1333"""
1334
Kenneth Russelleb60cbd22017-12-05 07:54:281335FOO_TEST_MODIFICATIONS = """\
1336{
1337 'foo_test': {
1338 'modifications': {
1339 'Fake Tester': {
1340 'args': [
1341 '--bar',
1342 ],
1343 'swarming': {
1344 'hard_timeout': 600,
1345 },
1346 },
1347 },
1348 }
1349}
1350"""
1351
John Budorick5bc387fe2019-05-09 20:02:531352FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
1353{
1354 'foo_test': {
1355 'modifications': {
1356 'Fake Tester': {
1357 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251358 'dimensions': {
1359 'integrity': None,
1360 },
John Budorick5bc387fe2019-05-09 20:02:531361 },
1362 },
1363 },
1364 },
1365}
1366"""
1367
Kenneth Russelleb60cbd22017-12-05 07:54:281368NONEXISTENT_REMOVAL = """\
1369{
1370 'foo_test': {
1371 'remove_from': [
1372 'Nonexistent Tester',
1373 ]
1374 }
1375}
1376"""
1377
1378NONEXISTENT_MODIFICATION = """\
1379{
1380 'foo_test': {
1381 'modifications': {
1382 'Nonexistent Tester': {
1383 'args': [],
1384 },
1385 },
1386 }
1387}
1388"""
1389
Kenneth Russell78fd8702018-05-17 01:15:521390LUCI_MILO_CFG = """\
1391consoles {
1392 builders {
1393 name: "buildbucket/luci.chromium.ci/Fake Tester"
1394 }
1395}
1396"""
1397
Stephen Martinis54d64ad2018-09-21 22:16:201398LUCI_MILO_CFG_WATERFALL_SORTING = """\
1399consoles {
1400 builders {
1401 name: "buildbucket/luci.chromium.ci/Fake Tester"
1402 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1403 }
1404}
1405"""
1406
Stephen Martinis54d64ad2018-09-21 22:16:201407TEST_SUITE_SORTING_WATERFALL = """
1408[
1409 {
Greg Gutermanf60eb052020-03-12 17:40:011410 'project': 'chromium',
1411 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201412 'name': 'chromium.test',
1413 'machines': {
1414 'Fake Tester': {
1415 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561416 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201417 'scripts': 'suite_b',
1418 },
1419 },
1420 },
1421 },
1422]
1423"""
1424
1425TEST_SUITE_SORTED_WATERFALL = """
1426[
1427 {
Greg Gutermanf60eb052020-03-12 17:40:011428 'project': 'chromium',
1429 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201430 'name': 'chromium.test',
1431 'machines': {
1432 'Fake Tester': {
1433 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561434 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201435 'scripts': 'suite_b',
1436 },
1437 },
1438 'Really Fake Tester': {
1439 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561440 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201441 'scripts': 'suite_b',
1442 },
1443 },
1444 },
1445 },
1446 {
Greg Gutermanf60eb052020-03-12 17:40:011447 'project': 'chromium',
1448 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201449 'name': 'chromium.zz.test',
1450 'machines': {
1451 'Fake Tester': {
1452 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561453 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201454 'scripts': 'suite_b',
1455 },
1456 },
1457 'Really Fake Tester': {
1458 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561459 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201460 'scripts': 'suite_b',
1461 },
1462 },
1463 },
1464 },
1465]
1466"""
1467
1468TEST_SUITE_UNSORTED_WATERFALL_1 = """
1469[
1470 {
Greg Gutermanf60eb052020-03-12 17:40:011471 'project': 'chromium',
1472 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201473 'name': 'chromium.zz.test',
1474 'machines': {
1475 'Fake Tester': {
1476 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561477 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201478 'scripts': 'suite_b',
1479 },
1480 },
1481 'Really Fake Tester': {
1482 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561483 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201484 'scripts': 'suite_b',
1485 },
1486 },
1487 },
1488 },
1489 {
Greg Gutermanf60eb052020-03-12 17:40:011490 'project': 'chromium',
1491 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201492 'name': 'chromium.test',
1493 'machines': {
1494 'Fake Tester': {
1495 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561496 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201497 'scripts': 'suite_b',
1498 },
1499 },
1500 'Really Fake Tester': {
1501 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561502 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201503 'scripts': 'suite_b',
1504 },
1505 },
1506 },
1507 },
1508]
1509"""
1510
1511TEST_SUITE_UNSORTED_WATERFALL_2 = """
1512[
1513 {
Greg Gutermanf60eb052020-03-12 17:40:011514 'project': 'chromium',
1515 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201516 'name': 'chromium.test',
1517 'machines': {
1518 'Really Fake Tester': {
1519 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561520 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201521 'scripts': 'suite_b',
1522 },
1523 },
1524 'Fake Tester': {
1525 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561526 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201527 'scripts': 'suite_b',
1528 },
1529 },
1530 },
1531 },
1532 {
Greg Gutermanf60eb052020-03-12 17:40:011533 'project': 'chromium',
1534 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201535 'name': 'chromium.zz.test',
1536 'machines': {
1537 'Fake Tester': {
1538 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561539 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201540 'scripts': 'suite_b',
1541 },
1542 },
1543 'Really Fake Tester': {
1544 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561545 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201546 'scripts': 'suite_b',
1547 },
1548 },
1549 },
1550 },
1551]
1552"""
1553
1554# Note that the suites in basic_suites would be sorted after the suites in
1555# compound_suites. This is valid though, because each set of suites is sorted
1556# separately.
Dirk Pranke0e879b22020-07-16 23:53:561557# suite_c is a 'gtest_tests' test
1558# suite_d is a 'scripts' test
Stephen Martinis54d64ad2018-09-21 22:16:201559TEST_SUITE_SORTED = """\
1560{
1561 'basic_suites': {
1562 'suite_c': {
1563 'suite_c': {},
1564 },
1565 'suite_d': {
1566 'script': {
1567 'script': 'suite_d.py',
1568 }
1569 },
1570 },
1571 'compound_suites': {
1572 'suite_a': [
1573 'suite_c',
1574 ],
1575 'suite_b': [
1576 'suite_d',
1577 ],
1578 },
1579}
1580"""
1581
1582TEST_SUITE_UNSORTED_1 = """\
1583{
1584 'basic_suites': {
1585 'suite_d': {
1586 'a': 'b',
1587 },
1588 'suite_c': {
1589 'a': 'b',
1590 },
1591 },
1592 'compound_suites': {
1593 'suite_a': [
1594 'suite_c',
1595 ],
1596 'suite_b': [
1597 'suite_d',
1598 ],
1599 },
1600}
1601"""
1602
1603TEST_SUITE_UNSORTED_2 = """\
1604{
1605 'basic_suites': {
1606 'suite_c': {
1607 'a': 'b',
1608 },
1609 'suite_d': {
1610 'a': 'b',
1611 },
1612 },
1613 'compound_suites': {
1614 'suite_b': [
1615 'suite_c',
1616 ],
1617 'suite_a': [
1618 'suite_d',
1619 ],
1620 },
1621}
1622"""
1623TEST_SUITE_UNSORTED_3 = """\
1624{
1625 'basic_suites': {
1626 'suite_d': {
1627 'a': 'b',
1628 },
1629 'suite_c': {
1630 'a': 'b',
1631 },
1632 },
1633 'compound_suites': {
1634 'suite_b': [
1635 'suite_c',
1636 ],
1637 'suite_a': [
1638 'suite_d',
1639 ],
1640 },
1641}
1642"""
1643
1644
1645TEST_SUITES_SYNTAX_ERROR = """\
1646{
1647 'basic_suites': {
1648 3: {
1649 'suite_c': {},
1650 },
1651 },
1652 'compound_suites': {},
1653}
1654"""
1655
Nodir Turakulovfce34292019-12-18 17:05:411656GN_ISOLATE_MAP="""\
1657{
1658 'foo_test': {
1659 'label': '//chrome/test:foo_test',
1660 'type': 'windowed_test_launcher',
1661 }
1662}
1663"""
1664
Chan Liab7d8dd82020-04-24 23:42:191665GPU_TELEMETRY_GN_ISOLATE_MAP="""\
1666{
1667 'telemetry_gpu_integration_test': {
1668 'label': '//chrome/test:telemetry_gpu_integration_test',
1669 'type': 'script',
1670 }
1671}
1672"""
Brian Sheedyf74819b2021-06-04 01:38:381673
1674GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID = """\
1675{
1676 'telemetry_gpu_integration_test_android_chrome': {
1677 'label': '//chrome/test:telemetry_gpu_integration_test_android_chrome',
1678 'type': 'script',
1679 }
1680}
1681"""
1682
1683GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW = """\
1684{
1685 'telemetry_gpu_integration_test_android_webview': {
1686 'label': '//chrome/test:telemetry_gpu_integration_test_android_webview',
1687 'type': 'script',
1688 }
1689}
1690"""
1691
Chong Guc2ca5d02022-01-11 19:52:171692GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA = """\
1693{
1694 'telemetry_gpu_integration_test_fuchsia': {
1695 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1696 'type': 'script',
1697 }
1698}
1699"""
1700
Fabrice de Ganscbd655f2022-08-04 20:15:301701GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING = """\
1702{
1703 'telemetry_gpu_integration_test_fuchsia': {
1704 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1705 'type': 'script',
1706 }
1707}
1708"""
1709
Corentin Wallez55b8e772020-04-24 17:39:281710GN_ISOLATE_MAP_KEY_LABEL_MISMATCH="""\
1711{
1712 'foo_test': {
1713 'label': '//chrome/test:foo_test_tmp',
1714 'type': 'windowed_test_launcher',
1715 }
1716}
1717"""
1718
1719GN_ISOLATE_MAP_USING_IMPLICIT_NAME="""\
1720{
1721 'foo_test': {
1722 'label': '//chrome/foo_test',
1723 'type': 'windowed_test_launcher',
1724 }
1725}
1726"""
1727
Garrett Beaty1afaccc2020-06-25 19:58:151728class UnitTest(TestCase):
Kenneth Russelleb60cbd22017-12-05 07:54:281729 def test_base_generator(self):
1730 # Only needed for complete code coverage.
Garrett Beaty992342df2023-06-23 17:38:011731 with self.assertRaises(NotImplementedError):
1732 generate_buildbot_json.BaseGenerator(None).generate(
1733 None, None, None, None)
1734 with self.assertRaises(NotImplementedError):
1735 generate_buildbot_json.BaseGenerator(None).sort(None)
Kenneth Russelleb60cbd22017-12-05 07:54:281736
Garrett Beatyade673d2023-08-04 22:00:251737 def test_dimension_sets_causes_error(self):
1738 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1739 FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS, LUCI_MILO_CFG)
1740 fbb.check_input_file_consistency(verbose=True)
1741 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1742 r'.*dimension_sets is no longer supported.*'):
1743 fbb.check_output_file_consistency(verbose=True)
1744 self.assertFalse(fbb.printed_lines)
1745
Garrett Beaty235c1412023-08-29 20:26:291746 def test_name_causes_error(self):
1747 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1748 FOO_TEST_SUITE_WITH_NAME, LUCI_MILO_CFG)
1749 fbb.check_input_file_consistency(verbose=True)
1750 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1751 r'.*name field is set*'):
1752 fbb.check_output_file_consistency(verbose=True)
1753 self.assertFalse(fbb.printed_lines)
1754
Kenneth Russelleb60cbd22017-12-05 07:54:281755 def test_good_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151756 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521757 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501758 fbb.check_input_file_consistency(verbose=True)
1759 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281760
1761 def test_good_composition_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151762 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1763 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501764 fbb.check_input_file_consistency(verbose=True)
1765 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281766
1767 def test_bad_composition_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151768 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1769 BAD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231770 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1771 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501772 fbb.check_input_file_consistency(verbose=True)
1773 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281774
Andrew Luo0f1dee02019-09-06 16:50:471775 def test_composition_test_suites_no_conflicts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151776 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1777 CONFLICTING_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231778 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1779 'Conflicting test definitions.*'):
Andrew Luo0f1dee02019-09-06 16:50:471780 fbb.check_input_file_consistency(verbose=True)
1781 self.assertFalse(fbb.printed_lines)
1782
Stephen Martinis54d64ad2018-09-21 22:16:201783 def test_composition_test_suites_no_duplicate_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:151784 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1785 DUPLICATES_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231786 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1787 '.*may not duplicate basic test suite.*'):
Stephen Martinis54d64ad2018-09-21 22:16:201788 fbb.check_input_file_consistency(verbose=True)
1789 self.assertFalse(fbb.printed_lines)
1790
Kenneth Russelleb60cbd22017-12-05 07:54:281791 def test_unknown_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151792 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521793 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231794 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1795 'Test suite baz_tests from machine.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501796 fbb.check_input_file_consistency(verbose=True)
1797 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281798
1799 def test_unknown_test_suite_types_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151800 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1801 FOO_TEST_SUITE, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231802 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1803 'Unknown test suite type foo_test_type.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501804 fbb.check_input_file_consistency(verbose=True)
1805 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281806
1807 def test_unrefed_test_suite_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151808 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521809 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231810 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1811 '.*unreferenced.*bar_tests.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501812 fbb.check_input_file_consistency(verbose=True)
1813 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281814
1815 def test_good_waterfall_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:151816 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1817 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281818 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501819 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281820
1821 def test_reusing_gtest_targets(self):
Garrett Beaty1afaccc2020-06-25 19:58:151822 fbb = FakeBBGen(self.args,
1823 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281824 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:411825 LUCI_MILO_CFG,
1826 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russelleb60cbd22017-12-05 07:54:281827 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501828 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281829
Chong Guee622242020-10-28 18:17:351830 def test_load_multiple_isolate_map_files_with_duplicates(self):
1831 self.args.isolate_map_files = ['gn_isolate_map.pyl']
1832 fbb = FakeBBGen(self.args,
1833 FOO_GTESTS_WATERFALL,
1834 REUSING_TEST_WITH_DIFFERENT_NAME,
1835 LUCI_MILO_CFG,
1836 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madillcf4f8c72021-05-20 19:24:231837 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1838 'Duplicate targets in isolate map files.*'):
Chong Guee622242020-10-28 18:17:351839 fbb.load_configuration_files()
1840
1841 def test_load_multiple_isolate_map_files_without_duplicates(self):
1842 self.args.isolate_map_files = ['gn_isolate_map2.pyl']
1843 fbb = FakeBBGen(self.args,
1844 FOO_GTESTS_WATERFALL,
1845 REUSING_TEST_WITH_DIFFERENT_NAME,
1846 LUCI_MILO_CFG,
1847 gn_isolate_map=GN_ISOLATE_MAP)
1848 fbb.load_configuration_files()
1849 isolate_dict = {}
1850 isolate_map_1 = fbb.load_pyl_file('gn_isolate_map.pyl')
1851 isolate_map_2 = fbb.load_pyl_file('gn_isolate_map2.pyl')
1852 isolate_dict.update(isolate_map_1)
1853 isolate_dict.update(isolate_map_2)
Jamie Madillcf4f8c72021-05-20 19:24:231854 self.assertEqual(isolate_dict, fbb.gn_isolate_map)
Chong Guee622242020-10-28 18:17:351855
Corentin Wallez55b8e772020-04-24 17:39:281856 def test_gn_isolate_map_with_label_mismatch(self):
Garrett Beaty1afaccc2020-06-25 19:58:151857 fbb = FakeBBGen(self.args,
1858 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281859 FOO_TEST_SUITE,
1860 LUCI_MILO_CFG,
1861 gn_isolate_map=GN_ISOLATE_MAP_KEY_LABEL_MISMATCH)
Jamie Madillcf4f8c72021-05-20 19:24:231862 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1863 'key name.*foo_test.*label.*'
1864 'foo_test_tmp.*'):
Corentin Wallez55b8e772020-04-24 17:39:281865 fbb.check_input_file_consistency(verbose=True)
1866 self.assertFalse(fbb.printed_lines)
1867
1868 def test_gn_isolate_map_using_implicit_gn_name(self):
Garrett Beaty1afaccc2020-06-25 19:58:151869 fbb = FakeBBGen(self.args,
1870 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281871 FOO_TEST_SUITE,
1872 LUCI_MILO_CFG,
1873 gn_isolate_map=GN_ISOLATE_MAP_USING_IMPLICIT_NAME)
Jamie Madillcf4f8c72021-05-20 19:24:231874 with self.assertRaisesRegex(
1875 generate_buildbot_json.BBGenErr,
1876 'Malformed.*//chrome/foo_test.*for key.*'
1877 'foo_test.*'):
Corentin Wallez55b8e772020-04-24 17:39:281878 fbb.check_input_file_consistency(verbose=True)
1879 self.assertFalse(fbb.printed_lines)
1880
Kenneth Russelleb60cbd22017-12-05 07:54:281881 def test_noop_exception_does_nothing(self):
Garrett Beaty1afaccc2020-06-25 19:58:151882 fbb = FakeBBGen(self.args,
1883 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281884 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411885 LUCI_MILO_CFG,
1886 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281887 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501888 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281889
Kenneth Russell8ceeabf2017-12-11 17:53:281890 def test_test_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151891 fbb = FakeBBGen(self.args,
1892 FOO_GTESTS_WATERFALL,
Kenneth Russell8ceeabf2017-12-11 17:53:281893 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:411894 LUCI_MILO_CFG,
1895 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russell8ceeabf2017-12-11 17:53:281896 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501897 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:281898
Kenneth Russell650995a2018-05-03 21:17:011899 def test_enable_features_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151900 fbb = FakeBBGen(self.args, FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
1901 FOO_TEST_SUITE_WITH_ENABLE_FEATURES, LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:011902 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501903 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:011904
Kenneth Russell8a386d42018-06-02 09:48:011905 def test_linux_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151906 fbb = FakeBBGen(self.args, FOO_LINUX_GTESTS_WATERFALL,
1907 FOO_TEST_SUITE_WITH_LINUX_ARGS, LUCI_MILO_CFG)
Kenneth Russell8a386d42018-06-02 09:48:011908 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501909 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:011910
Kenneth Russelleb60cbd22017-12-05 07:54:281911 def test_test_filtering(self):
Garrett Beaty1afaccc2020-06-25 19:58:151912 fbb = FakeBBGen(self.args,
1913 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281914 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411915 LUCI_MILO_CFG,
1916 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281917 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501918 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281919
1920 def test_test_modifications(self):
Garrett Beaty1afaccc2020-06-25 19:58:151921 fbb = FakeBBGen(self.args,
1922 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281923 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411924 LUCI_MILO_CFG,
1925 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281926 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501927 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281928
John Budorick5bc387fe2019-05-09 20:02:531929 def test_test_with_explicit_none(self):
Garrett Beaty1afaccc2020-06-25 19:58:151930 fbb = FakeBBGen(self.args,
1931 FOO_GTESTS_WATERFALL,
John Budorick5bc387fe2019-05-09 20:02:531932 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411933 LUCI_MILO_CFG,
1934 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
1935 mixins=SWARMING_MIXINS)
John Budorick5bc387fe2019-05-09 20:02:531936 fbb.check_output_file_consistency(verbose=True)
1937 self.assertFalse(fbb.printed_lines)
1938
Kenneth Russelleb60cbd22017-12-05 07:54:281939 def test_isolated_script_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151940 fbb = FakeBBGen(self.args,
1941 FOO_ISOLATED_SCRIPTS_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
Ben Pastenef21cda32023-03-30 22:00:571948 def test_isolated_script_tests_android(self):
Dirk Pranke0e879b22020-07-16 23:53:561949 fbb = FakeBBGen(self.args,
1950 FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID,
1951 GOOD_COMPOSITION_TEST_SUITES,
1952 LUCI_MILO_CFG,
1953 exceptions=NO_BAR_TEST_EXCEPTIONS)
Dirk Pranke0e879b22020-07-16 23:53:561954 fbb.check_output_file_consistency(verbose=True)
1955 self.assertFalse(fbb.printed_lines)
1956
Dirk Pranke1b767092017-12-07 04:44:231957 def test_script_with_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151958 fbb = FakeBBGen(self.args,
1959 FOO_SCRIPT_WATERFALL,
Dirk Pranke1b767092017-12-07 04:44:231960 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411961 LUCI_MILO_CFG,
1962 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Dirk Pranke1b767092017-12-07 04:44:231963 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501964 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:231965
1966 def test_script(self):
Garrett Beaty1afaccc2020-06-25 19:58:151967 fbb = FakeBBGen(self.args,
1968 FOO_SCRIPT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281969 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411970 LUCI_MILO_CFG,
1971 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281972 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501973 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281974
Brian Sheedy158cd0f2019-04-26 01:12:441975 def test_script_machine_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151976 fbb = FakeBBGen(self.args,
1977 FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441978 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411979 LUCI_MILO_CFG,
1980 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231981 with self.assertRaisesRegex(
1982 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441983 'Attempted to generate a script test on tester.*'):
1984 fbb.check_output_file_consistency(verbose=True)
1985
1986 def test_script_waterfall_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151987 fbb = FakeBBGen(self.args,
1988 FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441989 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411990 LUCI_MILO_CFG,
1991 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231992 with self.assertRaisesRegex(
1993 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441994 'Attempted to generate a script test on tester.*'):
1995 fbb.check_output_file_consistency(verbose=True)
1996
Kenneth Russelleb60cbd22017-12-05 07:54:281997 def test_junit_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151998 fbb = FakeBBGen(self.args,
1999 FOO_JUNIT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282000 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412001 LUCI_MILO_CFG,
2002 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282003 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502004 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282005
Garrett Beaty235c1412023-08-29 20:26:292006 def test_gpu_telemetry_test_with_invalid_name(self):
2007 fbb = FakeBBGen(self.args,
2008 FOO_GPU_TELEMETRY_TEST_WATERFALL,
2009 COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME,
2010 LUCI_MILO_CFG,
2011 exceptions=NO_BAR_TEST_EXCEPTIONS,
2012 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
2013 with self.assertRaisesRegex(
2014 generate_buildbot_json.BBGenErr,
2015 'telemetry test names must end with test or tests.*'):
2016 fbb.check_output_file_consistency(verbose=True)
2017 self.assertFalse(fbb.printed_lines)
2018
Kenneth Russell8a386d42018-06-02 09:48:012019 def test_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152020 fbb = FakeBBGen(self.args,
2021 FOO_GPU_TELEMETRY_TEST_WATERFALL,
Garrett Beaty235c1412023-08-29 20:26:292022 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Nodir Turakulovfce34292019-12-18 17:05:412023 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192024 exceptions=NO_BAR_TEST_EXCEPTIONS,
2025 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell8a386d42018-06-02 09:48:012026 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502027 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012028
Brian Sheedyf74819b2021-06-04 01:38:382029 def test_gpu_telemetry_tests_android(self):
2030 fbb = FakeBBGen(self.args,
2031 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID,
Garrett Beaty235c1412023-08-29 20:26:292032 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382033 LUCI_MILO_CFG,
2034 exceptions=NO_BAR_TEST_EXCEPTIONS,
2035 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID)
Brian Sheedyf74819b2021-06-04 01:38:382036 fbb.check_output_file_consistency(verbose=True)
2037 self.assertFalse(fbb.printed_lines)
2038
2039 def test_gpu_telemetry_tests_android_webview(self):
2040 fbb = FakeBBGen(self.args,
2041 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW,
Garrett Beaty235c1412023-08-29 20:26:292042 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382043 LUCI_MILO_CFG,
2044 exceptions=NO_BAR_TEST_EXCEPTIONS,
2045 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW)
Brian Sheedyf74819b2021-06-04 01:38:382046 fbb.check_output_file_consistency(verbose=True)
2047 self.assertFalse(fbb.printed_lines)
2048
Chong Guc2ca5d02022-01-11 19:52:172049 def test_gpu_telemetry_tests_fuchsia(self):
2050 fbb = FakeBBGen(self.args,
2051 FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA,
Garrett Beaty235c1412023-08-29 20:26:292052 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Chong Guc2ca5d02022-01-11 19:52:172053 LUCI_MILO_CFG,
2054 exceptions=NO_BAR_TEST_EXCEPTIONS,
2055 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA)
Chong Guc2ca5d02022-01-11 19:52:172056 fbb.check_output_file_consistency(verbose=True)
2057 self.assertFalse(fbb.printed_lines)
2058
Fabrice de Ganscbd655f2022-08-04 20:15:302059 def test_gpu_telemetry_tests_cast_streaming(self):
2060 fbb = FakeBBGen(self.args,
2061 FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING,
Garrett Beaty235c1412023-08-29 20:26:292062 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Fabrice de Ganscbd655f2022-08-04 20:15:302063 LUCI_MILO_CFG,
2064 exceptions=NO_BAR_TEST_EXCEPTIONS,
2065 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING)
Fabrice de Ganscbd655f2022-08-04 20:15:302066 fbb.check_output_file_consistency(verbose=True)
2067 self.assertFalse(fbb.printed_lines)
2068
Brian Sheedyb6491ba2022-09-26 20:49:492069 def test_gpu_telemetry_tests_skylab(self):
2070 fbb = FakeBBGen(self.args,
2071 FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB,
Garrett Beaty235c1412023-08-29 20:26:292072 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyb6491ba2022-09-26 20:49:492073 LUCI_MILO_CFG,
2074 exceptions=NO_BAR_TEST_EXCEPTIONS,
2075 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyb6491ba2022-09-26 20:49:492076 fbb.check_output_file_consistency(verbose=True)
2077 self.assertFalse(fbb.printed_lines)
2078
Kenneth Russell384a1732019-03-16 02:36:022079 def test_nvidia_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152080 fbb = FakeBBGen(self.args,
2081 NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022082 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412083 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192084 exceptions=NO_BAR_TEST_EXCEPTIONS,
2085 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022086 fbb.check_output_file_consistency(verbose=True)
2087 self.assertFalse(fbb.printed_lines)
2088
2089 def test_intel_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152090 fbb = FakeBBGen(self.args,
2091 INTEL_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022092 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412093 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192094 exceptions=NO_BAR_TEST_EXCEPTIONS,
2095 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022096 fbb.check_output_file_consistency(verbose=True)
2097 self.assertFalse(fbb.printed_lines)
2098
Ben Pastene5f231cf22022-05-05 18:03:072099 def test_gpu_telemetry_tests_with_variants(self):
2100 fbb = FakeBBGen(self.args,
2101 GPU_TELEMETRY_TEST_VARIANTS_WATERFALL,
2102 MATRIX_COMPOUND_MIXED_VARIANTS_REF,
2103 LUCI_MILO_CFG,
2104 exceptions=NO_BAR_TEST_EXCEPTIONS,
2105 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP,
2106 variants=MULTI_VARIANTS_FILE)
Ben Pastene5f231cf22022-05-05 18:03:072107 fbb.check_output_file_consistency(verbose=True)
2108 self.assertFalse(fbb.printed_lines)
2109
Brian Sheedyf9387db7b2019-08-05 19:26:102110 def test_intel_uhd_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152111 fbb = FakeBBGen(self.args,
2112 INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
Brian Sheedyf9387db7b2019-08-05 19:26:102113 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412114 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192115 exceptions=NO_BAR_TEST_EXCEPTIONS,
2116 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyf9387db7b2019-08-05 19:26:102117 fbb.check_output_file_consistency(verbose=True)
2118 self.assertFalse(fbb.printed_lines)
2119
Jamie Madilla8be0d72020-10-02 05:24:042120 def test_gtest_as_isolated_Script(self):
2121 fbb = FakeBBGen(self.args,
2122 FOO_GTESTS_WATERFALL,
2123 GTEST_AS_ISOLATED_SCRIPT_SUITE,
2124 LUCI_MILO_CFG,
2125 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madilla8be0d72020-10-02 05:24:042126 fbb.check_output_file_consistency(verbose=True)
2127 self.assertFalse(fbb.printed_lines)
2128
Kenneth Russelleb60cbd22017-12-05 07:54:282129 def test_ungenerated_output_files_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152130 fbb = FakeBBGen(self.args,
2131 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282132 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412133 LUCI_MILO_CFG,
2134 exceptions=NO_BAR_TEST_EXCEPTIONS)
Stephen Martinis7eb8b612018-09-21 00:17:502135 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192136 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502137 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232138 self.assertRegex(
Dirk Pranke6269d302020-10-01 00:14:392139 joined_lines, 'File chromium.test.json did not have the following'
Stephen Martinis7eb8b612018-09-21 00:17:502140 ' expected contents:.*')
Jamie Madillcf4f8c72021-05-20 19:24:232141 self.assertRegex(joined_lines, '.*--- expected.*')
2142 self.assertRegex(joined_lines, '.*\+\+\+ current.*')
Stephen Martinis7eb8b612018-09-21 00:17:502143 fbb.printed_lines = []
2144 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282145
2146 def test_android_output_options(self):
Garrett Beaty1afaccc2020-06-25 19:58:152147 fbb = FakeBBGen(self.args, ANDROID_WATERFALL, FOO_TEST_SUITE, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282148 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502149 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282150
2151 def test_nonexistent_removal_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152152 fbb = FakeBBGen(self.args,
2153 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282154 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412155 LUCI_MILO_CFG,
2156 exceptions=NONEXISTENT_REMOVAL)
Jamie Madillcf4f8c72021-05-20 19:24:232157 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2158 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502159 fbb.check_input_file_consistency(verbose=True)
2160 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282161
2162 def test_nonexistent_modification_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152163 fbb = FakeBBGen(self.args,
2164 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282165 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412166 LUCI_MILO_CFG,
2167 exceptions=NONEXISTENT_MODIFICATION)
Jamie Madillcf4f8c72021-05-20 19:24:232168 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2169 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502170 fbb.check_input_file_consistency(verbose=True)
2171 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282172
John Budorickedfe7f872018-01-23 15:27:222173 def test_waterfall_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152174 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2175 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222176 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502177 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222178
Ben Pastenea9e583b2019-01-16 02:57:262179 def test_chromeos_trigger_script_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152180 fbb = FakeBBGen(self.args, FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2181 FOO_TEST_SUITE, LUCI_MILO_CFG)
Ben Pastenea9e583b2019-01-16 02:57:262182 fbb.check_output_file_consistency(verbose=True)
2183 self.assertFalse(fbb.printed_lines)
2184
Zhiling Huangbe008172018-03-08 19:13:112185 def test_relative_pyl_file_dir(self):
Garrett Beaty79339e182023-04-10 20:45:472186 self.set_args('--pyl-files-dir=relative/path')
Garrett Beaty1afaccc2020-06-25 19:58:152187 fbb = FakeBBGen(self.args,
2188 FOO_GTESTS_WATERFALL,
Zhiling Huangbe008172018-03-08 19:13:112189 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412190 LUCI_MILO_CFG,
2191 gn_isolate_map=GN_ISOLATE_MAP)
Stephen Martinis7eb8b612018-09-21 00:17:502192 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112193 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502194 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112195
Nico Weberd18b8962018-05-16 19:39:382196 def test_nonexistent_bot_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152197 fbb = FakeBBGen(self.args, UNKNOWN_BOT_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522198 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382199 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502200 fbb.check_input_file_consistency(verbose=True)
2201 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382202
Garrett Beaty4f3e9212020-06-25 20:21:492203 def test_nonexistent_bot_raises_when_no_project_pyl_exists(self):
Garrett Beaty1afaccc2020-06-25 19:58:152204 fbb = FakeBBGen(self.args,
2205 UNKNOWN_BOT_GTESTS_WATERFALL,
Garrett Beaty2a02de3c2020-05-15 13:57:352206 FOO_TEST_SUITE,
2207 LUCI_MILO_CFG,
Garrett Beaty4f3e9212020-06-25 20:21:492208 project_pyl=None)
2209 with self.assertRaises(generate_buildbot_json.BBGenErr):
2210 fbb.check_input_file_consistency(verbose=True)
2211 self.assertFalse(fbb.printed_lines)
2212
2213 def test_nonexistent_bot_does_not_raise_when_validation_disabled(self):
2214 fbb = FakeBBGen(
2215 self.args,
2216 UNKNOWN_BOT_GTESTS_WATERFALL,
2217 FOO_TEST_SUITE,
2218 LUCI_MILO_CFG,
2219 project_pyl='{"validate_source_side_specs_have_builder": False}')
Garrett Beaty2a02de3c2020-05-15 13:57:352220 fbb.check_input_file_consistency(verbose=True)
2221
Stephen Martinis54d64ad2018-09-21 22:16:202222 def test_waterfalls_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152223 fbb = FakeBBGen(self.args, TEST_SUITE_SORTED_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202224 LUCI_MILO_CFG_WATERFALL_SORTING)
2225 fbb.check_input_file_consistency(verbose=True)
2226 self.assertFalse(fbb.printed_lines)
2227
Garrett Beaty1afaccc2020-06-25 19:58:152228 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_1,
2229 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232230 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202231 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472232 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392233 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472234 ):
Stephen Martinis54d64ad2018-09-21 22:16:202235 fbb.check_input_file_consistency(verbose=True)
2236 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232237 self.assertRegex(joined_lines, '.*\+ chromium\..*test.*')
2238 self.assertRegex(joined_lines, '.*\- chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202239 fbb.printed_lines = []
2240 self.assertFalse(fbb.printed_lines)
2241
Garrett Beaty1afaccc2020-06-25 19:58:152242 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_2,
2243 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232244 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202245 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472246 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392247 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472248 ):
Stephen Martinis54d64ad2018-09-21 22:16:202249 fbb.check_input_file_consistency(verbose=True)
2250 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232251 self.assertRegex(joined_lines, '.*\+.*Fake Tester.*')
2252 self.assertRegex(joined_lines, '.*\-.*Fake Tester.*')
Stephen Martinis54d64ad2018-09-21 22:16:202253 fbb.printed_lines = []
2254 self.assertFalse(fbb.printed_lines)
2255
2256 def test_test_suite_exceptions_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152257 fbb = FakeBBGen(self.args,
2258 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202259 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412260 LUCI_MILO_CFG,
2261 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502262 fbb.check_input_file_consistency(verbose=True)
2263 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182264
Garrett Beaty1afaccc2020-06-25 19:58:152265 fbb = FakeBBGen(self.args,
2266 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202267 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412268 LUCI_MILO_CFG,
Stephen Martinis5bef0fc2020-01-06 22:47:532269 exceptions=EXCEPTIONS_DUPS_REMOVE_FROM)
2270 with self.assertRaises(generate_buildbot_json.BBGenErr):
2271 fbb.check_input_file_consistency(verbose=True)
2272 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232273 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532274 fbb.printed_lines = []
2275 self.assertFalse(fbb.printed_lines)
2276
2277 def test_test_suite_exceptions_no_dups_remove_from(self):
Garrett Beaty1afaccc2020-06-25 19:58:152278 fbb = FakeBBGen(self.args,
2279 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532280 TEST_SUITE_SORTED,
2281 LUCI_MILO_CFG,
2282 exceptions=EXCEPTIONS_SORTED)
2283 fbb.check_input_file_consistency(verbose=True)
2284 self.assertFalse(fbb.printed_lines)
2285
Garrett Beaty1afaccc2020-06-25 19:58:152286 fbb = FakeBBGen(self.args,
2287 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532288 TEST_SUITE_SORTED,
2289 LUCI_MILO_CFG,
2290 exceptions=EXCEPTIONS_PER_TEST_UNSORTED)
Stephen Martinis5bef0fc2020-01-06 22:47:532291 with self.assertRaises(generate_buildbot_json.BBGenErr):
2292 fbb.check_input_file_consistency(verbose=True)
2293 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232294 self.assertRegex(joined_lines, '.*\+ Fake Tester.*')
2295 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532296 fbb.printed_lines = []
2297 self.assertFalse(fbb.printed_lines)
2298
2299 def test_test_suite_exceptions_per_test_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152300 fbb = FakeBBGen(self.args,
2301 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532302 TEST_SUITE_SORTED,
2303 LUCI_MILO_CFG,
2304 exceptions=EXCEPTIONS_SORTED)
2305 fbb.check_input_file_consistency(verbose=True)
2306 self.assertFalse(fbb.printed_lines)
2307
Garrett Beaty1afaccc2020-06-25 19:58:152308 fbb = FakeBBGen(self.args,
2309 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532310 TEST_SUITE_SORTED,
2311 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:412312 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202313 with self.assertRaises(generate_buildbot_json.BBGenErr):
2314 fbb.check_input_file_consistency(verbose=True)
2315 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232316 self.assertRegex(joined_lines, '.*\+ suite_.*')
2317 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202318 fbb.printed_lines = []
2319 self.assertFalse(fbb.printed_lines)
2320
2321 def test_test_suites_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152322 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202323 LUCI_MILO_CFG)
2324 fbb.check_input_file_consistency(verbose=True)
2325 self.assertFalse(fbb.printed_lines)
2326
2327 for unsorted in (
2328 TEST_SUITE_UNSORTED_1,
2329 TEST_SUITE_UNSORTED_2,
2330 TEST_SUITE_UNSORTED_3,
2331 ):
Garrett Beaty1afaccc2020-06-25 19:58:152332 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202333 LUCI_MILO_CFG)
2334 with self.assertRaises(generate_buildbot_json.BBGenErr):
2335 fbb.check_input_file_consistency(verbose=True)
2336 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232337 self.assertRegex(joined_lines, '.*\+ suite_.*')
2338 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202339 fbb.printed_lines = []
2340 self.assertFalse(fbb.printed_lines)
2341
Stephen Martinis11672542018-10-29 18:17:212342
2343FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2344[
2345 {
2346 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012347 'project': 'chromium',
2348 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212349 'name': 'chromium.test',
2350 'machines': {
2351 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:452352 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252353 'dimensions': {
2354 'os': 'Linux',
2355 },
Ben Pastene338f56b2023-03-31 21:24:452356 },
Stephen Martinis11672542018-10-29 18:17:212357 'test_suites': {
2358 'gtest_tests': 'foo_tests',
2359 },
2360 },
2361 },
2362 },
2363]
2364"""
2365
2366FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2367[
2368 {
Greg Gutermanf60eb052020-03-12 17:40:012369 'project': 'chromium',
2370 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212371 'name': 'chromium.test',
2372 'machines': {
2373 'Fake Tester': {
2374 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452375 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252376 'dimensions': {
2377 'os': 'Linux',
2378 },
Ben Pastene338f56b2023-03-31 21:24:452379 },
Stephen Martinis11672542018-10-29 18:17:212380 'test_suites': {
2381 'gtest_tests': 'foo_tests',
2382 },
2383 },
2384 },
2385 },
2386]
2387"""
2388
Austin Eng148d9f0f2022-02-08 19:18:532389FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2390[
2391 {
2392 'project': 'chromium',
2393 'bucket': 'ci',
2394 'name': 'chromium.test',
2395 'machines': {
2396 'Fake Tester': {
2397 'os_type': 'linux',
2398 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452399 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252400 'dimensions': {
2401 'os': 'Linux',
2402 },
Ben Pastene338f56b2023-03-31 21:24:452403 },
Austin Eng148d9f0f2022-02-08 19:18:532404 'test_suites': {
2405 'gtest_tests': 'foo_tests',
2406 },
2407 },
2408 },
2409 },
2410]
2411"""
2412
Brian Sheedy7658c982020-01-08 02:27:582413FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL = """\
2414[
2415 {
2416 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012417 'project': 'chromium',
2418 'bucket': 'ci',
Brian Sheedy7658c982020-01-08 02:27:582419 'name': 'chromium.test',
2420 'machines': {
2421 'Fake Tester': {
2422 'remove_mixins': ['waterfall_mixin'],
2423 'swarming': {},
2424 'test_suites': {
2425 'gtest_tests': 'foo_tests',
2426 },
2427 },
2428 },
2429 },
2430]
2431"""
2432
Stephen Martinis11672542018-10-29 18:17:212433FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2434[
2435 {
Greg Gutermanf60eb052020-03-12 17:40:012436 'project': 'chromium',
2437 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212438 'name': 'chromium.test',
2439 'machines': {
2440 'Fake Tester': {
2441 'mixins': ['random_mixin'],
2442 'swarming': {},
2443 'test_suites': {
2444 'gtest_tests': 'foo_tests',
2445 },
2446 },
2447 },
2448 },
2449]
2450"""
2451
2452FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2453[
2454 {
Greg Gutermanf60eb052020-03-12 17:40:012455 'project': 'chromium',
2456 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212457 'name': 'chromium.test',
2458 'machines': {
2459 'Fake Tester': {
2460 'mixins': ['dimension_mixin'],
2461 'swarming': {},
2462 'test_suites': {
2463 'gtest_tests': 'foo_tests',
2464 },
2465 },
2466 },
2467 },
2468]
2469"""
2470
2471FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2472[
2473 {
Greg Gutermanf60eb052020-03-12 17:40:012474 'project': 'chromium',
2475 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212476 'name': 'chromium.test',
2477 'machines': {
2478 'Fake Tester': {
2479 'mixins': ['dimension_mixin'],
2480 'os_type': 'win',
2481 'browser_config': 'release',
2482 'test_suites': {
2483 'gpu_telemetry_tests': 'foo_tests',
2484 },
2485 },
2486 },
2487 },
2488]
2489"""
2490
2491# Swarming mixins must be a list, a single string is not allowed.
2492FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2493[
2494 {
Greg Gutermanf60eb052020-03-12 17:40:012495 'project': 'chromium',
2496 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212497 'name': 'chromium.test',
2498 'machines': {
2499 'Fake Tester': {
2500 'mixins': 'dimension_mixin',
2501 'swarming': {},
2502 'test_suites': {
2503 'gtest_tests': 'foo_tests',
2504 },
2505 },
2506 },
2507 },
2508]
2509"""
2510FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
2511[
2512 {
Greg Gutermanf60eb052020-03-12 17:40:012513 'project': 'chromium',
2514 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212515 'name': 'chromium.test',
2516 'machines': {
2517 'Fake Tester': {
2518 'mixins': ['nonexistant'],
2519 'swarming': {},
2520 'test_suites': {
2521 'gtest_tests': 'foo_tests',
2522 },
2523 },
2524 },
2525 },
2526]
2527"""
2528
2529FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
2530[
2531 {
Greg Gutermanf60eb052020-03-12 17:40:012532 'project': 'chromium',
2533 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212534 'name': 'chromium.test',
Greg Gutermanf60eb052020-03-12 17:40:012535 'mixins': ['waterfall_mixin'],
Stephen Martinis11672542018-10-29 18:17:212536 'machines': {
2537 'Fake Tester': {
2538 'swarming': {},
2539 'test_suites': {
2540 'gtest_tests': 'foo_tests',
2541 },
2542 },
2543 },
2544 },
2545]
2546"""
2547
2548FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2549[
2550 {
2551 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012552 'project': 'chromium',
2553 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212554 'name': 'chromium.test',
2555 'machines': {
2556 'Fake Tester': {
2557 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252558 'dimensions': {
2559 'kvm': '1',
2560 },
Stephen Martinis11672542018-10-29 18:17:212561 },
2562 'test_suites': {
2563 'gtest_tests': 'foo_tests',
2564 },
2565 },
2566 },
2567 },
2568]
2569"""
2570
2571FOO_TEST_SUITE_WITH_MIXIN = """\
2572{
2573 'basic_suites': {
2574 'foo_tests': {
2575 'foo_test': {
2576 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252577 'dimensions': {
2578 'integrity': 'high',
2579 'os': 'Linux',
2580 },
Stephen Martinis11672542018-10-29 18:17:212581 'expiration': 120,
2582 },
2583 'mixins': ['test_mixin'],
2584 },
2585 },
2586 },
2587}
2588"""
2589
Garrett Beaty4c35b142023-06-23 21:01:232590MIXIN_ARGS = """\
2591{
2592 'builder_mixin': {
2593 'args': [],
2594 },
2595}
2596"""
2597
2598MIXIN_ARGS_NOT_LIST = """\
2599{
2600 'builder_mixin': {
2601 'args': 'I am not a list',
2602 },
2603}
2604"""
2605
Garrett Beatyb061e69d2023-06-27 16:15:352606MIXIN_LINUX_ARGS = """\
2607{
2608 'builder_mixin': {
2609 'args': [ '--mixin-argument' ],
2610 'linux_args': [ '--linux-mixin-argument' ],
2611 },
2612}
2613"""
2614
2615MIXIN_APPEND = """\
2616{
2617 'builder_mixin': {
2618 '$mixin_append': {
2619 'args': [ '--mixin-argument' ],
2620 },
2621 },
2622}
2623"""
2624
Stephen Martinis11672542018-10-29 18:17:212625# These mixins are invalid; if passed to check_input_file_consistency, they will
2626# fail. These are used for output file consistency checks.
2627SWARMING_MIXINS = """\
2628{
2629 'builder_mixin': {
2630 'swarming': {
2631 'value': 'builder',
2632 },
2633 },
2634 'dimension_mixin': {
2635 'swarming': {
2636 'dimensions': {
2637 'iama': 'mixin',
2638 },
2639 },
2640 },
2641 'random_mixin': {
2642 'value': 'random',
2643 },
2644 'test_mixin': {
2645 'swarming': {
2646 'value': 'test',
2647 },
2648 },
2649 'waterfall_mixin': {
2650 'swarming': {
2651 'value': 'waterfall',
2652 },
2653 },
2654}
2655"""
2656
Garrett Beaty4c35b142023-06-23 21:01:232657SWARMING_NAMED_CACHES = """\
2658{
2659 'builder_mixin': {
2660 'swarming': {
2661 'named_caches': [
2662 {
2663 'name': 'cache',
2664 'file': 'cache_file',
2665 },
2666 ],
2667 },
2668 },
2669}
2670"""
2671
Stephen Martinis11672542018-10-29 18:17:212672SWARMING_MIXINS_DUPLICATED = """\
2673{
2674 'builder_mixin': {
2675 'value': 'builder',
2676 },
2677 'builder_mixin': {
2678 'value': 'builder',
2679 },
2680}
2681"""
2682
2683SWARMING_MIXINS_UNSORTED = """\
2684{
2685 'b_mixin': {
2686 'b': 'b',
2687 },
2688 'a_mixin': {
2689 'a': 'a',
2690 },
2691 'c_mixin': {
2692 'c': 'c',
2693 },
2694}
2695"""
2696
2697SWARMING_MIXINS_SORTED = """\
2698{
2699 'a_mixin': {
2700 'a': 'a',
2701 },
2702 'b_mixin': {
2703 'b': 'b',
2704 },
2705 'c_mixin': {
2706 'c': 'c',
2707 },
2708}
2709"""
2710
Garrett Beaty1afaccc2020-06-25 19:58:152711
2712class MixinTests(TestCase):
Stephen Martinis11672542018-10-29 18:17:212713 """Tests for the mixins feature."""
2714 def test_mixins_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152715 fbb = FakeBBGen(self.args,
2716 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212717 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412718 LUCI_MILO_CFG,
2719 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:212720 fbb.check_input_file_consistency(verbose=True)
2721 self.assertFalse(fbb.printed_lines)
2722
Garrett Beaty1afaccc2020-06-25 19:58:152723 fbb = FakeBBGen(self.args,
2724 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212725 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412726 LUCI_MILO_CFG,
2727 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:212728 with self.assertRaises(generate_buildbot_json.BBGenErr):
2729 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532730 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232731 self.assertRegex(joined_lines, '.*\+ ._mixin.*')
2732 self.assertRegex(joined_lines, '.*\- ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:212733 fbb.printed_lines = []
2734 self.assertFalse(fbb.printed_lines)
2735
2736 def test_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152737 fbb = FakeBBGen(self.args,
2738 FOO_GTESTS_WATERFALL_MIXIN_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)
Stephen Martinis11672542018-10-29 18:17:212742 fbb.check_output_file_consistency(verbose=True)
2743 self.assertFalse(fbb.printed_lines)
2744
2745 def test_waterfall_exception_overrides(self):
Garrett Beaty1afaccc2020-06-25 19:58:152746 fbb = FakeBBGen(self.args,
2747 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212748 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412749 LUCI_MILO_CFG,
2750 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2751 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212752 fbb.check_output_file_consistency(verbose=True)
2753 self.assertFalse(fbb.printed_lines)
2754
Stephanie Kim572b43c02023-04-13 14:24:132755 def test_autoshard_exceptions(self):
2756 fbb = FakeBBGen(self.args,
2757 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2758 FOO_TEST_SUITE,
2759 LUCI_MILO_CFG,
2760 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2761 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2762 mixins=SWARMING_MIXINS)
2763 fbb.check_output_file_consistency(verbose=True)
2764 self.assertFalse(fbb.printed_lines)
2765
2766 def test_autoshard_exceptions_variant_names(self):
2767 fbb = FakeBBGen(self.args,
2768 MATRIX_GTEST_SUITE_WATERFALL,
2769 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
2770 LUCI_MILO_CFG,
2771 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2772 variants=VARIANTS_FILE)
2773 fbb.check_output_file_consistency(verbose=True)
2774 self.assertFalse(fbb.printed_lines)
2775
Stephen Martinis11672542018-10-29 18:17:212776 def test_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152777 fbb = FakeBBGen(self.args,
2778 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212779 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412780 LUCI_MILO_CFG,
2781 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212782 fbb.check_output_file_consistency(verbose=True)
2783 self.assertFalse(fbb.printed_lines)
2784
2785 def test_builder_non_swarming(self):
Garrett Beaty1afaccc2020-06-25 19:58:152786 fbb = FakeBBGen(self.args,
2787 FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212788 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412789 LUCI_MILO_CFG,
2790 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212791 fbb.check_output_file_consistency(verbose=True)
2792 self.assertFalse(fbb.printed_lines)
2793
2794 def test_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152795 fbb = FakeBBGen(self.args,
2796 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212797 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412798 LUCI_MILO_CFG,
2799 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212800 fbb.check_output_file_consistency(verbose=True)
2801 self.assertFalse(fbb.printed_lines)
2802
2803 def test_dimension(self):
Garrett Beaty1afaccc2020-06-25 19:58:152804 fbb = FakeBBGen(self.args,
2805 FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212806 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412807 LUCI_MILO_CFG,
2808 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212809 fbb.check_output_file_consistency(verbose=True)
2810 self.assertFalse(fbb.printed_lines)
2811
2812 def test_dimension_gpu(self):
Garrett Beaty1afaccc2020-06-25 19:58:152813 fbb = FakeBBGen(self.args,
2814 FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212815 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412816 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192817 mixins=SWARMING_MIXINS,
2818 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Stephen Martinis11672542018-10-29 18:17:212819 fbb.check_output_file_consistency(verbose=True)
2820 self.assertFalse(fbb.printed_lines)
2821
2822 def test_unreferenced(self):
Garrett Beaty1afaccc2020-06-25 19:58:152823 fbb = FakeBBGen(self.args,
2824 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212825 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412826 LUCI_MILO_CFG,
2827 mixins=SWARMING_MIXINS)
Jamie Madillcf4f8c72021-05-20 19:24:232828 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2829 '.*mixins are unreferenced.*'):
Stephen Martinis11672542018-10-29 18:17:212830 fbb.check_input_file_consistency(verbose=True)
2831 self.assertFalse(fbb.printed_lines)
2832
Stephen Martinis11672542018-10-29 18:17:212833 def test_unused(self):
Garrett Beaty1afaccc2020-06-25 19:58:152834 fbb = FakeBBGen(self.args,
2835 FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212836 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412837 LUCI_MILO_CFG,
2838 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212839 with self.assertRaises(generate_buildbot_json.BBGenErr):
2840 fbb.check_output_file_consistency(verbose=True)
2841 self.assertFalse(fbb.printed_lines)
2842
2843 def test_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:152844 fbb = FakeBBGen(self.args,
2845 FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212846 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412847 LUCI_MILO_CFG,
2848 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212849 with self.assertRaises(generate_buildbot_json.BBGenErr):
2850 fbb.check_output_file_consistency(verbose=True)
2851 self.assertFalse(fbb.printed_lines)
2852
2853
2854 def test_no_duplicate_keys(self):
Garrett Beaty1afaccc2020-06-25 19:58:152855 fbb = FakeBBGen(self.args,
2856 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202857 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412858 LUCI_MILO_CFG,
2859 mixins=SWARMING_MIXINS_DUPLICATED)
Jamie Madillcf4f8c72021-05-20 19:24:232860 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202861 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392862 ('The following files have invalid keys: ' +
2863 re.escape(self.args.mixins_pyl_path)),
2864 ):
Stephen Martinis54d64ad2018-09-21 22:16:202865 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532866 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232867 self.assertRegex(joined_lines, '.*\- builder_mixin')
Stephen Martinis5bef0fc2020-01-06 22:47:532868 fbb.printed_lines = []
2869 self.assertFalse(fbb.printed_lines)
2870
2871 def test_no_duplicate_keys_basic_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152872 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE_NOT_SORTED,
Stephen Martinis5bef0fc2020-01-06 22:47:532873 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:232874 with self.assertRaisesRegex(
Stephen Martinis5bef0fc2020-01-06 22:47:532875 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472876 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392877 re.escape(self.args.test_suites_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472878 ):
Stephen Martinis5bef0fc2020-01-06 22:47:532879 fbb.check_input_file_consistency(verbose=True)
2880 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232881 self.assertRegex(joined_lines, '.*\- a_test')
2882 self.assertRegex(joined_lines, '.*\+ a_test')
Stephen Martinis54d64ad2018-09-21 22:16:202883 fbb.printed_lines = []
2884 self.assertFalse(fbb.printed_lines)
2885
2886 def test_type_assert_printing_help(self):
Garrett Beaty1afaccc2020-06-25 19:58:152887 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:202888 LUCI_MILO_CFG)
Garrett Beaty79339e182023-04-10 20:45:472889 with self.assertRaisesRegex(
2890 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392891 f'Invalid \.pyl file \'{re.escape(self.args.test_suites_pyl_path)}\'.*',
2892 ):
Stephen Martinis54d64ad2018-09-21 22:16:202893 fbb.check_input_file_consistency(verbose=True)
Jamie Madillcf4f8c72021-05-20 19:24:232894 self.assertEqual(fbb.printed_lines, [
Garrett Beaty79339e182023-04-10 20:45:472895 f'== {self.args.test_suites_pyl_path} ==',
Jamie Madillcf4f8c72021-05-20 19:24:232896 '<snip>',
2897 '1 {',
2898 "2 'basic_suites': {",
2899 '--------------------------------------------------------------------'
2900 '------------',
2901 '3 3: {',
2902 '-------^------------------------------------------------------------'
2903 '------------',
2904 "4 'suite_c': {},",
2905 '5 },',
2906 '<snip>',
2907 ])
Stephen Martinis54d64ad2018-09-21 22:16:202908
Garrett Beatyb061e69d2023-06-27 16:15:352909 def test_mixin_append(self):
Garrett Beaty1afaccc2020-06-25 19:58:152910 fbb = FakeBBGen(self.args,
2911 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:412912 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412913 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352914 mixins=MIXIN_APPEND)
2915 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2916 r'.*\$mixin_append is no longer supported.*'):
2917 fbb.check_input_file_consistency(verbose=True)
Austin Eng148d9f0f2022-02-08 19:18:532918 self.assertFalse(fbb.printed_lines)
2919
Garrett Beaty4c35b142023-06-23 21:01:232920 def test_swarming_named_caches(self):
2921 fbb = FakeBBGen(self.args,
2922 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2923 FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES,
2924 LUCI_MILO_CFG,
2925 mixins=SWARMING_NAMED_CACHES)
2926 fbb.check_output_file_consistency(verbose=True)
2927 self.assertFalse(fbb.printed_lines)
2928
Garrett Beaty4c35b142023-06-23 21:01:232929 def test_args_field_not_list(self):
2930 fbb = FakeBBGen(self.args,
2931 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2932 FOO_TEST_SUITE_WITH_ARGS,
2933 LUCI_MILO_CFG,
2934 mixins=MIXIN_ARGS_NOT_LIST)
2935 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2936 '"args" must be a list'):
2937 fbb.check_output_file_consistency(verbose=True)
2938 self.assertFalse(fbb.printed_lines)
2939
2940 def test_args_field_merging(self):
2941 fbb = FakeBBGen(self.args,
2942 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2943 FOO_TEST_SUITE_WITH_ARGS,
2944 LUCI_MILO_CFG,
2945 mixins=MIXIN_ARGS)
Garrett Beaty4c35b142023-06-23 21:01:232946 fbb.check_output_file_consistency(verbose=True)
2947 self.assertFalse(fbb.printed_lines)
2948
Garrett Beatyb061e69d2023-06-27 16:15:352949 def test_linux_args_field_merging(self):
Garrett Beaty1afaccc2020-06-25 19:58:152950 fbb = FakeBBGen(self.args,
Garrett Beatyb061e69d2023-06-27 16:15:352951 FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL,
2952 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412953 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352954 mixins=MIXIN_LINUX_ARGS)
2955 fbb.check_output_file_consistency(verbose=True)
Wezc0e835b702018-10-30 00:38:412956 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:202957
Brian Sheedy7658c982020-01-08 02:27:582958 def test_remove_mixin_builder_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152959 fbb = FakeBBGen(self.args,
2960 FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582961 FOO_TEST_SUITE,
2962 LUCI_MILO_CFG,
2963 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582964 fbb.check_output_file_consistency(verbose=True)
2965 self.assertFalse(fbb.printed_lines)
2966
2967 def test_remove_mixin_test_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152968 fbb = FakeBBGen(self.args,
2969 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582970 FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN,
2971 LUCI_MILO_CFG,
2972 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582973 fbb.check_output_file_consistency(verbose=True)
2974 self.assertFalse(fbb.printed_lines)
2975
2976 def test_remove_mixin_test_remove_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152977 fbb = FakeBBGen(self.args,
2978 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582979 FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN,
2980 LUCI_MILO_CFG,
2981 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582982 fbb.check_output_file_consistency(verbose=True)
2983 self.assertFalse(fbb.printed_lines)
2984
Karen Qiane24b7ee2019-02-12 23:37:062985TEST_SUITE_WITH_PARAMS = """\
2986{
2987 'basic_suites': {
2988 'bar_tests': {
2989 'bar_test': {
2990 'args': ['--no-xvfb'],
2991 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252992 'dimensions': {
2993 'device_os': 'NMF26U'
2994 },
Karen Qiane24b7ee2019-02-12 23:37:062995 },
2996 'should_retry_with_patch': False,
Karen Qiane24b7ee2019-02-12 23:37:062997 },
2998 'bar_test_test': {
2999 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253000 'dimensions': {
3001 'kvm': '1'
3002 },
Karen Qiane24b7ee2019-02-12 23:37:063003 'hard_timeout': 1000
3004 },
3005 'should_retry_with_patch': True
3006 }
3007 },
3008 'foo_tests': {
3009 'foo_test_empty': {},
3010 'foo_test': {
3011 'args': [
3012 '--jobs=1',
3013 '--verbose'
3014 ],
3015 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253016 'dimensions': {
3017 'device_os': 'MMB29Q'
3018 },
Karen Qiane24b7ee2019-02-12 23:37:063019 'hard_timeout': 1800
3020 }
3021 },
Garrett Beaty235c1412023-08-29 20:26:293022 'pls': {
Karen Qiane24b7ee2019-02-12 23:37:063023 'swarming': {
3024 },
Karen Qiane24b7ee2019-02-12 23:37:063025 },
3026 },
3027 },
3028 'compound_suites': {
3029 'composition_tests': [
3030 'foo_tests',
3031 'bar_tests',
3032 ],
3033 },
3034}
3035"""
3036TEST_QUERY_BOTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:333037 "Fake Android M Tester": {
3038 "gtest_tests": [{
3039 "test": "foo_test",
3040 }]
3041 },
3042 "Fake Android L Tester": {
3043 "gtest_tests": [{
3044 "test":
3045 "foo_test",
3046 "args": [
3047 "--gs-results-bucket=chromium-result-details",
3048 "--recover-devices"
3049 ],
3050 "merge": {
3051 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3052 },
3053 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253054 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333055 "device_os": "LMY41U",
3056 "device_os_type": "user",
3057 "device_type": "hammerhead",
3058 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253059 },
Karen Qiane24b7ee2019-02-12 23:37:063060 }
Garrett Beatybb18d532023-06-26 22:16:333061 }]
3062 },
3063 "Fake Android K Tester": {
3064 "additional_compile_targets": ["bar_test"],
3065 "gtest_tests": [{
3066 "test":
3067 "foo_test",
3068 "args": [
3069 "--gs-results-bucket=chromium-result-details",
3070 "--recover-devices"
3071 ],
3072 "merge": {
3073 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3074 },
3075 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253076 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333077 "device_os": "KTU84P",
3078 "device_os_type": "userdebug",
3079 "device_type": "hammerhead",
3080 "os": "Android",
Garrett Beatyade673d2023-08-04 22:00:253081 },
Garrett Beatybb18d532023-06-26 22:16:333082 "output_links": [{
3083 "link": [
3084 "https://luci-logdog.appspot.com/v/?s",
3085 "=android%2Fswarming%2Flogcats%2F",
3086 "${TASK_ID}%2F%2B%2Funified_logcats"
3087 ],
3088 "name":
3089 "shard #${SHARD_INDEX} logcats"
3090 }]
Karen Qiane24b7ee2019-02-12 23:37:063091 }
Garrett Beatybb18d532023-06-26 22:16:333092 }]
3093 },
3094 "Android Builder": {
3095 "additional_compile_targets": ["bar_test"]
3096 }
Karen Qiane24b7ee2019-02-12 23:37:063097}
3098TEST_QUERY_BOTS_TESTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:333099 "Fake Android M Tester": [{
3100 "test": "foo_test",
3101 }],
3102 "Fake Android L Tester": [{
3103 "test":
3104 "foo_test",
3105 "args":
3106 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3107 "merge": {
3108 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3109 },
3110 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253111 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333112 "device_os": "LMY41U",
3113 "device_os_type": "user",
3114 "device_type": "hammerhead",
3115 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253116 },
Garrett Beatybb18d532023-06-26 22:16:333117 }
3118 }],
3119 "Android Builder": [],
3120 "Fake Android K Tester": [{
3121 "test":
3122 "foo_test",
3123 "args":
3124 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3125 "merge": {
3126 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3127 },
3128 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253129 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333130 "device_os": "KTU84P",
3131 "device_os_type": "userdebug",
3132 "device_type": "hammerhead",
3133 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253134 },
Garrett Beatybb18d532023-06-26 22:16:333135 "output_links": [{
3136 "link": [
3137 "https://luci-logdog.appspot.com/v/?s",
3138 "=android%2Fswarming%2Flogcats%2F",
3139 "${TASK_ID}%2F%2B%2Funified_logcats"
3140 ],
3141 "name":
3142 "shard #${SHARD_INDEX} logcats"
3143 }]
3144 }
3145 }]
Karen Qiane24b7ee2019-02-12 23:37:063146}
3147
3148TEST_QUERY_BOT_OUTPUT = {
Garrett Beatyade673d2023-08-04 22:00:253149 "additional_compile_targets": ["bar_test"],
3150 "gtest_tests": [
3151 {
3152 "test":
3153 "foo_test",
3154 "args": [
3155 "--gs-results-bucket=chromium-result-details",
3156 "--recover-devices",
3157 ],
3158 "merge": {
3159 "script": "//testing/merge_scripts/standard_gtest_merge.py",
3160 },
3161 "swarming": {
3162 "dimensions": {
3163 "device_os": "KTU84P",
3164 "device_os_type": "userdebug",
3165 "device_type": "hammerhead",
3166 "os": "Android",
3167 },
3168 "output_links": [
3169 {
3170 "link": [
3171 "https://luci-logdog.appspot.com/v/?s",
3172 "=android%2Fswarming%2Flogcats%2F",
3173 "${TASK_ID}%2F%2B%2Funified_logcats"
3174 ],
3175 "name":
3176 "shard #${SHARD_INDEX} logcats",
3177 },
3178 ],
3179 },
3180 },
3181 ],
Karen Qiane24b7ee2019-02-12 23:37:063182}
Garrett Beatybb18d532023-06-26 22:16:333183TEST_QUERY_BOT_TESTS_OUTPUT = [{
3184 "test":
3185 "foo_test",
3186 "args":
3187 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
Stephen Martinisbc7b7772019-05-01 22:01:433188 "merge": {
Garrett Beatybb18d532023-06-26 22:16:333189 "script": "//testing/merge_scripts/standard_gtest_merge.py"
Stephen Martinisbc7b7772019-05-01 22:01:433190 },
Karen Qiane24b7ee2019-02-12 23:37:063191 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253192 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333193 "device_os": "LMY41U",
3194 "device_os_type": "user",
3195 "device_type": "hammerhead",
3196 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253197 },
Karen Qiane24b7ee2019-02-12 23:37:063198 }
Garrett Beatybb18d532023-06-26 22:16:333199}]
Karen Qiane24b7ee2019-02-12 23:37:063200
3201TEST_QUERY_TESTS_OUTPUT = {
Ben Pastene338f56b2023-03-31 21:24:453202 "bar_test": {
3203 '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 },
3209 "foo_test": {
3210 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253211 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453212 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253213 },
Ben Pastene338f56b2023-03-31 21:24:453214 }
3215 }
Karen Qiane24b7ee2019-02-12 23:37:063216}
3217
3218TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ["foo_test"]
3219
3220TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ["bar_test"]
3221
3222TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ["bar_test_test"]
3223
3224TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3225
3226TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3227
Garrett Beatyade673d2023-08-04 22:00:253228TEST_QUERY_TEST_OUTPUT = {'swarming': {'dimensions': {'os': 'Linux'}}}
Karen Qiane24b7ee2019-02-12 23:37:063229
3230TEST_QUERY_TEST_BOTS_OUTPUT = [
Jamie Madillcf4f8c72021-05-20 19:24:233231 "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)
3251 query_json = json.loads("".join(fbb.printed_lines))
3252 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)
3284 query_json = json.loads("".join(fbb.printed_lines))
3285 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)
3307 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)
3355 query_json = json.loads("".join(fbb.printed_lines))
3356 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)
3366 query_json = json.loads("".join(fbb.printed_lines))
3367 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)
3389 query_json = json.loads("".join(fbb.printed_lines))
3390 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)
3412 query_json = json.loads("".join(fbb.printed_lines))
3413 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)
3423 query_json = json.loads("".join(fbb.printed_lines))
3424 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)
3434 query_json = json.loads("".join(fbb.printed_lines))
3435 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)
3445 query_json = json.loads("".join(fbb.printed_lines))
3446 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)
3456 query_json = json.loads("".join(fbb.printed_lines))
3457 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)
3491 query_json = json.loads("".join(fbb.printed_lines))
3492 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)
3502 query_json = json.loads("".join(fbb.printed_lines))
3503 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)
3525 query_json = json.loads("".join(fbb.printed_lines))
3526 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
4015MATRIX_COMPOUND_TARGETS_ARGS = """\
4016{
4017 'basic_suites': {
4018 'foo_tests': {
4019 'args_test': {
4020 'args': [
4021 '--iam'
4022 ],
4023 },
4024 }
4025 },
4026 'matrix_compound_suites': {
4027 'matrix_tests': {
4028 'foo_tests': {
4029 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404030 'an-arg',
Jeff Yoon67c3e832020-02-08 07:39:384031 ],
4032 },
4033 },
4034 },
4035}
4036"""
4037
Garrett Beaty2022db42023-08-29 17:22:404038ARGS_VARIANTS_FILE = """\
4039{
4040 'an-arg': {
4041 'identifier': 'args',
4042 'args': [
4043 '--anarg',
4044 ],
4045 },
4046}
4047"""
4048
Jeff Yoon67c3e832020-02-08 07:39:384049MATRIX_COMPOUND_TARGETS_MIXINS = """\
4050{
4051 'basic_suites': {
4052 'foo_tests': {
4053 'mixins_test': {
4054 'mixins': [ 'test_mixin' ],
4055 },
4056 }
4057 },
4058 'matrix_compound_suites': {
4059 'matrix_tests': {
4060 'foo_tests': {
Jeff Yoon85fb8df2020-08-20 16:47:434061 'mixins': [ 'random_mixin' ],
Jeff Yoon67c3e832020-02-08 07:39:384062 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404063 'mixins',
Jeff Yoon67c3e832020-02-08 07:39:384064 ],
4065 },
4066 },
4067 },
4068}
4069"""
4070
Garrett Beaty2022db42023-08-29 17:22:404071MIXINS_VARIANTS_FILE = """\
4072{
4073 'mixins': {
4074 'identifier': 'mixins',
4075 'mixins': [ 'dimension_mixin' ],
4076 },
4077}
4078"""
4079
Jeff Yoon67c3e832020-02-08 07:39:384080MATRIX_COMPOUND_TARGETS_SWARMING = """\
4081{
4082 'basic_suites': {
4083 'foo_tests': {
4084 'swarming_test': {
4085 'swarming': {
4086 'foo': 'bar',
Garrett Beatyade673d2023-08-04 22:00:254087 'dimensions': {
4088 'foo': 'bar',
4089 },
Jeff Yoon67c3e832020-02-08 07:39:384090 },
4091 },
4092 }
4093 },
4094 'matrix_compound_suites': {
4095 'matrix_tests': {
4096 'foo_tests': {
4097 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404098 'swarming-variant',
Jeff Yoon67c3e832020-02-08 07:39:384099 ],
4100 },
4101 },
4102 },
4103}
4104"""
Jeff Yoon8154e582019-12-03 23:30:014105
Garrett Beaty2022db42023-08-29 17:22:404106SWARMING_VARIANTS_FILE = """\
4107{
4108 'swarming-variant': {
4109 'identifier': 'swarming',
4110 'swarming': {
4111 'a': 'b',
4112 'dimensions': {
4113 'hello': 'world',
4114 },
4115 },
4116 },
4117}
4118"""
4119
Jeff Yoonda581c32020-03-06 03:56:054120MATRIX_COMPOUND_VARIANTS_REF = """\
4121{
4122 'basic_suites': {
4123 'foo_tests': {
4124 'swarming_test': {},
4125 }
4126 },
4127 'matrix_compound_suites': {
4128 'matrix_tests': {
4129 'foo_tests': {
4130 'variants': [
4131 'a_variant'
4132 ],
4133 },
4134 },
4135 },
4136}
4137"""
4138
Sven Zhengb51bd0482022-08-26 18:26:254139MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION = """\
4140{
4141 'basic_suites': {
4142 'foo_tests': {
4143 'swarming_test': {
4144 'description': 'This is a swarming test.'
4145 },
4146 }
4147 },
4148 'matrix_compound_suites': {
4149 'matrix_tests': {
4150 'foo_tests': {
4151 'variants': [
4152 'a_variant'
4153 ],
4154 },
4155 },
4156 },
4157}
4158"""
4159
Rakib M. Hasanc9e01c62020-07-27 22:48:124160MATRIX_COMPOUND_TEST_WITH_TEST_KEY = """\
4161{
4162 'basic_suites': {
4163 'foo_tests': {
4164 'swarming_test': {
4165 'test': 'foo_test_apk'
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
Jeff Yoonda581c32020-03-06 03:56:054181MATRIX_COMPOUND_MIXED_VARIANTS_REF = """\
4182{
4183 'basic_suites': {
4184 'foo_tests': {
4185 'swarming_test': {},
4186 }
4187 },
4188 'matrix_compound_suites': {
4189 'matrix_tests': {
4190 'foo_tests': {
4191 'variants': [
4192 'a_variant',
Garrett Beaty2022db42023-08-29 17:22:404193 'b_variant',
Jeff Yoonda581c32020-03-06 03:56:054194 ],
4195 },
4196 },
4197 },
4198}
4199"""
4200
4201VARIANTS_FILE = """\
4202{
4203 'a_variant': {
4204 'args': [
4205 '--platform',
4206 'device',
4207 '--version',
4208 '1'
4209 ],
4210 'identifier': 'a_variant'
4211 }
4212}
4213"""
4214
Sven Zhengb51bd0482022-08-26 18:26:254215VARIANTS_FILE_WITH_DESCRIPTION = """\
4216{
4217 'a_variant': {
4218 'identifier': 'a_variant',
4219 'description': 'Variant description.'
4220 }
4221}
4222"""
4223
Jeff Yoonda581c32020-03-06 03:56:054224MULTI_VARIANTS_FILE = """\
4225{
4226 'a_variant': {
4227 'args': [
4228 '--platform',
4229 'device',
4230 '--version',
4231 '1'
4232 ],
4233 'identifier': 'a_variant'
4234 },
4235 'b_variant': {
4236 'args': [
4237 '--platform',
4238 'sim',
4239 '--version',
4240 '2'
4241 ],
4242 'identifier': 'b_variant'
4243 }
4244}
4245"""
4246
Jeff Yoon8154e582019-12-03 23:30:014247# # Dictionary composition test suite outputs
4248
Xinan Lin05fb9c1752020-12-17 00:15:524249EMPTY_SKYLAB_TEST_EXCEPTIONS = """\
4250{
Sven Zhengef0d0872022-04-04 22:13:294251 'tast.foo OCTOPUS_TOT': {
Xinan Lin05fb9c1752020-12-17 00:15:524252 'remove_from': [
4253 'Fake Tester',
4254 ]
4255 },
Sven Zhengef0d0872022-04-04 22:13:294256 'tast.foo OCTOPUS_TOT-1': {
Xinan Lin05fb9c1752020-12-17 00:15:524257 'remove_from': [
4258 'Fake Tester',
4259 ]
4260 }
4261}
4262"""
4263
4264MATRIX_SKYLAB_WATERFALL = """\
4265[
4266 {
4267 'project': 'chromium',
4268 'bucket': 'ci',
4269 'name': 'chromium.test',
4270 'machines': {
4271 'Fake Tester': {
4272 'test_suites': {
4273 'skylab_tests': 'cros_skylab_basic_x86',
4274 },
4275 },
4276 },
4277 },
4278]
4279"""
4280
4281MATRIX_COMPOUND_SKYLAB_REF = """\
4282{
4283 'basic_suites': {
4284 'cros_skylab_basic': {
4285 'tast.basic': {
4286 'suite': 'tast.basic',
4287 'timeout': 3600,
4288 },
4289 'tast.foo': {
4290 'suite': 'tast.foo',
4291 'timeout': 3600,
4292 },
4293 },
4294 },
4295 'compound_suites': {},
4296 'matrix_compound_suites': {
4297 'cros_skylab_basic_x86': {
4298 'cros_skylab_basic': {
4299 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404300 'octopus-89',
4301 'octopus-88',
4302 ],
Jieting Yangef6b1042021-11-30 21:33:484303 },
4304 },
4305 },
4306}
4307"""
4308
Garrett Beaty2022db42023-08-29 17:22:404309SKYLAB_VARIANTS = """\
4310{
4311 'octopus-89': {
4312 'skylab': {
4313 'cros_board': 'octopus',
4314 'cros_chrome_version': '89.0.3234.0',
4315 'cros_img': 'octopus-release/R89-13655.0.0',
4316 },
4317 'enabled': True,
4318 'identifier': 'OCTOPUS_TOT',
4319 },
4320 'octopus-88': {
4321 'skylab': {
4322 'cros_board': 'octopus',
4323 'cros_chrome_version': '88.0.2324.0',
4324 'cros_img': 'octopus-release/R88-13597.23.0',
4325 },
4326 'enabled': True,
4327 'identifier': 'OCTOPUS_TOT-1',
4328 },
4329}
4330"""
4331
Jieting Yangef6b1042021-11-30 21:33:484332ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF = """\
4333{
4334 'basic_suites': {
4335 'cros_skylab_basic': {
4336 'tast.basic': {
4337 'suite': 'tast.basic',
4338 'timeout': 3600,
4339 },
4340 'tast.foo': {
4341 'suite': 'tast.foo',
4342 'timeout': 3600,
4343 },
4344 },
4345 },
4346 'compound_suites': {},
4347 'matrix_compound_suites': {
4348 'cros_skylab_basic_x86': {
4349 'cros_skylab_basic': {
4350 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404351 'enabled',
4352 'disabled',
4353 ],
Xinan Lin05fb9c1752020-12-17 00:15:524354 },
4355 },
4356 },
4357}
4358"""
4359
Garrett Beaty2022db42023-08-29 17:22:404360ENABLED_AND_DISABLED_VARIANTS = """\
4361{
4362 'enabled': {
4363 'skylab': {
4364 'cros_board': 'octopus',
4365 'cros_chrome_version': '89.0.3234.0',
4366 'cros_img': 'octopus-release/R89-13655.0.0',
4367 },
4368 'enabled': True,
4369 'identifier': 'OCTOPUS_TOT',
4370 },
4371 'disabled': {
4372 'skylab': {
4373 'cros_board': 'octopus',
4374 'cros_chrome_version': '88.0.2324.0',
4375 'cros_img': 'octopus-release/R88-13597.23.0',
4376 },
4377 'enabled': False,
4378 'identifier': 'OCTOPUS_TOT-1',
4379 },
4380}
4381"""
4382
Garrett Beaty1afaccc2020-06-25 19:58:154383
4384class MatrixCompositionTests(TestCase):
Jeff Yoon8154e582019-12-03 23:30:014385
4386 def test_good_structure_no_configs(self):
4387 """
4388 Tests matrix compound test suite structure with no configs,
4389 no conflicts and no bad references
4390 """
Garrett Beaty1afaccc2020-06-25 19:58:154391 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4392 MATRIX_COMPOUND_EMPTY, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014393 fbb.check_output_file_consistency(verbose=True)
4394 self.assertFalse(fbb.printed_lines)
4395
Sven Zhengb51bd0482022-08-26 18:26:254396 def test_good_structure_with_description(self):
4397 """
4398 Tests matrix compound test suite structure with description.
4399 """
4400 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4401 MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION, LUCI_MILO_CFG)
Sven Zhengb51bd0482022-08-26 18:26:254402 fbb.check_output_file_consistency(verbose=True)
4403 self.assertFalse(fbb.printed_lines)
4404
Jeff Yoon67c3e832020-02-08 07:39:384405 def test_missing_identifier(self):
Jeff Yoon8154e582019-12-03 23:30:014406 """
Jeff Yoon67c3e832020-02-08 07:39:384407 Variant is missing an identifier
Jeff Yoon8154e582019-12-03 23:30:014408 """
Garrett Beaty2022db42023-08-29 17:22:404409 fbb = FakeBBGen(self.args,
4410 MATRIX_GTEST_SUITE_WATERFALL,
4411 MATRIX_COMPOUND_MISSING_IDENTIFIER,
4412 LUCI_MILO_CFG,
4413 variants=VARIANTS_FILE_MISSING_IDENTIFIER)
Jamie Madillcf4f8c72021-05-20 19:24:234414 with self.assertRaisesRegex(
4415 generate_buildbot_json.BBGenErr,
Jeff Yoon67c3e832020-02-08 07:39:384416 'Missing required identifier field in matrix compound suite*'):
4417 fbb.check_output_file_consistency(verbose=True)
Jeff Yoon8154e582019-12-03 23:30:014418
Sven Zhengef0d0872022-04-04 22:13:294419 def test_empty_identifier(self):
4420 """
4421 Variant identifier is empty.
4422 """
Garrett Beaty2022db42023-08-29 17:22:404423 fbb = FakeBBGen(self.args,
4424 MATRIX_GTEST_SUITE_WATERFALL,
4425 MATRIX_COMPOUND_EMPTY_IDENTIFIER,
4426 LUCI_MILO_CFG,
4427 variants=EMPTY_IDENTIFIER_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294428 with self.assertRaisesRegex(
4429 generate_buildbot_json.BBGenErr,
4430 'Identifier field can not be "" in matrix compound suite*'):
4431 fbb.check_output_file_consistency(verbose=True)
4432
4433 def test_trailing_identifier(self):
4434 """
4435 Variant identifier has trailing whitespace.
4436 """
Garrett Beaty2022db42023-08-29 17:22:404437 fbb = FakeBBGen(self.args,
4438 MATRIX_GTEST_SUITE_WATERFALL,
4439 MATRIX_COMPOUND_TRAILING_IDENTIFIER,
4440 LUCI_MILO_CFG,
4441 variants=TRAILING_WHITESPACE_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294442 with self.assertRaisesRegex(
4443 generate_buildbot_json.BBGenErr,
4444 'Identifier field can not have leading and trailing whitespace in'
4445 ' matrix compound suite*'):
4446 fbb.check_output_file_consistency(verbose=True)
4447
Jeff Yoon8154e582019-12-03 23:30:014448 def test_noexistent_ref(self):
4449 """
4450 Test referencing a non-existent basic test suite
4451 """
Garrett Beaty1afaccc2020-06-25 19:58:154452 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4453 MATRIX_REF_NONEXISTENT, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234454 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4455 'Unable to find reference to *'):
Jeff Yoon8154e582019-12-03 23:30:014456 fbb.check_output_file_consistency(verbose=True)
4457
4458 def test_ref_to_composition(self):
4459 """
4460 Test referencing another composition test suite
4461 """
Garrett Beaty1afaccc2020-06-25 19:58:154462 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4463 MATRIX_COMPOUND_REF_COMPOSITION, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234464 with self.assertRaisesRegex(
4465 generate_buildbot_json.BBGenErr,
4466 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014467 fbb.check_output_file_consistency(verbose=True)
4468
4469 def test_ref_to_matrix(self):
4470 """
4471 Test referencing another matrix test suite
4472 """
Garrett Beaty1afaccc2020-06-25 19:58:154473 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4474 MATRIX_COMPOSITION_REF_MATRIX, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234475 with self.assertRaisesRegex(
4476 generate_buildbot_json.BBGenErr,
4477 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014478 fbb.check_output_file_consistency(verbose=True)
4479
Jeff Yoon67c3e832020-02-08 07:39:384480 def test_conflicting_names(self):
Garrett Beaty2022db42023-08-29 17:22:404481 fbb = FakeBBGen(self.args,
4482 MATRIX_GTEST_SUITE_WATERFALL,
4483 MATRIX_COMPOUND_CONFLICTING_TEST_SUITES,
4484 LUCI_MILO_CFG,
4485 variants=VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234486 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4487 'Conflicting test definitions.*'):
Jeff Yoon67c3e832020-02-08 07:39:384488 fbb.check_input_file_consistency(verbose=True)
4489 self.assertFalse(fbb.printed_lines)
4490
4491 def test_variants_swarming_dict_merge_args(self):
4492 """
4493 Test targets with swarming dictionary defined by both basic and matrix
4494 """
Garrett Beaty1afaccc2020-06-25 19:58:154495 fbb = FakeBBGen(self.args,
4496 MATRIX_GTEST_SUITE_WATERFALL,
4497 MATRIX_COMPOUND_TARGETS_ARGS,
4498 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404499 mixins=SWARMING_MIXINS,
4500 variants=ARGS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384501 fbb.check_output_file_consistency(verbose=True)
4502 self.assertFalse(fbb.printed_lines)
4503
4504 def test_variants_swarming_dict_merge_mixins(self):
4505 """
4506 Test targets with swarming dictionary defined by both basic and matrix
4507 """
Garrett Beaty1afaccc2020-06-25 19:58:154508 fbb = FakeBBGen(self.args,
4509 MATRIX_GTEST_SUITE_WATERFALL,
4510 MATRIX_COMPOUND_TARGETS_MIXINS,
4511 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404512 mixins=SWARMING_MIXINS,
4513 variants=MIXINS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384514 fbb.check_output_file_consistency(verbose=True)
4515 self.assertFalse(fbb.printed_lines)
4516
4517 def test_variants_swarming_dict_swarming(self):
4518 """
4519 Test targets with swarming dictionary defined by both basic and matrix
4520 """
Garrett Beaty1afaccc2020-06-25 19:58:154521 fbb = FakeBBGen(self.args,
4522 MATRIX_GTEST_SUITE_WATERFALL,
4523 MATRIX_COMPOUND_TARGETS_SWARMING,
4524 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404525 variants=SWARMING_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384526 fbb.check_output_file_consistency(verbose=True)
4527 self.assertFalse(fbb.printed_lines)
4528
Rakib M. Hasanc9e01c62020-07-27 22:48:124529 def test_variant_test_suite_with_test_key(self):
4530 """
4531 Test targets in matrix compound test suites with variants
4532 """
4533 fbb = FakeBBGen(self.args,
4534 MATRIX_GTEST_SUITE_WATERFALL,
4535 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
4536 LUCI_MILO_CFG,
4537 variants=VARIANTS_FILE)
Rakib M. Hasanc9e01c62020-07-27 22:48:124538 fbb.check_output_file_consistency(verbose=True)
4539 self.assertFalse(fbb.printed_lines)
4540
Sven Zhengb51bd0482022-08-26 18:26:254541 def test_variants_with_description(self):
4542 """Test variants with description field"""
4543 fbb = FakeBBGen(self.args,
4544 MATRIX_GTEST_SUITE_WATERFALL,
4545 MATRIX_COMPOUND_VARIANTS_REF,
4546 LUCI_MILO_CFG,
4547 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254548 fbb.check_output_file_consistency(verbose=True)
4549 self.assertFalse(fbb.printed_lines)
4550
4551 def test_both_test_suite_and_variants_with_description(self):
4552 """Test both test suite and variants with description field"""
4553 fbb = FakeBBGen(self.args,
4554 MATRIX_GTEST_SUITE_WATERFALL,
4555 MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION,
4556 LUCI_MILO_CFG,
4557 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254558 fbb.check_output_file_consistency(verbose=True)
4559 self.assertFalse(fbb.printed_lines)
4560
Jeff Yoonda581c32020-03-06 03:56:054561 def test_variants_pyl_ref(self):
4562 """Test targets with variants string ref"""
Garrett Beaty1afaccc2020-06-25 19:58:154563 fbb = FakeBBGen(self.args,
4564 MATRIX_GTEST_SUITE_WATERFALL,
4565 MATRIX_COMPOUND_VARIANTS_REF,
4566 LUCI_MILO_CFG,
4567 variants=VARIANTS_FILE)
Jeff Yoonda581c32020-03-06 03:56:054568 fbb.check_output_file_consistency(verbose=True)
4569 self.assertFalse(fbb.printed_lines)
4570
4571 def test_variants_pyl_no_ref(self):
4572 """Test targets with variants string ref, not defined in variants.pyl"""
Garrett Beaty1afaccc2020-06-25 19:58:154573 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4574 MATRIX_COMPOUND_VARIANTS_REF, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234575 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4576 'Missing variant definition for *'):
Jeff Yoonda581c32020-03-06 03:56:054577 fbb.check_output_file_consistency(verbose=True)
4578
4579 def test_variants_pyl_all_unreferenced(self):
4580 """Test targets with variants in variants.pyl, unreferenced in tests"""
Garrett Beaty1afaccc2020-06-25 19:58:154581 fbb = FakeBBGen(self.args,
4582 MATRIX_GTEST_SUITE_WATERFALL,
Garrett Beaty2022db42023-08-29 17:22:404583 MATRIX_COMPOUND_VARIANTS_REF,
Garrett Beaty1afaccc2020-06-25 19:58:154584 LUCI_MILO_CFG,
4585 variants=MULTI_VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234586 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4587 'The following variants were unreferenced *'):
Jeff Yoonda581c32020-03-06 03:56:054588 fbb.check_input_file_consistency(verbose=True)
4589
Xinan Lin05fb9c1752020-12-17 00:15:524590 def test_good_skylab_matrix_with_variants(self):
4591 fbb = FakeBBGen(self.args,
4592 MATRIX_SKYLAB_WATERFALL,
4593 MATRIX_COMPOUND_SKYLAB_REF,
4594 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404595 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4596 variants=SKYLAB_VARIANTS)
Xinan Lin05fb9c1752020-12-17 00:15:524597 fbb.check_input_file_consistency(verbose=True)
4598 fbb.check_output_file_consistency(verbose=True)
4599 self.assertFalse(fbb.printed_lines)
4600
Jieting Yangef6b1042021-11-30 21:33:484601 def test_enabled_and_disabled_skylab_matrix_with_variants(self):
4602 """Test with disabled variants"""
4603 fbb = FakeBBGen(self.args,
4604 MATRIX_SKYLAB_WATERFALL,
4605 ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF,
4606 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404607 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4608 variants=ENABLED_AND_DISABLED_VARIANTS)
Jieting Yangef6b1042021-11-30 21:33:484609 # some skylab test variant is disabled; the corresponding skylab tests
4610 # is not generated.
Jieting Yangef6b1042021-11-30 21:33:484611 fbb.check_input_file_consistency(verbose=True)
4612 fbb.check_output_file_consistency(verbose=True)
4613 self.assertFalse(fbb.printed_lines)
4614
Jeff Yoon8154e582019-12-03 23:30:014615
Dirk Pranke772f55f2021-04-28 04:51:164616MAC_TEST_SUITE = """\
4617{
4618 'basic_suites': {
4619 'foo_tests': {
4620 'foo_test': {
4621 },
4622 },
4623 },
4624}
4625"""
4626
Ben Pastene338f56b2023-03-31 21:24:454627NO_DIMENSIONS_GTESTS_WATERFALL = """\
Dirk Pranke772f55f2021-04-28 04:51:164628[
4629 {
4630 'project': 'chromium',
4631 'bucket': 'ci',
4632 'name': 'chromium.test',
4633 'machines': {
4634 'Mac': {
Garrett Beatybb18d532023-06-26 22:16:334635 'swarming': {},
Dirk Pranke772f55f2021-04-28 04:51:164636 'test_suites': {
4637 'gtest_tests': 'foo_tests',
4638 },
4639 },
4640 },
4641 },
4642]
4643"""
4644
Ben Pastene338f56b2023-03-31 21:24:454645NO_OS_GTESTS_WATERFALL = """\
4646[
4647 {
4648 'project': 'chromium',
4649 'bucket': 'ci',
4650 'name': 'chromium.test',
4651 'machines': {
4652 'Mac': {
4653 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254654 'dimensions': {
4655 'foo': 'bar',
4656 },
Ben Pastene338f56b2023-03-31 21:24:454657 },
4658 'test_suites': {
4659 'gtest_tests': 'foo_tests',
4660 },
4661 },
4662 },
4663 },
4664]
4665"""
4666
Dirk Pranke772f55f2021-04-28 04:51:164667MAC_ISOLATED_SCRIPTS_WATERFALL = """\
4668[
4669 {
4670 'project': 'chromium',
4671 'bucket': 'ci',
4672 'name': 'chromium.test',
4673 'machines': {
4674 'Mac': {
4675 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254676 'dimensions': {
4677 'os': 'Mac',
4678 },
Dirk Pranke772f55f2021-04-28 04:51:164679 },
4680 'test_suites': {
4681 'isolated_scripts': 'foo_tests',
4682 },
4683 },
4684 },
4685 },
4686]
4687"""
4688
Dirk Pranke772f55f2021-04-28 04:51:164689MAC_LUCI_MILO_CFG = """\
4690consoles {
4691 builders {
4692 name: "buildbucket/luci.chromium.ci/Mac"
4693 }
4694}
4695"""
4696
4697
4698class SwarmingTests(TestCase):
Ben Pastene338f56b2023-03-31 21:24:454699 def test_builder_with_no_dimension_fails(self):
4700 fbb = FakeBBGen(self.args, NO_DIMENSIONS_GTESTS_WATERFALL, MAC_TEST_SUITE,
Dirk Pranke772f55f2021-04-28 04:51:164701 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164702 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014703 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4704 'os must be specified for all swarmed tests'):
4705 fbb.check_output_file_consistency(verbose=True)
Ben Pastene338f56b2023-03-31 21:24:454706 self.assertFalse(fbb.printed_lines)
4707
4708 def test_builder_with_no_os_dimension_fails(self):
4709 fbb = FakeBBGen(self.args, NO_OS_GTESTS_WATERFALL, MAC_TEST_SUITE,
4710 MAC_LUCI_MILO_CFG)
4711 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014712 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4713 'os must be specified for all swarmed tests'):
4714 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164715 self.assertFalse(fbb.printed_lines)
4716
4717 def test_mac_builder_with_no_cpu_dimension_in_isolated_script_fails(self):
4718 fbb = FakeBBGen(self.args, MAC_ISOLATED_SCRIPTS_WATERFALL, MAC_TEST_SUITE,
4719 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164720 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014721 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4722 'cpu must be specified for mac'):
4723 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164724 self.assertFalse(fbb.printed_lines)
4725
4726
Kenneth Russelleb60cbd22017-12-05 07:54:284727if __name__ == '__main__':
4728 unittest.main()