blob: 66af19d66e2c7d61200a62bf19862e61455832eb [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
Zhaoyang Li473dd0ae2021-05-10 18:28:28836FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES = """\
837{
838 'basic_suites': {
839 'foo_tests': {
840 'foo_test': {
841 'swarming': {
842 'named_caches': [
843 {
844 'name': 'cache_in_test',
845 'file': 'cache_in_test_file',
846 },
847 ],
848 },
849 },
850 },
851 },
852}
853"""
854
Kenneth Russell8a386d42018-06-02 09:48:01855FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
856{
Stephen Martinis54d64ad2018-09-21 22:16:20857 'basic_suites': {
858 'foo_tests': {
859 'foo_test': {
860 'linux_args': [
861 '--no-xvfb',
862 ],
863 },
Kenneth Russell8a386d42018-06-02 09:48:01864 },
865 },
866}
867"""
868
Kenneth Russell650995a2018-05-03 21:17:01869FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
870{
Stephen Martinis54d64ad2018-09-21 22:16:20871 'basic_suites': {
872 'foo_tests': {
873 'foo_test': {
874 'args': [
875 '--enable-features=Foo,Bar',
876 ],
877 },
Kenneth Russell650995a2018-05-03 21:17:01878 },
879 },
880}
881"""
882
Brian Sheedy7658c982020-01-08 02:27:58883FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN = """\
884{
885 'basic_suites': {
886 'foo_tests': {
887 'foo_test': {
888 'remove_mixins': ['waterfall_mixin'],
889 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25890 'dimensions': {
891 'integrity': 'high',
892 },
Brian Sheedy7658c982020-01-08 02:27:58893 'expiration': 120,
894 },
895 },
896 },
897 },
898}
899"""
900
901FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN = """\
902{
903 'basic_suites': {
904 'foo_tests': {
905 'foo_test': {
906 'remove_mixins': ['builder_mixin'],
907 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25908 'dimensions': {
909 'integrity': 'high',
910 },
Brian Sheedy7658c982020-01-08 02:27:58911 'expiration': 120,
912 },
913 },
914 },
915 },
916}
917"""
918
Kenneth Russelleb60cbd22017-12-05 07:54:28919FOO_SCRIPT_SUITE = """\
920{
Stephen Martinis54d64ad2018-09-21 22:16:20921 'basic_suites': {
922 'foo_scripts': {
923 'foo_test': {
924 'script': 'foo.py',
925 },
926 'bar_test': {
927 'script': 'bar.py',
928 },
Kenneth Russelleb60cbd22017-12-05 07:54:28929 },
930 },
931}
932"""
933
Kenneth Russelleb60cbd22017-12-05 07:54:28934GOOD_COMPOSITION_TEST_SUITES = """\
935{
Stephen Martinis54d64ad2018-09-21 22:16:20936 'basic_suites': {
937 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:45938 'bar_test': {
939 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25940 'dimensions': {
941 'os': 'Linux',
942 },
Ben Pastene338f56b2023-03-31 21:24:45943 },
944 },
Stephen Martinis54d64ad2018-09-21 22:16:20945 },
946 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:45947 'foo_test': {
948 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25949 'dimensions': {
950 'os': 'Linux',
951 },
Ben Pastene338f56b2023-03-31 21:24:45952 },
953 },
Stephen Martinis54d64ad2018-09-21 22:16:20954 },
Kenneth Russelleb60cbd22017-12-05 07:54:28955 },
Stephen Martinis54d64ad2018-09-21 22:16:20956 'compound_suites': {
957 'composition_tests': [
958 'foo_tests',
959 'bar_tests',
960 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28961 },
Kenneth Russelleb60cbd22017-12-05 07:54:28962}
963"""
964
965BAD_COMPOSITION_TEST_SUITES = """\
966{
Stephen Martinis54d64ad2018-09-21 22:16:20967 'basic_suites': {
968 'bar_tests': {},
969 'foo_tests': {},
970 },
971 'compound_suites': {
972 'buggy_composition_tests': [
973 'bar_tests',
974 ],
975 'composition_tests': [
976 'foo_tests',
977 'buggy_composition_tests',
978 ],
979 },
980}
981"""
982
Andrew Luo0f1dee02019-09-06 16:50:47983CONFLICTING_COMPOSITION_TEST_SUITES = """\
984{
985 'basic_suites': {
986 'bar_tests': {
987 'baz_tests': {
988 'args': [
989 '--bar',
990 ],
991 }
992 },
993 'foo_tests': {
994 'baz_tests': {
995 'args': [
996 '--foo',
997 ],
998 }
999 },
1000 },
1001 'compound_suites': {
1002 'foobar_tests': [
1003 'foo_tests',
1004 'bar_tests',
1005 ],
1006 },
1007}
1008"""
1009
Stephen Martinis54d64ad2018-09-21 22:16:201010DUPLICATES_COMPOSITION_TEST_SUITES = """\
1011{
1012 'basic_suites': {
1013 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:011014 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:201015 'foo_tests': {},
1016 },
1017 'compound_suites': {
1018 'bar_tests': [
1019 'foo_tests',
1020 ],
1021 'composition_tests': [
1022 'foo_tests',
1023 'buggy_composition_tests',
1024 ],
1025 },
Kenneth Russelleb60cbd22017-12-05 07:54:281026}
1027"""
1028
Dirk Pranke1b767092017-12-07 04:44:231029SCRIPT_SUITE = """\
1030{
Stephen Martinis54d64ad2018-09-21 22:16:201031 'basic_suites': {
1032 'foo_scripts': {
1033 'foo_test': {
1034 'script': 'foo.py',
1035 },
Dirk Pranke1b767092017-12-07 04:44:231036 },
1037 },
1038}
1039"""
1040
Kenneth Russelleb60cbd22017-12-05 07:54:281041UNREFED_TEST_SUITE = """\
1042{
Stephen Martinis54d64ad2018-09-21 22:16:201043 'basic_suites': {
1044 'bar_tests': {},
1045 'foo_tests': {},
1046 },
Kenneth Russelleb60cbd22017-12-05 07:54:281047}
1048"""
1049
1050REUSING_TEST_WITH_DIFFERENT_NAME = """\
1051{
Stephen Martinis54d64ad2018-09-21 22:16:201052 'basic_suites': {
1053 'foo_tests': {
1054 'foo_test': {},
1055 'variation_test': {
1056 'args': [
1057 '--variation',
1058 ],
1059 'test': 'foo_test',
1060 },
Kenneth Russelleb60cbd22017-12-05 07:54:281061 },
1062 },
1063}
1064"""
1065
Kenneth Russell8a386d42018-06-02 09:48:011066COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST = """\
1067{
Stephen Martinis54d64ad2018-09-21 22:16:201068 'basic_suites': {
1069 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:451070 'foo': {
1071 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251072 'dimensions': {
1073 'os': 'Linux',
1074 },
Ben Pastene338f56b2023-03-31 21:24:451075 },
1076 },
Stephen Martinis54d64ad2018-09-21 22:16:201077 },
1078 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451079 'bar_test': {
1080 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251081 'dimensions': {
1082 'os': 'Linux',
1083 },
Ben Pastene338f56b2023-03-31 21:24:451084 },
1085 },
Stephen Martinis54d64ad2018-09-21 22:16:201086 },
Kenneth Russell8a386d42018-06-02 09:48:011087 },
Stephen Martinis54d64ad2018-09-21 22:16:201088 'compound_suites': {
1089 'composition_tests': [
1090 'foo_tests',
1091 'bar_tests',
1092 ],
Kenneth Russell8a386d42018-06-02 09:48:011093 },
Kenneth Russell8a386d42018-06-02 09:48:011094}
1095"""
1096
Kenneth Russell384a1732019-03-16 02:36:021097COMPOSITION_SUITE_WITH_GPU_ARGS = """\
1098{
1099 'basic_suites': {
1100 'foo_tests': {
1101 'foo': {
Ben Pastene338f56b2023-03-31 21:24:451102 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251103 'dimensions': {
1104 'os': 'Linux',
1105 },
Ben Pastene338f56b2023-03-31 21:24:451106 },
Kenneth Russell384a1732019-03-16 02:36:021107 'args': [
1108 '--gpu-vendor-id',
1109 '${gpu_vendor_id}',
1110 '--gpu-device-id',
1111 '${gpu_device_id}',
1112 ],
1113 },
1114 },
1115 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451116 'bar_test': {
1117 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251118 'dimensions': {
1119 'os': 'Linux',
1120 },
Ben Pastene338f56b2023-03-31 21:24:451121 },
1122 },
Kenneth Russell384a1732019-03-16 02:36:021123 },
1124 },
1125 'compound_suites': {
1126 'composition_tests': [
1127 'foo_tests',
1128 'bar_tests',
1129 ],
1130 },
1131}
1132"""
1133
Brian Sheedyd8c0c73d2021-07-05 02:11:301134COMPOSITION_SUITE_WITH_PIXEL_AND_FILTER = """\
1135{
1136 'basic_suites': {
1137 'foo_tests': {
1138 'pixel': {
1139 'args': [
1140 '--git-revision=aaaa',
1141 '--test-filter=bar',
1142 ],
1143 },
1144 },
1145 'bar_tests': {
1146 'bar_test': {},
1147 },
1148 },
1149 'compound_suites': {
1150 'composition_tests': [
1151 'foo_tests',
1152 'bar_tests',
1153 ],
1154 },
1155}
1156"""
1157
Jamie Madilla8be0d72020-10-02 05:24:041158GTEST_AS_ISOLATED_SCRIPT_SUITE = """\
1159{
1160 'basic_suites': {
1161 'foo_tests': {
1162 'foo_test': {
1163 'script': 'foo.py',
1164 'use_isolated_scripts_api': True,
1165 },
1166 },
1167 },
1168}
1169"""
1170
Dirk Pranke1b767092017-12-07 04:44:231171SCRIPT_WITH_ARGS_EXCEPTIONS = """\
1172{
1173 'foo_test': {
1174 'modifications': {
1175 'Fake Tester': {
1176 'args': ['--fake-arg'],
1177 },
1178 },
1179 },
1180}
1181"""
1182
Stephen Martinis0382bc12018-09-17 22:29:071183SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
1184{
1185 'foo_test': {
1186 'modifications': {
1187 'Fake Tester': {
1188 'swarming': {
1189 'value': 'exception',
1190 },
1191 },
1192 },
1193 },
1194}
1195"""
1196
Stephanie Kim572b43c02023-04-13 14:24:131197AUTOSHARD_EXCEPTIONS = json.dumps({
1198 'chromium.test': {
1199 'Fake Tester': {
1200 'foo_test': {
1201 'shards': 20,
1202 },
1203 'foo_test_apk': {
1204 'shards': 2,
1205 },
1206 'swarming_test a_variant': {
1207 'shards': 10,
1208 },
1209 }
1210 },
1211})
1212
Kenneth Russelleb60cbd22017-12-05 07:54:281213NO_BAR_TEST_EXCEPTIONS = """\
1214{
1215 'bar_test': {
1216 'remove_from': [
1217 'Fake Tester',
1218 ]
1219 }
1220}
1221"""
1222
1223EMPTY_BAR_TEST_EXCEPTIONS = """\
1224{
1225 'bar_test': {
1226 }
1227}
1228"""
1229
Stephen Martinis54d64ad2018-09-21 22:16:201230EXCEPTIONS_SORTED = """\
1231{
1232 'suite_c': {
1233 'modifications': {
1234 'Fake Tester': {
1235 'foo': 'bar',
1236 },
1237 },
1238 },
1239 'suite_d': {
1240 'modifications': {
1241 'Fake Tester': {
1242 'foo': 'baz',
1243 },
1244 },
1245 },
1246}
1247"""
1248
1249EXCEPTIONS_UNSORTED = """\
1250{
1251 'suite_d': {
1252 'modifications': {
1253 'Fake Tester': {
1254 'foo': 'baz',
1255 },
1256 },
1257 },
1258 'suite_c': {
1259 'modifications': {
1260 'Fake Tester': {
1261 'foo': 'bar',
1262 },
1263 },
1264 },
1265}
1266"""
1267
Stephen Martinis5bef0fc2020-01-06 22:47:531268EXCEPTIONS_PER_TEST_UNSORTED = """\
1269{
1270 'suite_d': {
1271 'modifications': {
1272 'Other Tester': {
1273 'foo': 'baz',
1274 },
1275 'Fake Tester': {
1276 'foo': 'baz',
1277 },
1278 },
1279 },
1280}
1281"""
1282
1283EXCEPTIONS_DUPS_REMOVE_FROM = """\
1284{
1285 'suite_d': {
1286 'remove_from': [
1287 'Fake Tester',
1288 'Fake Tester',
1289 ],
1290 'modifications': {
1291 'Fake Tester': {
1292 'foo': 'baz',
1293 },
1294 },
1295 },
1296}
1297"""
1298
Kenneth Russelleb60cbd22017-12-05 07:54:281299FOO_TEST_MODIFICATIONS = """\
1300{
1301 'foo_test': {
1302 'modifications': {
1303 'Fake Tester': {
1304 'args': [
1305 '--bar',
1306 ],
1307 'swarming': {
1308 'hard_timeout': 600,
1309 },
1310 },
1311 },
1312 }
1313}
1314"""
1315
John Budorick5bc387fe2019-05-09 20:02:531316FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
1317{
1318 'foo_test': {
1319 'modifications': {
1320 'Fake Tester': {
1321 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251322 'dimensions': {
1323 'integrity': None,
1324 },
John Budorick5bc387fe2019-05-09 20:02:531325 },
1326 },
1327 },
1328 },
1329}
1330"""
1331
Kenneth Russelleb60cbd22017-12-05 07:54:281332NONEXISTENT_REMOVAL = """\
1333{
1334 'foo_test': {
1335 'remove_from': [
1336 'Nonexistent Tester',
1337 ]
1338 }
1339}
1340"""
1341
1342NONEXISTENT_MODIFICATION = """\
1343{
1344 'foo_test': {
1345 'modifications': {
1346 'Nonexistent Tester': {
1347 'args': [],
1348 },
1349 },
1350 }
1351}
1352"""
1353
Kenneth Russell78fd8702018-05-17 01:15:521354LUCI_MILO_CFG = """\
1355consoles {
1356 builders {
1357 name: "buildbucket/luci.chromium.ci/Fake Tester"
1358 }
1359}
1360"""
1361
Stephen Martinis54d64ad2018-09-21 22:16:201362LUCI_MILO_CFG_WATERFALL_SORTING = """\
1363consoles {
1364 builders {
1365 name: "buildbucket/luci.chromium.ci/Fake Tester"
1366 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1367 }
1368}
1369"""
1370
Stephen Martinis54d64ad2018-09-21 22:16:201371TEST_SUITE_SORTING_WATERFALL = """
1372[
1373 {
Greg Gutermanf60eb052020-03-12 17:40:011374 'project': 'chromium',
1375 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201376 'name': 'chromium.test',
1377 'machines': {
1378 'Fake Tester': {
1379 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561380 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201381 'scripts': 'suite_b',
1382 },
1383 },
1384 },
1385 },
1386]
1387"""
1388
1389TEST_SUITE_SORTED_WATERFALL = """
1390[
1391 {
Greg Gutermanf60eb052020-03-12 17:40:011392 'project': 'chromium',
1393 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201394 'name': 'chromium.test',
1395 'machines': {
1396 'Fake Tester': {
1397 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561398 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201399 'scripts': 'suite_b',
1400 },
1401 },
1402 'Really Fake Tester': {
1403 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561404 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201405 'scripts': 'suite_b',
1406 },
1407 },
1408 },
1409 },
1410 {
Greg Gutermanf60eb052020-03-12 17:40:011411 'project': 'chromium',
1412 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201413 'name': 'chromium.zz.test',
1414 'machines': {
1415 'Fake Tester': {
1416 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561417 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201418 'scripts': 'suite_b',
1419 },
1420 },
1421 'Really Fake Tester': {
1422 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561423 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201424 'scripts': 'suite_b',
1425 },
1426 },
1427 },
1428 },
1429]
1430"""
1431
1432TEST_SUITE_UNSORTED_WATERFALL_1 = """
1433[
1434 {
Greg Gutermanf60eb052020-03-12 17:40:011435 'project': 'chromium',
1436 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201437 'name': 'chromium.zz.test',
1438 'machines': {
1439 'Fake Tester': {
1440 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561441 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201442 'scripts': 'suite_b',
1443 },
1444 },
1445 'Really Fake Tester': {
1446 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561447 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201448 'scripts': 'suite_b',
1449 },
1450 },
1451 },
1452 },
1453 {
Greg Gutermanf60eb052020-03-12 17:40:011454 'project': 'chromium',
1455 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201456 'name': 'chromium.test',
1457 'machines': {
1458 'Fake Tester': {
1459 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561460 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201461 'scripts': 'suite_b',
1462 },
1463 },
1464 'Really Fake Tester': {
1465 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561466 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201467 'scripts': 'suite_b',
1468 },
1469 },
1470 },
1471 },
1472]
1473"""
1474
1475TEST_SUITE_UNSORTED_WATERFALL_2 = """
1476[
1477 {
Greg Gutermanf60eb052020-03-12 17:40:011478 'project': 'chromium',
1479 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201480 'name': 'chromium.test',
1481 'machines': {
1482 'Really Fake Tester': {
1483 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561484 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201485 'scripts': 'suite_b',
1486 },
1487 },
1488 'Fake Tester': {
1489 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561490 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201491 'scripts': 'suite_b',
1492 },
1493 },
1494 },
1495 },
1496 {
Greg Gutermanf60eb052020-03-12 17:40:011497 'project': 'chromium',
1498 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201499 'name': 'chromium.zz.test',
1500 'machines': {
1501 'Fake Tester': {
1502 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561503 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201504 'scripts': 'suite_b',
1505 },
1506 },
1507 'Really Fake Tester': {
1508 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561509 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201510 'scripts': 'suite_b',
1511 },
1512 },
1513 },
1514 },
1515]
1516"""
1517
1518# Note that the suites in basic_suites would be sorted after the suites in
1519# compound_suites. This is valid though, because each set of suites is sorted
1520# separately.
Dirk Pranke0e879b22020-07-16 23:53:561521# suite_c is a 'gtest_tests' test
1522# suite_d is a 'scripts' test
Stephen Martinis54d64ad2018-09-21 22:16:201523TEST_SUITE_SORTED = """\
1524{
1525 'basic_suites': {
1526 'suite_c': {
1527 'suite_c': {},
1528 },
1529 'suite_d': {
1530 'script': {
1531 'script': 'suite_d.py',
1532 }
1533 },
1534 },
1535 'compound_suites': {
1536 'suite_a': [
1537 'suite_c',
1538 ],
1539 'suite_b': [
1540 'suite_d',
1541 ],
1542 },
1543}
1544"""
1545
1546TEST_SUITE_UNSORTED_1 = """\
1547{
1548 'basic_suites': {
1549 'suite_d': {
1550 'a': 'b',
1551 },
1552 'suite_c': {
1553 'a': 'b',
1554 },
1555 },
1556 'compound_suites': {
1557 'suite_a': [
1558 'suite_c',
1559 ],
1560 'suite_b': [
1561 'suite_d',
1562 ],
1563 },
1564}
1565"""
1566
1567TEST_SUITE_UNSORTED_2 = """\
1568{
1569 'basic_suites': {
1570 'suite_c': {
1571 'a': 'b',
1572 },
1573 'suite_d': {
1574 'a': 'b',
1575 },
1576 },
1577 'compound_suites': {
1578 'suite_b': [
1579 'suite_c',
1580 ],
1581 'suite_a': [
1582 'suite_d',
1583 ],
1584 },
1585}
1586"""
1587TEST_SUITE_UNSORTED_3 = """\
1588{
1589 'basic_suites': {
1590 'suite_d': {
1591 'a': 'b',
1592 },
1593 'suite_c': {
1594 'a': 'b',
1595 },
1596 },
1597 'compound_suites': {
1598 'suite_b': [
1599 'suite_c',
1600 ],
1601 'suite_a': [
1602 'suite_d',
1603 ],
1604 },
1605}
1606"""
1607
1608
1609TEST_SUITES_SYNTAX_ERROR = """\
1610{
1611 'basic_suites': {
1612 3: {
1613 'suite_c': {},
1614 },
1615 },
1616 'compound_suites': {},
1617}
1618"""
1619
Nodir Turakulovfce34292019-12-18 17:05:411620GN_ISOLATE_MAP="""\
1621{
1622 'foo_test': {
1623 'label': '//chrome/test:foo_test',
1624 'type': 'windowed_test_launcher',
1625 }
1626}
1627"""
1628
Chan Liab7d8dd82020-04-24 23:42:191629GPU_TELEMETRY_GN_ISOLATE_MAP="""\
1630{
1631 'telemetry_gpu_integration_test': {
1632 'label': '//chrome/test:telemetry_gpu_integration_test',
1633 'type': 'script',
1634 }
1635}
1636"""
Brian Sheedyf74819b2021-06-04 01:38:381637
1638GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID = """\
1639{
1640 'telemetry_gpu_integration_test_android_chrome': {
1641 'label': '//chrome/test:telemetry_gpu_integration_test_android_chrome',
1642 'type': 'script',
1643 }
1644}
1645"""
1646
1647GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW = """\
1648{
1649 'telemetry_gpu_integration_test_android_webview': {
1650 'label': '//chrome/test:telemetry_gpu_integration_test_android_webview',
1651 'type': 'script',
1652 }
1653}
1654"""
1655
Chong Guc2ca5d02022-01-11 19:52:171656GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA = """\
1657{
1658 'telemetry_gpu_integration_test_fuchsia': {
1659 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1660 'type': 'script',
1661 }
1662}
1663"""
1664
Fabrice de Ganscbd655f2022-08-04 20:15:301665GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING = """\
1666{
1667 'telemetry_gpu_integration_test_fuchsia': {
1668 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1669 'type': 'script',
1670 }
1671}
1672"""
1673
Corentin Wallez55b8e772020-04-24 17:39:281674GN_ISOLATE_MAP_KEY_LABEL_MISMATCH="""\
1675{
1676 'foo_test': {
1677 'label': '//chrome/test:foo_test_tmp',
1678 'type': 'windowed_test_launcher',
1679 }
1680}
1681"""
1682
1683GN_ISOLATE_MAP_USING_IMPLICIT_NAME="""\
1684{
1685 'foo_test': {
1686 'label': '//chrome/foo_test',
1687 'type': 'windowed_test_launcher',
1688 }
1689}
1690"""
1691
Garrett Beaty1afaccc2020-06-25 19:58:151692class UnitTest(TestCase):
Kenneth Russelleb60cbd22017-12-05 07:54:281693 def test_base_generator(self):
1694 # Only needed for complete code coverage.
Garrett Beaty992342df2023-06-23 17:38:011695 with self.assertRaises(NotImplementedError):
1696 generate_buildbot_json.BaseGenerator(None).generate(
1697 None, None, None, None)
1698 with self.assertRaises(NotImplementedError):
1699 generate_buildbot_json.BaseGenerator(None).sort(None)
Kenneth Russelleb60cbd22017-12-05 07:54:281700
Garrett Beatyade673d2023-08-04 22:00:251701 def test_dimension_sets_causes_error(self):
1702 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1703 FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS, LUCI_MILO_CFG)
1704 fbb.check_input_file_consistency(verbose=True)
1705 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1706 r'.*dimension_sets is no longer supported.*'):
1707 fbb.check_output_file_consistency(verbose=True)
1708 self.assertFalse(fbb.printed_lines)
1709
Kenneth Russelleb60cbd22017-12-05 07:54:281710 def test_good_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151711 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521712 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501713 fbb.check_input_file_consistency(verbose=True)
1714 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281715
1716 def test_good_composition_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151717 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1718 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501719 fbb.check_input_file_consistency(verbose=True)
1720 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281721
1722 def test_bad_composition_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151723 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1724 BAD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231725 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1726 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501727 fbb.check_input_file_consistency(verbose=True)
1728 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281729
Andrew Luo0f1dee02019-09-06 16:50:471730 def test_composition_test_suites_no_conflicts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151731 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1732 CONFLICTING_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231733 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1734 'Conflicting test definitions.*'):
Andrew Luo0f1dee02019-09-06 16:50:471735 fbb.check_input_file_consistency(verbose=True)
1736 self.assertFalse(fbb.printed_lines)
1737
Stephen Martinis54d64ad2018-09-21 22:16:201738 def test_composition_test_suites_no_duplicate_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:151739 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1740 DUPLICATES_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231741 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1742 '.*may not duplicate basic test suite.*'):
Stephen Martinis54d64ad2018-09-21 22:16:201743 fbb.check_input_file_consistency(verbose=True)
1744 self.assertFalse(fbb.printed_lines)
1745
Kenneth Russelleb60cbd22017-12-05 07:54:281746 def test_unknown_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151747 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521748 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231749 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1750 'Test suite baz_tests from machine.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501751 fbb.check_input_file_consistency(verbose=True)
1752 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281753
1754 def test_unknown_test_suite_types_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151755 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1756 FOO_TEST_SUITE, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231757 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1758 'Unknown test suite type foo_test_type.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501759 fbb.check_input_file_consistency(verbose=True)
1760 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281761
1762 def test_unrefed_test_suite_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151763 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521764 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231765 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1766 '.*unreferenced.*bar_tests.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501767 fbb.check_input_file_consistency(verbose=True)
1768 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281769
1770 def test_good_waterfall_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:151771 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1772 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281773 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501774 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281775
1776 def test_reusing_gtest_targets(self):
Garrett Beaty1afaccc2020-06-25 19:58:151777 fbb = FakeBBGen(self.args,
1778 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281779 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:411780 LUCI_MILO_CFG,
1781 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russelleb60cbd22017-12-05 07:54:281782 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501783 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281784
Chong Guee622242020-10-28 18:17:351785 def test_load_multiple_isolate_map_files_with_duplicates(self):
1786 self.args.isolate_map_files = ['gn_isolate_map.pyl']
1787 fbb = FakeBBGen(self.args,
1788 FOO_GTESTS_WATERFALL,
1789 REUSING_TEST_WITH_DIFFERENT_NAME,
1790 LUCI_MILO_CFG,
1791 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madillcf4f8c72021-05-20 19:24:231792 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1793 'Duplicate targets in isolate map files.*'):
Chong Guee622242020-10-28 18:17:351794 fbb.load_configuration_files()
1795
1796 def test_load_multiple_isolate_map_files_without_duplicates(self):
1797 self.args.isolate_map_files = ['gn_isolate_map2.pyl']
1798 fbb = FakeBBGen(self.args,
1799 FOO_GTESTS_WATERFALL,
1800 REUSING_TEST_WITH_DIFFERENT_NAME,
1801 LUCI_MILO_CFG,
1802 gn_isolate_map=GN_ISOLATE_MAP)
1803 fbb.load_configuration_files()
1804 isolate_dict = {}
1805 isolate_map_1 = fbb.load_pyl_file('gn_isolate_map.pyl')
1806 isolate_map_2 = fbb.load_pyl_file('gn_isolate_map2.pyl')
1807 isolate_dict.update(isolate_map_1)
1808 isolate_dict.update(isolate_map_2)
Jamie Madillcf4f8c72021-05-20 19:24:231809 self.assertEqual(isolate_dict, fbb.gn_isolate_map)
Chong Guee622242020-10-28 18:17:351810
Corentin Wallez55b8e772020-04-24 17:39:281811 def test_gn_isolate_map_with_label_mismatch(self):
Garrett Beaty1afaccc2020-06-25 19:58:151812 fbb = FakeBBGen(self.args,
1813 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281814 FOO_TEST_SUITE,
1815 LUCI_MILO_CFG,
1816 gn_isolate_map=GN_ISOLATE_MAP_KEY_LABEL_MISMATCH)
Jamie Madillcf4f8c72021-05-20 19:24:231817 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1818 'key name.*foo_test.*label.*'
1819 'foo_test_tmp.*'):
Corentin Wallez55b8e772020-04-24 17:39:281820 fbb.check_input_file_consistency(verbose=True)
1821 self.assertFalse(fbb.printed_lines)
1822
1823 def test_gn_isolate_map_using_implicit_gn_name(self):
Garrett Beaty1afaccc2020-06-25 19:58:151824 fbb = FakeBBGen(self.args,
1825 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281826 FOO_TEST_SUITE,
1827 LUCI_MILO_CFG,
1828 gn_isolate_map=GN_ISOLATE_MAP_USING_IMPLICIT_NAME)
Jamie Madillcf4f8c72021-05-20 19:24:231829 with self.assertRaisesRegex(
1830 generate_buildbot_json.BBGenErr,
1831 'Malformed.*//chrome/foo_test.*for key.*'
1832 'foo_test.*'):
Corentin Wallez55b8e772020-04-24 17:39:281833 fbb.check_input_file_consistency(verbose=True)
1834 self.assertFalse(fbb.printed_lines)
1835
Kenneth Russelleb60cbd22017-12-05 07:54:281836 def test_noop_exception_does_nothing(self):
Garrett Beaty1afaccc2020-06-25 19:58:151837 fbb = FakeBBGen(self.args,
1838 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281839 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411840 LUCI_MILO_CFG,
1841 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281842 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501843 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281844
Kenneth Russell8ceeabf2017-12-11 17:53:281845 def test_test_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151846 fbb = FakeBBGen(self.args,
1847 FOO_GTESTS_WATERFALL,
Kenneth Russell8ceeabf2017-12-11 17:53:281848 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:411849 LUCI_MILO_CFG,
1850 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russell8ceeabf2017-12-11 17:53:281851 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501852 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:281853
Kenneth Russell650995a2018-05-03 21:17:011854 def test_enable_features_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151855 fbb = FakeBBGen(self.args, FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
1856 FOO_TEST_SUITE_WITH_ENABLE_FEATURES, LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:011857 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501858 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:011859
Kenneth Russell8a386d42018-06-02 09:48:011860 def test_linux_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151861 fbb = FakeBBGen(self.args, FOO_LINUX_GTESTS_WATERFALL,
1862 FOO_TEST_SUITE_WITH_LINUX_ARGS, LUCI_MILO_CFG)
Kenneth Russell8a386d42018-06-02 09:48:011863 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501864 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:011865
Kenneth Russelleb60cbd22017-12-05 07:54:281866 def test_test_filtering(self):
Garrett Beaty1afaccc2020-06-25 19:58:151867 fbb = FakeBBGen(self.args,
1868 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281869 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411870 LUCI_MILO_CFG,
1871 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281872 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501873 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281874
1875 def test_test_modifications(self):
Garrett Beaty1afaccc2020-06-25 19:58:151876 fbb = FakeBBGen(self.args,
1877 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281878 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411879 LUCI_MILO_CFG,
1880 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281881 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501882 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281883
John Budorick5bc387fe2019-05-09 20:02:531884 def test_test_with_explicit_none(self):
Garrett Beaty1afaccc2020-06-25 19:58:151885 fbb = FakeBBGen(self.args,
1886 FOO_GTESTS_WATERFALL,
John Budorick5bc387fe2019-05-09 20:02:531887 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411888 LUCI_MILO_CFG,
1889 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
1890 mixins=SWARMING_MIXINS)
John Budorick5bc387fe2019-05-09 20:02:531891 fbb.check_output_file_consistency(verbose=True)
1892 self.assertFalse(fbb.printed_lines)
1893
Kenneth Russelleb60cbd22017-12-05 07:54:281894 def test_isolated_script_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151895 fbb = FakeBBGen(self.args,
1896 FOO_ISOLATED_SCRIPTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281897 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411898 LUCI_MILO_CFG,
1899 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281900 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501901 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281902
Ben Pastenef21cda32023-03-30 22:00:571903 def test_isolated_script_tests_android(self):
Dirk Pranke0e879b22020-07-16 23:53:561904 fbb = FakeBBGen(self.args,
1905 FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID,
1906 GOOD_COMPOSITION_TEST_SUITES,
1907 LUCI_MILO_CFG,
1908 exceptions=NO_BAR_TEST_EXCEPTIONS)
Dirk Pranke0e879b22020-07-16 23:53:561909 fbb.check_output_file_consistency(verbose=True)
1910 self.assertFalse(fbb.printed_lines)
1911
Dirk Pranke1b767092017-12-07 04:44:231912 def test_script_with_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151913 fbb = FakeBBGen(self.args,
1914 FOO_SCRIPT_WATERFALL,
Dirk Pranke1b767092017-12-07 04:44:231915 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411916 LUCI_MILO_CFG,
1917 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Dirk Pranke1b767092017-12-07 04:44:231918 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501919 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:231920
1921 def test_script(self):
Garrett Beaty1afaccc2020-06-25 19:58:151922 fbb = FakeBBGen(self.args,
1923 FOO_SCRIPT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281924 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411925 LUCI_MILO_CFG,
1926 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281927 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501928 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281929
Brian Sheedy158cd0f2019-04-26 01:12:441930 def test_script_machine_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151931 fbb = FakeBBGen(self.args,
1932 FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441933 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411934 LUCI_MILO_CFG,
1935 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231936 with self.assertRaisesRegex(
1937 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441938 'Attempted to generate a script test on tester.*'):
1939 fbb.check_output_file_consistency(verbose=True)
1940
1941 def test_script_waterfall_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151942 fbb = FakeBBGen(self.args,
1943 FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441944 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411945 LUCI_MILO_CFG,
1946 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231947 with self.assertRaisesRegex(
1948 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441949 'Attempted to generate a script test on tester.*'):
1950 fbb.check_output_file_consistency(verbose=True)
1951
Kenneth Russelleb60cbd22017-12-05 07:54:281952 def test_junit_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151953 fbb = FakeBBGen(self.args,
1954 FOO_JUNIT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281955 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411956 LUCI_MILO_CFG,
1957 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281958 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501959 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281960
Kenneth Russell8a386d42018-06-02 09:48:011961 def test_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151962 fbb = FakeBBGen(self.args,
1963 FOO_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell8a386d42018-06-02 09:48:011964 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
Nodir Turakulovfce34292019-12-18 17:05:411965 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:191966 exceptions=NO_BAR_TEST_EXCEPTIONS,
1967 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell8a386d42018-06-02 09:48:011968 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501969 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:011970
Brian Sheedyf74819b2021-06-04 01:38:381971 def test_gpu_telemetry_tests_android(self):
1972 fbb = FakeBBGen(self.args,
1973 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID,
1974 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
1975 LUCI_MILO_CFG,
1976 exceptions=NO_BAR_TEST_EXCEPTIONS,
1977 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID)
Brian Sheedyf74819b2021-06-04 01:38:381978 fbb.check_output_file_consistency(verbose=True)
1979 self.assertFalse(fbb.printed_lines)
1980
1981 def test_gpu_telemetry_tests_android_webview(self):
1982 fbb = FakeBBGen(self.args,
1983 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW,
1984 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
1985 LUCI_MILO_CFG,
1986 exceptions=NO_BAR_TEST_EXCEPTIONS,
1987 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW)
Brian Sheedyf74819b2021-06-04 01:38:381988 fbb.check_output_file_consistency(verbose=True)
1989 self.assertFalse(fbb.printed_lines)
1990
Chong Guc2ca5d02022-01-11 19:52:171991 def test_gpu_telemetry_tests_fuchsia(self):
1992 fbb = FakeBBGen(self.args,
1993 FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA,
1994 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
1995 LUCI_MILO_CFG,
1996 exceptions=NO_BAR_TEST_EXCEPTIONS,
1997 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA)
Chong Guc2ca5d02022-01-11 19:52:171998 fbb.check_output_file_consistency(verbose=True)
1999 self.assertFalse(fbb.printed_lines)
2000
Fabrice de Ganscbd655f2022-08-04 20:15:302001 def test_gpu_telemetry_tests_cast_streaming(self):
2002 fbb = FakeBBGen(self.args,
2003 FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING,
2004 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
2005 LUCI_MILO_CFG,
2006 exceptions=NO_BAR_TEST_EXCEPTIONS,
2007 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING)
Fabrice de Ganscbd655f2022-08-04 20:15:302008 fbb.check_output_file_consistency(verbose=True)
2009 self.assertFalse(fbb.printed_lines)
2010
Brian Sheedyb6491ba2022-09-26 20:49:492011 def test_gpu_telemetry_tests_skylab(self):
2012 fbb = FakeBBGen(self.args,
2013 FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB,
2014 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
2015 LUCI_MILO_CFG,
2016 exceptions=NO_BAR_TEST_EXCEPTIONS,
2017 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyb6491ba2022-09-26 20:49:492018 fbb.check_output_file_consistency(verbose=True)
2019 self.assertFalse(fbb.printed_lines)
2020
Kenneth Russell384a1732019-03-16 02:36:022021 def test_nvidia_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152022 fbb = FakeBBGen(self.args,
2023 NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022024 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412025 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192026 exceptions=NO_BAR_TEST_EXCEPTIONS,
2027 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022028 fbb.check_output_file_consistency(verbose=True)
2029 self.assertFalse(fbb.printed_lines)
2030
2031 def test_intel_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152032 fbb = FakeBBGen(self.args,
2033 INTEL_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022034 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412035 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192036 exceptions=NO_BAR_TEST_EXCEPTIONS,
2037 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022038 fbb.check_output_file_consistency(verbose=True)
2039 self.assertFalse(fbb.printed_lines)
2040
Ben Pastene5f231cf22022-05-05 18:03:072041 def test_gpu_telemetry_tests_with_variants(self):
2042 fbb = FakeBBGen(self.args,
2043 GPU_TELEMETRY_TEST_VARIANTS_WATERFALL,
2044 MATRIX_COMPOUND_MIXED_VARIANTS_REF,
2045 LUCI_MILO_CFG,
2046 exceptions=NO_BAR_TEST_EXCEPTIONS,
2047 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP,
2048 variants=MULTI_VARIANTS_FILE)
Ben Pastene5f231cf22022-05-05 18:03:072049 fbb.check_output_file_consistency(verbose=True)
2050 self.assertFalse(fbb.printed_lines)
2051
Brian Sheedyf9387db7b2019-08-05 19:26:102052 def test_intel_uhd_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152053 fbb = FakeBBGen(self.args,
2054 INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
Brian Sheedyf9387db7b2019-08-05 19:26:102055 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412056 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192057 exceptions=NO_BAR_TEST_EXCEPTIONS,
2058 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyf9387db7b2019-08-05 19:26:102059 fbb.check_output_file_consistency(verbose=True)
2060 self.assertFalse(fbb.printed_lines)
2061
Jamie Madilla8be0d72020-10-02 05:24:042062 def test_gtest_as_isolated_Script(self):
2063 fbb = FakeBBGen(self.args,
2064 FOO_GTESTS_WATERFALL,
2065 GTEST_AS_ISOLATED_SCRIPT_SUITE,
2066 LUCI_MILO_CFG,
2067 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madilla8be0d72020-10-02 05:24:042068 fbb.check_output_file_consistency(verbose=True)
2069 self.assertFalse(fbb.printed_lines)
2070
Kenneth Russelleb60cbd22017-12-05 07:54:282071 def test_ungenerated_output_files_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152072 fbb = FakeBBGen(self.args,
2073 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282074 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412075 LUCI_MILO_CFG,
2076 exceptions=NO_BAR_TEST_EXCEPTIONS)
Stephen Martinis7eb8b612018-09-21 00:17:502077 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192078 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502079 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232080 self.assertRegex(
Dirk Pranke6269d302020-10-01 00:14:392081 joined_lines, 'File chromium.test.json did not have the following'
Stephen Martinis7eb8b612018-09-21 00:17:502082 ' expected contents:.*')
Jamie Madillcf4f8c72021-05-20 19:24:232083 self.assertRegex(joined_lines, '.*--- expected.*')
2084 self.assertRegex(joined_lines, '.*\+\+\+ current.*')
Stephen Martinis7eb8b612018-09-21 00:17:502085 fbb.printed_lines = []
2086 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282087
2088 def test_android_output_options(self):
Garrett Beaty1afaccc2020-06-25 19:58:152089 fbb = FakeBBGen(self.args, ANDROID_WATERFALL, FOO_TEST_SUITE, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282090 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502091 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282092
2093 def test_nonexistent_removal_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152094 fbb = FakeBBGen(self.args,
2095 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282096 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412097 LUCI_MILO_CFG,
2098 exceptions=NONEXISTENT_REMOVAL)
Jamie Madillcf4f8c72021-05-20 19:24:232099 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2100 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502101 fbb.check_input_file_consistency(verbose=True)
2102 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282103
2104 def test_nonexistent_modification_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152105 fbb = FakeBBGen(self.args,
2106 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282107 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412108 LUCI_MILO_CFG,
2109 exceptions=NONEXISTENT_MODIFICATION)
Jamie Madillcf4f8c72021-05-20 19:24:232110 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2111 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502112 fbb.check_input_file_consistency(verbose=True)
2113 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282114
John Budorickedfe7f872018-01-23 15:27:222115 def test_waterfall_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152116 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2117 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222118 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502119 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222120
Ben Pastenea9e583b2019-01-16 02:57:262121 def test_chromeos_trigger_script_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152122 fbb = FakeBBGen(self.args, FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2123 FOO_TEST_SUITE, LUCI_MILO_CFG)
Ben Pastenea9e583b2019-01-16 02:57:262124 fbb.check_output_file_consistency(verbose=True)
2125 self.assertFalse(fbb.printed_lines)
2126
Zhiling Huangbe008172018-03-08 19:13:112127 def test_relative_pyl_file_dir(self):
Garrett Beaty79339e182023-04-10 20:45:472128 self.set_args('--pyl-files-dir=relative/path')
Garrett Beaty1afaccc2020-06-25 19:58:152129 fbb = FakeBBGen(self.args,
2130 FOO_GTESTS_WATERFALL,
Zhiling Huangbe008172018-03-08 19:13:112131 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412132 LUCI_MILO_CFG,
2133 gn_isolate_map=GN_ISOLATE_MAP)
Stephen Martinis7eb8b612018-09-21 00:17:502134 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112135 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502136 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112137
Nico Weberd18b8962018-05-16 19:39:382138 def test_nonexistent_bot_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152139 fbb = FakeBBGen(self.args, UNKNOWN_BOT_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522140 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382141 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502142 fbb.check_input_file_consistency(verbose=True)
2143 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382144
Garrett Beaty4f3e9212020-06-25 20:21:492145 def test_nonexistent_bot_raises_when_no_project_pyl_exists(self):
Garrett Beaty1afaccc2020-06-25 19:58:152146 fbb = FakeBBGen(self.args,
2147 UNKNOWN_BOT_GTESTS_WATERFALL,
Garrett Beaty2a02de3c2020-05-15 13:57:352148 FOO_TEST_SUITE,
2149 LUCI_MILO_CFG,
Garrett Beaty4f3e9212020-06-25 20:21:492150 project_pyl=None)
2151 with self.assertRaises(generate_buildbot_json.BBGenErr):
2152 fbb.check_input_file_consistency(verbose=True)
2153 self.assertFalse(fbb.printed_lines)
2154
2155 def test_nonexistent_bot_does_not_raise_when_validation_disabled(self):
2156 fbb = FakeBBGen(
2157 self.args,
2158 UNKNOWN_BOT_GTESTS_WATERFALL,
2159 FOO_TEST_SUITE,
2160 LUCI_MILO_CFG,
2161 project_pyl='{"validate_source_side_specs_have_builder": False}')
Garrett Beaty2a02de3c2020-05-15 13:57:352162 fbb.check_input_file_consistency(verbose=True)
2163
Stephen Martinis54d64ad2018-09-21 22:16:202164 def test_waterfalls_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152165 fbb = FakeBBGen(self.args, TEST_SUITE_SORTED_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202166 LUCI_MILO_CFG_WATERFALL_SORTING)
2167 fbb.check_input_file_consistency(verbose=True)
2168 self.assertFalse(fbb.printed_lines)
2169
Garrett Beaty1afaccc2020-06-25 19:58:152170 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_1,
2171 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232172 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202173 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472174 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392175 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472176 ):
Stephen Martinis54d64ad2018-09-21 22:16:202177 fbb.check_input_file_consistency(verbose=True)
2178 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232179 self.assertRegex(joined_lines, '.*\+ chromium\..*test.*')
2180 self.assertRegex(joined_lines, '.*\- chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202181 fbb.printed_lines = []
2182 self.assertFalse(fbb.printed_lines)
2183
Garrett Beaty1afaccc2020-06-25 19:58:152184 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_2,
2185 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232186 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202187 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472188 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392189 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472190 ):
Stephen Martinis54d64ad2018-09-21 22:16:202191 fbb.check_input_file_consistency(verbose=True)
2192 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232193 self.assertRegex(joined_lines, '.*\+.*Fake Tester.*')
2194 self.assertRegex(joined_lines, '.*\-.*Fake Tester.*')
Stephen Martinis54d64ad2018-09-21 22:16:202195 fbb.printed_lines = []
2196 self.assertFalse(fbb.printed_lines)
2197
2198 def test_test_suite_exceptions_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152199 fbb = FakeBBGen(self.args,
2200 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202201 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412202 LUCI_MILO_CFG,
2203 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502204 fbb.check_input_file_consistency(verbose=True)
2205 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182206
Garrett Beaty1afaccc2020-06-25 19:58:152207 fbb = FakeBBGen(self.args,
2208 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202209 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412210 LUCI_MILO_CFG,
Stephen Martinis5bef0fc2020-01-06 22:47:532211 exceptions=EXCEPTIONS_DUPS_REMOVE_FROM)
2212 with self.assertRaises(generate_buildbot_json.BBGenErr):
2213 fbb.check_input_file_consistency(verbose=True)
2214 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232215 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532216 fbb.printed_lines = []
2217 self.assertFalse(fbb.printed_lines)
2218
2219 def test_test_suite_exceptions_no_dups_remove_from(self):
Garrett Beaty1afaccc2020-06-25 19:58:152220 fbb = FakeBBGen(self.args,
2221 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532222 TEST_SUITE_SORTED,
2223 LUCI_MILO_CFG,
2224 exceptions=EXCEPTIONS_SORTED)
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,
2229 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532230 TEST_SUITE_SORTED,
2231 LUCI_MILO_CFG,
2232 exceptions=EXCEPTIONS_PER_TEST_UNSORTED)
Stephen Martinis5bef0fc2020-01-06 22:47:532233 with self.assertRaises(generate_buildbot_json.BBGenErr):
2234 fbb.check_input_file_consistency(verbose=True)
2235 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232236 self.assertRegex(joined_lines, '.*\+ Fake Tester.*')
2237 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532238 fbb.printed_lines = []
2239 self.assertFalse(fbb.printed_lines)
2240
2241 def test_test_suite_exceptions_per_test_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152242 fbb = FakeBBGen(self.args,
2243 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532244 TEST_SUITE_SORTED,
2245 LUCI_MILO_CFG,
2246 exceptions=EXCEPTIONS_SORTED)
2247 fbb.check_input_file_consistency(verbose=True)
2248 self.assertFalse(fbb.printed_lines)
2249
Garrett Beaty1afaccc2020-06-25 19:58:152250 fbb = FakeBBGen(self.args,
2251 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532252 TEST_SUITE_SORTED,
2253 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:412254 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202255 with self.assertRaises(generate_buildbot_json.BBGenErr):
2256 fbb.check_input_file_consistency(verbose=True)
2257 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232258 self.assertRegex(joined_lines, '.*\+ suite_.*')
2259 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202260 fbb.printed_lines = []
2261 self.assertFalse(fbb.printed_lines)
2262
2263 def test_test_suites_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152264 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202265 LUCI_MILO_CFG)
2266 fbb.check_input_file_consistency(verbose=True)
2267 self.assertFalse(fbb.printed_lines)
2268
2269 for unsorted in (
2270 TEST_SUITE_UNSORTED_1,
2271 TEST_SUITE_UNSORTED_2,
2272 TEST_SUITE_UNSORTED_3,
2273 ):
Garrett Beaty1afaccc2020-06-25 19:58:152274 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202275 LUCI_MILO_CFG)
2276 with self.assertRaises(generate_buildbot_json.BBGenErr):
2277 fbb.check_input_file_consistency(verbose=True)
2278 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232279 self.assertRegex(joined_lines, '.*\+ suite_.*')
2280 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202281 fbb.printed_lines = []
2282 self.assertFalse(fbb.printed_lines)
2283
Stephen Martinis11672542018-10-29 18:17:212284
2285FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2286[
2287 {
2288 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012289 'project': 'chromium',
2290 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212291 'name': 'chromium.test',
2292 'machines': {
2293 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:452294 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252295 'dimensions': {
2296 'os': 'Linux',
2297 },
Ben Pastene338f56b2023-03-31 21:24:452298 },
Stephen Martinis11672542018-10-29 18:17:212299 'test_suites': {
2300 'gtest_tests': 'foo_tests',
2301 },
2302 },
2303 },
2304 },
2305]
2306"""
2307
2308FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2309[
2310 {
Greg Gutermanf60eb052020-03-12 17:40:012311 'project': 'chromium',
2312 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212313 'name': 'chromium.test',
2314 'machines': {
2315 'Fake Tester': {
2316 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452317 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252318 'dimensions': {
2319 'os': 'Linux',
2320 },
Ben Pastene338f56b2023-03-31 21:24:452321 },
Stephen Martinis11672542018-10-29 18:17:212322 'test_suites': {
2323 'gtest_tests': 'foo_tests',
2324 },
2325 },
2326 },
2327 },
2328]
2329"""
2330
Austin Eng148d9f0f2022-02-08 19:18:532331FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2332[
2333 {
2334 'project': 'chromium',
2335 'bucket': 'ci',
2336 'name': 'chromium.test',
2337 'machines': {
2338 'Fake Tester': {
2339 'os_type': 'linux',
2340 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452341 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252342 'dimensions': {
2343 'os': 'Linux',
2344 },
Ben Pastene338f56b2023-03-31 21:24:452345 },
Austin Eng148d9f0f2022-02-08 19:18:532346 'test_suites': {
2347 'gtest_tests': 'foo_tests',
2348 },
2349 },
2350 },
2351 },
2352]
2353"""
2354
Brian Sheedy7658c982020-01-08 02:27:582355FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL = """\
2356[
2357 {
2358 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012359 'project': 'chromium',
2360 'bucket': 'ci',
Brian Sheedy7658c982020-01-08 02:27:582361 'name': 'chromium.test',
2362 'machines': {
2363 'Fake Tester': {
2364 'remove_mixins': ['waterfall_mixin'],
2365 'swarming': {},
2366 'test_suites': {
2367 'gtest_tests': 'foo_tests',
2368 },
2369 },
2370 },
2371 },
2372]
2373"""
2374
Stephen Martinis11672542018-10-29 18:17:212375FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2376[
2377 {
Greg Gutermanf60eb052020-03-12 17:40:012378 'project': 'chromium',
2379 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212380 'name': 'chromium.test',
2381 'machines': {
2382 'Fake Tester': {
2383 'mixins': ['random_mixin'],
2384 'swarming': {},
2385 'test_suites': {
2386 'gtest_tests': 'foo_tests',
2387 },
2388 },
2389 },
2390 },
2391]
2392"""
2393
2394FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2395[
2396 {
Greg Gutermanf60eb052020-03-12 17:40:012397 'project': 'chromium',
2398 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212399 'name': 'chromium.test',
2400 'machines': {
2401 'Fake Tester': {
2402 'mixins': ['dimension_mixin'],
2403 'swarming': {},
2404 'test_suites': {
2405 'gtest_tests': 'foo_tests',
2406 },
2407 },
2408 },
2409 },
2410]
2411"""
2412
2413FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2414[
2415 {
Greg Gutermanf60eb052020-03-12 17:40:012416 'project': 'chromium',
2417 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212418 'name': 'chromium.test',
2419 'machines': {
2420 'Fake Tester': {
2421 'mixins': ['dimension_mixin'],
2422 'os_type': 'win',
2423 'browser_config': 'release',
2424 'test_suites': {
2425 'gpu_telemetry_tests': 'foo_tests',
2426 },
2427 },
2428 },
2429 },
2430]
2431"""
2432
2433# Swarming mixins must be a list, a single string is not allowed.
2434FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2435[
2436 {
Greg Gutermanf60eb052020-03-12 17:40:012437 'project': 'chromium',
2438 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212439 'name': 'chromium.test',
2440 'machines': {
2441 'Fake Tester': {
2442 'mixins': 'dimension_mixin',
2443 'swarming': {},
2444 'test_suites': {
2445 'gtest_tests': 'foo_tests',
2446 },
2447 },
2448 },
2449 },
2450]
2451"""
2452FOO_GTESTS_INVALID_NOTFOUND_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': ['nonexistant'],
2461 'swarming': {},
2462 'test_suites': {
2463 'gtest_tests': 'foo_tests',
2464 },
2465 },
2466 },
2467 },
2468]
2469"""
2470
2471FOO_GTESTS_TEST_MIXIN_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',
Greg Gutermanf60eb052020-03-12 17:40:012477 'mixins': ['waterfall_mixin'],
Stephen Martinis11672542018-10-29 18:17:212478 'machines': {
2479 'Fake Tester': {
2480 'swarming': {},
2481 'test_suites': {
2482 'gtest_tests': 'foo_tests',
2483 },
2484 },
2485 },
2486 },
2487]
2488"""
2489
2490FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2491[
2492 {
2493 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012494 'project': 'chromium',
2495 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212496 'name': 'chromium.test',
2497 'machines': {
2498 'Fake Tester': {
2499 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252500 'dimensions': {
2501 'kvm': '1',
2502 },
Stephen Martinis11672542018-10-29 18:17:212503 },
2504 'test_suites': {
2505 'gtest_tests': 'foo_tests',
2506 },
2507 },
2508 },
2509 },
2510]
2511"""
2512
2513FOO_TEST_SUITE_WITH_MIXIN = """\
2514{
2515 'basic_suites': {
2516 'foo_tests': {
2517 'foo_test': {
2518 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252519 'dimensions': {
2520 'integrity': 'high',
2521 'os': 'Linux',
2522 },
Stephen Martinis11672542018-10-29 18:17:212523 'expiration': 120,
2524 },
2525 'mixins': ['test_mixin'],
2526 },
2527 },
2528 },
2529}
2530"""
2531
Garrett Beaty4c35b142023-06-23 21:01:232532MIXIN_ARGS = """\
2533{
2534 'builder_mixin': {
2535 'args': [],
2536 },
2537}
2538"""
2539
2540MIXIN_ARGS_NOT_LIST = """\
2541{
2542 'builder_mixin': {
2543 'args': 'I am not a list',
2544 },
2545}
2546"""
2547
Garrett Beatyb061e69d2023-06-27 16:15:352548MIXIN_LINUX_ARGS = """\
2549{
2550 'builder_mixin': {
2551 'args': [ '--mixin-argument' ],
2552 'linux_args': [ '--linux-mixin-argument' ],
2553 },
2554}
2555"""
2556
2557MIXIN_APPEND = """\
2558{
2559 'builder_mixin': {
2560 '$mixin_append': {
2561 'args': [ '--mixin-argument' ],
2562 },
2563 },
2564}
2565"""
2566
Stephen Martinis11672542018-10-29 18:17:212567# These mixins are invalid; if passed to check_input_file_consistency, they will
2568# fail. These are used for output file consistency checks.
2569SWARMING_MIXINS = """\
2570{
2571 'builder_mixin': {
2572 'swarming': {
2573 'value': 'builder',
2574 },
2575 },
2576 'dimension_mixin': {
2577 'swarming': {
2578 'dimensions': {
2579 'iama': 'mixin',
2580 },
2581 },
2582 },
2583 'random_mixin': {
2584 'value': 'random',
2585 },
2586 'test_mixin': {
2587 'swarming': {
2588 'value': 'test',
2589 },
2590 },
2591 'waterfall_mixin': {
2592 'swarming': {
2593 'value': 'waterfall',
2594 },
2595 },
2596}
2597"""
2598
Garrett Beaty4c35b142023-06-23 21:01:232599SWARMING_NAMED_CACHES = """\
2600{
2601 'builder_mixin': {
2602 'swarming': {
2603 'named_caches': [
2604 {
2605 'name': 'cache',
2606 'file': 'cache_file',
2607 },
2608 ],
2609 },
2610 },
2611}
2612"""
2613
Stephen Martinis11672542018-10-29 18:17:212614SWARMING_MIXINS_DUPLICATED = """\
2615{
2616 'builder_mixin': {
2617 'value': 'builder',
2618 },
2619 'builder_mixin': {
2620 'value': 'builder',
2621 },
2622}
2623"""
2624
2625SWARMING_MIXINS_UNSORTED = """\
2626{
2627 'b_mixin': {
2628 'b': 'b',
2629 },
2630 'a_mixin': {
2631 'a': 'a',
2632 },
2633 'c_mixin': {
2634 'c': 'c',
2635 },
2636}
2637"""
2638
2639SWARMING_MIXINS_SORTED = """\
2640{
2641 'a_mixin': {
2642 'a': 'a',
2643 },
2644 'b_mixin': {
2645 'b': 'b',
2646 },
2647 'c_mixin': {
2648 'c': 'c',
2649 },
2650}
2651"""
2652
Garrett Beaty1afaccc2020-06-25 19:58:152653
2654class MixinTests(TestCase):
Stephen Martinis11672542018-10-29 18:17:212655 """Tests for the mixins feature."""
2656 def test_mixins_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152657 fbb = FakeBBGen(self.args,
2658 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212659 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412660 LUCI_MILO_CFG,
2661 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:212662 fbb.check_input_file_consistency(verbose=True)
2663 self.assertFalse(fbb.printed_lines)
2664
Garrett Beaty1afaccc2020-06-25 19:58:152665 fbb = FakeBBGen(self.args,
2666 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212667 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412668 LUCI_MILO_CFG,
2669 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:212670 with self.assertRaises(generate_buildbot_json.BBGenErr):
2671 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532672 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232673 self.assertRegex(joined_lines, '.*\+ ._mixin.*')
2674 self.assertRegex(joined_lines, '.*\- ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:212675 fbb.printed_lines = []
2676 self.assertFalse(fbb.printed_lines)
2677
2678 def test_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152679 fbb = FakeBBGen(self.args,
2680 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212681 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412682 LUCI_MILO_CFG,
2683 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212684 fbb.check_output_file_consistency(verbose=True)
2685 self.assertFalse(fbb.printed_lines)
2686
2687 def test_waterfall_exception_overrides(self):
Garrett Beaty1afaccc2020-06-25 19:58:152688 fbb = FakeBBGen(self.args,
2689 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212690 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412691 LUCI_MILO_CFG,
2692 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2693 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212694 fbb.check_output_file_consistency(verbose=True)
2695 self.assertFalse(fbb.printed_lines)
2696
Stephanie Kim572b43c02023-04-13 14:24:132697 def test_autoshard_exceptions(self):
2698 fbb = FakeBBGen(self.args,
2699 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2700 FOO_TEST_SUITE,
2701 LUCI_MILO_CFG,
2702 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2703 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2704 mixins=SWARMING_MIXINS)
2705 fbb.check_output_file_consistency(verbose=True)
2706 self.assertFalse(fbb.printed_lines)
2707
2708 def test_autoshard_exceptions_variant_names(self):
2709 fbb = FakeBBGen(self.args,
2710 MATRIX_GTEST_SUITE_WATERFALL,
2711 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
2712 LUCI_MILO_CFG,
2713 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2714 variants=VARIANTS_FILE)
2715 fbb.check_output_file_consistency(verbose=True)
2716 self.assertFalse(fbb.printed_lines)
2717
Stephen Martinis11672542018-10-29 18:17:212718 def test_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152719 fbb = FakeBBGen(self.args,
2720 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212721 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412722 LUCI_MILO_CFG,
2723 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212724 fbb.check_output_file_consistency(verbose=True)
2725 self.assertFalse(fbb.printed_lines)
2726
2727 def test_builder_non_swarming(self):
Garrett Beaty1afaccc2020-06-25 19:58:152728 fbb = FakeBBGen(self.args,
2729 FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212730 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412731 LUCI_MILO_CFG,
2732 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212733 fbb.check_output_file_consistency(verbose=True)
2734 self.assertFalse(fbb.printed_lines)
2735
2736 def test_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152737 fbb = FakeBBGen(self.args,
2738 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212739 FOO_TEST_SUITE_WITH_MIXIN,
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_dimension(self):
Garrett Beaty1afaccc2020-06-25 19:58:152746 fbb = FakeBBGen(self.args,
2747 FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212748 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412749 LUCI_MILO_CFG,
2750 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212751 fbb.check_output_file_consistency(verbose=True)
2752 self.assertFalse(fbb.printed_lines)
2753
2754 def test_dimension_gpu(self):
Garrett Beaty1afaccc2020-06-25 19:58:152755 fbb = FakeBBGen(self.args,
2756 FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212757 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412758 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192759 mixins=SWARMING_MIXINS,
2760 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Stephen Martinis11672542018-10-29 18:17:212761 fbb.check_output_file_consistency(verbose=True)
2762 self.assertFalse(fbb.printed_lines)
2763
2764 def test_unreferenced(self):
Garrett Beaty1afaccc2020-06-25 19:58:152765 fbb = FakeBBGen(self.args,
2766 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212767 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412768 LUCI_MILO_CFG,
2769 mixins=SWARMING_MIXINS)
Jamie Madillcf4f8c72021-05-20 19:24:232770 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2771 '.*mixins are unreferenced.*'):
Stephen Martinis11672542018-10-29 18:17:212772 fbb.check_input_file_consistency(verbose=True)
2773 self.assertFalse(fbb.printed_lines)
2774
Stephen Martinis11672542018-10-29 18:17:212775 def test_unused(self):
Garrett Beaty1afaccc2020-06-25 19:58:152776 fbb = FakeBBGen(self.args,
2777 FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212778 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412779 LUCI_MILO_CFG,
2780 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212781 with self.assertRaises(generate_buildbot_json.BBGenErr):
2782 fbb.check_output_file_consistency(verbose=True)
2783 self.assertFalse(fbb.printed_lines)
2784
2785 def test_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:152786 fbb = FakeBBGen(self.args,
2787 FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212788 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412789 LUCI_MILO_CFG,
2790 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212791 with self.assertRaises(generate_buildbot_json.BBGenErr):
2792 fbb.check_output_file_consistency(verbose=True)
2793 self.assertFalse(fbb.printed_lines)
2794
2795
2796 def test_no_duplicate_keys(self):
Garrett Beaty1afaccc2020-06-25 19:58:152797 fbb = FakeBBGen(self.args,
2798 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202799 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412800 LUCI_MILO_CFG,
2801 mixins=SWARMING_MIXINS_DUPLICATED)
Jamie Madillcf4f8c72021-05-20 19:24:232802 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202803 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392804 ('The following files have invalid keys: ' +
2805 re.escape(self.args.mixins_pyl_path)),
2806 ):
Stephen Martinis54d64ad2018-09-21 22:16:202807 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532808 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232809 self.assertRegex(joined_lines, '.*\- builder_mixin')
Stephen Martinis5bef0fc2020-01-06 22:47:532810 fbb.printed_lines = []
2811 self.assertFalse(fbb.printed_lines)
2812
2813 def test_no_duplicate_keys_basic_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152814 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE_NOT_SORTED,
Stephen Martinis5bef0fc2020-01-06 22:47:532815 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:232816 with self.assertRaisesRegex(
Stephen Martinis5bef0fc2020-01-06 22:47:532817 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472818 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392819 re.escape(self.args.test_suites_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472820 ):
Stephen Martinis5bef0fc2020-01-06 22:47:532821 fbb.check_input_file_consistency(verbose=True)
2822 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232823 self.assertRegex(joined_lines, '.*\- a_test')
2824 self.assertRegex(joined_lines, '.*\+ a_test')
Stephen Martinis54d64ad2018-09-21 22:16:202825 fbb.printed_lines = []
2826 self.assertFalse(fbb.printed_lines)
2827
2828 def test_type_assert_printing_help(self):
Garrett Beaty1afaccc2020-06-25 19:58:152829 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:202830 LUCI_MILO_CFG)
Garrett Beaty79339e182023-04-10 20:45:472831 with self.assertRaisesRegex(
2832 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392833 f'Invalid \.pyl file \'{re.escape(self.args.test_suites_pyl_path)}\'.*',
2834 ):
Stephen Martinis54d64ad2018-09-21 22:16:202835 fbb.check_input_file_consistency(verbose=True)
Jamie Madillcf4f8c72021-05-20 19:24:232836 self.assertEqual(fbb.printed_lines, [
Garrett Beaty79339e182023-04-10 20:45:472837 f'== {self.args.test_suites_pyl_path} ==',
Jamie Madillcf4f8c72021-05-20 19:24:232838 '<snip>',
2839 '1 {',
2840 "2 'basic_suites': {",
2841 '--------------------------------------------------------------------'
2842 '------------',
2843 '3 3: {',
2844 '-------^------------------------------------------------------------'
2845 '------------',
2846 "4 'suite_c': {},",
2847 '5 },',
2848 '<snip>',
2849 ])
Stephen Martinis54d64ad2018-09-21 22:16:202850
Garrett Beatyb061e69d2023-06-27 16:15:352851 def test_mixin_append(self):
Garrett Beaty1afaccc2020-06-25 19:58:152852 fbb = FakeBBGen(self.args,
2853 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:412854 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412855 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352856 mixins=MIXIN_APPEND)
2857 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2858 r'.*\$mixin_append is no longer supported.*'):
2859 fbb.check_input_file_consistency(verbose=True)
Austin Eng148d9f0f2022-02-08 19:18:532860 self.assertFalse(fbb.printed_lines)
2861
Garrett Beaty4c35b142023-06-23 21:01:232862 def test_swarming_named_caches(self):
2863 fbb = FakeBBGen(self.args,
2864 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2865 FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES,
2866 LUCI_MILO_CFG,
2867 mixins=SWARMING_NAMED_CACHES)
2868 fbb.check_output_file_consistency(verbose=True)
2869 self.assertFalse(fbb.printed_lines)
2870
Garrett Beaty4c35b142023-06-23 21:01:232871 def test_args_field_not_list(self):
2872 fbb = FakeBBGen(self.args,
2873 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2874 FOO_TEST_SUITE_WITH_ARGS,
2875 LUCI_MILO_CFG,
2876 mixins=MIXIN_ARGS_NOT_LIST)
2877 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2878 '"args" must be a list'):
2879 fbb.check_output_file_consistency(verbose=True)
2880 self.assertFalse(fbb.printed_lines)
2881
2882 def test_args_field_merging(self):
2883 fbb = FakeBBGen(self.args,
2884 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2885 FOO_TEST_SUITE_WITH_ARGS,
2886 LUCI_MILO_CFG,
2887 mixins=MIXIN_ARGS)
Garrett Beaty4c35b142023-06-23 21:01:232888 fbb.check_output_file_consistency(verbose=True)
2889 self.assertFalse(fbb.printed_lines)
2890
Garrett Beatyb061e69d2023-06-27 16:15:352891 def test_linux_args_field_merging(self):
Garrett Beaty1afaccc2020-06-25 19:58:152892 fbb = FakeBBGen(self.args,
Garrett Beatyb061e69d2023-06-27 16:15:352893 FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL,
2894 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412895 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352896 mixins=MIXIN_LINUX_ARGS)
2897 fbb.check_output_file_consistency(verbose=True)
Wezc0e835b702018-10-30 00:38:412898 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:202899
Brian Sheedy7658c982020-01-08 02:27:582900 def test_remove_mixin_builder_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152901 fbb = FakeBBGen(self.args,
2902 FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582903 FOO_TEST_SUITE,
2904 LUCI_MILO_CFG,
2905 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582906 fbb.check_output_file_consistency(verbose=True)
2907 self.assertFalse(fbb.printed_lines)
2908
2909 def test_remove_mixin_test_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152910 fbb = FakeBBGen(self.args,
2911 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582912 FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN,
2913 LUCI_MILO_CFG,
2914 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582915 fbb.check_output_file_consistency(verbose=True)
2916 self.assertFalse(fbb.printed_lines)
2917
2918 def test_remove_mixin_test_remove_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152919 fbb = FakeBBGen(self.args,
2920 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582921 FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN,
2922 LUCI_MILO_CFG,
2923 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582924 fbb.check_output_file_consistency(verbose=True)
2925 self.assertFalse(fbb.printed_lines)
2926
Karen Qiane24b7ee2019-02-12 23:37:062927TEST_SUITE_WITH_PARAMS = """\
2928{
2929 'basic_suites': {
2930 'bar_tests': {
2931 'bar_test': {
2932 'args': ['--no-xvfb'],
2933 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252934 'dimensions': {
2935 'device_os': 'NMF26U'
2936 },
Karen Qiane24b7ee2019-02-12 23:37:062937 },
2938 'should_retry_with_patch': False,
2939 'name': 'bar_test'
2940 },
2941 'bar_test_test': {
2942 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252943 'dimensions': {
2944 'kvm': '1'
2945 },
Karen Qiane24b7ee2019-02-12 23:37:062946 'hard_timeout': 1000
2947 },
2948 'should_retry_with_patch': True
2949 }
2950 },
2951 'foo_tests': {
2952 'foo_test_empty': {},
2953 'foo_test': {
2954 'args': [
2955 '--jobs=1',
2956 '--verbose'
2957 ],
2958 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252959 'dimensions': {
2960 'device_os': 'MMB29Q'
2961 },
Karen Qiane24b7ee2019-02-12 23:37:062962 'hard_timeout': 1800
2963 }
2964 },
2965 'foo_test_test': {
2966 'swarming': {
2967 },
2968 'name': 'pls'
2969 },
2970 },
2971 },
2972 'compound_suites': {
2973 'composition_tests': [
2974 'foo_tests',
2975 'bar_tests',
2976 ],
2977 },
2978}
2979"""
2980TEST_QUERY_BOTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:332981 "Fake Android M Tester": {
2982 "gtest_tests": [{
2983 "test": "foo_test",
2984 }]
2985 },
2986 "Fake Android L Tester": {
2987 "gtest_tests": [{
2988 "test":
2989 "foo_test",
2990 "args": [
2991 "--gs-results-bucket=chromium-result-details",
2992 "--recover-devices"
2993 ],
2994 "merge": {
2995 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2996 },
2997 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:252998 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:332999 "device_os": "LMY41U",
3000 "device_os_type": "user",
3001 "device_type": "hammerhead",
3002 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253003 },
Karen Qiane24b7ee2019-02-12 23:37:063004 }
Garrett Beatybb18d532023-06-26 22:16:333005 }]
3006 },
3007 "Fake Android K Tester": {
3008 "additional_compile_targets": ["bar_test"],
3009 "gtest_tests": [{
3010 "test":
3011 "foo_test",
3012 "args": [
3013 "--gs-results-bucket=chromium-result-details",
3014 "--recover-devices"
3015 ],
3016 "merge": {
3017 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3018 },
3019 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253020 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333021 "device_os": "KTU84P",
3022 "device_os_type": "userdebug",
3023 "device_type": "hammerhead",
3024 "os": "Android",
Garrett Beatyade673d2023-08-04 22:00:253025 },
Garrett Beatybb18d532023-06-26 22:16:333026 "output_links": [{
3027 "link": [
3028 "https://luci-logdog.appspot.com/v/?s",
3029 "=android%2Fswarming%2Flogcats%2F",
3030 "${TASK_ID}%2F%2B%2Funified_logcats"
3031 ],
3032 "name":
3033 "shard #${SHARD_INDEX} logcats"
3034 }]
Karen Qiane24b7ee2019-02-12 23:37:063035 }
Garrett Beatybb18d532023-06-26 22:16:333036 }]
3037 },
3038 "Android Builder": {
3039 "additional_compile_targets": ["bar_test"]
3040 }
Karen Qiane24b7ee2019-02-12 23:37:063041}
3042TEST_QUERY_BOTS_TESTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:333043 "Fake Android M Tester": [{
3044 "test": "foo_test",
3045 }],
3046 "Fake Android L Tester": [{
3047 "test":
3048 "foo_test",
3049 "args":
3050 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3051 "merge": {
3052 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3053 },
3054 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253055 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333056 "device_os": "LMY41U",
3057 "device_os_type": "user",
3058 "device_type": "hammerhead",
3059 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253060 },
Garrett Beatybb18d532023-06-26 22:16:333061 }
3062 }],
3063 "Android Builder": [],
3064 "Fake Android K Tester": [{
3065 "test":
3066 "foo_test",
3067 "args":
3068 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3069 "merge": {
3070 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3071 },
3072 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253073 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333074 "device_os": "KTU84P",
3075 "device_os_type": "userdebug",
3076 "device_type": "hammerhead",
3077 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253078 },
Garrett Beatybb18d532023-06-26 22:16:333079 "output_links": [{
3080 "link": [
3081 "https://luci-logdog.appspot.com/v/?s",
3082 "=android%2Fswarming%2Flogcats%2F",
3083 "${TASK_ID}%2F%2B%2Funified_logcats"
3084 ],
3085 "name":
3086 "shard #${SHARD_INDEX} logcats"
3087 }]
3088 }
3089 }]
Karen Qiane24b7ee2019-02-12 23:37:063090}
3091
3092TEST_QUERY_BOT_OUTPUT = {
Garrett Beatyade673d2023-08-04 22:00:253093 "additional_compile_targets": ["bar_test"],
3094 "gtest_tests": [
3095 {
3096 "test":
3097 "foo_test",
3098 "args": [
3099 "--gs-results-bucket=chromium-result-details",
3100 "--recover-devices",
3101 ],
3102 "merge": {
3103 "script": "//testing/merge_scripts/standard_gtest_merge.py",
3104 },
3105 "swarming": {
3106 "dimensions": {
3107 "device_os": "KTU84P",
3108 "device_os_type": "userdebug",
3109 "device_type": "hammerhead",
3110 "os": "Android",
3111 },
3112 "output_links": [
3113 {
3114 "link": [
3115 "https://luci-logdog.appspot.com/v/?s",
3116 "=android%2Fswarming%2Flogcats%2F",
3117 "${TASK_ID}%2F%2B%2Funified_logcats"
3118 ],
3119 "name":
3120 "shard #${SHARD_INDEX} logcats",
3121 },
3122 ],
3123 },
3124 },
3125 ],
Karen Qiane24b7ee2019-02-12 23:37:063126}
Garrett Beatybb18d532023-06-26 22:16:333127TEST_QUERY_BOT_TESTS_OUTPUT = [{
3128 "test":
3129 "foo_test",
3130 "args":
3131 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
Stephen Martinisbc7b7772019-05-01 22:01:433132 "merge": {
Garrett Beatybb18d532023-06-26 22:16:333133 "script": "//testing/merge_scripts/standard_gtest_merge.py"
Stephen Martinisbc7b7772019-05-01 22:01:433134 },
Karen Qiane24b7ee2019-02-12 23:37:063135 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253136 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333137 "device_os": "LMY41U",
3138 "device_os_type": "user",
3139 "device_type": "hammerhead",
3140 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253141 },
Karen Qiane24b7ee2019-02-12 23:37:063142 }
Garrett Beatybb18d532023-06-26 22:16:333143}]
Karen Qiane24b7ee2019-02-12 23:37:063144
3145TEST_QUERY_TESTS_OUTPUT = {
Ben Pastene338f56b2023-03-31 21:24:453146 "bar_test": {
3147 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253148 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453149 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253150 },
Ben Pastene338f56b2023-03-31 21:24:453151 }
3152 },
3153 "foo_test": {
3154 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253155 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453156 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253157 },
Ben Pastene338f56b2023-03-31 21:24:453158 }
3159 }
Karen Qiane24b7ee2019-02-12 23:37:063160}
3161
3162TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ["foo_test"]
3163
3164TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ["bar_test"]
3165
3166TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ["bar_test_test"]
3167
3168TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3169
3170TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3171
Garrett Beatyade673d2023-08-04 22:00:253172TEST_QUERY_TEST_OUTPUT = {'swarming': {'dimensions': {'os': 'Linux'}}}
Karen Qiane24b7ee2019-02-12 23:37:063173
3174TEST_QUERY_TEST_BOTS_OUTPUT = [
Jamie Madillcf4f8c72021-05-20 19:24:233175 "Fake Android K Tester",
3176 "Fake Android L Tester",
3177 "Fake Android M Tester",
Karen Qiane24b7ee2019-02-12 23:37:063178]
3179
3180TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT = ['Fake Tester']
3181
3182TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT = []
3183
Garrett Beaty1afaccc2020-06-25 19:58:153184
3185class QueryTests(TestCase):
Karen Qiane24b7ee2019-02-12 23:37:063186 """Tests for the query feature."""
3187 def test_query_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473188 self.set_args('--query=bots')
Garrett Beaty1afaccc2020-06-25 19:58:153189 fbb = FakeBBGen(self.args,
3190 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063191 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413192 LUCI_MILO_CFG,
3193 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063194 fbb.query(fbb.args)
3195 query_json = json.loads("".join(fbb.printed_lines))
3196 self.assertEqual(query_json, TEST_QUERY_BOTS_OUTPUT)
3197
3198 def test_query_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473199 self.set_args('--query=bots/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153200 fbb = FakeBBGen(self.args,
3201 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063202 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413203 LUCI_MILO_CFG,
3204 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063205 with self.assertRaises(SystemExit) as cm:
3206 fbb.query(fbb.args)
3207 self.assertEqual(cm.exception.code, 1)
3208 self.assertTrue(fbb.printed_lines)
3209
3210 def test_query_bots_json(self):
Garrett Beaty79339e182023-04-10 20:45:473211 self.set_args('--query=bots', '--json=result.json')
Garrett Beaty1afaccc2020-06-25 19:58:153212 fbb = FakeBBGen(self.args,
3213 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063214 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413215 LUCI_MILO_CFG,
3216 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063217 fbb.query(fbb.args)
3218 self.assertFalse(fbb.printed_lines)
3219
3220 def test_query_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473221 self.set_args('--query=bots/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153222 fbb = FakeBBGen(self.args,
3223 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063224 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413225 LUCI_MILO_CFG,
3226 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063227 fbb.query(fbb.args)
3228 query_json = json.loads("".join(fbb.printed_lines))
3229 self.assertEqual(query_json, TEST_QUERY_BOTS_TESTS_OUTPUT)
3230
3231 def test_query_invalid_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473232 self.set_args('--query=bots/tdfjdk')
Garrett Beaty1afaccc2020-06-25 19:58:153233 fbb = FakeBBGen(self.args,
3234 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063235 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413236 LUCI_MILO_CFG,
3237 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063238 with self.assertRaises(SystemExit) as cm:
3239 fbb.query(fbb.args)
3240 self.assertEqual(cm.exception.code, 1)
3241 self.assertTrue(fbb.printed_lines)
3242
3243 def test_query_bot(self):
Garrett Beaty79339e182023-04-10 20:45:473244 self.set_args('--query=bot/Fake Android K Tester')
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))
Garrett Beaty1afaccc2020-06-25 19:58:153252 self.maxDiff = None # pragma pylint: disable=attribute-defined-outside-init
Karen Qiane24b7ee2019-02-12 23:37:063253 self.assertEqual(query_json, TEST_QUERY_BOT_OUTPUT)
3254
3255 def test_query_bot_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473256 self.set_args('--query=bot/bot1')
Garrett Beaty1afaccc2020-06-25 19:58:153257 fbb = FakeBBGen(self.args,
3258 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063259 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413260 LUCI_MILO_CFG,
3261 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063262 with self.assertRaises(SystemExit) as cm:
3263 fbb.query(fbb.args)
3264 self.assertEqual(cm.exception.code, 1)
3265 self.assertTrue(fbb.printed_lines)
3266
3267 def test_query_bot_invalid_query_too_many(self):
Garrett Beaty79339e182023-04-10 20:45:473268 self.set_args('--query=bot/Fake Android K Tester/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153269 fbb = FakeBBGen(self.args,
3270 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063271 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413272 LUCI_MILO_CFG,
3273 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063274 with self.assertRaises(SystemExit) as cm:
3275 fbb.query(fbb.args)
3276 self.assertEqual(cm.exception.code, 1)
3277 self.assertTrue(fbb.printed_lines)
3278
3279 def test_query_bot_invalid_query_no_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473280 self.set_args('--query=bot/Fake Android K Tester/blahs')
Garrett Beaty1afaccc2020-06-25 19:58:153281 fbb = FakeBBGen(self.args,
3282 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063283 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413284 LUCI_MILO_CFG,
3285 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063286 with self.assertRaises(SystemExit) as cm:
3287 fbb.query(fbb.args)
3288 self.assertEqual(cm.exception.code, 1)
3289 self.assertTrue(fbb.printed_lines)
3290
3291 def test_query_bot_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473292 self.set_args('--query=bot/Fake Android L Tester/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153293 fbb = FakeBBGen(self.args,
3294 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063295 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413296 LUCI_MILO_CFG,
3297 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063298 fbb.query(fbb.args)
3299 query_json = json.loads("".join(fbb.printed_lines))
3300 self.assertEqual(query_json, TEST_QUERY_BOT_TESTS_OUTPUT)
3301
3302 def test_query_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473303 self.set_args('--query=tests')
Garrett Beaty1afaccc2020-06-25 19:58:153304 fbb = FakeBBGen(self.args,
3305 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063306 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413307 LUCI_MILO_CFG,
3308 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063309 fbb.query(fbb.args)
3310 query_json = json.loads("".join(fbb.printed_lines))
3311 self.assertEqual(query_json, TEST_QUERY_TESTS_OUTPUT)
3312
3313 def test_query_tests_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473314 self.set_args('--query=tests/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153315 fbb = FakeBBGen(self.args,
3316 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063317 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413318 LUCI_MILO_CFG,
3319 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063320 with self.assertRaises(SystemExit) as cm:
3321 fbb.query(fbb.args)
3322 self.assertEqual(cm.exception.code, 1)
3323 self.assertTrue(fbb.printed_lines)
3324
3325 def test_query_tests_multiple_params(self):
Garrett Beaty79339e182023-04-10 20:45:473326 self.set_args('--query=tests/--jobs=1&--verbose')
Garrett Beaty1afaccc2020-06-25 19:58:153327 fbb = FakeBBGen(self.args,
3328 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063329 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413330 LUCI_MILO_CFG,
3331 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063332 fbb.query(fbb.args)
3333 query_json = json.loads("".join(fbb.printed_lines))
3334 self.assertEqual(query_json, TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT)
3335
3336 def test_query_tests_invalid_params(self):
Garrett Beaty79339e182023-04-10 20:45:473337 self.set_args('--query=tests/device_os?')
Garrett Beaty1afaccc2020-06-25 19:58:153338 fbb = FakeBBGen(self.args,
3339 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063340 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413341 LUCI_MILO_CFG,
3342 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063343 with self.assertRaises(SystemExit) as cm:
3344 fbb.query(fbb.args)
3345 self.assertEqual(cm.exception.code, 1)
3346 self.assertTrue(fbb.printed_lines)
3347
3348 def test_query_tests_dimension_params(self):
Garrett Beaty79339e182023-04-10 20:45:473349 self.set_args('--query=tests/device_os:NMF26U')
Garrett Beaty1afaccc2020-06-25 19:58:153350 fbb = FakeBBGen(self.args,
3351 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063352 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413353 LUCI_MILO_CFG,
3354 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063355 fbb.query(fbb.args)
3356 query_json = json.loads("".join(fbb.printed_lines))
3357 self.assertEqual(query_json, TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT)
3358
3359 def test_query_tests_swarming_params(self):
Garrett Beaty79339e182023-04-10 20:45:473360 self.set_args('--query=tests/hard_timeout:1000')
Garrett Beaty1afaccc2020-06-25 19:58:153361 fbb = FakeBBGen(self.args,
3362 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063363 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413364 LUCI_MILO_CFG,
3365 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063366 fbb.query(fbb.args)
3367 query_json = json.loads("".join(fbb.printed_lines))
3368 self.assertEqual(query_json, TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT)
3369
3370 def test_query_tests_params(self):
Garrett Beaty79339e182023-04-10 20:45:473371 self.set_args('--query=tests/should_retry_with_patch:true')
Garrett Beaty1afaccc2020-06-25 19:58:153372 fbb = FakeBBGen(self.args,
3373 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063374 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413375 LUCI_MILO_CFG,
3376 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063377 fbb.query(fbb.args)
3378 query_json = json.loads("".join(fbb.printed_lines))
3379 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_OUTPUT)
3380
3381 def test_query_tests_params_false(self):
Garrett Beaty79339e182023-04-10 20:45:473382 self.set_args('--query=tests/should_retry_with_patch:false')
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_PARAMS_FALSE_OUTPUT)
3391
3392 def test_query_test(self):
Garrett Beaty79339e182023-04-10 20:45:473393 self.set_args('--query=test/foo_test')
Garrett Beaty1afaccc2020-06-25 19:58:153394 fbb = FakeBBGen(self.args,
3395 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063396 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413397 LUCI_MILO_CFG,
3398 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063399 fbb.query(fbb.args)
3400 query_json = json.loads("".join(fbb.printed_lines))
3401 self.assertEqual(query_json, TEST_QUERY_TEST_OUTPUT)
3402
3403 def test_query_test_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473404 self.set_args('--query=test/foo_foo')
Garrett Beaty1afaccc2020-06-25 19:58:153405 fbb = FakeBBGen(self.args,
3406 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063407 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413408 LUCI_MILO_CFG,
3409 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063410 with self.assertRaises(SystemExit) as cm:
3411 fbb.query(fbb.args)
3412 self.assertEqual(cm.exception.code, 1)
3413 self.assertTrue(fbb.printed_lines)
3414
3415 def test_query_test_invalid_length(self):
Garrett Beaty79339e182023-04-10 20:45:473416 self.set_args('--query=test/foo_tests/foo/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153417 fbb = FakeBBGen(self.args,
3418 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063419 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413420 LUCI_MILO_CFG,
3421 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063422 with self.assertRaises(SystemExit) as cm:
3423 fbb.query(fbb.args)
3424 self.assertEqual(cm.exception.code, 1)
3425 self.assertTrue(fbb.printed_lines)
3426
3427 def test_query_test_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473428 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153429 fbb = FakeBBGen(self.args,
3430 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063431 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413432 LUCI_MILO_CFG,
3433 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063434 fbb.query(fbb.args)
3435 query_json = json.loads("".join(fbb.printed_lines))
3436 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_OUTPUT)
3437
3438 def test_query_test_bots_isolated_scripts(self):
Garrett Beaty79339e182023-04-10 20:45:473439 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153440 fbb = FakeBBGen(self.args,
3441 FOO_ISOLATED_SCRIPTS_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063442 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413443 LUCI_MILO_CFG,
3444 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063445 fbb.query(fbb.args)
3446 query_json = json.loads("".join(fbb.printed_lines))
3447 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT)
3448
3449 def test_query_test_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473450 self.set_args('--query=test/foo_tests/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153451 fbb = FakeBBGen(self.args,
3452 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063453 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413454 LUCI_MILO_CFG,
3455 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063456 with self.assertRaises(SystemExit) as cm:
3457 fbb.query(fbb.args)
3458 self.assertEqual(cm.exception.code, 1)
3459 self.assertTrue(fbb.printed_lines)
3460
3461 def test_query_test_bots_no_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473462 self.set_args('--query=test/bar_tests/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153463 fbb = FakeBBGen(self.args,
3464 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063465 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413466 LUCI_MILO_CFG,
3467 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063468 fbb.query(fbb.args)
3469 query_json = json.loads("".join(fbb.printed_lines))
3470 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT)
3471
3472 def test_query_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473473 self.set_args('--query=foo')
Garrett Beaty1afaccc2020-06-25 19:58:153474 fbb = FakeBBGen(self.args,
3475 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063476 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413477 LUCI_MILO_CFG,
3478 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063479 with self.assertRaises(SystemExit) as cm:
3480 fbb.query(fbb.args)
3481 self.assertEqual(cm.exception.code, 1)
3482 self.assertTrue(fbb.printed_lines)
3483
Brian Sheedye6ea0ee2019-07-11 02:54:373484
3485FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES = """\
3486{
3487 'basic_suites': {
3488 'foo_tests': {
3489 'foo_test': {
3490 'args': [
3491 '--enable-features',
3492 'Foo,Bar',
3493 ],
3494 },
3495 },
3496 },
3497}
3498"""
3499
3500
3501FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE = """\
3502{
3503 'foo_test': {
3504 'replacements': {
3505 'Fake Tester': {
3506 'args': {
3507 '--c_arg': None,
3508 },
3509 },
3510 },
3511 },
3512}
3513"""
3514
3515
3516FOO_TEST_REPLACEMENTS_REMOVE_VALUE = """\
3517{
3518 'foo_test': {
3519 'replacements': {
3520 'Fake Tester': {
3521 'args': {
3522 '--enable-features': None,
3523 },
3524 },
3525 },
3526 },
3527}
3528"""
3529
3530
3531FOO_TEST_REPLACEMENTS_REPLACE_VALUE = """\
3532{
3533 'foo_test': {
3534 'replacements': {
3535 'Fake Tester': {
3536 'args': {
3537 '--enable-features': 'Bar,Baz',
3538 },
3539 },
3540 },
3541 },
3542}
3543"""
3544
3545
3546FOO_TEST_REPLACEMENTS_INVALID_KEY = """\
3547{
3548 'foo_test': {
3549 'replacements': {
3550 'Fake Tester': {
3551 'invalid': {
3552 '--enable-features': 'Bar,Baz',
3553 },
3554 },
3555 },
3556 },
3557}
3558"""
3559
3560
Garrett Beaty1afaccc2020-06-25 19:58:153561class ReplacementTests(TestCase):
Brian Sheedye6ea0ee2019-07-11 02:54:373562 """Tests for the arg replacement feature."""
3563 def test_replacement_valid_remove_no_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153564 fbb = FakeBBGen(self.args,
3565 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373566 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413567 LUCI_MILO_CFG,
3568 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373569 fbb.check_output_file_consistency(verbose=True)
3570 self.assertFalse(fbb.printed_lines)
3571
3572 def test_replacement_valid_remove_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153573 fbb = FakeBBGen(self.args,
3574 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373575 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413576 LUCI_MILO_CFG,
3577 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373578 fbb.check_output_file_consistency(verbose=True)
3579 self.assertFalse(fbb.printed_lines)
3580
3581 def test_replacement_valid_replace_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153582 fbb = FakeBBGen(self.args,
3583 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373584 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413585 LUCI_MILO_CFG,
3586 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373587 fbb.check_output_file_consistency(verbose=True)
3588 self.assertFalse(fbb.printed_lines)
3589
3590 def test_replacement_valid_replace_value_separate_entries(self):
Garrett Beaty1afaccc2020-06-25 19:58:153591 fbb = FakeBBGen(self.args,
3592 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373593 FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES,
Nodir Turakulovfce34292019-12-18 17:05:413594 LUCI_MILO_CFG,
3595 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373596 fbb.check_output_file_consistency(verbose=True)
3597 self.assertFalse(fbb.printed_lines)
3598
3599 def test_replacement_invalid_key_not_valid(self):
Garrett Beaty1afaccc2020-06-25 19:58:153600 fbb = FakeBBGen(self.args,
3601 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373602 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413603 LUCI_MILO_CFG,
3604 exceptions=FOO_TEST_REPLACEMENTS_INVALID_KEY)
Jamie Madillcf4f8c72021-05-20 19:24:233605 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3606 'Given replacement key *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373607 fbb.check_output_file_consistency(verbose=True)
3608
3609 def test_replacement_invalid_key_not_found(self):
Garrett Beaty1afaccc2020-06-25 19:58:153610 fbb = FakeBBGen(self.args,
3611 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373612 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413613 LUCI_MILO_CFG,
3614 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Jamie Madillcf4f8c72021-05-20 19:24:233615 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3616 'Could not find *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373617 fbb.check_output_file_consistency(verbose=True)
3618
Jeff Yoon8154e582019-12-03 23:30:013619
Brian Sheedya31578e2020-05-18 20:24:363620FOO_TEST_SUITE_WITH_MAGIC_ARGS = """\
3621{
3622 'basic_suites': {
3623 'foo_tests': {
3624 'foo_test': {
3625 'args': [
3626 '$$MAGIC_SUBSTITUTION_TestOnlySubstitution',
3627 ],
3628 },
3629 },
3630 },
3631}
3632"""
3633
3634
3635FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS = """\
3636{
3637 'basic_suites': {
3638 'foo_tests': {
3639 'foo_test': {
3640 'args': [
3641 '$$MAGIC_SUBSTITUTION_NotARealSubstitution',
3642 ],
3643 },
3644 },
3645 },
3646}
3647"""
3648
3649
Garrett Beaty1afaccc2020-06-25 19:58:153650class MagicSubstitutionTests(TestCase):
Brian Sheedya31578e2020-05-18 20:24:363651 """Tests for the magic substitution feature."""
3652 def test_valid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153653 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3654 FOO_TEST_SUITE_WITH_MAGIC_ARGS, LUCI_MILO_CFG)
Brian Sheedya31578e2020-05-18 20:24:363655 fbb.check_output_file_consistency(verbose=True)
3656 self.assertFalse(fbb.printed_lines)
3657
3658 def test_invalid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153659 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3660 FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:233661 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3662 'Magic substitution function *'):
Brian Sheedya31578e2020-05-18 20:24:363663 fbb.check_output_file_consistency(verbose=True)
3664
3665
Jeff Yoon8154e582019-12-03 23:30:013666# Matrix compound composition test suites
3667
3668MATRIX_COMPOUND_EMPTY = """\
3669{
3670 'basic_suites': {
3671 'bar_tests': {
3672 'bar_test': {},
3673 },
3674 'foo_tests': {
3675 'foo_test': {},
3676 },
3677 },
3678 'matrix_compound_suites': {
3679 'matrix_tests': {
3680 'foo_tests': {},
3681 'bar_tests': {},
3682 },
3683 },
3684}
3685"""
3686
Sven Zhengb51bd0482022-08-26 18:26:253687MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION = """\
3688{
3689 'basic_suites': {
3690 'bar_tests': {
3691 'bar_test': {
3692 'description': 'This is a bar test',
3693 },
3694 },
3695 'foo_tests': {
3696 'foo_test': {},
3697 },
3698 },
3699 'matrix_compound_suites': {
3700 'matrix_tests': {
3701 'foo_tests': {},
3702 'bar_tests': {},
3703 },
3704 },
3705}
3706"""
3707
Jeff Yoon67c3e832020-02-08 07:39:383708MATRIX_COMPOUND_MISSING_IDENTIFIER = """\
Jeff Yoon8154e582019-12-03 23:30:013709{
3710 'basic_suites': {
3711 'foo_tests': {
3712 'foo_test': {},
3713 },
3714 },
3715 'matrix_compound_suites': {
3716 'matrix_tests': {
3717 'foo_tests': {
Jeff Yoon67c3e832020-02-08 07:39:383718 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403719 'missing-identifier',
Jeff Yoon67c3e832020-02-08 07:39:383720 ],
Jeff Yoon8154e582019-12-03 23:30:013721 },
3722 },
3723 },
3724}
3725"""
3726
Garrett Beaty2022db42023-08-29 17:22:403727VARIANTS_FILE_MISSING_IDENTIFIER = """\
3728{
3729 'missing-identifier': {}
3730}
3731"""
3732
Sven Zhengef0d0872022-04-04 22:13:293733MATRIX_COMPOUND_EMPTY_IDENTIFIER = """\
3734{
3735 'basic_suites': {
3736 'foo_tests': {
3737 'foo_test': {},
3738 },
3739 },
3740 'matrix_compound_suites': {
3741 'matrix_tests': {
3742 'foo_tests': {
3743 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403744 'empty-identifier',
Sven Zhengef0d0872022-04-04 22:13:293745 ],
3746 },
3747 },
3748 },
3749}
3750"""
3751
Garrett Beaty2022db42023-08-29 17:22:403752EMPTY_IDENTIFIER_VARIANTS = """\
3753{
3754 'empty-identifier': {
3755 'identifier': '',
3756 'swarming': {
3757 'dimensions': {
3758 'foo': 'empty identifier not allowed',
3759 },
3760 },
3761 },
3762}
3763"""
3764
Sven Zhengef0d0872022-04-04 22:13:293765MATRIX_COMPOUND_TRAILING_IDENTIFIER = """\
3766{
3767 'basic_suites': {
3768 'foo_tests': {
3769 'foo_test': {},
3770 },
3771 },
3772 'matrix_compound_suites': {
3773 'matrix_tests': {
3774 'foo_tests': {
3775 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403776 'trailing-whitespace',
Sven Zhengef0d0872022-04-04 22:13:293777 ],
3778 },
Garrett Beaty2022db42023-08-29 17:22:403779 },
3780 },
3781}
3782"""
3783
3784TRAILING_WHITESPACE_VARIANTS = """\
3785{
3786 'trailing-whitespace': {
3787 'identifier': 'id ',
3788 'swarming': {
3789 'dimensions': {
3790 'foo': 'trailing whitespace not allowed',
Sven Zhengef0d0872022-04-04 22:13:293791 },
3792 },
3793 },
3794}
3795"""
3796
Jeff Yoon8154e582019-12-03 23:30:013797MATRIX_REF_NONEXISTENT = """\
3798{
3799 'basic_suites': {
3800 'foo_tests': {
3801 'foo_test': {},
3802 },
3803 },
3804 'matrix_compound_suites': {
3805 'matrix_tests': {
3806 'bar_test': {},
3807 },
3808 },
3809}
3810"""
3811
Jeff Yoon67c3e832020-02-08 07:39:383812MATRIX_COMPOUND_REF_COMPOSITION = """\
Jeff Yoon8154e582019-12-03 23:30:013813{
3814 'basic_suites': {
3815 'foo_tests': {
3816 'foo_test': {},
3817 },
3818 },
3819 'compound_suites': {
3820 'sample_composition': {
3821 'foo_tests': {},
3822 },
3823 },
3824 'matrix_compound_suites': {
3825 'matrix_tests': {
3826 'sample_composition': {},
3827 },
3828 },
3829}
3830"""
3831
3832MATRIX_COMPOSITION_REF_MATRIX = """\
3833{
3834 'basic_suites': {
3835 'foo_tests': {
3836 'foo_test': {},
3837 },
3838 },
3839 'matrix_compound_suites': {
3840 'a_test': {
3841 'foo_tests': {},
3842 },
3843 'matrix_tests': {
3844 'a_test': {},
3845 },
3846 },
3847}
3848"""
3849
Jeff Yoon67c3e832020-02-08 07:39:383850MATRIX_COMPOUND_VARIANTS_MIXINS_MERGE = """\
3851{
3852 'basic_suites': {
3853 'foo_tests': {
3854 'set': {
3855 'mixins': [ 'test_mixin' ],
3856 },
3857 },
3858 },
3859 'matrix_compound_suites': {
3860 'matrix_tests': {
3861 'foo_tests': {
3862 'variants': [
3863 {
3864 'mixins': [ 'dimension_mixin' ],
3865 },
3866 ],
3867 },
3868 },
3869 },
3870}
3871"""
3872
3873MATRIX_COMPOUND_VARIANTS_MIXINS = """\
3874{
3875 'basic_suites': {
3876 'foo_tests': {
3877 'set': {
3878 'mixins': [ 'test_mixin' ],
3879 },
3880 },
3881 },
3882 'matrix_compound_suites': {
3883 'matrix_tests': {
3884 'foo_tests': {
3885 'variants': [
3886 {
3887 'mixins': [
3888 'dimension_mixin',
3889 'waterfall_mixin',
3890 'builder_mixin',
3891 'random_mixin'
3892 ],
3893 },
3894 ],
3895 },
3896 },
3897 },
3898}
3899"""
3900
3901MATRIX_COMPOUND_VARIANTS_MIXINS_REMOVE = """\
3902{
3903 'basic_suites': {
3904 'foo_tests': {
3905 'set': {
3906 'remove_mixins': ['builder_mixin'],
3907 },
3908 },
3909 },
3910 'matrix_compound_suites': {
3911 'matrix_tests': {
3912 'foo_tests': {
3913 'variants': [
3914 {
3915 'mixins': [ 'builder_mixin' ],
3916 }
3917 ],
3918 },
3919 },
3920 },
3921}
3922"""
3923
3924MATRIX_COMPOUND_CONFLICTING_TEST_SUITES = """\
3925{
3926 'basic_suites': {
3927 'bar_tests': {
3928 'baz_tests': {
3929 'args': [
3930 '--bar',
3931 ],
3932 }
3933 },
3934 'foo_tests': {
3935 'baz_tests': {
3936 'args': [
3937 '--foo',
3938 ],
3939 }
3940 },
3941 },
3942 'matrix_compound_suites': {
3943 'matrix_tests': {
3944 'bar_tests': {
3945 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403946 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:383947 ],
3948 },
3949 'foo_tests': {
3950 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403951 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:383952 ]
3953 }
3954 },
3955 },
3956}
3957"""
3958
3959MATRIX_COMPOUND_TARGETS_ARGS = """\
3960{
3961 'basic_suites': {
3962 'foo_tests': {
3963 'args_test': {
3964 'args': [
3965 '--iam'
3966 ],
3967 },
3968 }
3969 },
3970 'matrix_compound_suites': {
3971 'matrix_tests': {
3972 'foo_tests': {
3973 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403974 'an-arg',
Jeff Yoon67c3e832020-02-08 07:39:383975 ],
3976 },
3977 },
3978 },
3979}
3980"""
3981
Garrett Beaty2022db42023-08-29 17:22:403982ARGS_VARIANTS_FILE = """\
3983{
3984 'an-arg': {
3985 'identifier': 'args',
3986 'args': [
3987 '--anarg',
3988 ],
3989 },
3990}
3991"""
3992
Jeff Yoon67c3e832020-02-08 07:39:383993MATRIX_COMPOUND_TARGETS_MIXINS = """\
3994{
3995 'basic_suites': {
3996 'foo_tests': {
3997 'mixins_test': {
3998 'mixins': [ 'test_mixin' ],
3999 },
4000 }
4001 },
4002 'matrix_compound_suites': {
4003 'matrix_tests': {
4004 'foo_tests': {
Jeff Yoon85fb8df2020-08-20 16:47:434005 'mixins': [ 'random_mixin' ],
Jeff Yoon67c3e832020-02-08 07:39:384006 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404007 'mixins',
Jeff Yoon67c3e832020-02-08 07:39:384008 ],
4009 },
4010 },
4011 },
4012}
4013"""
4014
Garrett Beaty2022db42023-08-29 17:22:404015MIXINS_VARIANTS_FILE = """\
4016{
4017 'mixins': {
4018 'identifier': 'mixins',
4019 'mixins': [ 'dimension_mixin' ],
4020 },
4021}
4022"""
4023
Jeff Yoon67c3e832020-02-08 07:39:384024MATRIX_COMPOUND_TARGETS_SWARMING = """\
4025{
4026 'basic_suites': {
4027 'foo_tests': {
4028 'swarming_test': {
4029 'swarming': {
4030 'foo': 'bar',
Garrett Beatyade673d2023-08-04 22:00:254031 'dimensions': {
4032 'foo': 'bar',
4033 },
Jeff Yoon67c3e832020-02-08 07:39:384034 },
4035 },
4036 }
4037 },
4038 'matrix_compound_suites': {
4039 'matrix_tests': {
4040 'foo_tests': {
4041 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404042 'swarming-variant',
Jeff Yoon67c3e832020-02-08 07:39:384043 ],
4044 },
4045 },
4046 },
4047}
4048"""
Jeff Yoon8154e582019-12-03 23:30:014049
Garrett Beaty2022db42023-08-29 17:22:404050SWARMING_VARIANTS_FILE = """\
4051{
4052 'swarming-variant': {
4053 'identifier': 'swarming',
4054 'swarming': {
4055 'a': 'b',
4056 'dimensions': {
4057 'hello': 'world',
4058 },
4059 },
4060 },
4061}
4062"""
4063
Jeff Yoonda581c32020-03-06 03:56:054064MATRIX_COMPOUND_VARIANTS_REF = """\
4065{
4066 'basic_suites': {
4067 'foo_tests': {
4068 'swarming_test': {},
4069 }
4070 },
4071 'matrix_compound_suites': {
4072 'matrix_tests': {
4073 'foo_tests': {
4074 'variants': [
4075 'a_variant'
4076 ],
4077 },
4078 },
4079 },
4080}
4081"""
4082
Sven Zhengb51bd0482022-08-26 18:26:254083MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION = """\
4084{
4085 'basic_suites': {
4086 'foo_tests': {
4087 'swarming_test': {
4088 'description': 'This is a swarming test.'
4089 },
4090 }
4091 },
4092 'matrix_compound_suites': {
4093 'matrix_tests': {
4094 'foo_tests': {
4095 'variants': [
4096 'a_variant'
4097 ],
4098 },
4099 },
4100 },
4101}
4102"""
4103
Rakib M. Hasanc9e01c62020-07-27 22:48:124104MATRIX_COMPOUND_TEST_WITH_TEST_KEY = """\
4105{
4106 'basic_suites': {
4107 'foo_tests': {
4108 'swarming_test': {
4109 'test': 'foo_test_apk'
4110 },
4111 }
4112 },
4113 'matrix_compound_suites': {
4114 'matrix_tests': {
4115 'foo_tests': {
4116 'variants': [
4117 'a_variant',
4118 ],
4119 },
4120 },
4121 },
4122}
4123"""
4124
Jeff Yoonda581c32020-03-06 03:56:054125MATRIX_COMPOUND_MIXED_VARIANTS_REF = """\
4126{
4127 'basic_suites': {
4128 'foo_tests': {
4129 'swarming_test': {},
4130 }
4131 },
4132 'matrix_compound_suites': {
4133 'matrix_tests': {
4134 'foo_tests': {
4135 'variants': [
4136 'a_variant',
Garrett Beaty2022db42023-08-29 17:22:404137 'b_variant',
Jeff Yoonda581c32020-03-06 03:56:054138 ],
4139 },
4140 },
4141 },
4142}
4143"""
4144
4145VARIANTS_FILE = """\
4146{
4147 'a_variant': {
4148 'args': [
4149 '--platform',
4150 'device',
4151 '--version',
4152 '1'
4153 ],
4154 'identifier': 'a_variant'
4155 }
4156}
4157"""
4158
Sven Zhengb51bd0482022-08-26 18:26:254159VARIANTS_FILE_WITH_DESCRIPTION = """\
4160{
4161 'a_variant': {
4162 'identifier': 'a_variant',
4163 'description': 'Variant description.'
4164 }
4165}
4166"""
4167
Jeff Yoonda581c32020-03-06 03:56:054168MULTI_VARIANTS_FILE = """\
4169{
4170 'a_variant': {
4171 'args': [
4172 '--platform',
4173 'device',
4174 '--version',
4175 '1'
4176 ],
4177 'identifier': 'a_variant'
4178 },
4179 'b_variant': {
4180 'args': [
4181 '--platform',
4182 'sim',
4183 '--version',
4184 '2'
4185 ],
4186 'identifier': 'b_variant'
4187 }
4188}
4189"""
4190
Jeff Yoon8154e582019-12-03 23:30:014191# # Dictionary composition test suite outputs
4192
Xinan Lin05fb9c1752020-12-17 00:15:524193EMPTY_SKYLAB_TEST_EXCEPTIONS = """\
4194{
Sven Zhengef0d0872022-04-04 22:13:294195 'tast.foo OCTOPUS_TOT': {
Xinan Lin05fb9c1752020-12-17 00:15:524196 'remove_from': [
4197 'Fake Tester',
4198 ]
4199 },
Sven Zhengef0d0872022-04-04 22:13:294200 'tast.foo OCTOPUS_TOT-1': {
Xinan Lin05fb9c1752020-12-17 00:15:524201 'remove_from': [
4202 'Fake Tester',
4203 ]
4204 }
4205}
4206"""
4207
4208MATRIX_SKYLAB_WATERFALL = """\
4209[
4210 {
4211 'project': 'chromium',
4212 'bucket': 'ci',
4213 'name': 'chromium.test',
4214 'machines': {
4215 'Fake Tester': {
4216 'test_suites': {
4217 'skylab_tests': 'cros_skylab_basic_x86',
4218 },
4219 },
4220 },
4221 },
4222]
4223"""
4224
4225MATRIX_COMPOUND_SKYLAB_REF = """\
4226{
4227 'basic_suites': {
4228 'cros_skylab_basic': {
4229 'tast.basic': {
4230 'suite': 'tast.basic',
4231 'timeout': 3600,
4232 },
4233 'tast.foo': {
4234 'suite': 'tast.foo',
4235 'timeout': 3600,
4236 },
4237 },
4238 },
4239 'compound_suites': {},
4240 'matrix_compound_suites': {
4241 'cros_skylab_basic_x86': {
4242 'cros_skylab_basic': {
4243 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404244 'octopus-89',
4245 'octopus-88',
4246 ],
Jieting Yangef6b1042021-11-30 21:33:484247 },
4248 },
4249 },
4250}
4251"""
4252
Garrett Beaty2022db42023-08-29 17:22:404253SKYLAB_VARIANTS = """\
4254{
4255 'octopus-89': {
4256 'skylab': {
4257 'cros_board': 'octopus',
4258 'cros_chrome_version': '89.0.3234.0',
4259 'cros_img': 'octopus-release/R89-13655.0.0',
4260 },
4261 'enabled': True,
4262 'identifier': 'OCTOPUS_TOT',
4263 },
4264 'octopus-88': {
4265 'skylab': {
4266 'cros_board': 'octopus',
4267 'cros_chrome_version': '88.0.2324.0',
4268 'cros_img': 'octopus-release/R88-13597.23.0',
4269 },
4270 'enabled': True,
4271 'identifier': 'OCTOPUS_TOT-1',
4272 },
4273}
4274"""
4275
Jieting Yangef6b1042021-11-30 21:33:484276ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF = """\
4277{
4278 'basic_suites': {
4279 'cros_skylab_basic': {
4280 'tast.basic': {
4281 'suite': 'tast.basic',
4282 'timeout': 3600,
4283 },
4284 'tast.foo': {
4285 'suite': 'tast.foo',
4286 'timeout': 3600,
4287 },
4288 },
4289 },
4290 'compound_suites': {},
4291 'matrix_compound_suites': {
4292 'cros_skylab_basic_x86': {
4293 'cros_skylab_basic': {
4294 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404295 'enabled',
4296 'disabled',
4297 ],
Xinan Lin05fb9c1752020-12-17 00:15:524298 },
4299 },
4300 },
4301}
4302"""
4303
Garrett Beaty2022db42023-08-29 17:22:404304ENABLED_AND_DISABLED_VARIANTS = """\
4305{
4306 'enabled': {
4307 'skylab': {
4308 'cros_board': 'octopus',
4309 'cros_chrome_version': '89.0.3234.0',
4310 'cros_img': 'octopus-release/R89-13655.0.0',
4311 },
4312 'enabled': True,
4313 'identifier': 'OCTOPUS_TOT',
4314 },
4315 'disabled': {
4316 'skylab': {
4317 'cros_board': 'octopus',
4318 'cros_chrome_version': '88.0.2324.0',
4319 'cros_img': 'octopus-release/R88-13597.23.0',
4320 },
4321 'enabled': False,
4322 'identifier': 'OCTOPUS_TOT-1',
4323 },
4324}
4325"""
4326
Garrett Beaty1afaccc2020-06-25 19:58:154327
4328class MatrixCompositionTests(TestCase):
Jeff Yoon8154e582019-12-03 23:30:014329
4330 def test_good_structure_no_configs(self):
4331 """
4332 Tests matrix compound test suite structure with no configs,
4333 no conflicts and no bad references
4334 """
Garrett Beaty1afaccc2020-06-25 19:58:154335 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4336 MATRIX_COMPOUND_EMPTY, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014337 fbb.check_output_file_consistency(verbose=True)
4338 self.assertFalse(fbb.printed_lines)
4339
Sven Zhengb51bd0482022-08-26 18:26:254340 def test_good_structure_with_description(self):
4341 """
4342 Tests matrix compound test suite structure with description.
4343 """
4344 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4345 MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION, LUCI_MILO_CFG)
Sven Zhengb51bd0482022-08-26 18:26:254346 fbb.check_output_file_consistency(verbose=True)
4347 self.assertFalse(fbb.printed_lines)
4348
Jeff Yoon67c3e832020-02-08 07:39:384349 def test_missing_identifier(self):
Jeff Yoon8154e582019-12-03 23:30:014350 """
Jeff Yoon67c3e832020-02-08 07:39:384351 Variant is missing an identifier
Jeff Yoon8154e582019-12-03 23:30:014352 """
Garrett Beaty2022db42023-08-29 17:22:404353 fbb = FakeBBGen(self.args,
4354 MATRIX_GTEST_SUITE_WATERFALL,
4355 MATRIX_COMPOUND_MISSING_IDENTIFIER,
4356 LUCI_MILO_CFG,
4357 variants=VARIANTS_FILE_MISSING_IDENTIFIER)
Jamie Madillcf4f8c72021-05-20 19:24:234358 with self.assertRaisesRegex(
4359 generate_buildbot_json.BBGenErr,
Jeff Yoon67c3e832020-02-08 07:39:384360 'Missing required identifier field in matrix compound suite*'):
4361 fbb.check_output_file_consistency(verbose=True)
Jeff Yoon8154e582019-12-03 23:30:014362
Sven Zhengef0d0872022-04-04 22:13:294363 def test_empty_identifier(self):
4364 """
4365 Variant identifier is empty.
4366 """
Garrett Beaty2022db42023-08-29 17:22:404367 fbb = FakeBBGen(self.args,
4368 MATRIX_GTEST_SUITE_WATERFALL,
4369 MATRIX_COMPOUND_EMPTY_IDENTIFIER,
4370 LUCI_MILO_CFG,
4371 variants=EMPTY_IDENTIFIER_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294372 with self.assertRaisesRegex(
4373 generate_buildbot_json.BBGenErr,
4374 'Identifier field can not be "" in matrix compound suite*'):
4375 fbb.check_output_file_consistency(verbose=True)
4376
4377 def test_trailing_identifier(self):
4378 """
4379 Variant identifier has trailing whitespace.
4380 """
Garrett Beaty2022db42023-08-29 17:22:404381 fbb = FakeBBGen(self.args,
4382 MATRIX_GTEST_SUITE_WATERFALL,
4383 MATRIX_COMPOUND_TRAILING_IDENTIFIER,
4384 LUCI_MILO_CFG,
4385 variants=TRAILING_WHITESPACE_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294386 with self.assertRaisesRegex(
4387 generate_buildbot_json.BBGenErr,
4388 'Identifier field can not have leading and trailing whitespace in'
4389 ' matrix compound suite*'):
4390 fbb.check_output_file_consistency(verbose=True)
4391
Jeff Yoon8154e582019-12-03 23:30:014392 def test_noexistent_ref(self):
4393 """
4394 Test referencing a non-existent basic test suite
4395 """
Garrett Beaty1afaccc2020-06-25 19:58:154396 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4397 MATRIX_REF_NONEXISTENT, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234398 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4399 'Unable to find reference to *'):
Jeff Yoon8154e582019-12-03 23:30:014400 fbb.check_output_file_consistency(verbose=True)
4401
4402 def test_ref_to_composition(self):
4403 """
4404 Test referencing another composition test suite
4405 """
Garrett Beaty1afaccc2020-06-25 19:58:154406 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4407 MATRIX_COMPOUND_REF_COMPOSITION, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234408 with self.assertRaisesRegex(
4409 generate_buildbot_json.BBGenErr,
4410 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014411 fbb.check_output_file_consistency(verbose=True)
4412
4413 def test_ref_to_matrix(self):
4414 """
4415 Test referencing another matrix test suite
4416 """
Garrett Beaty1afaccc2020-06-25 19:58:154417 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4418 MATRIX_COMPOSITION_REF_MATRIX, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234419 with self.assertRaisesRegex(
4420 generate_buildbot_json.BBGenErr,
4421 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014422 fbb.check_output_file_consistency(verbose=True)
4423
Jeff Yoon67c3e832020-02-08 07:39:384424 def test_conflicting_names(self):
Garrett Beaty2022db42023-08-29 17:22:404425 fbb = FakeBBGen(self.args,
4426 MATRIX_GTEST_SUITE_WATERFALL,
4427 MATRIX_COMPOUND_CONFLICTING_TEST_SUITES,
4428 LUCI_MILO_CFG,
4429 variants=VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234430 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4431 'Conflicting test definitions.*'):
Jeff Yoon67c3e832020-02-08 07:39:384432 fbb.check_input_file_consistency(verbose=True)
4433 self.assertFalse(fbb.printed_lines)
4434
4435 def test_variants_swarming_dict_merge_args(self):
4436 """
4437 Test targets with swarming dictionary defined by both basic and matrix
4438 """
Garrett Beaty1afaccc2020-06-25 19:58:154439 fbb = FakeBBGen(self.args,
4440 MATRIX_GTEST_SUITE_WATERFALL,
4441 MATRIX_COMPOUND_TARGETS_ARGS,
4442 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404443 mixins=SWARMING_MIXINS,
4444 variants=ARGS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384445 fbb.check_output_file_consistency(verbose=True)
4446 self.assertFalse(fbb.printed_lines)
4447
4448 def test_variants_swarming_dict_merge_mixins(self):
4449 """
4450 Test targets with swarming dictionary defined by both basic and matrix
4451 """
Garrett Beaty1afaccc2020-06-25 19:58:154452 fbb = FakeBBGen(self.args,
4453 MATRIX_GTEST_SUITE_WATERFALL,
4454 MATRIX_COMPOUND_TARGETS_MIXINS,
4455 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404456 mixins=SWARMING_MIXINS,
4457 variants=MIXINS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384458 fbb.check_output_file_consistency(verbose=True)
4459 self.assertFalse(fbb.printed_lines)
4460
4461 def test_variants_swarming_dict_swarming(self):
4462 """
4463 Test targets with swarming dictionary defined by both basic and matrix
4464 """
Garrett Beaty1afaccc2020-06-25 19:58:154465 fbb = FakeBBGen(self.args,
4466 MATRIX_GTEST_SUITE_WATERFALL,
4467 MATRIX_COMPOUND_TARGETS_SWARMING,
4468 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404469 variants=SWARMING_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384470 fbb.check_output_file_consistency(verbose=True)
4471 self.assertFalse(fbb.printed_lines)
4472
Rakib M. Hasanc9e01c62020-07-27 22:48:124473 def test_variant_test_suite_with_test_key(self):
4474 """
4475 Test targets in matrix compound test suites with variants
4476 """
4477 fbb = FakeBBGen(self.args,
4478 MATRIX_GTEST_SUITE_WATERFALL,
4479 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
4480 LUCI_MILO_CFG,
4481 variants=VARIANTS_FILE)
Rakib M. Hasanc9e01c62020-07-27 22:48:124482 fbb.check_output_file_consistency(verbose=True)
4483 self.assertFalse(fbb.printed_lines)
4484
Sven Zhengb51bd0482022-08-26 18:26:254485 def test_variants_with_description(self):
4486 """Test variants with description field"""
4487 fbb = FakeBBGen(self.args,
4488 MATRIX_GTEST_SUITE_WATERFALL,
4489 MATRIX_COMPOUND_VARIANTS_REF,
4490 LUCI_MILO_CFG,
4491 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254492 fbb.check_output_file_consistency(verbose=True)
4493 self.assertFalse(fbb.printed_lines)
4494
4495 def test_both_test_suite_and_variants_with_description(self):
4496 """Test both test suite and variants with description field"""
4497 fbb = FakeBBGen(self.args,
4498 MATRIX_GTEST_SUITE_WATERFALL,
4499 MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION,
4500 LUCI_MILO_CFG,
4501 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254502 fbb.check_output_file_consistency(verbose=True)
4503 self.assertFalse(fbb.printed_lines)
4504
Jeff Yoonda581c32020-03-06 03:56:054505 def test_variants_pyl_ref(self):
4506 """Test targets with variants string ref"""
Garrett Beaty1afaccc2020-06-25 19:58:154507 fbb = FakeBBGen(self.args,
4508 MATRIX_GTEST_SUITE_WATERFALL,
4509 MATRIX_COMPOUND_VARIANTS_REF,
4510 LUCI_MILO_CFG,
4511 variants=VARIANTS_FILE)
Jeff Yoonda581c32020-03-06 03:56:054512 fbb.check_output_file_consistency(verbose=True)
4513 self.assertFalse(fbb.printed_lines)
4514
4515 def test_variants_pyl_no_ref(self):
4516 """Test targets with variants string ref, not defined in variants.pyl"""
Garrett Beaty1afaccc2020-06-25 19:58:154517 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4518 MATRIX_COMPOUND_VARIANTS_REF, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234519 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4520 'Missing variant definition for *'):
Jeff Yoonda581c32020-03-06 03:56:054521 fbb.check_output_file_consistency(verbose=True)
4522
4523 def test_variants_pyl_all_unreferenced(self):
4524 """Test targets with variants in variants.pyl, unreferenced in tests"""
Garrett Beaty1afaccc2020-06-25 19:58:154525 fbb = FakeBBGen(self.args,
4526 MATRIX_GTEST_SUITE_WATERFALL,
Garrett Beaty2022db42023-08-29 17:22:404527 MATRIX_COMPOUND_VARIANTS_REF,
Garrett Beaty1afaccc2020-06-25 19:58:154528 LUCI_MILO_CFG,
4529 variants=MULTI_VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234530 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4531 'The following variants were unreferenced *'):
Jeff Yoonda581c32020-03-06 03:56:054532 fbb.check_input_file_consistency(verbose=True)
4533
Xinan Lin05fb9c1752020-12-17 00:15:524534 def test_good_skylab_matrix_with_variants(self):
4535 fbb = FakeBBGen(self.args,
4536 MATRIX_SKYLAB_WATERFALL,
4537 MATRIX_COMPOUND_SKYLAB_REF,
4538 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404539 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4540 variants=SKYLAB_VARIANTS)
Xinan Lin05fb9c1752020-12-17 00:15:524541 fbb.check_input_file_consistency(verbose=True)
4542 fbb.check_output_file_consistency(verbose=True)
4543 self.assertFalse(fbb.printed_lines)
4544
Jieting Yangef6b1042021-11-30 21:33:484545 def test_enabled_and_disabled_skylab_matrix_with_variants(self):
4546 """Test with disabled variants"""
4547 fbb = FakeBBGen(self.args,
4548 MATRIX_SKYLAB_WATERFALL,
4549 ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF,
4550 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404551 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4552 variants=ENABLED_AND_DISABLED_VARIANTS)
Jieting Yangef6b1042021-11-30 21:33:484553 # some skylab test variant is disabled; the corresponding skylab tests
4554 # is not generated.
Jieting Yangef6b1042021-11-30 21:33:484555 fbb.check_input_file_consistency(verbose=True)
4556 fbb.check_output_file_consistency(verbose=True)
4557 self.assertFalse(fbb.printed_lines)
4558
Jeff Yoon8154e582019-12-03 23:30:014559
Dirk Pranke772f55f2021-04-28 04:51:164560MAC_TEST_SUITE = """\
4561{
4562 'basic_suites': {
4563 'foo_tests': {
4564 'foo_test': {
4565 },
4566 },
4567 },
4568}
4569"""
4570
Ben Pastene338f56b2023-03-31 21:24:454571NO_DIMENSIONS_GTESTS_WATERFALL = """\
Dirk Pranke772f55f2021-04-28 04:51:164572[
4573 {
4574 'project': 'chromium',
4575 'bucket': 'ci',
4576 'name': 'chromium.test',
4577 'machines': {
4578 'Mac': {
Garrett Beatybb18d532023-06-26 22:16:334579 'swarming': {},
Dirk Pranke772f55f2021-04-28 04:51:164580 'test_suites': {
4581 'gtest_tests': 'foo_tests',
4582 },
4583 },
4584 },
4585 },
4586]
4587"""
4588
Ben Pastene338f56b2023-03-31 21:24:454589NO_OS_GTESTS_WATERFALL = """\
4590[
4591 {
4592 'project': 'chromium',
4593 'bucket': 'ci',
4594 'name': 'chromium.test',
4595 'machines': {
4596 'Mac': {
4597 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254598 'dimensions': {
4599 'foo': 'bar',
4600 },
Ben Pastene338f56b2023-03-31 21:24:454601 },
4602 'test_suites': {
4603 'gtest_tests': 'foo_tests',
4604 },
4605 },
4606 },
4607 },
4608]
4609"""
4610
Dirk Pranke772f55f2021-04-28 04:51:164611MAC_ISOLATED_SCRIPTS_WATERFALL = """\
4612[
4613 {
4614 'project': 'chromium',
4615 'bucket': 'ci',
4616 'name': 'chromium.test',
4617 'machines': {
4618 'Mac': {
4619 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254620 'dimensions': {
4621 'os': 'Mac',
4622 },
Dirk Pranke772f55f2021-04-28 04:51:164623 },
4624 'test_suites': {
4625 'isolated_scripts': 'foo_tests',
4626 },
4627 },
4628 },
4629 },
4630]
4631"""
4632
Dirk Pranke772f55f2021-04-28 04:51:164633MAC_LUCI_MILO_CFG = """\
4634consoles {
4635 builders {
4636 name: "buildbucket/luci.chromium.ci/Mac"
4637 }
4638}
4639"""
4640
4641
4642class SwarmingTests(TestCase):
Ben Pastene338f56b2023-03-31 21:24:454643 def test_builder_with_no_dimension_fails(self):
4644 fbb = FakeBBGen(self.args, NO_DIMENSIONS_GTESTS_WATERFALL, MAC_TEST_SUITE,
Dirk Pranke772f55f2021-04-28 04:51:164645 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164646 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014647 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4648 'os must be specified for all swarmed tests'):
4649 fbb.check_output_file_consistency(verbose=True)
Ben Pastene338f56b2023-03-31 21:24:454650 self.assertFalse(fbb.printed_lines)
4651
4652 def test_builder_with_no_os_dimension_fails(self):
4653 fbb = FakeBBGen(self.args, NO_OS_GTESTS_WATERFALL, MAC_TEST_SUITE,
4654 MAC_LUCI_MILO_CFG)
4655 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014656 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4657 'os must be specified for all swarmed tests'):
4658 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164659 self.assertFalse(fbb.printed_lines)
4660
4661 def test_mac_builder_with_no_cpu_dimension_in_isolated_script_fails(self):
4662 fbb = FakeBBGen(self.args, MAC_ISOLATED_SCRIPTS_WATERFALL, MAC_TEST_SUITE,
4663 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164664 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014665 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4666 'cpu must be specified for mac'):
4667 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164668 self.assertFalse(fbb.printed_lines)
4669
4670
Kenneth Russelleb60cbd22017-12-05 07:54:284671if __name__ == '__main__':
4672 unittest.main()