blob: 5795eb5f79c5ea48e36b236deb18fa1b7d0d8909 [file] [log] [blame]
Jamie Madillcf4f8c72021-05-20 19:24:231#!/usr/bin/env vpython3
Avi Drissmandfd880852022-09-15 20:11:092# Copyright 2017 The Chromium Authors
Kenneth Russelleb60cbd22017-12-05 07:54:283# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for generate_buildbot_json.py."""
7
Garrett Beaty777c2912020-05-07 00:54:338import contextlib
9import json
Zhiling Huangbe008172018-03-08 19:13:1110import os
Garrett Beaty807011ab2023-04-12 00:52:3911import re
Kenneth Russelleb60cbd22017-12-05 07:54:2812import unittest
Garrett Beaty777c2912020-05-07 00:54:3313
Kenneth Russelleb60cbd22017-12-05 07:54:2814import generate_buildbot_json
Garrett Beaty1afaccc2020-06-25 19:58:1515from pyfakefs import fake_filesystem_unittest
Kenneth Russelleb60cbd22017-12-05 07:54:2816
Joshua Hood56c673c2022-03-02 20:29:3317# pylint: disable=super-with-arguments
18
Nodir Turakulovfce34292019-12-18 17:05:4119EMPTY_PYL_FILE = """\
20{
21}
22"""
23
Garrett Beaty1afaccc2020-06-25 19:58:1524# Use this value to refer to the directory containing this code
25# The tests use a fake filesystem and python filesystem calls are monkey-patched
26# to use the fake filesystem, which affects abspath
27THIS_DIR = os.path.dirname(os.path.abspath(__file__))
28
29
30class TestCase(fake_filesystem_unittest.TestCase):
31 def setUp(self):
32 self.setUpPyfakefs()
33 self.fs.cwd = THIS_DIR
Garrett Beaty79339e182023-04-10 20:45:4734
35 expectations_dir = os.path.join(THIS_DIR, 'unittest_expectations')
36 self.output_dir = os.path.join(expectations_dir, self.id().split('.')[-1])
Garrett Beaty1afaccc2020-06-25 19:58:1537
Ben Pastenef21cda32023-03-30 22:00:5738 # This allows reads into this directory to fallback to the real fs, which we
39 # want so each test case's json can be checked-in.
Garrett Beaty79339e182023-04-10 20:45:4740 self.fs.add_real_directory(expectations_dir)
Ben Pastenef21cda32023-03-30 22:00:5741
Garrett Beaty79339e182023-04-10 20:45:4742 self.set_args()
43
44 def set_args(self, *args):
Garrett Beatyade673d2023-08-04 22:00:2545 self.args = generate_buildbot_json.BBJSONGenerator.parse_args((
46 '--output-dir',
47 self.output_dir,
48 ) + args)
Garrett Beaty1afaccc2020-06-25 19:58:1549
Ben Pastenef21cda32023-03-30 22:00:5750 def regen_test_json(self, fakebb):
51 """Regenerates a unittest's json files.
52
53 Useful when making sweeping changes to pyl inputs in many test cases. Can be
54 used by simply inserting a call to this method in a unit test after
55 initializing its FakeBBGen object.
56 """
57 contents = fakebb.generate_outputs()
58 with fake_filesystem_unittest.Pause(self.fs):
Garrett Beaty4c35b142023-06-23 21:01:2359 try:
60 os.mkdir(self.output_dir)
61 except FileExistsError:
62 if not os.path.isdir(self.output_dir):
63 raise
64
Ben Pastenef21cda32023-03-30 22:00:5765 fakebb.write_json_result(contents)
Garrett Beaty1afaccc2020-06-25 19:58:1566
Kenneth Russelleb60cbd22017-12-05 07:54:2867
Garrett Beaty777c2912020-05-07 00:54:3368@contextlib.contextmanager
69def dump_on_failure(fbb, dump=True):
70 try:
71 yield
72 except:
73 if dump:
74 for l in fbb.printed_lines:
Jamie Madillcf4f8c72021-05-20 19:24:2375 print(l)
Garrett Beaty777c2912020-05-07 00:54:3376 raise
77
Kenneth Russelleb60cbd22017-12-05 07:54:2878class FakeBBGen(generate_buildbot_json.BBJSONGenerator):
Garrett Beaty1afaccc2020-06-25 19:58:1579 def __init__(self,
80 args,
81 waterfalls,
82 test_suites,
83 luci_milo_cfg,
Garrett Beaty4f3e9212020-06-25 20:21:4984 project_pyl='{"validate_source_side_specs_have_builder": True}',
Nodir Turakulovfce34292019-12-18 17:05:4185 exceptions=EMPTY_PYL_FILE,
Stephanie Kim572b43c02023-04-13 14:24:1386 autoshard_exceptions=json.dumps({}),
Nodir Turakulovfce34292019-12-18 17:05:4187 mixins=EMPTY_PYL_FILE,
Jeff Yoonda581c32020-03-06 03:56:0588 gn_isolate_map=EMPTY_PYL_FILE,
89 variants=EMPTY_PYL_FILE):
Garrett Beaty1afaccc2020-06-25 19:58:1590 super(FakeBBGen, self).__init__(args)
91
92 pyl_files_dir = args.pyl_files_dir or THIS_DIR
93 infra_config_dir = args.infra_config_dir
94
95 files = {
Garrett Beaty79339e182023-04-10 20:45:4796 args.waterfalls_pyl_path: waterfalls,
97 args.test_suites_pyl_path: test_suites,
98 args.test_suite_exceptions_pyl_path: exceptions,
Stephanie Kim572b43c02023-04-13 14:24:1399 args.autoshard_exceptions_json_path: autoshard_exceptions,
Garrett Beaty79339e182023-04-10 20:45:47100 args.mixins_pyl_path: mixins,
101 args.gn_isolate_map_pyl_path: gn_isolate_map,
102 args.variants_pyl_path: variants,
103 os.path.join(pyl_files_dir, 'gn_isolate_map2.pyl'):
104 GPU_TELEMETRY_GN_ISOLATE_MAP,
105 os.path.join(infra_config_dir, 'generated/project.pyl'): project_pyl,
106 os.path.join(infra_config_dir, 'generated/luci/luci-milo.cfg'):
107 luci_milo_cfg,
108 os.path.join(infra_config_dir, 'generated/luci/luci-milo-dev.cfg'): '',
Kenneth Russelleb60cbd22017-12-05 07:54:28109 }
Garrett Beaty79339e182023-04-10 20:45:47110 for path, content in files.items():
Garrett Beaty4f3e9212020-06-25 20:21:49111 if content is None:
112 continue
Garrett Beaty1afaccc2020-06-25 19:58:15113 parent = os.path.abspath(os.path.dirname(path))
114 if not os.path.exists(parent):
115 os.makedirs(parent)
116 with open(path, 'w') as f:
117 f.write(content)
118
Stephen Martinis7eb8b612018-09-21 00:17:50119 self.printed_lines = []
120
121 def print_line(self, line):
122 self.printed_lines.append(line)
Kenneth Russelleb60cbd22017-12-05 07:54:28123
Kenneth Russell73c3bd8b2018-10-19 22:30:19124 # pragma pylint: disable=arguments-differ
125 def check_output_file_consistency(self, verbose=False, dump=True):
Garrett Beaty777c2912020-05-07 00:54:33126 with dump_on_failure(self, dump=verbose and dump):
Kenneth Russell73c3bd8b2018-10-19 22:30:19127 super(FakeBBGen, self).check_output_file_consistency(verbose)
Joshua Hood56c673c2022-03-02 20:29:33128 # pragma pylint: enable=arguments-differ
Kenneth Russell73c3bd8b2018-10-19 22:30:19129
Kenneth Russelleb60cbd22017-12-05 07:54:28130
131FOO_GTESTS_WATERFALL = """\
132[
133 {
Greg Gutermanf60eb052020-03-12 17:40:01134 'project': 'chromium',
135 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28136 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43137 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28138 'Fake Tester': {
139 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25140 'dimensions':{
141 'kvm': '1',
142 'os': 'Linux',
143 },
Kenneth Russelleb60cbd22017-12-05 07:54:28144 },
145 'test_suites': {
146 'gtest_tests': 'foo_tests',
147 },
148 },
149 },
150 },
151]
152"""
153
Kenneth Russell650995a2018-05-03 21:17:01154FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
155[
156 {
Greg Gutermanf60eb052020-03-12 17:40:01157 'project': 'chromium',
158 'bucket': 'ci',
Kenneth Russell650995a2018-05-03 21:17:01159 'name': 'chromium.test',
160 'machines': {
161 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:45162 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25163 'dimensions': {
164 'os': 'Linux',
165 },
Ben Pastene338f56b2023-03-31 21:24:45166 },
Kenneth Russell650995a2018-05-03 21:17:01167 'test_suites': {
168 'gtest_tests': 'foo_tests',
169 },
170 'args': [
171 '--enable-features=Baz',
172 ],
173 },
174 },
175 },
176]
177"""
178
Ben Pastenea9e583b2019-01-16 02:57:26179FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL = """\
180[
181 {
Greg Gutermanf60eb052020-03-12 17:40:01182 'project': 'chromium',
183 'bucket': 'ci',
Ben Pastenea9e583b2019-01-16 02:57:26184 'name': 'chromium.test',
185 'machines': {
186 'Fake Tester': {
187 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25188 'dimensions': {
189 "device_type": "foo_device",
190 },
Ben Pastenea9e583b2019-01-16 02:57:26191 },
192 'test_suites': {
193 'gtest_tests': 'foo_tests',
194 },
195 'os_type': 'chromeos',
196 },
197 },
198 },
199]
200"""
Stephen Martinisf83893722018-09-19 00:02:18201
Kenneth Russell8a386d42018-06-02 09:48:01202FOO_LINUX_GTESTS_WATERFALL = """\
203[
204 {
Greg Gutermanf60eb052020-03-12 17:40:01205 'project': 'chromium',
206 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01207 'name': 'chromium.test',
208 'machines': {
209 'Fake Tester': {
210 'os_type': 'linux',
Ben Pastene338f56b2023-03-31 21:24:45211 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25212 'dimensions': {
213 'os': 'Linux',
214 },
Ben Pastene338f56b2023-03-31 21:24:45215 },
Kenneth Russell8a386d42018-06-02 09:48:01216 'test_suites': {
217 'gtest_tests': 'foo_tests',
218 },
219 },
220 },
221 },
222]
223"""
224
Kenneth Russelleb60cbd22017-12-05 07:54:28225COMPOSITION_GTEST_SUITE_WATERFALL = """\
226[
227 {
Greg Gutermanf60eb052020-03-12 17:40:01228 'project': 'chromium',
229 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28230 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43231 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28232 'Fake Tester': {
233 'test_suites': {
234 'gtest_tests': 'composition_tests',
235 },
236 },
237 },
238 },
239]
240"""
241
John Budorickedfe7f872018-01-23 15:27:22242COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
243[
244 {
Greg Gutermanf60eb052020-03-12 17:40:01245 'project': 'chromium',
246 'bucket': 'ci',
John Budorickedfe7f872018-01-23 15:27:22247 'name': 'chromium.test',
248 'machines': {
249 'Fake Tester': {
250 'test_suites': {
251 'gtest_tests': 'composition_tests',
252 },
253 'args': [
254 '--this-is-an-argument',
255 ],
256 },
257 },
258 },
259]
260"""
261
Kenneth Russelleb60cbd22017-12-05 07:54:28262FOO_ISOLATED_SCRIPTS_WATERFALL = """\
263[
264 {
Greg Gutermanf60eb052020-03-12 17:40:01265 'project': 'chromium',
266 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28267 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43268 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28269 'Fake Tester': {
270 'test_suites': {
271 'isolated_scripts': 'composition_tests',
272 },
273 },
274 },
275 },
276]
277"""
278
Dirk Pranke0e879b22020-07-16 23:53:56279FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID = """\
280[
281 {
282 'project': 'chromium',
283 'bucket': 'ci',
284 'name': 'chromium.test',
285 'machines': {
286 'Fake Tester': {
Yuly Novikov26dd47052021-02-11 00:57:14287 'os_type': 'android',
Dirk Pranke0e879b22020-07-16 23:53:56288 'test_suites': {
289 'isolated_scripts': 'composition_tests',
290 },
291 'use_android_presentation': True,
292 },
293 },
294 },
295]
296"""
297
Kenneth Russelleb60cbd22017-12-05 07:54:28298FOO_SCRIPT_WATERFALL = """\
299[
300 {
Greg Gutermanf60eb052020-03-12 17:40:01301 'project': 'chromium',
302 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28303 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43304 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28305 'Fake Tester': {
306 'test_suites': {
307 'scripts': 'foo_scripts',
308 },
309 },
310 },
311 },
312]
313"""
314
Brian Sheedy158cd0f2019-04-26 01:12:44315FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS = """\
316[
317 {
Greg Gutermanf60eb052020-03-12 17:40:01318 'project': 'chromium',
319 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44320 'name': 'chromium.test',
321 'machines': {
322 'Fake Tester': {
323 'forbid_script_tests': True,
324 'test_suites': {
325 'scripts': 'foo_scripts',
326 },
327 },
328 },
329 },
330]
331"""
332
333FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS = """\
334[
335 {
Greg Gutermanf60eb052020-03-12 17:40:01336 'project': 'chromium',
337 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44338 'name': 'chromium.test',
339 'forbid_script_tests': True,
340 'machines': {
341 'Fake Tester': {
342 'test_suites': {
343 'scripts': 'foo_scripts',
344 },
345 },
346 },
347 },
348]
349"""
350
Kenneth Russelleb60cbd22017-12-05 07:54:28351FOO_JUNIT_WATERFALL = """\
352[
353 {
Greg Gutermanf60eb052020-03-12 17:40:01354 'project': 'chromium',
355 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28356 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43357 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28358 'Fake Tester': {
359 'test_suites': {
360 'junit_tests': 'composition_tests',
361 },
362 },
363 },
364 },
365]
366"""
367
Kenneth Russell8a386d42018-06-02 09:48:01368FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
369[
370 {
Greg Gutermanf60eb052020-03-12 17:40:01371 'project': 'chromium',
372 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01373 'name': 'chromium.test',
374 'machines': {
375 'Fake Tester': {
376 'os_type': 'win',
377 'browser_config': 'release',
378 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25379 'dimensions': {
380 'gpu': '10de:1cb3',
381 },
Kenneth Russell8a386d42018-06-02 09:48:01382 },
383 'test_suites': {
384 'gpu_telemetry_tests': 'composition_tests',
385 },
386 },
387 },
388 },
389]
390"""
391
Brian Sheedyf74819b2021-06-04 01:38:38392FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID = """\
393[
394 {
395 'project': 'chromium',
396 'bucket': 'ci',
397 'name': 'chromium.test',
398 'machines': {
399 'Fake Tester': {
400 'os_type': 'android',
401 'browser_config': 'android-chromium',
402 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25403 'dimensions': {
404 'device_type': 'bullhead',
405 },
Brian Sheedyf74819b2021-06-04 01:38:38406 },
407 'test_suites': {
408 'gpu_telemetry_tests': 'composition_tests',
409 },
410 },
411 },
412 },
413]
414"""
415
416FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW = """\
417[
418 {
419 'project': 'chromium',
420 'bucket': 'ci',
421 'name': 'chromium.test',
422 'machines': {
423 'Fake Tester': {
424 'os_type': 'android',
425 'browser_config': 'not-a-real-browser',
426 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25427 'dimensions': {
428 'device_type': 'bullhead',
429 },
Brian Sheedyf74819b2021-06-04 01:38:38430 },
431 'test_suites': {
432 'android_webview_gpu_telemetry_tests': 'composition_tests',
433 },
434 },
435 },
436 },
437]
438"""
439
Chong Guc2ca5d02022-01-11 19:52:17440FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA = """\
441[
442 {
443 'project': 'chromium',
444 'bucket': 'ci',
445 'name': 'chromium.test',
446 'machines': {
447 'Fake Tester': {
448 'os_type': 'fuchsia',
449 'browser_config': 'fuchsia-chrome',
450 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25451 'dimensions': {
452 'kvm': '1',
453 },
Chong Guc2ca5d02022-01-11 19:52:17454 },
455 'test_suites': {
456 'gpu_telemetry_tests': 'composition_tests',
457 },
458 },
459 },
460 },
461]
462"""
463
Fabrice de Ganscbd655f2022-08-04 20:15:30464FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING = """\
465[
466 {
467 'project': 'chromium',
468 'bucket': 'ci',
469 'name': 'chromium.test',
470 'machines': {
471 'Fake Tester': {
472 'os_type': 'fuchsia',
473 'browser_config': 'not-a-real-browser',
474 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25475 'dimensions': {
476 'kvm': '1',
477 },
Fabrice de Ganscbd655f2022-08-04 20:15:30478 },
479 'test_suites': {
480 'cast_streaming_tests': 'composition_tests',
481 },
482 },
483 },
484 },
485]
486"""
487
Brian Sheedyb6491ba2022-09-26 20:49:49488FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB = """\
489[
490 {
491 'project': 'chromium',
492 'bucket': 'ci',
493 'name': 'chromium.test',
494 'machines': {
495 'Fake Tester': {
496 'os_type': 'chromeos',
497 'browser_config': 'cros-chrome',
498 'use_swarming': False,
499 'swarming': {
500 'some_key': 'some_value',
501 },
502 'test_suites': {
503 'skylab_gpu_telemetry_tests': 'composition_tests',
504 },
505 },
506 },
507 },
508]
509"""
510
Kenneth Russell384a1732019-03-16 02:36:02511NVIDIA_GPU_TELEMETRY_TEST_WATERFALL = """\
512[
513 {
Greg Gutermanf60eb052020-03-12 17:40:01514 'project': 'chromium',
515 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02516 'name': 'chromium.test',
517 'machines': {
518 'Fake Tester': {
519 'os_type': 'win',
520 'browser_config': 'release',
521 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25522 'dimensions': {
523 'gpu': '10de:1cb3-26.21.14.3102',
524 },
Kenneth Russell384a1732019-03-16 02:36:02525 },
526 'test_suites': {
527 'gpu_telemetry_tests': 'composition_tests',
528 },
529 },
530 },
531 },
532]
533"""
534
535INTEL_GPU_TELEMETRY_TEST_WATERFALL = """\
536[
537 {
Greg Gutermanf60eb052020-03-12 17:40:01538 'project': 'chromium',
539 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02540 'name': 'chromium.test',
541 'machines': {
542 'Fake Tester': {
543 'os_type': 'win',
544 'browser_config': 'release',
545 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25546 'dimensions': {
547 'gpu': '8086:5912-24.20.100.6286',
548 },
Kenneth Russell384a1732019-03-16 02:36:02549 },
550 'test_suites': {
551 'gpu_telemetry_tests': 'composition_tests',
552 },
553 },
554 },
555 },
556]
557"""
558
Brian Sheedyf9387db7b2019-08-05 19:26:10559INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL = """\
560[
561 {
Greg Gutermanf60eb052020-03-12 17:40:01562 'project': 'chromium',
563 'bucket': 'ci',
Brian Sheedyf9387db7b2019-08-05 19:26:10564 'name': 'chromium.test',
565 'machines': {
566 'Fake Tester': {
567 'os_type': 'win',
568 'browser_config': 'release',
569 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25570 'dimensions': {
571 'gpu': '8086:3e92-24.20.100.6286',
572 },
Brian Sheedyf9387db7b2019-08-05 19:26:10573 },
574 'test_suites': {
575 'gpu_telemetry_tests': 'composition_tests',
576 },
577 },
578 },
579 },
580]
581"""
582
Ben Pastene5f231cf22022-05-05 18:03:07583GPU_TELEMETRY_TEST_VARIANTS_WATERFALL = """\
584[
585 {
586 'project': 'chromium',
587 'bucket': 'ci',
588 'name': 'chromium.test',
589 'machines': {
590 'Fake Tester': {
591 'os_type': 'win',
592 'browser_config': 'release',
593 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25594 'dimensions': {
595 'gpu': '8086:3e92-24.20.100.6286',
596 'os': 'Linux',
597 },
Ben Pastene5f231cf22022-05-05 18:03:07598 },
599 'test_suites': {
600 'gpu_telemetry_tests': 'matrix_tests',
601 },
602 },
603 },
604 },
605]
606"""
607
Kenneth Russelleb60cbd22017-12-05 07:54:28608UNKNOWN_TEST_SUITE_WATERFALL = """\
609[
610 {
Greg Gutermanf60eb052020-03-12 17:40:01611 'project': 'chromium',
612 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28613 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43614 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28615 'Fake Tester': {
616 'test_suites': {
617 'gtest_tests': 'baz_tests',
618 },
619 },
620 },
621 },
622]
623"""
624
625UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
626[
627 {
Greg Gutermanf60eb052020-03-12 17:40:01628 'project': 'chromium',
629 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28630 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43631 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28632 'Fake Tester': {
633 'test_suites': {
634 'gtest_tests': 'foo_tests',
635 'foo_test_type': 'foo_tests',
636 },
637 },
638 },
639 },
640]
641"""
642
643ANDROID_WATERFALL = """\
644[
645 {
Greg Gutermanf60eb052020-03-12 17:40:01646 'project': 'chromium',
647 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28648 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43649 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28650 'Android Builder': {
651 'additional_compile_targets': [
652 'bar_test',
653 ],
654 },
Kenneth Russelleb60cbd22017-12-05 07:54:28655 'Fake Android K Tester': {
656 'additional_compile_targets': [
657 'bar_test',
658 ],
659 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25660 'dimensions': {
661 'device_os': 'KTU84P',
662 'device_type': 'hammerhead',
663 'os': 'Android',
664 },
Kenneth Russelleb60cbd22017-12-05 07:54:28665 },
666 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49667 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28668 'test_suites': {
669 'gtest_tests': 'foo_tests',
670 },
671 },
672 'Fake Android L Tester': {
673 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25674 'dimensions': {
675 'device_os': 'LMY41U',
676 'device_os_type': 'user',
677 'device_type': 'hammerhead',
678 'os': 'Android',
679 },
Kenneth Russelleb60cbd22017-12-05 07:54:28680 },
681 'os_type': 'android',
682 'skip_merge_script': True,
683 'skip_output_links': True,
684 'test_suites': {
685 'gtest_tests': 'foo_tests',
686 },
687 },
688 'Fake Android M Tester': {
689 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25690 'dimensions': {
691 'device_os': 'MMB29Q',
692 'device_type': 'bullhead',
693 'os': 'Android',
694 },
Kenneth Russelleb60cbd22017-12-05 07:54:28695 },
696 'os_type': 'android',
697 'use_swarming': False,
698 'test_suites': {
699 'gtest_tests': 'foo_tests',
700 },
701 },
702 },
703 },
704]
705"""
706
Nico Weberd18b8962018-05-16 19:39:38707UNKNOWN_BOT_GTESTS_WATERFALL = """\
708[
709 {
Greg Gutermanf60eb052020-03-12 17:40:01710 'project': 'chromium',
711 'bucket': 'ci',
Nico Weberd18b8962018-05-16 19:39:38712 'name': 'chromium.test',
713 'machines': {
714 'Unknown Bot': {
715 'test_suites': {
716 'gtest_tests': 'foo_tests',
717 },
718 },
719 },
720 },
721]
722"""
723
Jeff Yoon8154e582019-12-03 23:30:01724MATRIX_GTEST_SUITE_WATERFALL = """\
725[
726 {
Greg Gutermanf60eb052020-03-12 17:40:01727 'project': 'chromium',
728 'bucket': 'ci',
Jeff Yoon8154e582019-12-03 23:30:01729 'name': 'chromium.test',
730 'machines': {
731 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:45732 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25733 'dimensions': {
734 'os': 'Linux',
735 },
Ben Pastene338f56b2023-03-31 21:24:45736 },
Jeff Yoon8154e582019-12-03 23:30:01737 'test_suites': {
738 'gtest_tests': 'matrix_tests',
739 },
740 },
741 },
742 },
743]
744"""
745
Jeff Yoon67c3e832020-02-08 07:39:38746MATRIX_GTEST_SUITE_WATERFALL_MIXINS = """\
747[
748 {
Greg Gutermanf60eb052020-03-12 17:40:01749 'project': 'chromium',
750 'bucket': 'ci',
Jeff Yoon67c3e832020-02-08 07:39:38751 'name': 'chromium.test',
752 'machines': {
753 'Fake Tester': {
754 'mixins': ['dimension_mixin'],
755 'test_suites': {
756 'gtest_tests': 'matrix_tests',
757 },
758 },
759 },
760 },
761]
762"""
763
Kenneth Russelleb60cbd22017-12-05 07:54:28764FOO_TEST_SUITE = """\
765{
Stephen Martinis54d64ad2018-09-21 22:16:20766 'basic_suites': {
767 'foo_tests': {
768 'foo_test': {
769 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25770 'dimensions': {
771 'integrity': 'high',
772 'os': 'Linux',
773 },
Stephen Martinis54d64ad2018-09-21 22:16:20774 'expiration': 120,
775 },
Kenneth Russelleb60cbd22017-12-05 07:54:28776 },
777 },
778 },
779}
780"""
781
Brian Sheedycae63b22020-06-10 22:52:11782FOO_TEST_SUITE_NO_DIMENSIONS = """\
783{
784 'basic_suites': {
785 'foo_tests': {
786 'foo_test': {
787 },
788 },
789 },
790}
791"""
792
Stephen Martinis5bef0fc2020-01-06 22:47:53793FOO_TEST_SUITE_NOT_SORTED = """\
794{
795 'basic_suites': {
796 'foo_tests': {
797 'foo_test': {},
798 'a_test': {},
799 },
800 },
801}
802"""
803
Kenneth Russell8ceeabf2017-12-11 17:53:28804FOO_TEST_SUITE_WITH_ARGS = """\
805{
Stephen Martinis54d64ad2018-09-21 22:16:20806 'basic_suites': {
807 'foo_tests': {
808 'foo_test': {
809 'args': [
810 '--c_arg',
811 ],
812 },
Kenneth Russell8ceeabf2017-12-11 17:53:28813 },
814 },
815}
816"""
817
Garrett Beatyade673d2023-08-04 22:00:25818FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS = """\
819{
820 'basic_suites': {
821 'foo_tests': {
822 'foo_test': {
823 'swarming': {
824 'dimension_sets': [
825 {
826 'foo': 'bar',
827 },
828 ],
829 },
830 },
831 },
832 },
833}
834"""
835
Garrett Beaty235c1412023-08-29 20:26:29836FOO_TEST_SUITE_WITH_NAME = """\
837{
838 'basic_suites': {
839 'foo_tests': {
840 'foo_test': {
841 'name': 'bar_test',
842 },
843 },
844 },
845}
846"""
847
Zhaoyang Li473dd0ae2021-05-10 18:28:28848FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES = """\
849{
850 'basic_suites': {
851 'foo_tests': {
852 'foo_test': {
853 'swarming': {
854 'named_caches': [
855 {
856 'name': 'cache_in_test',
857 'file': 'cache_in_test_file',
858 },
859 ],
860 },
861 },
862 },
863 },
864}
865"""
866
Kenneth Russell8a386d42018-06-02 09:48:01867FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
868{
Stephen Martinis54d64ad2018-09-21 22:16:20869 'basic_suites': {
870 'foo_tests': {
871 'foo_test': {
872 'linux_args': [
873 '--no-xvfb',
874 ],
875 },
Kenneth Russell8a386d42018-06-02 09:48:01876 },
877 },
878}
879"""
880
Kenneth Russell650995a2018-05-03 21:17:01881FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
882{
Stephen Martinis54d64ad2018-09-21 22:16:20883 'basic_suites': {
884 'foo_tests': {
885 'foo_test': {
886 'args': [
887 '--enable-features=Foo,Bar',
888 ],
889 },
Kenneth Russell650995a2018-05-03 21:17:01890 },
891 },
892}
893"""
894
Brian Sheedy7658c982020-01-08 02:27:58895FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN = """\
896{
897 'basic_suites': {
898 'foo_tests': {
899 'foo_test': {
900 'remove_mixins': ['waterfall_mixin'],
901 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25902 'dimensions': {
903 'integrity': 'high',
904 },
Brian Sheedy7658c982020-01-08 02:27:58905 'expiration': 120,
906 },
907 },
908 },
909 },
910}
911"""
912
913FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN = """\
914{
915 'basic_suites': {
916 'foo_tests': {
917 'foo_test': {
918 'remove_mixins': ['builder_mixin'],
919 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25920 'dimensions': {
921 'integrity': 'high',
922 },
Brian Sheedy7658c982020-01-08 02:27:58923 'expiration': 120,
924 },
925 },
926 },
927 },
928}
929"""
930
Kenneth Russelleb60cbd22017-12-05 07:54:28931FOO_SCRIPT_SUITE = """\
932{
Stephen Martinis54d64ad2018-09-21 22:16:20933 'basic_suites': {
934 'foo_scripts': {
935 'foo_test': {
936 'script': 'foo.py',
937 },
938 'bar_test': {
939 'script': 'bar.py',
940 },
Kenneth Russelleb60cbd22017-12-05 07:54:28941 },
942 },
943}
944"""
945
Kenneth Russelleb60cbd22017-12-05 07:54:28946GOOD_COMPOSITION_TEST_SUITES = """\
947{
Stephen Martinis54d64ad2018-09-21 22:16:20948 'basic_suites': {
949 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:45950 'bar_test': {
951 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25952 'dimensions': {
953 'os': 'Linux',
954 },
Ben Pastene338f56b2023-03-31 21:24:45955 },
956 },
Stephen Martinis54d64ad2018-09-21 22:16:20957 },
958 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:45959 'foo_test': {
960 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:25961 'dimensions': {
962 'os': 'Linux',
963 },
Ben Pastene338f56b2023-03-31 21:24:45964 },
965 },
Stephen Martinis54d64ad2018-09-21 22:16:20966 },
Kenneth Russelleb60cbd22017-12-05 07:54:28967 },
Stephen Martinis54d64ad2018-09-21 22:16:20968 'compound_suites': {
969 'composition_tests': [
970 'foo_tests',
971 'bar_tests',
972 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28973 },
Kenneth Russelleb60cbd22017-12-05 07:54:28974}
975"""
976
977BAD_COMPOSITION_TEST_SUITES = """\
978{
Stephen Martinis54d64ad2018-09-21 22:16:20979 'basic_suites': {
980 'bar_tests': {},
981 'foo_tests': {},
982 },
983 'compound_suites': {
984 'buggy_composition_tests': [
985 'bar_tests',
986 ],
987 'composition_tests': [
988 'foo_tests',
989 'buggy_composition_tests',
990 ],
991 },
992}
993"""
994
Andrew Luo0f1dee02019-09-06 16:50:47995CONFLICTING_COMPOSITION_TEST_SUITES = """\
996{
997 'basic_suites': {
998 'bar_tests': {
999 'baz_tests': {
1000 'args': [
1001 '--bar',
1002 ],
1003 }
1004 },
1005 'foo_tests': {
1006 'baz_tests': {
1007 'args': [
1008 '--foo',
1009 ],
1010 }
1011 },
1012 },
1013 'compound_suites': {
1014 'foobar_tests': [
1015 'foo_tests',
1016 'bar_tests',
1017 ],
1018 },
1019}
1020"""
1021
Stephen Martinis54d64ad2018-09-21 22:16:201022DUPLICATES_COMPOSITION_TEST_SUITES = """\
1023{
1024 'basic_suites': {
1025 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:011026 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:201027 'foo_tests': {},
1028 },
1029 'compound_suites': {
1030 'bar_tests': [
1031 'foo_tests',
1032 ],
1033 'composition_tests': [
1034 'foo_tests',
1035 'buggy_composition_tests',
1036 ],
1037 },
Kenneth Russelleb60cbd22017-12-05 07:54:281038}
1039"""
1040
Dirk Pranke1b767092017-12-07 04:44:231041SCRIPT_SUITE = """\
1042{
Stephen Martinis54d64ad2018-09-21 22:16:201043 'basic_suites': {
1044 'foo_scripts': {
1045 'foo_test': {
1046 'script': 'foo.py',
1047 },
Dirk Pranke1b767092017-12-07 04:44:231048 },
1049 },
1050}
1051"""
1052
Kenneth Russelleb60cbd22017-12-05 07:54:281053UNREFED_TEST_SUITE = """\
1054{
Stephen Martinis54d64ad2018-09-21 22:16:201055 'basic_suites': {
1056 'bar_tests': {},
1057 'foo_tests': {},
1058 },
Kenneth Russelleb60cbd22017-12-05 07:54:281059}
1060"""
1061
1062REUSING_TEST_WITH_DIFFERENT_NAME = """\
1063{
Stephen Martinis54d64ad2018-09-21 22:16:201064 'basic_suites': {
1065 'foo_tests': {
1066 'foo_test': {},
1067 'variation_test': {
1068 'args': [
1069 '--variation',
1070 ],
1071 'test': 'foo_test',
1072 },
Kenneth Russelleb60cbd22017-12-05 07:54:281073 },
1074 },
1075}
1076"""
1077
Garrett Beaty235c1412023-08-29 20:26:291078COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME = """\
Kenneth Russell8a386d42018-06-02 09:48:011079{
Stephen Martinis54d64ad2018-09-21 22:16:201080 'basic_suites': {
1081 'foo_tests': {
Ben Pastene338f56b2023-03-31 21:24:451082 'foo': {
Garrett Beaty235c1412023-08-29 20:26:291083 'telemetry_test_name': 'foo',
1084 'swarming': {
1085 'dimensions': {
1086 'os': 'Linux',
1087 },
1088 },
1089 },
1090 },
1091 },
1092 'compound_suites': {
1093 'composition_tests': [
1094 'foo_tests',
1095 ],
1096 },
1097}
1098"""
1099
1100COMPOSITION_SUITE_WITH_TELEMETRY_TEST = """\
1101{
1102 'basic_suites': {
1103 'foo_tests': {
1104 'foo_tests': {
1105 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451106 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251107 'dimensions': {
1108 'os': 'Linux',
1109 },
Ben Pastene338f56b2023-03-31 21:24:451110 },
1111 },
Stephen Martinis54d64ad2018-09-21 22:16:201112 },
1113 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451114 'bar_test': {
1115 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251116 'dimensions': {
1117 'os': 'Linux',
1118 },
Ben Pastene338f56b2023-03-31 21:24:451119 },
1120 },
Stephen Martinis54d64ad2018-09-21 22:16:201121 },
Kenneth Russell8a386d42018-06-02 09:48:011122 },
Stephen Martinis54d64ad2018-09-21 22:16:201123 'compound_suites': {
1124 'composition_tests': [
1125 'foo_tests',
1126 'bar_tests',
1127 ],
Kenneth Russell8a386d42018-06-02 09:48:011128 },
Kenneth Russell8a386d42018-06-02 09:48:011129}
1130"""
1131
Kenneth Russell384a1732019-03-16 02:36:021132COMPOSITION_SUITE_WITH_GPU_ARGS = """\
1133{
1134 'basic_suites': {
1135 'foo_tests': {
Garrett Beaty235c1412023-08-29 20:26:291136 'foo_tests': {
1137 'telemetry_test_name': 'foo',
Ben Pastene338f56b2023-03-31 21:24:451138 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251139 'dimensions': {
1140 'os': 'Linux',
1141 },
Ben Pastene338f56b2023-03-31 21:24:451142 },
Kenneth Russell384a1732019-03-16 02:36:021143 'args': [
1144 '--gpu-vendor-id',
1145 '${gpu_vendor_id}',
1146 '--gpu-device-id',
1147 '${gpu_device_id}',
1148 ],
1149 },
1150 },
1151 'bar_tests': {
Ben Pastene338f56b2023-03-31 21:24:451152 'bar_test': {
1153 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251154 'dimensions': {
1155 'os': 'Linux',
1156 },
Ben Pastene338f56b2023-03-31 21:24:451157 },
1158 },
Kenneth Russell384a1732019-03-16 02:36:021159 },
1160 },
1161 'compound_suites': {
1162 'composition_tests': [
1163 'foo_tests',
1164 'bar_tests',
1165 ],
1166 },
1167}
1168"""
1169
Brian Sheedyd8c0c73d2021-07-05 02:11:301170COMPOSITION_SUITE_WITH_PIXEL_AND_FILTER = """\
1171{
1172 'basic_suites': {
1173 'foo_tests': {
1174 'pixel': {
1175 'args': [
1176 '--git-revision=aaaa',
1177 '--test-filter=bar',
1178 ],
1179 },
1180 },
1181 'bar_tests': {
1182 'bar_test': {},
1183 },
1184 },
1185 'compound_suites': {
1186 'composition_tests': [
1187 'foo_tests',
1188 'bar_tests',
1189 ],
1190 },
1191}
1192"""
1193
Jamie Madilla8be0d72020-10-02 05:24:041194GTEST_AS_ISOLATED_SCRIPT_SUITE = """\
1195{
1196 'basic_suites': {
1197 'foo_tests': {
1198 'foo_test': {
1199 'script': 'foo.py',
1200 'use_isolated_scripts_api': True,
1201 },
1202 },
1203 },
1204}
1205"""
1206
Dirk Pranke1b767092017-12-07 04:44:231207SCRIPT_WITH_ARGS_EXCEPTIONS = """\
1208{
1209 'foo_test': {
1210 'modifications': {
1211 'Fake Tester': {
1212 'args': ['--fake-arg'],
1213 },
1214 },
1215 },
1216}
1217"""
1218
Stephen Martinis0382bc12018-09-17 22:29:071219SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
1220{
1221 'foo_test': {
1222 'modifications': {
1223 'Fake Tester': {
1224 'swarming': {
1225 'value': 'exception',
1226 },
1227 },
1228 },
1229 },
1230}
1231"""
1232
Stephanie Kim572b43c02023-04-13 14:24:131233AUTOSHARD_EXCEPTIONS = json.dumps({
1234 'chromium.test': {
1235 'Fake Tester': {
1236 'foo_test': {
1237 'shards': 20,
1238 },
1239 'foo_test_apk': {
1240 'shards': 2,
1241 },
1242 'swarming_test a_variant': {
1243 'shards': 10,
1244 },
1245 }
1246 },
1247})
1248
Kenneth Russelleb60cbd22017-12-05 07:54:281249NO_BAR_TEST_EXCEPTIONS = """\
1250{
1251 'bar_test': {
1252 'remove_from': [
1253 'Fake Tester',
1254 ]
1255 }
1256}
1257"""
1258
1259EMPTY_BAR_TEST_EXCEPTIONS = """\
1260{
1261 'bar_test': {
1262 }
1263}
1264"""
1265
Stephen Martinis54d64ad2018-09-21 22:16:201266EXCEPTIONS_SORTED = """\
1267{
1268 'suite_c': {
1269 'modifications': {
1270 'Fake Tester': {
1271 'foo': 'bar',
1272 },
1273 },
1274 },
1275 'suite_d': {
1276 'modifications': {
1277 'Fake Tester': {
1278 'foo': 'baz',
1279 },
1280 },
1281 },
1282}
1283"""
1284
1285EXCEPTIONS_UNSORTED = """\
1286{
1287 'suite_d': {
1288 'modifications': {
1289 'Fake Tester': {
1290 'foo': 'baz',
1291 },
1292 },
1293 },
1294 'suite_c': {
1295 'modifications': {
1296 'Fake Tester': {
1297 'foo': 'bar',
1298 },
1299 },
1300 },
1301}
1302"""
1303
Stephen Martinis5bef0fc2020-01-06 22:47:531304EXCEPTIONS_PER_TEST_UNSORTED = """\
1305{
1306 'suite_d': {
1307 'modifications': {
1308 'Other Tester': {
1309 'foo': 'baz',
1310 },
1311 'Fake Tester': {
1312 'foo': 'baz',
1313 },
1314 },
1315 },
1316}
1317"""
1318
1319EXCEPTIONS_DUPS_REMOVE_FROM = """\
1320{
1321 'suite_d': {
1322 'remove_from': [
1323 'Fake Tester',
1324 'Fake Tester',
1325 ],
1326 'modifications': {
1327 'Fake Tester': {
1328 'foo': 'baz',
1329 },
1330 },
1331 },
1332}
1333"""
1334
Kenneth Russelleb60cbd22017-12-05 07:54:281335FOO_TEST_MODIFICATIONS = """\
1336{
1337 'foo_test': {
1338 'modifications': {
1339 'Fake Tester': {
1340 'args': [
1341 '--bar',
1342 ],
1343 'swarming': {
1344 'hard_timeout': 600,
1345 },
1346 },
1347 },
1348 }
1349}
1350"""
1351
John Budorick5bc387fe2019-05-09 20:02:531352FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
1353{
1354 'foo_test': {
1355 'modifications': {
1356 'Fake Tester': {
1357 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:251358 'dimensions': {
1359 'integrity': None,
1360 },
John Budorick5bc387fe2019-05-09 20:02:531361 },
1362 },
1363 },
1364 },
1365}
1366"""
1367
Kenneth Russelleb60cbd22017-12-05 07:54:281368NONEXISTENT_REMOVAL = """\
1369{
1370 'foo_test': {
1371 'remove_from': [
1372 'Nonexistent Tester',
1373 ]
1374 }
1375}
1376"""
1377
1378NONEXISTENT_MODIFICATION = """\
1379{
1380 'foo_test': {
1381 'modifications': {
1382 'Nonexistent Tester': {
1383 'args': [],
1384 },
1385 },
1386 }
1387}
1388"""
1389
Kenneth Russell78fd8702018-05-17 01:15:521390LUCI_MILO_CFG = """\
1391consoles {
1392 builders {
1393 name: "buildbucket/luci.chromium.ci/Fake Tester"
1394 }
1395}
1396"""
1397
Stephen Martinis54d64ad2018-09-21 22:16:201398LUCI_MILO_CFG_WATERFALL_SORTING = """\
1399consoles {
1400 builders {
1401 name: "buildbucket/luci.chromium.ci/Fake Tester"
1402 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1403 }
1404}
1405"""
1406
Stephen Martinis54d64ad2018-09-21 22:16:201407TEST_SUITE_SORTING_WATERFALL = """
1408[
1409 {
Greg Gutermanf60eb052020-03-12 17:40:011410 'project': 'chromium',
1411 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201412 'name': 'chromium.test',
1413 'machines': {
1414 'Fake Tester': {
1415 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561416 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201417 'scripts': 'suite_b',
1418 },
1419 },
1420 },
1421 },
1422]
1423"""
1424
1425TEST_SUITE_SORTED_WATERFALL = """
1426[
1427 {
Greg Gutermanf60eb052020-03-12 17:40:011428 'project': 'chromium',
1429 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201430 'name': 'chromium.test',
1431 'machines': {
1432 'Fake Tester': {
1433 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561434 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201435 'scripts': 'suite_b',
1436 },
1437 },
1438 'Really Fake Tester': {
1439 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561440 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201441 'scripts': 'suite_b',
1442 },
1443 },
1444 },
1445 },
1446 {
Greg Gutermanf60eb052020-03-12 17:40:011447 'project': 'chromium',
1448 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201449 'name': 'chromium.zz.test',
1450 'machines': {
1451 'Fake Tester': {
1452 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561453 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201454 'scripts': 'suite_b',
1455 },
1456 },
1457 'Really Fake Tester': {
1458 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561459 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201460 'scripts': 'suite_b',
1461 },
1462 },
1463 },
1464 },
1465]
1466"""
1467
1468TEST_SUITE_UNSORTED_WATERFALL_1 = """
1469[
1470 {
Greg Gutermanf60eb052020-03-12 17:40:011471 'project': 'chromium',
1472 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201473 'name': 'chromium.zz.test',
1474 'machines': {
1475 'Fake Tester': {
1476 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561477 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201478 'scripts': 'suite_b',
1479 },
1480 },
1481 'Really Fake Tester': {
1482 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561483 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201484 'scripts': 'suite_b',
1485 },
1486 },
1487 },
1488 },
1489 {
Greg Gutermanf60eb052020-03-12 17:40:011490 'project': 'chromium',
1491 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201492 'name': 'chromium.test',
1493 'machines': {
1494 'Fake Tester': {
1495 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561496 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201497 'scripts': 'suite_b',
1498 },
1499 },
1500 'Really Fake Tester': {
1501 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561502 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201503 'scripts': 'suite_b',
1504 },
1505 },
1506 },
1507 },
1508]
1509"""
1510
1511TEST_SUITE_UNSORTED_WATERFALL_2 = """
1512[
1513 {
Greg Gutermanf60eb052020-03-12 17:40:011514 'project': 'chromium',
1515 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201516 'name': 'chromium.test',
1517 'machines': {
1518 'Really Fake Tester': {
1519 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561520 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201521 'scripts': 'suite_b',
1522 },
1523 },
1524 'Fake Tester': {
1525 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561526 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201527 'scripts': 'suite_b',
1528 },
1529 },
1530 },
1531 },
1532 {
Greg Gutermanf60eb052020-03-12 17:40:011533 'project': 'chromium',
1534 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201535 'name': 'chromium.zz.test',
1536 'machines': {
1537 'Fake Tester': {
1538 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561539 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201540 'scripts': 'suite_b',
1541 },
1542 },
1543 'Really Fake Tester': {
1544 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561545 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201546 'scripts': 'suite_b',
1547 },
1548 },
1549 },
1550 },
1551]
1552"""
1553
1554# Note that the suites in basic_suites would be sorted after the suites in
1555# compound_suites. This is valid though, because each set of suites is sorted
1556# separately.
Dirk Pranke0e879b22020-07-16 23:53:561557# suite_c is a 'gtest_tests' test
1558# suite_d is a 'scripts' test
Stephen Martinis54d64ad2018-09-21 22:16:201559TEST_SUITE_SORTED = """\
1560{
1561 'basic_suites': {
1562 'suite_c': {
1563 'suite_c': {},
1564 },
1565 'suite_d': {
1566 'script': {
1567 'script': 'suite_d.py',
1568 }
1569 },
1570 },
1571 'compound_suites': {
1572 'suite_a': [
1573 'suite_c',
1574 ],
1575 'suite_b': [
1576 'suite_d',
1577 ],
1578 },
1579}
1580"""
1581
1582TEST_SUITE_UNSORTED_1 = """\
1583{
1584 'basic_suites': {
1585 'suite_d': {
1586 'a': 'b',
1587 },
1588 'suite_c': {
1589 'a': 'b',
1590 },
1591 },
1592 'compound_suites': {
1593 'suite_a': [
1594 'suite_c',
1595 ],
1596 'suite_b': [
1597 'suite_d',
1598 ],
1599 },
1600}
1601"""
1602
1603TEST_SUITE_UNSORTED_2 = """\
1604{
1605 'basic_suites': {
1606 'suite_c': {
1607 'a': 'b',
1608 },
1609 'suite_d': {
1610 'a': 'b',
1611 },
1612 },
1613 'compound_suites': {
1614 'suite_b': [
1615 'suite_c',
1616 ],
1617 'suite_a': [
1618 'suite_d',
1619 ],
1620 },
1621}
1622"""
1623TEST_SUITE_UNSORTED_3 = """\
1624{
1625 'basic_suites': {
1626 'suite_d': {
1627 'a': 'b',
1628 },
1629 'suite_c': {
1630 'a': 'b',
1631 },
1632 },
1633 'compound_suites': {
1634 'suite_b': [
1635 'suite_c',
1636 ],
1637 'suite_a': [
1638 'suite_d',
1639 ],
1640 },
1641}
1642"""
1643
1644
1645TEST_SUITES_SYNTAX_ERROR = """\
1646{
1647 'basic_suites': {
1648 3: {
1649 'suite_c': {},
1650 },
1651 },
1652 'compound_suites': {},
1653}
1654"""
1655
Nodir Turakulovfce34292019-12-18 17:05:411656GN_ISOLATE_MAP="""\
1657{
1658 'foo_test': {
1659 'label': '//chrome/test:foo_test',
1660 'type': 'windowed_test_launcher',
1661 }
1662}
1663"""
1664
Chan Liab7d8dd82020-04-24 23:42:191665GPU_TELEMETRY_GN_ISOLATE_MAP="""\
1666{
1667 'telemetry_gpu_integration_test': {
1668 'label': '//chrome/test:telemetry_gpu_integration_test',
1669 'type': 'script',
1670 }
1671}
1672"""
Brian Sheedyf74819b2021-06-04 01:38:381673
1674GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID = """\
1675{
1676 'telemetry_gpu_integration_test_android_chrome': {
1677 'label': '//chrome/test:telemetry_gpu_integration_test_android_chrome',
1678 'type': 'script',
1679 }
1680}
1681"""
1682
1683GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW = """\
1684{
1685 'telemetry_gpu_integration_test_android_webview': {
1686 'label': '//chrome/test:telemetry_gpu_integration_test_android_webview',
1687 'type': 'script',
1688 }
1689}
1690"""
1691
Chong Guc2ca5d02022-01-11 19:52:171692GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA = """\
1693{
1694 'telemetry_gpu_integration_test_fuchsia': {
1695 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1696 'type': 'script',
1697 }
1698}
1699"""
1700
Fabrice de Ganscbd655f2022-08-04 20:15:301701GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING = """\
1702{
1703 'telemetry_gpu_integration_test_fuchsia': {
1704 'label': '//chrome/test:telemetry_gpu_integration_test_fuchsia',
1705 'type': 'script',
1706 }
1707}
1708"""
1709
Corentin Wallez55b8e772020-04-24 17:39:281710GN_ISOLATE_MAP_KEY_LABEL_MISMATCH="""\
1711{
1712 'foo_test': {
1713 'label': '//chrome/test:foo_test_tmp',
1714 'type': 'windowed_test_launcher',
1715 }
1716}
1717"""
1718
1719GN_ISOLATE_MAP_USING_IMPLICIT_NAME="""\
1720{
1721 'foo_test': {
1722 'label': '//chrome/foo_test',
1723 'type': 'windowed_test_launcher',
1724 }
1725}
1726"""
1727
Garrett Beaty1afaccc2020-06-25 19:58:151728class UnitTest(TestCase):
Kenneth Russelleb60cbd22017-12-05 07:54:281729
Garrett Beatyade673d2023-08-04 22:00:251730 def test_dimension_sets_causes_error(self):
1731 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1732 FOO_TEST_SUITE_WITH_SWARMING_DIMENSION_SETS, LUCI_MILO_CFG)
1733 fbb.check_input_file_consistency(verbose=True)
1734 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1735 r'.*dimension_sets is no longer supported.*'):
1736 fbb.check_output_file_consistency(verbose=True)
1737 self.assertFalse(fbb.printed_lines)
1738
Garrett Beaty235c1412023-08-29 20:26:291739 def test_name_causes_error(self):
1740 fbb = FakeBBGen(self.args, FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
1741 FOO_TEST_SUITE_WITH_NAME, LUCI_MILO_CFG)
1742 fbb.check_input_file_consistency(verbose=True)
1743 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1744 r'.*name field is set*'):
1745 fbb.check_output_file_consistency(verbose=True)
1746 self.assertFalse(fbb.printed_lines)
1747
Kenneth Russelleb60cbd22017-12-05 07:54:281748 def test_good_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151749 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521750 LUCI_MILO_CFG)
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_good_composition_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:151755 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1756 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501757 fbb.check_input_file_consistency(verbose=True)
1758 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281759
1760 def test_bad_composition_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151761 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1762 BAD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231763 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1764 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501765 fbb.check_input_file_consistency(verbose=True)
1766 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281767
Andrew Luo0f1dee02019-09-06 16:50:471768 def test_composition_test_suites_no_conflicts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151769 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1770 CONFLICTING_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231771 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1772 'Conflicting test definitions.*'):
Andrew Luo0f1dee02019-09-06 16:50:471773 fbb.check_input_file_consistency(verbose=True)
1774 self.assertFalse(fbb.printed_lines)
1775
Stephen Martinis54d64ad2018-09-21 22:16:201776 def test_composition_test_suites_no_duplicate_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:151777 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1778 DUPLICATES_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231779 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1780 '.*may not duplicate basic test suite.*'):
Stephen Martinis54d64ad2018-09-21 22:16:201781 fbb.check_input_file_consistency(verbose=True)
1782 self.assertFalse(fbb.printed_lines)
1783
Kenneth Russelleb60cbd22017-12-05 07:54:281784 def test_unknown_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151785 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521786 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231787 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1788 'Test suite baz_tests from machine.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501789 fbb.check_input_file_consistency(verbose=True)
1790 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281791
1792 def test_unknown_test_suite_types_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151793 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1794 FOO_TEST_SUITE, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231795 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1796 'Unknown test suite type foo_test_type.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501797 fbb.check_input_file_consistency(verbose=True)
1798 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281799
1800 def test_unrefed_test_suite_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:151801 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521802 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:231803 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1804 '.*unreferenced.*bar_tests.*'):
Stephen Martinis7eb8b612018-09-21 00:17:501805 fbb.check_input_file_consistency(verbose=True)
1806 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281807
1808 def test_good_waterfall_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:151809 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
1810 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281811 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501812 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281813
1814 def test_reusing_gtest_targets(self):
Garrett Beaty1afaccc2020-06-25 19:58:151815 fbb = FakeBBGen(self.args,
1816 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281817 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:411818 LUCI_MILO_CFG,
1819 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russelleb60cbd22017-12-05 07:54:281820 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501821 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281822
Chong Guee622242020-10-28 18:17:351823 def test_load_multiple_isolate_map_files_with_duplicates(self):
1824 self.args.isolate_map_files = ['gn_isolate_map.pyl']
1825 fbb = FakeBBGen(self.args,
1826 FOO_GTESTS_WATERFALL,
1827 REUSING_TEST_WITH_DIFFERENT_NAME,
1828 LUCI_MILO_CFG,
1829 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madillcf4f8c72021-05-20 19:24:231830 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1831 'Duplicate targets in isolate map files.*'):
Chong Guee622242020-10-28 18:17:351832 fbb.load_configuration_files()
1833
1834 def test_load_multiple_isolate_map_files_without_duplicates(self):
1835 self.args.isolate_map_files = ['gn_isolate_map2.pyl']
1836 fbb = FakeBBGen(self.args,
1837 FOO_GTESTS_WATERFALL,
1838 REUSING_TEST_WITH_DIFFERENT_NAME,
1839 LUCI_MILO_CFG,
1840 gn_isolate_map=GN_ISOLATE_MAP)
1841 fbb.load_configuration_files()
1842 isolate_dict = {}
1843 isolate_map_1 = fbb.load_pyl_file('gn_isolate_map.pyl')
1844 isolate_map_2 = fbb.load_pyl_file('gn_isolate_map2.pyl')
1845 isolate_dict.update(isolate_map_1)
1846 isolate_dict.update(isolate_map_2)
Jamie Madillcf4f8c72021-05-20 19:24:231847 self.assertEqual(isolate_dict, fbb.gn_isolate_map)
Chong Guee622242020-10-28 18:17:351848
Corentin Wallez55b8e772020-04-24 17:39:281849 def test_gn_isolate_map_with_label_mismatch(self):
Garrett Beaty1afaccc2020-06-25 19:58:151850 fbb = FakeBBGen(self.args,
1851 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281852 FOO_TEST_SUITE,
1853 LUCI_MILO_CFG,
1854 gn_isolate_map=GN_ISOLATE_MAP_KEY_LABEL_MISMATCH)
Jamie Madillcf4f8c72021-05-20 19:24:231855 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
1856 'key name.*foo_test.*label.*'
1857 'foo_test_tmp.*'):
Corentin Wallez55b8e772020-04-24 17:39:281858 fbb.check_input_file_consistency(verbose=True)
1859 self.assertFalse(fbb.printed_lines)
1860
1861 def test_gn_isolate_map_using_implicit_gn_name(self):
Garrett Beaty1afaccc2020-06-25 19:58:151862 fbb = FakeBBGen(self.args,
1863 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:281864 FOO_TEST_SUITE,
1865 LUCI_MILO_CFG,
1866 gn_isolate_map=GN_ISOLATE_MAP_USING_IMPLICIT_NAME)
Jamie Madillcf4f8c72021-05-20 19:24:231867 with self.assertRaisesRegex(
1868 generate_buildbot_json.BBGenErr,
1869 'Malformed.*//chrome/foo_test.*for key.*'
1870 'foo_test.*'):
Corentin Wallez55b8e772020-04-24 17:39:281871 fbb.check_input_file_consistency(verbose=True)
1872 self.assertFalse(fbb.printed_lines)
1873
Kenneth Russelleb60cbd22017-12-05 07:54:281874 def test_noop_exception_does_nothing(self):
Garrett Beaty1afaccc2020-06-25 19:58:151875 fbb = FakeBBGen(self.args,
1876 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281877 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411878 LUCI_MILO_CFG,
1879 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281880 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501881 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281882
Kenneth Russell8ceeabf2017-12-11 17:53:281883 def test_test_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151884 fbb = FakeBBGen(self.args,
1885 FOO_GTESTS_WATERFALL,
Kenneth Russell8ceeabf2017-12-11 17:53:281886 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:411887 LUCI_MILO_CFG,
1888 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russell8ceeabf2017-12-11 17:53:281889 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501890 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:281891
Kenneth Russell650995a2018-05-03 21:17:011892 def test_enable_features_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:151893 fbb = FakeBBGen(self.args, FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
1894 FOO_TEST_SUITE_WITH_ENABLE_FEATURES, LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:011895 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501896 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:011897
Kenneth Russell8a386d42018-06-02 09:48:011898 def test_linux_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151899 fbb = FakeBBGen(self.args, FOO_LINUX_GTESTS_WATERFALL,
1900 FOO_TEST_SUITE_WITH_LINUX_ARGS, LUCI_MILO_CFG)
Kenneth Russell8a386d42018-06-02 09:48:011901 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501902 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:011903
Kenneth Russelleb60cbd22017-12-05 07:54:281904 def test_test_filtering(self):
Garrett Beaty1afaccc2020-06-25 19:58:151905 fbb = FakeBBGen(self.args,
1906 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281907 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411908 LUCI_MILO_CFG,
1909 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281910 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501911 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281912
1913 def test_test_modifications(self):
Garrett Beaty1afaccc2020-06-25 19:58:151914 fbb = FakeBBGen(self.args,
1915 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281916 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411917 LUCI_MILO_CFG,
1918 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281919 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501920 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281921
John Budorick5bc387fe2019-05-09 20:02:531922 def test_test_with_explicit_none(self):
Garrett Beaty1afaccc2020-06-25 19:58:151923 fbb = FakeBBGen(self.args,
1924 FOO_GTESTS_WATERFALL,
John Budorick5bc387fe2019-05-09 20:02:531925 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411926 LUCI_MILO_CFG,
1927 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
1928 mixins=SWARMING_MIXINS)
John Budorick5bc387fe2019-05-09 20:02:531929 fbb.check_output_file_consistency(verbose=True)
1930 self.assertFalse(fbb.printed_lines)
1931
Kenneth Russelleb60cbd22017-12-05 07:54:281932 def test_isolated_script_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151933 fbb = FakeBBGen(self.args,
1934 FOO_ISOLATED_SCRIPTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281935 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411936 LUCI_MILO_CFG,
1937 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281938 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501939 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281940
Ben Pastenef21cda32023-03-30 22:00:571941 def test_isolated_script_tests_android(self):
Dirk Pranke0e879b22020-07-16 23:53:561942 fbb = FakeBBGen(self.args,
1943 FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID,
1944 GOOD_COMPOSITION_TEST_SUITES,
1945 LUCI_MILO_CFG,
1946 exceptions=NO_BAR_TEST_EXCEPTIONS)
Dirk Pranke0e879b22020-07-16 23:53:561947 fbb.check_output_file_consistency(verbose=True)
1948 self.assertFalse(fbb.printed_lines)
1949
Dirk Pranke1b767092017-12-07 04:44:231950 def test_script_with_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:151951 fbb = FakeBBGen(self.args,
1952 FOO_SCRIPT_WATERFALL,
Dirk Pranke1b767092017-12-07 04:44:231953 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411954 LUCI_MILO_CFG,
1955 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Dirk Pranke1b767092017-12-07 04:44:231956 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501957 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:231958
1959 def test_script(self):
Garrett Beaty1afaccc2020-06-25 19:58:151960 fbb = FakeBBGen(self.args,
1961 FOO_SCRIPT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281962 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411963 LUCI_MILO_CFG,
1964 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281965 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501966 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281967
Brian Sheedy158cd0f2019-04-26 01:12:441968 def test_script_machine_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151969 fbb = FakeBBGen(self.args,
1970 FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441971 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411972 LUCI_MILO_CFG,
1973 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231974 with self.assertRaisesRegex(
1975 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441976 'Attempted to generate a script test on tester.*'):
1977 fbb.check_output_file_consistency(verbose=True)
1978
1979 def test_script_waterfall_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:151980 fbb = FakeBBGen(self.args,
1981 FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:441982 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:411983 LUCI_MILO_CFG,
1984 exceptions=NO_BAR_TEST_EXCEPTIONS)
Jamie Madillcf4f8c72021-05-20 19:24:231985 with self.assertRaisesRegex(
1986 generate_buildbot_json.BBGenErr,
Brian Sheedy158cd0f2019-04-26 01:12:441987 'Attempted to generate a script test on tester.*'):
1988 fbb.check_output_file_consistency(verbose=True)
1989
Kenneth Russelleb60cbd22017-12-05 07:54:281990 def test_junit_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:151991 fbb = FakeBBGen(self.args,
1992 FOO_JUNIT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:281993 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:411994 LUCI_MILO_CFG,
1995 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:281996 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:501997 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281998
Garrett Beaty235c1412023-08-29 20:26:291999 def test_gpu_telemetry_test_with_invalid_name(self):
2000 fbb = FakeBBGen(self.args,
2001 FOO_GPU_TELEMETRY_TEST_WATERFALL,
2002 COMPOSITION_SUITE_WITH_TELEMETRY_TEST_WITH_INVALID_NAME,
2003 LUCI_MILO_CFG,
2004 exceptions=NO_BAR_TEST_EXCEPTIONS,
2005 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
2006 with self.assertRaisesRegex(
2007 generate_buildbot_json.BBGenErr,
2008 'telemetry test names must end with test or tests.*'):
2009 fbb.check_output_file_consistency(verbose=True)
2010 self.assertFalse(fbb.printed_lines)
2011
Kenneth Russell8a386d42018-06-02 09:48:012012 def test_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152013 fbb = FakeBBGen(self.args,
2014 FOO_GPU_TELEMETRY_TEST_WATERFALL,
Garrett Beaty235c1412023-08-29 20:26:292015 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Nodir Turakulovfce34292019-12-18 17:05:412016 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192017 exceptions=NO_BAR_TEST_EXCEPTIONS,
2018 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell8a386d42018-06-02 09:48:012019 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502020 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012021
Brian Sheedyf74819b2021-06-04 01:38:382022 def test_gpu_telemetry_tests_android(self):
2023 fbb = FakeBBGen(self.args,
2024 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID,
Garrett Beaty235c1412023-08-29 20:26:292025 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382026 LUCI_MILO_CFG,
2027 exceptions=NO_BAR_TEST_EXCEPTIONS,
2028 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID)
Brian Sheedyf74819b2021-06-04 01:38:382029 fbb.check_output_file_consistency(verbose=True)
2030 self.assertFalse(fbb.printed_lines)
2031
2032 def test_gpu_telemetry_tests_android_webview(self):
2033 fbb = FakeBBGen(self.args,
2034 FOO_GPU_TELEMETRY_TEST_WATERFALL_ANDROID_WEBVIEW,
Garrett Beaty235c1412023-08-29 20:26:292035 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyf74819b2021-06-04 01:38:382036 LUCI_MILO_CFG,
2037 exceptions=NO_BAR_TEST_EXCEPTIONS,
2038 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_ANDROID_WEBVIEW)
Brian Sheedyf74819b2021-06-04 01:38:382039 fbb.check_output_file_consistency(verbose=True)
2040 self.assertFalse(fbb.printed_lines)
2041
Chong Guc2ca5d02022-01-11 19:52:172042 def test_gpu_telemetry_tests_fuchsia(self):
2043 fbb = FakeBBGen(self.args,
2044 FOO_GPU_TELEMETRY_TEST_WATERFALL_FUCHSIA,
Garrett Beaty235c1412023-08-29 20:26:292045 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Chong Guc2ca5d02022-01-11 19:52:172046 LUCI_MILO_CFG,
2047 exceptions=NO_BAR_TEST_EXCEPTIONS,
2048 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_FUCHSIA)
Chong Guc2ca5d02022-01-11 19:52:172049 fbb.check_output_file_consistency(verbose=True)
2050 self.assertFalse(fbb.printed_lines)
2051
Fabrice de Ganscbd655f2022-08-04 20:15:302052 def test_gpu_telemetry_tests_cast_streaming(self):
2053 fbb = FakeBBGen(self.args,
2054 FOO_GPU_TELEMETRY_TEST_WATERFALL_CAST_STREAMING,
Garrett Beaty235c1412023-08-29 20:26:292055 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Fabrice de Ganscbd655f2022-08-04 20:15:302056 LUCI_MILO_CFG,
2057 exceptions=NO_BAR_TEST_EXCEPTIONS,
2058 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP_CAST_STREAMING)
Fabrice de Ganscbd655f2022-08-04 20:15:302059 fbb.check_output_file_consistency(verbose=True)
2060 self.assertFalse(fbb.printed_lines)
2061
Brian Sheedyb6491ba2022-09-26 20:49:492062 def test_gpu_telemetry_tests_skylab(self):
2063 fbb = FakeBBGen(self.args,
2064 FOO_GPU_TELEMETRY_TEST_WATERFALL_SKYLAB,
Garrett Beaty235c1412023-08-29 20:26:292065 COMPOSITION_SUITE_WITH_TELEMETRY_TEST,
Brian Sheedyb6491ba2022-09-26 20:49:492066 LUCI_MILO_CFG,
2067 exceptions=NO_BAR_TEST_EXCEPTIONS,
2068 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyb6491ba2022-09-26 20:49:492069 fbb.check_output_file_consistency(verbose=True)
2070 self.assertFalse(fbb.printed_lines)
2071
Kenneth Russell384a1732019-03-16 02:36:022072 def test_nvidia_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152073 fbb = FakeBBGen(self.args,
2074 NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022075 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412076 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192077 exceptions=NO_BAR_TEST_EXCEPTIONS,
2078 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022079 fbb.check_output_file_consistency(verbose=True)
2080 self.assertFalse(fbb.printed_lines)
2081
2082 def test_intel_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152083 fbb = FakeBBGen(self.args,
2084 INTEL_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022085 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412086 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192087 exceptions=NO_BAR_TEST_EXCEPTIONS,
2088 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Kenneth Russell384a1732019-03-16 02:36:022089 fbb.check_output_file_consistency(verbose=True)
2090 self.assertFalse(fbb.printed_lines)
2091
Ben Pastene5f231cf22022-05-05 18:03:072092 def test_gpu_telemetry_tests_with_variants(self):
2093 fbb = FakeBBGen(self.args,
2094 GPU_TELEMETRY_TEST_VARIANTS_WATERFALL,
2095 MATRIX_COMPOUND_MIXED_VARIANTS_REF,
2096 LUCI_MILO_CFG,
2097 exceptions=NO_BAR_TEST_EXCEPTIONS,
2098 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP,
2099 variants=MULTI_VARIANTS_FILE)
Ben Pastene5f231cf22022-05-05 18:03:072100 fbb.check_output_file_consistency(verbose=True)
2101 self.assertFalse(fbb.printed_lines)
2102
Brian Sheedyf9387db7b2019-08-05 19:26:102103 def test_intel_uhd_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152104 fbb = FakeBBGen(self.args,
2105 INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
Brian Sheedyf9387db7b2019-08-05 19:26:102106 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412107 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192108 exceptions=NO_BAR_TEST_EXCEPTIONS,
2109 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Brian Sheedyf9387db7b2019-08-05 19:26:102110 fbb.check_output_file_consistency(verbose=True)
2111 self.assertFalse(fbb.printed_lines)
2112
Jamie Madilla8be0d72020-10-02 05:24:042113 def test_gtest_as_isolated_Script(self):
2114 fbb = FakeBBGen(self.args,
2115 FOO_GTESTS_WATERFALL,
2116 GTEST_AS_ISOLATED_SCRIPT_SUITE,
2117 LUCI_MILO_CFG,
2118 gn_isolate_map=GN_ISOLATE_MAP)
Jamie Madilla8be0d72020-10-02 05:24:042119 fbb.check_output_file_consistency(verbose=True)
2120 self.assertFalse(fbb.printed_lines)
2121
Kenneth Russelleb60cbd22017-12-05 07:54:282122 def test_ungenerated_output_files_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152123 fbb = FakeBBGen(self.args,
2124 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282125 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412126 LUCI_MILO_CFG,
2127 exceptions=NO_BAR_TEST_EXCEPTIONS)
Stephen Martinis7eb8b612018-09-21 00:17:502128 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192129 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502130 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232131 self.assertRegex(
Dirk Pranke6269d302020-10-01 00:14:392132 joined_lines, 'File chromium.test.json did not have the following'
Stephen Martinis7eb8b612018-09-21 00:17:502133 ' expected contents:.*')
Jamie Madillcf4f8c72021-05-20 19:24:232134 self.assertRegex(joined_lines, '.*--- expected.*')
2135 self.assertRegex(joined_lines, '.*\+\+\+ current.*')
Stephen Martinis7eb8b612018-09-21 00:17:502136 fbb.printed_lines = []
2137 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282138
2139 def test_android_output_options(self):
Garrett Beaty1afaccc2020-06-25 19:58:152140 fbb = FakeBBGen(self.args, ANDROID_WATERFALL, FOO_TEST_SUITE, LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282141 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502142 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282143
2144 def test_nonexistent_removal_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152145 fbb = FakeBBGen(self.args,
2146 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282147 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412148 LUCI_MILO_CFG,
2149 exceptions=NONEXISTENT_REMOVAL)
Jamie Madillcf4f8c72021-05-20 19:24:232150 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2151 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502152 fbb.check_input_file_consistency(verbose=True)
2153 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282154
2155 def test_nonexistent_modification_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152156 fbb = FakeBBGen(self.args,
2157 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282158 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412159 LUCI_MILO_CFG,
2160 exceptions=NONEXISTENT_MODIFICATION)
Jamie Madillcf4f8c72021-05-20 19:24:232161 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2162 'The following nonexistent machines.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502163 fbb.check_input_file_consistency(verbose=True)
2164 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282165
John Budorickedfe7f872018-01-23 15:27:222166 def test_waterfall_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152167 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2168 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222169 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502170 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222171
Ben Pastenea9e583b2019-01-16 02:57:262172 def test_chromeos_trigger_script_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152173 fbb = FakeBBGen(self.args, FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2174 FOO_TEST_SUITE, LUCI_MILO_CFG)
Ben Pastenea9e583b2019-01-16 02:57:262175 fbb.check_output_file_consistency(verbose=True)
2176 self.assertFalse(fbb.printed_lines)
2177
Zhiling Huangbe008172018-03-08 19:13:112178 def test_relative_pyl_file_dir(self):
Garrett Beaty79339e182023-04-10 20:45:472179 self.set_args('--pyl-files-dir=relative/path')
Garrett Beaty1afaccc2020-06-25 19:58:152180 fbb = FakeBBGen(self.args,
2181 FOO_GTESTS_WATERFALL,
Zhiling Huangbe008172018-03-08 19:13:112182 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412183 LUCI_MILO_CFG,
2184 gn_isolate_map=GN_ISOLATE_MAP)
Stephen Martinis7eb8b612018-09-21 00:17:502185 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112186 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502187 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112188
Nico Weberd18b8962018-05-16 19:39:382189 def test_nonexistent_bot_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152190 fbb = FakeBBGen(self.args, UNKNOWN_BOT_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522191 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382192 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502193 fbb.check_input_file_consistency(verbose=True)
2194 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382195
Garrett Beaty4f3e9212020-06-25 20:21:492196 def test_nonexistent_bot_raises_when_no_project_pyl_exists(self):
Garrett Beaty1afaccc2020-06-25 19:58:152197 fbb = FakeBBGen(self.args,
2198 UNKNOWN_BOT_GTESTS_WATERFALL,
Garrett Beaty2a02de3c2020-05-15 13:57:352199 FOO_TEST_SUITE,
2200 LUCI_MILO_CFG,
Garrett Beaty4f3e9212020-06-25 20:21:492201 project_pyl=None)
2202 with self.assertRaises(generate_buildbot_json.BBGenErr):
2203 fbb.check_input_file_consistency(verbose=True)
2204 self.assertFalse(fbb.printed_lines)
2205
2206 def test_nonexistent_bot_does_not_raise_when_validation_disabled(self):
2207 fbb = FakeBBGen(
2208 self.args,
2209 UNKNOWN_BOT_GTESTS_WATERFALL,
2210 FOO_TEST_SUITE,
2211 LUCI_MILO_CFG,
2212 project_pyl='{"validate_source_side_specs_have_builder": False}')
Garrett Beaty2a02de3c2020-05-15 13:57:352213 fbb.check_input_file_consistency(verbose=True)
2214
Stephen Martinis54d64ad2018-09-21 22:16:202215 def test_waterfalls_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152216 fbb = FakeBBGen(self.args, TEST_SUITE_SORTED_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202217 LUCI_MILO_CFG_WATERFALL_SORTING)
2218 fbb.check_input_file_consistency(verbose=True)
2219 self.assertFalse(fbb.printed_lines)
2220
Garrett Beaty1afaccc2020-06-25 19:58:152221 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_1,
2222 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232223 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202224 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472225 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392226 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472227 ):
Stephen Martinis54d64ad2018-09-21 22:16:202228 fbb.check_input_file_consistency(verbose=True)
2229 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232230 self.assertRegex(joined_lines, '.*\+ chromium\..*test.*')
2231 self.assertRegex(joined_lines, '.*\- chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202232 fbb.printed_lines = []
2233 self.assertFalse(fbb.printed_lines)
2234
Garrett Beaty1afaccc2020-06-25 19:58:152235 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_2,
2236 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Jamie Madillcf4f8c72021-05-20 19:24:232237 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202238 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472239 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392240 re.escape(self.args.waterfalls_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472241 ):
Stephen Martinis54d64ad2018-09-21 22:16:202242 fbb.check_input_file_consistency(verbose=True)
2243 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232244 self.assertRegex(joined_lines, '.*\+.*Fake Tester.*')
2245 self.assertRegex(joined_lines, '.*\-.*Fake Tester.*')
Stephen Martinis54d64ad2018-09-21 22:16:202246 fbb.printed_lines = []
2247 self.assertFalse(fbb.printed_lines)
2248
2249 def test_test_suite_exceptions_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152250 fbb = FakeBBGen(self.args,
2251 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202252 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412253 LUCI_MILO_CFG,
2254 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502255 fbb.check_input_file_consistency(verbose=True)
2256 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182257
Garrett Beaty1afaccc2020-06-25 19:58:152258 fbb = FakeBBGen(self.args,
2259 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202260 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412261 LUCI_MILO_CFG,
Stephen Martinis5bef0fc2020-01-06 22:47:532262 exceptions=EXCEPTIONS_DUPS_REMOVE_FROM)
2263 with self.assertRaises(generate_buildbot_json.BBGenErr):
2264 fbb.check_input_file_consistency(verbose=True)
2265 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232266 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532267 fbb.printed_lines = []
2268 self.assertFalse(fbb.printed_lines)
2269
2270 def test_test_suite_exceptions_no_dups_remove_from(self):
Garrett Beaty1afaccc2020-06-25 19:58:152271 fbb = FakeBBGen(self.args,
2272 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532273 TEST_SUITE_SORTED,
2274 LUCI_MILO_CFG,
2275 exceptions=EXCEPTIONS_SORTED)
2276 fbb.check_input_file_consistency(verbose=True)
2277 self.assertFalse(fbb.printed_lines)
2278
Garrett Beaty1afaccc2020-06-25 19:58:152279 fbb = FakeBBGen(self.args,
2280 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532281 TEST_SUITE_SORTED,
2282 LUCI_MILO_CFG,
2283 exceptions=EXCEPTIONS_PER_TEST_UNSORTED)
Stephen Martinis5bef0fc2020-01-06 22:47:532284 with self.assertRaises(generate_buildbot_json.BBGenErr):
2285 fbb.check_input_file_consistency(verbose=True)
2286 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232287 self.assertRegex(joined_lines, '.*\+ Fake Tester.*')
2288 self.assertRegex(joined_lines, '.*\- Fake Tester.*')
Stephen Martinis5bef0fc2020-01-06 22:47:532289 fbb.printed_lines = []
2290 self.assertFalse(fbb.printed_lines)
2291
2292 def test_test_suite_exceptions_per_test_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152293 fbb = FakeBBGen(self.args,
2294 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532295 TEST_SUITE_SORTED,
2296 LUCI_MILO_CFG,
2297 exceptions=EXCEPTIONS_SORTED)
2298 fbb.check_input_file_consistency(verbose=True)
2299 self.assertFalse(fbb.printed_lines)
2300
Garrett Beaty1afaccc2020-06-25 19:58:152301 fbb = FakeBBGen(self.args,
2302 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532303 TEST_SUITE_SORTED,
2304 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:412305 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202306 with self.assertRaises(generate_buildbot_json.BBGenErr):
2307 fbb.check_input_file_consistency(verbose=True)
2308 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232309 self.assertRegex(joined_lines, '.*\+ suite_.*')
2310 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202311 fbb.printed_lines = []
2312 self.assertFalse(fbb.printed_lines)
2313
2314 def test_test_suites_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152315 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202316 LUCI_MILO_CFG)
2317 fbb.check_input_file_consistency(verbose=True)
2318 self.assertFalse(fbb.printed_lines)
2319
2320 for unsorted in (
2321 TEST_SUITE_UNSORTED_1,
2322 TEST_SUITE_UNSORTED_2,
2323 TEST_SUITE_UNSORTED_3,
2324 ):
Garrett Beaty1afaccc2020-06-25 19:58:152325 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202326 LUCI_MILO_CFG)
2327 with self.assertRaises(generate_buildbot_json.BBGenErr):
2328 fbb.check_input_file_consistency(verbose=True)
2329 joined_lines = ' '.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232330 self.assertRegex(joined_lines, '.*\+ suite_.*')
2331 self.assertRegex(joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202332 fbb.printed_lines = []
2333 self.assertFalse(fbb.printed_lines)
2334
Stephen Martinis11672542018-10-29 18:17:212335
2336FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2337[
2338 {
2339 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012340 'project': 'chromium',
2341 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212342 'name': 'chromium.test',
2343 'machines': {
2344 'Fake Tester': {
Ben Pastene338f56b2023-03-31 21:24:452345 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252346 'dimensions': {
2347 'os': 'Linux',
2348 },
Ben Pastene338f56b2023-03-31 21:24:452349 },
Stephen Martinis11672542018-10-29 18:17:212350 'test_suites': {
2351 'gtest_tests': 'foo_tests',
2352 },
2353 },
2354 },
2355 },
2356]
2357"""
2358
2359FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2360[
2361 {
Greg Gutermanf60eb052020-03-12 17:40:012362 'project': 'chromium',
2363 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212364 'name': 'chromium.test',
2365 'machines': {
2366 'Fake Tester': {
2367 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452368 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252369 'dimensions': {
2370 'os': 'Linux',
2371 },
Ben Pastene338f56b2023-03-31 21:24:452372 },
Stephen Martinis11672542018-10-29 18:17:212373 'test_suites': {
2374 'gtest_tests': 'foo_tests',
2375 },
2376 },
2377 },
2378 },
2379]
2380"""
2381
Austin Eng148d9f0f2022-02-08 19:18:532382FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2383[
2384 {
2385 'project': 'chromium',
2386 'bucket': 'ci',
2387 'name': 'chromium.test',
2388 'machines': {
2389 'Fake Tester': {
2390 'os_type': 'linux',
2391 'mixins': ['builder_mixin'],
Ben Pastene338f56b2023-03-31 21:24:452392 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252393 'dimensions': {
2394 'os': 'Linux',
2395 },
Ben Pastene338f56b2023-03-31 21:24:452396 },
Austin Eng148d9f0f2022-02-08 19:18:532397 'test_suites': {
2398 'gtest_tests': 'foo_tests',
2399 },
2400 },
2401 },
2402 },
2403]
2404"""
2405
Brian Sheedy7658c982020-01-08 02:27:582406FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL = """\
2407[
2408 {
2409 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012410 'project': 'chromium',
2411 'bucket': 'ci',
Brian Sheedy7658c982020-01-08 02:27:582412 'name': 'chromium.test',
2413 'machines': {
2414 'Fake Tester': {
2415 'remove_mixins': ['waterfall_mixin'],
2416 'swarming': {},
2417 'test_suites': {
2418 'gtest_tests': 'foo_tests',
2419 },
2420 },
2421 },
2422 },
2423]
2424"""
2425
Stephen Martinis11672542018-10-29 18:17:212426FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2427[
2428 {
Greg Gutermanf60eb052020-03-12 17:40:012429 'project': 'chromium',
2430 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212431 'name': 'chromium.test',
2432 'machines': {
2433 'Fake Tester': {
2434 'mixins': ['random_mixin'],
2435 'swarming': {},
2436 'test_suites': {
2437 'gtest_tests': 'foo_tests',
2438 },
2439 },
2440 },
2441 },
2442]
2443"""
2444
2445FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2446[
2447 {
Greg Gutermanf60eb052020-03-12 17:40:012448 'project': 'chromium',
2449 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212450 'name': 'chromium.test',
2451 'machines': {
2452 'Fake Tester': {
2453 'mixins': ['dimension_mixin'],
2454 'swarming': {},
2455 'test_suites': {
2456 'gtest_tests': 'foo_tests',
2457 },
2458 },
2459 },
2460 },
2461]
2462"""
2463
2464FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2465[
2466 {
Greg Gutermanf60eb052020-03-12 17:40:012467 'project': 'chromium',
2468 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212469 'name': 'chromium.test',
2470 'machines': {
2471 'Fake Tester': {
2472 'mixins': ['dimension_mixin'],
2473 'os_type': 'win',
2474 'browser_config': 'release',
2475 'test_suites': {
2476 'gpu_telemetry_tests': 'foo_tests',
2477 },
2478 },
2479 },
2480 },
2481]
2482"""
2483
2484# Swarming mixins must be a list, a single string is not allowed.
2485FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2486[
2487 {
Greg Gutermanf60eb052020-03-12 17:40:012488 'project': 'chromium',
2489 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212490 'name': 'chromium.test',
2491 'machines': {
2492 'Fake Tester': {
2493 'mixins': 'dimension_mixin',
2494 'swarming': {},
2495 'test_suites': {
2496 'gtest_tests': 'foo_tests',
2497 },
2498 },
2499 },
2500 },
2501]
2502"""
2503FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
2504[
2505 {
Greg Gutermanf60eb052020-03-12 17:40:012506 'project': 'chromium',
2507 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212508 'name': 'chromium.test',
2509 'machines': {
2510 'Fake Tester': {
2511 'mixins': ['nonexistant'],
2512 'swarming': {},
2513 'test_suites': {
2514 'gtest_tests': 'foo_tests',
2515 },
2516 },
2517 },
2518 },
2519]
2520"""
2521
2522FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
2523[
2524 {
Greg Gutermanf60eb052020-03-12 17:40:012525 'project': 'chromium',
2526 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212527 'name': 'chromium.test',
Greg Gutermanf60eb052020-03-12 17:40:012528 'mixins': ['waterfall_mixin'],
Stephen Martinis11672542018-10-29 18:17:212529 'machines': {
2530 'Fake Tester': {
2531 'swarming': {},
2532 'test_suites': {
2533 'gtest_tests': 'foo_tests',
2534 },
2535 },
2536 },
2537 },
2538]
2539"""
2540
2541FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2542[
2543 {
2544 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012545 'project': 'chromium',
2546 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212547 'name': 'chromium.test',
2548 'machines': {
2549 'Fake Tester': {
2550 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252551 'dimensions': {
2552 'kvm': '1',
2553 },
Stephen Martinis11672542018-10-29 18:17:212554 },
2555 'test_suites': {
2556 'gtest_tests': 'foo_tests',
2557 },
2558 },
2559 },
2560 },
2561]
2562"""
2563
2564FOO_TEST_SUITE_WITH_MIXIN = """\
2565{
2566 'basic_suites': {
2567 'foo_tests': {
2568 'foo_test': {
2569 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252570 'dimensions': {
2571 'integrity': 'high',
2572 'os': 'Linux',
2573 },
Stephen Martinis11672542018-10-29 18:17:212574 'expiration': 120,
2575 },
2576 'mixins': ['test_mixin'],
2577 },
2578 },
2579 },
2580}
2581"""
2582
Garrett Beaty4c35b142023-06-23 21:01:232583MIXIN_ARGS = """\
2584{
2585 'builder_mixin': {
2586 'args': [],
2587 },
2588}
2589"""
2590
2591MIXIN_ARGS_NOT_LIST = """\
2592{
2593 'builder_mixin': {
2594 'args': 'I am not a list',
2595 },
2596}
2597"""
2598
Garrett Beatyb061e69d2023-06-27 16:15:352599MIXIN_LINUX_ARGS = """\
2600{
2601 'builder_mixin': {
2602 'args': [ '--mixin-argument' ],
2603 'linux_args': [ '--linux-mixin-argument' ],
2604 },
2605}
2606"""
2607
2608MIXIN_APPEND = """\
2609{
2610 'builder_mixin': {
2611 '$mixin_append': {
2612 'args': [ '--mixin-argument' ],
2613 },
2614 },
2615}
2616"""
2617
Stephen Martinis11672542018-10-29 18:17:212618# These mixins are invalid; if passed to check_input_file_consistency, they will
2619# fail. These are used for output file consistency checks.
2620SWARMING_MIXINS = """\
2621{
2622 'builder_mixin': {
2623 'swarming': {
2624 'value': 'builder',
2625 },
2626 },
2627 'dimension_mixin': {
2628 'swarming': {
2629 'dimensions': {
2630 'iama': 'mixin',
2631 },
2632 },
2633 },
2634 'random_mixin': {
2635 'value': 'random',
2636 },
2637 'test_mixin': {
2638 'swarming': {
2639 'value': 'test',
2640 },
2641 },
2642 'waterfall_mixin': {
2643 'swarming': {
2644 'value': 'waterfall',
2645 },
2646 },
2647}
2648"""
2649
Garrett Beaty4c35b142023-06-23 21:01:232650SWARMING_NAMED_CACHES = """\
2651{
2652 'builder_mixin': {
2653 'swarming': {
2654 'named_caches': [
2655 {
2656 'name': 'cache',
2657 'file': 'cache_file',
2658 },
2659 ],
2660 },
2661 },
2662}
2663"""
2664
Stephen Martinis11672542018-10-29 18:17:212665SWARMING_MIXINS_DUPLICATED = """\
2666{
2667 'builder_mixin': {
2668 'value': 'builder',
2669 },
2670 'builder_mixin': {
2671 'value': 'builder',
2672 },
2673}
2674"""
2675
2676SWARMING_MIXINS_UNSORTED = """\
2677{
2678 'b_mixin': {
2679 'b': 'b',
2680 },
2681 'a_mixin': {
2682 'a': 'a',
2683 },
2684 'c_mixin': {
2685 'c': 'c',
2686 },
2687}
2688"""
2689
2690SWARMING_MIXINS_SORTED = """\
2691{
2692 'a_mixin': {
2693 'a': 'a',
2694 },
2695 'b_mixin': {
2696 'b': 'b',
2697 },
2698 'c_mixin': {
2699 'c': 'c',
2700 },
2701}
2702"""
2703
Garrett Beaty1afaccc2020-06-25 19:58:152704
2705class MixinTests(TestCase):
Stephen Martinis11672542018-10-29 18:17:212706 """Tests for the mixins feature."""
2707 def test_mixins_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152708 fbb = FakeBBGen(self.args,
2709 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212710 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412711 LUCI_MILO_CFG,
2712 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:212713 fbb.check_input_file_consistency(verbose=True)
2714 self.assertFalse(fbb.printed_lines)
2715
Garrett Beaty1afaccc2020-06-25 19:58:152716 fbb = FakeBBGen(self.args,
2717 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212718 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412719 LUCI_MILO_CFG,
2720 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:212721 with self.assertRaises(generate_buildbot_json.BBGenErr):
2722 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532723 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232724 self.assertRegex(joined_lines, '.*\+ ._mixin.*')
2725 self.assertRegex(joined_lines, '.*\- ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:212726 fbb.printed_lines = []
2727 self.assertFalse(fbb.printed_lines)
2728
2729 def test_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152730 fbb = FakeBBGen(self.args,
2731 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212732 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412733 LUCI_MILO_CFG,
2734 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212735 fbb.check_output_file_consistency(verbose=True)
2736 self.assertFalse(fbb.printed_lines)
2737
2738 def test_waterfall_exception_overrides(self):
Garrett Beaty1afaccc2020-06-25 19:58:152739 fbb = FakeBBGen(self.args,
2740 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212741 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412742 LUCI_MILO_CFG,
2743 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2744 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212745 fbb.check_output_file_consistency(verbose=True)
2746 self.assertFalse(fbb.printed_lines)
2747
Stephanie Kim572b43c02023-04-13 14:24:132748 def test_autoshard_exceptions(self):
2749 fbb = FakeBBGen(self.args,
2750 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2751 FOO_TEST_SUITE,
2752 LUCI_MILO_CFG,
2753 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2754 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2755 mixins=SWARMING_MIXINS)
2756 fbb.check_output_file_consistency(verbose=True)
2757 self.assertFalse(fbb.printed_lines)
2758
2759 def test_autoshard_exceptions_variant_names(self):
2760 fbb = FakeBBGen(self.args,
2761 MATRIX_GTEST_SUITE_WATERFALL,
2762 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
2763 LUCI_MILO_CFG,
2764 autoshard_exceptions=AUTOSHARD_EXCEPTIONS,
2765 variants=VARIANTS_FILE)
2766 fbb.check_output_file_consistency(verbose=True)
2767 self.assertFalse(fbb.printed_lines)
2768
Stephen Martinis11672542018-10-29 18:17:212769 def test_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152770 fbb = FakeBBGen(self.args,
2771 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212772 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412773 LUCI_MILO_CFG,
2774 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212775 fbb.check_output_file_consistency(verbose=True)
2776 self.assertFalse(fbb.printed_lines)
2777
2778 def test_builder_non_swarming(self):
Garrett Beaty1afaccc2020-06-25 19:58:152779 fbb = FakeBBGen(self.args,
2780 FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212781 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412782 LUCI_MILO_CFG,
2783 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212784 fbb.check_output_file_consistency(verbose=True)
2785 self.assertFalse(fbb.printed_lines)
2786
2787 def test_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152788 fbb = FakeBBGen(self.args,
2789 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212790 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412791 LUCI_MILO_CFG,
2792 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212793 fbb.check_output_file_consistency(verbose=True)
2794 self.assertFalse(fbb.printed_lines)
2795
2796 def test_dimension(self):
Garrett Beaty1afaccc2020-06-25 19:58:152797 fbb = FakeBBGen(self.args,
2798 FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212799 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412800 LUCI_MILO_CFG,
2801 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212802 fbb.check_output_file_consistency(verbose=True)
2803 self.assertFalse(fbb.printed_lines)
2804
2805 def test_dimension_gpu(self):
Garrett Beaty1afaccc2020-06-25 19:58:152806 fbb = FakeBBGen(self.args,
2807 FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212808 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412809 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192810 mixins=SWARMING_MIXINS,
2811 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Stephen Martinis11672542018-10-29 18:17:212812 fbb.check_output_file_consistency(verbose=True)
2813 self.assertFalse(fbb.printed_lines)
2814
2815 def test_unreferenced(self):
Garrett Beaty1afaccc2020-06-25 19:58:152816 fbb = FakeBBGen(self.args,
2817 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212818 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412819 LUCI_MILO_CFG,
2820 mixins=SWARMING_MIXINS)
Jamie Madillcf4f8c72021-05-20 19:24:232821 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2822 '.*mixins are unreferenced.*'):
Stephen Martinis11672542018-10-29 18:17:212823 fbb.check_input_file_consistency(verbose=True)
2824 self.assertFalse(fbb.printed_lines)
2825
Stephen Martinis11672542018-10-29 18:17:212826 def test_unused(self):
Garrett Beaty1afaccc2020-06-25 19:58:152827 fbb = FakeBBGen(self.args,
2828 FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212829 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412830 LUCI_MILO_CFG,
2831 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212832 with self.assertRaises(generate_buildbot_json.BBGenErr):
2833 fbb.check_output_file_consistency(verbose=True)
2834 self.assertFalse(fbb.printed_lines)
2835
2836 def test_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:152837 fbb = FakeBBGen(self.args,
2838 FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:212839 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:412840 LUCI_MILO_CFG,
2841 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:212842 with self.assertRaises(generate_buildbot_json.BBGenErr):
2843 fbb.check_output_file_consistency(verbose=True)
2844 self.assertFalse(fbb.printed_lines)
2845
2846
2847 def test_no_duplicate_keys(self):
Garrett Beaty1afaccc2020-06-25 19:58:152848 fbb = FakeBBGen(self.args,
2849 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202850 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412851 LUCI_MILO_CFG,
2852 mixins=SWARMING_MIXINS_DUPLICATED)
Jamie Madillcf4f8c72021-05-20 19:24:232853 with self.assertRaisesRegex(
Stephen Martinis54d64ad2018-09-21 22:16:202854 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392855 ('The following files have invalid keys: ' +
2856 re.escape(self.args.mixins_pyl_path)),
2857 ):
Stephen Martinis54d64ad2018-09-21 22:16:202858 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:532859 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232860 self.assertRegex(joined_lines, '.*\- builder_mixin')
Stephen Martinis5bef0fc2020-01-06 22:47:532861 fbb.printed_lines = []
2862 self.assertFalse(fbb.printed_lines)
2863
2864 def test_no_duplicate_keys_basic_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:152865 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE_NOT_SORTED,
Stephen Martinis5bef0fc2020-01-06 22:47:532866 LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:232867 with self.assertRaisesRegex(
Stephen Martinis5bef0fc2020-01-06 22:47:532868 generate_buildbot_json.BBGenErr,
Garrett Beaty79339e182023-04-10 20:45:472869 ('The following files have invalid keys: ' +
Garrett Beaty807011ab2023-04-12 00:52:392870 re.escape(self.args.test_suites_pyl_path)),
Garrett Beaty79339e182023-04-10 20:45:472871 ):
Stephen Martinis5bef0fc2020-01-06 22:47:532872 fbb.check_input_file_consistency(verbose=True)
2873 joined_lines = '\n'.join(fbb.printed_lines)
Jamie Madillcf4f8c72021-05-20 19:24:232874 self.assertRegex(joined_lines, '.*\- a_test')
2875 self.assertRegex(joined_lines, '.*\+ a_test')
Stephen Martinis54d64ad2018-09-21 22:16:202876 fbb.printed_lines = []
2877 self.assertFalse(fbb.printed_lines)
2878
2879 def test_type_assert_printing_help(self):
Garrett Beaty1afaccc2020-06-25 19:58:152880 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:202881 LUCI_MILO_CFG)
Garrett Beaty79339e182023-04-10 20:45:472882 with self.assertRaisesRegex(
2883 generate_buildbot_json.BBGenErr,
Garrett Beaty807011ab2023-04-12 00:52:392884 f'Invalid \.pyl file \'{re.escape(self.args.test_suites_pyl_path)}\'.*',
2885 ):
Stephen Martinis54d64ad2018-09-21 22:16:202886 fbb.check_input_file_consistency(verbose=True)
Jamie Madillcf4f8c72021-05-20 19:24:232887 self.assertEqual(fbb.printed_lines, [
Garrett Beaty79339e182023-04-10 20:45:472888 f'== {self.args.test_suites_pyl_path} ==',
Jamie Madillcf4f8c72021-05-20 19:24:232889 '<snip>',
2890 '1 {',
2891 "2 'basic_suites': {",
2892 '--------------------------------------------------------------------'
2893 '------------',
2894 '3 3: {',
2895 '-------^------------------------------------------------------------'
2896 '------------',
2897 "4 'suite_c': {},",
2898 '5 },',
2899 '<snip>',
2900 ])
Stephen Martinis54d64ad2018-09-21 22:16:202901
Garrett Beatyb061e69d2023-06-27 16:15:352902 def test_mixin_append(self):
Garrett Beaty1afaccc2020-06-25 19:58:152903 fbb = FakeBBGen(self.args,
2904 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:412905 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412906 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352907 mixins=MIXIN_APPEND)
2908 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2909 r'.*\$mixin_append is no longer supported.*'):
2910 fbb.check_input_file_consistency(verbose=True)
Austin Eng148d9f0f2022-02-08 19:18:532911 self.assertFalse(fbb.printed_lines)
2912
Garrett Beaty4c35b142023-06-23 21:01:232913 def test_swarming_named_caches(self):
2914 fbb = FakeBBGen(self.args,
2915 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2916 FOO_TEST_SUITE_WITH_SWARMING_NAMED_CACHES,
2917 LUCI_MILO_CFG,
2918 mixins=SWARMING_NAMED_CACHES)
2919 fbb.check_output_file_consistency(verbose=True)
2920 self.assertFalse(fbb.printed_lines)
2921
Garrett Beaty4c35b142023-06-23 21:01:232922 def test_args_field_not_list(self):
2923 fbb = FakeBBGen(self.args,
2924 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2925 FOO_TEST_SUITE_WITH_ARGS,
2926 LUCI_MILO_CFG,
2927 mixins=MIXIN_ARGS_NOT_LIST)
2928 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
2929 '"args" must be a list'):
2930 fbb.check_output_file_consistency(verbose=True)
2931 self.assertFalse(fbb.printed_lines)
2932
2933 def test_args_field_merging(self):
2934 fbb = FakeBBGen(self.args,
2935 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2936 FOO_TEST_SUITE_WITH_ARGS,
2937 LUCI_MILO_CFG,
2938 mixins=MIXIN_ARGS)
Garrett Beaty4c35b142023-06-23 21:01:232939 fbb.check_output_file_consistency(verbose=True)
2940 self.assertFalse(fbb.printed_lines)
2941
Garrett Beatyb061e69d2023-06-27 16:15:352942 def test_linux_args_field_merging(self):
Garrett Beaty1afaccc2020-06-25 19:58:152943 fbb = FakeBBGen(self.args,
Garrett Beatyb061e69d2023-06-27 16:15:352944 FOO_LINUX_GTESTS_BUILDER_MIXIN_WATERFALL,
2945 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412946 LUCI_MILO_CFG,
Garrett Beatyb061e69d2023-06-27 16:15:352947 mixins=MIXIN_LINUX_ARGS)
2948 fbb.check_output_file_consistency(verbose=True)
Wezc0e835b702018-10-30 00:38:412949 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:202950
Brian Sheedy7658c982020-01-08 02:27:582951 def test_remove_mixin_builder_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152952 fbb = FakeBBGen(self.args,
2953 FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582954 FOO_TEST_SUITE,
2955 LUCI_MILO_CFG,
2956 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582957 fbb.check_output_file_consistency(verbose=True)
2958 self.assertFalse(fbb.printed_lines)
2959
2960 def test_remove_mixin_test_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:152961 fbb = FakeBBGen(self.args,
2962 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582963 FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN,
2964 LUCI_MILO_CFG,
2965 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582966 fbb.check_output_file_consistency(verbose=True)
2967 self.assertFalse(fbb.printed_lines)
2968
2969 def test_remove_mixin_test_remove_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:152970 fbb = FakeBBGen(self.args,
2971 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:582972 FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN,
2973 LUCI_MILO_CFG,
2974 mixins=SWARMING_MIXINS)
Brian Sheedy7658c982020-01-08 02:27:582975 fbb.check_output_file_consistency(verbose=True)
2976 self.assertFalse(fbb.printed_lines)
2977
Karen Qiane24b7ee2019-02-12 23:37:062978TEST_SUITE_WITH_PARAMS = """\
2979{
2980 'basic_suites': {
2981 'bar_tests': {
2982 'bar_test': {
2983 'args': ['--no-xvfb'],
2984 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252985 'dimensions': {
2986 'device_os': 'NMF26U'
2987 },
Karen Qiane24b7ee2019-02-12 23:37:062988 },
2989 'should_retry_with_patch': False,
Karen Qiane24b7ee2019-02-12 23:37:062990 },
2991 'bar_test_test': {
2992 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:252993 'dimensions': {
2994 'kvm': '1'
2995 },
Karen Qiane24b7ee2019-02-12 23:37:062996 'hard_timeout': 1000
2997 },
2998 'should_retry_with_patch': True
2999 }
3000 },
3001 'foo_tests': {
3002 'foo_test_empty': {},
3003 'foo_test': {
3004 'args': [
3005 '--jobs=1',
3006 '--verbose'
3007 ],
3008 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253009 'dimensions': {
3010 'device_os': 'MMB29Q'
3011 },
Karen Qiane24b7ee2019-02-12 23:37:063012 'hard_timeout': 1800
3013 }
3014 },
Garrett Beaty235c1412023-08-29 20:26:293015 'pls': {
Karen Qiane24b7ee2019-02-12 23:37:063016 'swarming': {
3017 },
Karen Qiane24b7ee2019-02-12 23:37:063018 },
3019 },
3020 },
3021 'compound_suites': {
3022 'composition_tests': [
3023 'foo_tests',
3024 'bar_tests',
3025 ],
3026 },
3027}
3028"""
3029TEST_QUERY_BOTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:333030 "Fake Android M Tester": {
3031 "gtest_tests": [{
Garrett Beatyffe83c4f2023-09-08 19:07:373032 "name": "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333033 "test": "foo_test",
3034 }]
3035 },
3036 "Fake Android L Tester": {
3037 "gtest_tests": [{
3038 "test":
3039 "foo_test",
3040 "args": [
3041 "--gs-results-bucket=chromium-result-details",
3042 "--recover-devices"
3043 ],
3044 "merge": {
3045 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3046 },
Garrett Beatyffe83c4f2023-09-08 19:07:373047 "name":
3048 "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333049 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253050 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333051 "device_os": "LMY41U",
3052 "device_os_type": "user",
3053 "device_type": "hammerhead",
3054 'os': 'Android'
Garrett Beatyade673d2023-08-04 22:00:253055 },
Karen Qiane24b7ee2019-02-12 23:37:063056 }
Garrett Beatybb18d532023-06-26 22:16:333057 }]
3058 },
3059 "Fake Android K Tester": {
3060 "additional_compile_targets": ["bar_test"],
3061 "gtest_tests": [{
3062 "test":
3063 "foo_test",
3064 "args": [
3065 "--gs-results-bucket=chromium-result-details",
3066 "--recover-devices"
3067 ],
3068 "merge": {
3069 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3070 },
Garrett Beatyffe83c4f2023-09-08 19:07:373071 "name":
3072 "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333073 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253074 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333075 "device_os": "KTU84P",
3076 "device_os_type": "userdebug",
3077 "device_type": "hammerhead",
3078 "os": "Android",
Garrett Beatyade673d2023-08-04 22:00:253079 },
Garrett Beatybb18d532023-06-26 22:16:333080 "output_links": [{
3081 "link": [
3082 "https://luci-logdog.appspot.com/v/?s",
3083 "=android%2Fswarming%2Flogcats%2F",
3084 "${TASK_ID}%2F%2B%2Funified_logcats"
3085 ],
3086 "name":
3087 "shard #${SHARD_INDEX} logcats"
3088 }]
Karen Qiane24b7ee2019-02-12 23:37:063089 }
Garrett Beatybb18d532023-06-26 22:16:333090 }]
3091 },
3092 "Android Builder": {
3093 "additional_compile_targets": ["bar_test"]
3094 }
Karen Qiane24b7ee2019-02-12 23:37:063095}
3096TEST_QUERY_BOTS_TESTS_OUTPUT = {
Garrett Beatybb18d532023-06-26 22:16:333097 "Fake Android M Tester": [{
Garrett Beatyffe83c4f2023-09-08 19:07:373098 "name": "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333099 "test": "foo_test",
3100 }],
3101 "Fake Android L Tester": [{
3102 "test":
3103 "foo_test",
3104 "args":
3105 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3106 "merge": {
3107 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3108 },
Garrett Beatyffe83c4f2023-09-08 19:07:373109 "name":
3110 "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333111 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253112 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333113 "device_os": "LMY41U",
3114 "device_os_type": "user",
3115 "device_type": "hammerhead",
3116 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253117 },
Garrett Beatybb18d532023-06-26 22:16:333118 }
3119 }],
3120 "Android Builder": [],
3121 "Fake Android K Tester": [{
3122 "test":
3123 "foo_test",
3124 "args":
3125 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
3126 "merge": {
3127 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3128 },
Garrett Beatyffe83c4f2023-09-08 19:07:373129 "name":
3130 "foo_test",
Garrett Beatybb18d532023-06-26 22:16:333131 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253132 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333133 "device_os": "KTU84P",
3134 "device_os_type": "userdebug",
3135 "device_type": "hammerhead",
3136 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253137 },
Garrett Beatybb18d532023-06-26 22:16:333138 "output_links": [{
3139 "link": [
3140 "https://luci-logdog.appspot.com/v/?s",
3141 "=android%2Fswarming%2Flogcats%2F",
3142 "${TASK_ID}%2F%2B%2Funified_logcats"
3143 ],
3144 "name":
3145 "shard #${SHARD_INDEX} logcats"
3146 }]
3147 }
3148 }]
Karen Qiane24b7ee2019-02-12 23:37:063149}
3150
3151TEST_QUERY_BOT_OUTPUT = {
Garrett Beatyade673d2023-08-04 22:00:253152 "additional_compile_targets": ["bar_test"],
3153 "gtest_tests": [
3154 {
3155 "test":
3156 "foo_test",
3157 "args": [
3158 "--gs-results-bucket=chromium-result-details",
3159 "--recover-devices",
3160 ],
3161 "merge": {
3162 "script": "//testing/merge_scripts/standard_gtest_merge.py",
3163 },
Garrett Beatyffe83c4f2023-09-08 19:07:373164 "name":
3165 "foo_test",
Garrett Beatyade673d2023-08-04 22:00:253166 "swarming": {
3167 "dimensions": {
3168 "device_os": "KTU84P",
3169 "device_os_type": "userdebug",
3170 "device_type": "hammerhead",
3171 "os": "Android",
3172 },
3173 "output_links": [
3174 {
3175 "link": [
3176 "https://luci-logdog.appspot.com/v/?s",
3177 "=android%2Fswarming%2Flogcats%2F",
3178 "${TASK_ID}%2F%2B%2Funified_logcats"
3179 ],
3180 "name":
3181 "shard #${SHARD_INDEX} logcats",
3182 },
3183 ],
3184 },
3185 },
3186 ],
Karen Qiane24b7ee2019-02-12 23:37:063187}
Garrett Beatybb18d532023-06-26 22:16:333188TEST_QUERY_BOT_TESTS_OUTPUT = [{
3189 "test":
3190 "foo_test",
3191 "args":
3192 ["--gs-results-bucket=chromium-result-details", "--recover-devices"],
Stephen Martinisbc7b7772019-05-01 22:01:433193 "merge": {
Garrett Beatybb18d532023-06-26 22:16:333194 "script": "//testing/merge_scripts/standard_gtest_merge.py"
Stephen Martinisbc7b7772019-05-01 22:01:433195 },
Garrett Beatyffe83c4f2023-09-08 19:07:373196 "name":
3197 "foo_test",
Karen Qiane24b7ee2019-02-12 23:37:063198 "swarming": {
Garrett Beatyade673d2023-08-04 22:00:253199 "dimensions": {
Garrett Beatybb18d532023-06-26 22:16:333200 "device_os": "LMY41U",
3201 "device_os_type": "user",
3202 "device_type": "hammerhead",
3203 "os": "Android"
Garrett Beatyade673d2023-08-04 22:00:253204 },
Karen Qiane24b7ee2019-02-12 23:37:063205 }
Garrett Beatybb18d532023-06-26 22:16:333206}]
Karen Qiane24b7ee2019-02-12 23:37:063207
3208TEST_QUERY_TESTS_OUTPUT = {
Ben Pastene338f56b2023-03-31 21:24:453209 "bar_test": {
Garrett Beatyffe83c4f2023-09-08 19:07:373210 'name': 'bar_test',
Ben Pastene338f56b2023-03-31 21:24:453211 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253212 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453213 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253214 },
Ben Pastene338f56b2023-03-31 21:24:453215 }
3216 },
3217 "foo_test": {
Garrett Beatyffe83c4f2023-09-08 19:07:373218 'name': 'foo_test',
Ben Pastene338f56b2023-03-31 21:24:453219 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:253220 'dimensions': {
Ben Pastene338f56b2023-03-31 21:24:453221 'os': 'Linux'
Garrett Beatyade673d2023-08-04 22:00:253222 },
Ben Pastene338f56b2023-03-31 21:24:453223 }
3224 }
Karen Qiane24b7ee2019-02-12 23:37:063225}
3226
3227TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ["foo_test"]
3228
3229TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ["bar_test"]
3230
3231TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ["bar_test_test"]
3232
3233TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3234
3235TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3236
Garrett Beatyffe83c4f2023-09-08 19:07:373237TEST_QUERY_TEST_OUTPUT = {
3238 'name': 'foo_test',
3239 'swarming': {
3240 'dimensions': {
3241 'os': 'Linux',
3242 },
3243 },
3244}
Karen Qiane24b7ee2019-02-12 23:37:063245
3246TEST_QUERY_TEST_BOTS_OUTPUT = [
Jamie Madillcf4f8c72021-05-20 19:24:233247 "Fake Android K Tester",
3248 "Fake Android L Tester",
3249 "Fake Android M Tester",
Karen Qiane24b7ee2019-02-12 23:37:063250]
3251
3252TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT = ['Fake Tester']
3253
3254TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT = []
3255
Garrett Beaty1afaccc2020-06-25 19:58:153256
3257class QueryTests(TestCase):
Karen Qiane24b7ee2019-02-12 23:37:063258 """Tests for the query feature."""
3259 def test_query_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473260 self.set_args('--query=bots')
Garrett Beaty1afaccc2020-06-25 19:58:153261 fbb = FakeBBGen(self.args,
3262 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063263 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413264 LUCI_MILO_CFG,
3265 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063266 fbb.query(fbb.args)
3267 query_json = json.loads("".join(fbb.printed_lines))
3268 self.assertEqual(query_json, TEST_QUERY_BOTS_OUTPUT)
3269
3270 def test_query_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473271 self.set_args('--query=bots/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153272 fbb = FakeBBGen(self.args,
3273 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063274 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413275 LUCI_MILO_CFG,
3276 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063277 with self.assertRaises(SystemExit) as cm:
3278 fbb.query(fbb.args)
3279 self.assertEqual(cm.exception.code, 1)
3280 self.assertTrue(fbb.printed_lines)
3281
3282 def test_query_bots_json(self):
Garrett Beaty79339e182023-04-10 20:45:473283 self.set_args('--query=bots', '--json=result.json')
Garrett Beaty1afaccc2020-06-25 19:58:153284 fbb = FakeBBGen(self.args,
3285 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063286 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413287 LUCI_MILO_CFG,
3288 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063289 fbb.query(fbb.args)
3290 self.assertFalse(fbb.printed_lines)
3291
3292 def test_query_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473293 self.set_args('--query=bots/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153294 fbb = FakeBBGen(self.args,
3295 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063296 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413297 LUCI_MILO_CFG,
3298 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063299 fbb.query(fbb.args)
3300 query_json = json.loads("".join(fbb.printed_lines))
3301 self.assertEqual(query_json, TEST_QUERY_BOTS_TESTS_OUTPUT)
3302
3303 def test_query_invalid_bots_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473304 self.set_args('--query=bots/tdfjdk')
Garrett Beaty1afaccc2020-06-25 19:58:153305 fbb = FakeBBGen(self.args,
3306 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063307 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413308 LUCI_MILO_CFG,
3309 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063310 with self.assertRaises(SystemExit) as cm:
3311 fbb.query(fbb.args)
3312 self.assertEqual(cm.exception.code, 1)
3313 self.assertTrue(fbb.printed_lines)
3314
3315 def test_query_bot(self):
Garrett Beaty79339e182023-04-10 20:45:473316 self.set_args('--query=bot/Fake Android K Tester')
Garrett Beaty1afaccc2020-06-25 19:58:153317 fbb = FakeBBGen(self.args,
3318 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063319 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413320 LUCI_MILO_CFG,
3321 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063322 fbb.query(fbb.args)
3323 query_json = json.loads("".join(fbb.printed_lines))
Garrett Beaty1afaccc2020-06-25 19:58:153324 self.maxDiff = None # pragma pylint: disable=attribute-defined-outside-init
Karen Qiane24b7ee2019-02-12 23:37:063325 self.assertEqual(query_json, TEST_QUERY_BOT_OUTPUT)
3326
3327 def test_query_bot_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473328 self.set_args('--query=bot/bot1')
Garrett Beaty1afaccc2020-06-25 19:58:153329 fbb = FakeBBGen(self.args,
3330 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063331 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413332 LUCI_MILO_CFG,
3333 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063334 with self.assertRaises(SystemExit) as cm:
3335 fbb.query(fbb.args)
3336 self.assertEqual(cm.exception.code, 1)
3337 self.assertTrue(fbb.printed_lines)
3338
3339 def test_query_bot_invalid_query_too_many(self):
Garrett Beaty79339e182023-04-10 20:45:473340 self.set_args('--query=bot/Fake Android K Tester/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153341 fbb = FakeBBGen(self.args,
3342 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063343 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413344 LUCI_MILO_CFG,
3345 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063346 with self.assertRaises(SystemExit) as cm:
3347 fbb.query(fbb.args)
3348 self.assertEqual(cm.exception.code, 1)
3349 self.assertTrue(fbb.printed_lines)
3350
3351 def test_query_bot_invalid_query_no_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473352 self.set_args('--query=bot/Fake Android K Tester/blahs')
Garrett Beaty1afaccc2020-06-25 19:58:153353 fbb = FakeBBGen(self.args,
3354 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063355 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413356 LUCI_MILO_CFG,
3357 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063358 with self.assertRaises(SystemExit) as cm:
3359 fbb.query(fbb.args)
3360 self.assertEqual(cm.exception.code, 1)
3361 self.assertTrue(fbb.printed_lines)
3362
3363 def test_query_bot_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473364 self.set_args('--query=bot/Fake Android L Tester/tests')
Garrett Beaty1afaccc2020-06-25 19:58:153365 fbb = FakeBBGen(self.args,
3366 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063367 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413368 LUCI_MILO_CFG,
3369 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063370 fbb.query(fbb.args)
3371 query_json = json.loads("".join(fbb.printed_lines))
3372 self.assertEqual(query_json, TEST_QUERY_BOT_TESTS_OUTPUT)
3373
3374 def test_query_tests(self):
Garrett Beaty79339e182023-04-10 20:45:473375 self.set_args('--query=tests')
Garrett Beaty1afaccc2020-06-25 19:58:153376 fbb = FakeBBGen(self.args,
3377 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063378 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413379 LUCI_MILO_CFG,
3380 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063381 fbb.query(fbb.args)
3382 query_json = json.loads("".join(fbb.printed_lines))
3383 self.assertEqual(query_json, TEST_QUERY_TESTS_OUTPUT)
3384
3385 def test_query_tests_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473386 self.set_args('--query=tests/blah/blah')
Garrett Beaty1afaccc2020-06-25 19:58:153387 fbb = FakeBBGen(self.args,
3388 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063389 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413390 LUCI_MILO_CFG,
3391 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063392 with self.assertRaises(SystemExit) as cm:
3393 fbb.query(fbb.args)
3394 self.assertEqual(cm.exception.code, 1)
3395 self.assertTrue(fbb.printed_lines)
3396
3397 def test_query_tests_multiple_params(self):
Garrett Beaty79339e182023-04-10 20:45:473398 self.set_args('--query=tests/--jobs=1&--verbose')
Garrett Beaty1afaccc2020-06-25 19:58:153399 fbb = FakeBBGen(self.args,
3400 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063401 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413402 LUCI_MILO_CFG,
3403 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063404 fbb.query(fbb.args)
3405 query_json = json.loads("".join(fbb.printed_lines))
3406 self.assertEqual(query_json, TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT)
3407
3408 def test_query_tests_invalid_params(self):
Garrett Beaty79339e182023-04-10 20:45:473409 self.set_args('--query=tests/device_os?')
Garrett Beaty1afaccc2020-06-25 19:58:153410 fbb = FakeBBGen(self.args,
3411 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063412 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413413 LUCI_MILO_CFG,
3414 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063415 with self.assertRaises(SystemExit) as cm:
3416 fbb.query(fbb.args)
3417 self.assertEqual(cm.exception.code, 1)
3418 self.assertTrue(fbb.printed_lines)
3419
3420 def test_query_tests_dimension_params(self):
Garrett Beaty79339e182023-04-10 20:45:473421 self.set_args('--query=tests/device_os:NMF26U')
Garrett Beaty1afaccc2020-06-25 19:58:153422 fbb = FakeBBGen(self.args,
3423 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063424 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413425 LUCI_MILO_CFG,
3426 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063427 fbb.query(fbb.args)
3428 query_json = json.loads("".join(fbb.printed_lines))
3429 self.assertEqual(query_json, TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT)
3430
3431 def test_query_tests_swarming_params(self):
Garrett Beaty79339e182023-04-10 20:45:473432 self.set_args('--query=tests/hard_timeout:1000')
Garrett Beaty1afaccc2020-06-25 19:58:153433 fbb = FakeBBGen(self.args,
3434 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063435 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413436 LUCI_MILO_CFG,
3437 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063438 fbb.query(fbb.args)
3439 query_json = json.loads("".join(fbb.printed_lines))
3440 self.assertEqual(query_json, TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT)
3441
3442 def test_query_tests_params(self):
Garrett Beaty79339e182023-04-10 20:45:473443 self.set_args('--query=tests/should_retry_with_patch:true')
Garrett Beaty1afaccc2020-06-25 19:58:153444 fbb = FakeBBGen(self.args,
3445 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063446 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413447 LUCI_MILO_CFG,
3448 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063449 fbb.query(fbb.args)
3450 query_json = json.loads("".join(fbb.printed_lines))
3451 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_OUTPUT)
3452
3453 def test_query_tests_params_false(self):
Garrett Beaty79339e182023-04-10 20:45:473454 self.set_args('--query=tests/should_retry_with_patch:false')
Garrett Beaty1afaccc2020-06-25 19:58:153455 fbb = FakeBBGen(self.args,
3456 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063457 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413458 LUCI_MILO_CFG,
3459 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063460 fbb.query(fbb.args)
3461 query_json = json.loads("".join(fbb.printed_lines))
3462 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT)
3463
3464 def test_query_test(self):
Garrett Beaty79339e182023-04-10 20:45:473465 self.set_args('--query=test/foo_test')
Garrett Beaty1afaccc2020-06-25 19:58:153466 fbb = FakeBBGen(self.args,
3467 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063468 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413469 LUCI_MILO_CFG,
3470 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063471 fbb.query(fbb.args)
3472 query_json = json.loads("".join(fbb.printed_lines))
3473 self.assertEqual(query_json, TEST_QUERY_TEST_OUTPUT)
3474
3475 def test_query_test_invalid_id(self):
Garrett Beaty79339e182023-04-10 20:45:473476 self.set_args('--query=test/foo_foo')
Garrett Beaty1afaccc2020-06-25 19:58:153477 fbb = FakeBBGen(self.args,
3478 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063479 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413480 LUCI_MILO_CFG,
3481 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063482 with self.assertRaises(SystemExit) as cm:
3483 fbb.query(fbb.args)
3484 self.assertEqual(cm.exception.code, 1)
3485 self.assertTrue(fbb.printed_lines)
3486
3487 def test_query_test_invalid_length(self):
Garrett Beaty79339e182023-04-10 20:45:473488 self.set_args('--query=test/foo_tests/foo/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153489 fbb = FakeBBGen(self.args,
3490 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063491 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413492 LUCI_MILO_CFG,
3493 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063494 with self.assertRaises(SystemExit) as cm:
3495 fbb.query(fbb.args)
3496 self.assertEqual(cm.exception.code, 1)
3497 self.assertTrue(fbb.printed_lines)
3498
3499 def test_query_test_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473500 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153501 fbb = FakeBBGen(self.args,
3502 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063503 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413504 LUCI_MILO_CFG,
3505 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063506 fbb.query(fbb.args)
3507 query_json = json.loads("".join(fbb.printed_lines))
3508 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_OUTPUT)
3509
3510 def test_query_test_bots_isolated_scripts(self):
Garrett Beaty79339e182023-04-10 20:45:473511 self.set_args('--query=test/foo_test/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153512 fbb = FakeBBGen(self.args,
3513 FOO_ISOLATED_SCRIPTS_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063514 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413515 LUCI_MILO_CFG,
3516 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063517 fbb.query(fbb.args)
3518 query_json = json.loads("".join(fbb.printed_lines))
3519 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT)
3520
3521 def test_query_test_bots_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473522 self.set_args('--query=test/foo_tests/foo')
Garrett Beaty1afaccc2020-06-25 19:58:153523 fbb = FakeBBGen(self.args,
3524 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063525 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413526 LUCI_MILO_CFG,
3527 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063528 with self.assertRaises(SystemExit) as cm:
3529 fbb.query(fbb.args)
3530 self.assertEqual(cm.exception.code, 1)
3531 self.assertTrue(fbb.printed_lines)
3532
3533 def test_query_test_bots_no_bots(self):
Garrett Beaty79339e182023-04-10 20:45:473534 self.set_args('--query=test/bar_tests/bots')
Garrett Beaty1afaccc2020-06-25 19:58:153535 fbb = FakeBBGen(self.args,
3536 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063537 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413538 LUCI_MILO_CFG,
3539 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063540 fbb.query(fbb.args)
3541 query_json = json.loads("".join(fbb.printed_lines))
3542 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT)
3543
3544 def test_query_invalid(self):
Garrett Beaty79339e182023-04-10 20:45:473545 self.set_args('--query=foo')
Garrett Beaty1afaccc2020-06-25 19:58:153546 fbb = FakeBBGen(self.args,
3547 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:063548 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413549 LUCI_MILO_CFG,
3550 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063551 with self.assertRaises(SystemExit) as cm:
3552 fbb.query(fbb.args)
3553 self.assertEqual(cm.exception.code, 1)
3554 self.assertTrue(fbb.printed_lines)
3555
Brian Sheedye6ea0ee2019-07-11 02:54:373556
3557FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES = """\
3558{
3559 'basic_suites': {
3560 'foo_tests': {
3561 'foo_test': {
3562 'args': [
3563 '--enable-features',
3564 'Foo,Bar',
3565 ],
3566 },
3567 },
3568 },
3569}
3570"""
3571
3572
3573FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE = """\
3574{
3575 'foo_test': {
3576 'replacements': {
3577 'Fake Tester': {
3578 'args': {
3579 '--c_arg': None,
3580 },
3581 },
3582 },
3583 },
3584}
3585"""
3586
3587
3588FOO_TEST_REPLACEMENTS_REMOVE_VALUE = """\
3589{
3590 'foo_test': {
3591 'replacements': {
3592 'Fake Tester': {
3593 'args': {
3594 '--enable-features': None,
3595 },
3596 },
3597 },
3598 },
3599}
3600"""
3601
3602
3603FOO_TEST_REPLACEMENTS_REPLACE_VALUE = """\
3604{
3605 'foo_test': {
3606 'replacements': {
3607 'Fake Tester': {
3608 'args': {
3609 '--enable-features': 'Bar,Baz',
3610 },
3611 },
3612 },
3613 },
3614}
3615"""
3616
3617
3618FOO_TEST_REPLACEMENTS_INVALID_KEY = """\
3619{
3620 'foo_test': {
3621 'replacements': {
3622 'Fake Tester': {
3623 'invalid': {
3624 '--enable-features': 'Bar,Baz',
3625 },
3626 },
3627 },
3628 },
3629}
3630"""
3631
3632
Garrett Beaty1afaccc2020-06-25 19:58:153633class ReplacementTests(TestCase):
Brian Sheedye6ea0ee2019-07-11 02:54:373634 """Tests for the arg replacement feature."""
3635 def test_replacement_valid_remove_no_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153636 fbb = FakeBBGen(self.args,
3637 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373638 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413639 LUCI_MILO_CFG,
3640 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373641 fbb.check_output_file_consistency(verbose=True)
3642 self.assertFalse(fbb.printed_lines)
3643
3644 def test_replacement_valid_remove_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153645 fbb = FakeBBGen(self.args,
3646 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373647 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413648 LUCI_MILO_CFG,
3649 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373650 fbb.check_output_file_consistency(verbose=True)
3651 self.assertFalse(fbb.printed_lines)
3652
3653 def test_replacement_valid_replace_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:153654 fbb = FakeBBGen(self.args,
3655 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373656 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:413657 LUCI_MILO_CFG,
3658 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373659 fbb.check_output_file_consistency(verbose=True)
3660 self.assertFalse(fbb.printed_lines)
3661
3662 def test_replacement_valid_replace_value_separate_entries(self):
Garrett Beaty1afaccc2020-06-25 19:58:153663 fbb = FakeBBGen(self.args,
3664 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373665 FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES,
Nodir Turakulovfce34292019-12-18 17:05:413666 LUCI_MILO_CFG,
3667 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:373668 fbb.check_output_file_consistency(verbose=True)
3669 self.assertFalse(fbb.printed_lines)
3670
3671 def test_replacement_invalid_key_not_valid(self):
Garrett Beaty1afaccc2020-06-25 19:58:153672 fbb = FakeBBGen(self.args,
3673 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373674 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413675 LUCI_MILO_CFG,
3676 exceptions=FOO_TEST_REPLACEMENTS_INVALID_KEY)
Jamie Madillcf4f8c72021-05-20 19:24:233677 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3678 'Given replacement key *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373679 fbb.check_output_file_consistency(verbose=True)
3680
3681 def test_replacement_invalid_key_not_found(self):
Garrett Beaty1afaccc2020-06-25 19:58:153682 fbb = FakeBBGen(self.args,
3683 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:373684 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413685 LUCI_MILO_CFG,
3686 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Jamie Madillcf4f8c72021-05-20 19:24:233687 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3688 'Could not find *'):
Brian Sheedye6ea0ee2019-07-11 02:54:373689 fbb.check_output_file_consistency(verbose=True)
3690
Jeff Yoon8154e582019-12-03 23:30:013691
Brian Sheedya31578e2020-05-18 20:24:363692FOO_TEST_SUITE_WITH_MAGIC_ARGS = """\
3693{
3694 'basic_suites': {
3695 'foo_tests': {
3696 'foo_test': {
3697 'args': [
3698 '$$MAGIC_SUBSTITUTION_TestOnlySubstitution',
3699 ],
3700 },
3701 },
3702 },
3703}
3704"""
3705
3706
3707FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS = """\
3708{
3709 'basic_suites': {
3710 'foo_tests': {
3711 'foo_test': {
3712 'args': [
3713 '$$MAGIC_SUBSTITUTION_NotARealSubstitution',
3714 ],
3715 },
3716 },
3717 },
3718}
3719"""
3720
3721
Garrett Beaty1afaccc2020-06-25 19:58:153722class MagicSubstitutionTests(TestCase):
Brian Sheedya31578e2020-05-18 20:24:363723 """Tests for the magic substitution feature."""
3724 def test_valid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153725 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3726 FOO_TEST_SUITE_WITH_MAGIC_ARGS, LUCI_MILO_CFG)
Brian Sheedya31578e2020-05-18 20:24:363727 fbb.check_output_file_consistency(verbose=True)
3728 self.assertFalse(fbb.printed_lines)
3729
3730 def test_invalid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:153731 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
3732 FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:233733 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
3734 'Magic substitution function *'):
Brian Sheedya31578e2020-05-18 20:24:363735 fbb.check_output_file_consistency(verbose=True)
3736
3737
Jeff Yoon8154e582019-12-03 23:30:013738# Matrix compound composition test suites
3739
3740MATRIX_COMPOUND_EMPTY = """\
3741{
3742 'basic_suites': {
3743 'bar_tests': {
3744 'bar_test': {},
3745 },
3746 'foo_tests': {
3747 'foo_test': {},
3748 },
3749 },
3750 'matrix_compound_suites': {
3751 'matrix_tests': {
3752 'foo_tests': {},
3753 'bar_tests': {},
3754 },
3755 },
3756}
3757"""
3758
Sven Zhengb51bd0482022-08-26 18:26:253759MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION = """\
3760{
3761 'basic_suites': {
3762 'bar_tests': {
3763 'bar_test': {
3764 'description': 'This is a bar test',
3765 },
3766 },
3767 'foo_tests': {
3768 'foo_test': {},
3769 },
3770 },
3771 'matrix_compound_suites': {
3772 'matrix_tests': {
3773 'foo_tests': {},
3774 'bar_tests': {},
3775 },
3776 },
3777}
3778"""
3779
Jeff Yoon67c3e832020-02-08 07:39:383780MATRIX_COMPOUND_MISSING_IDENTIFIER = """\
Jeff Yoon8154e582019-12-03 23:30:013781{
3782 'basic_suites': {
3783 'foo_tests': {
3784 'foo_test': {},
3785 },
3786 },
3787 'matrix_compound_suites': {
3788 'matrix_tests': {
3789 'foo_tests': {
Jeff Yoon67c3e832020-02-08 07:39:383790 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403791 'missing-identifier',
Jeff Yoon67c3e832020-02-08 07:39:383792 ],
Jeff Yoon8154e582019-12-03 23:30:013793 },
3794 },
3795 },
3796}
3797"""
3798
Garrett Beaty2022db42023-08-29 17:22:403799VARIANTS_FILE_MISSING_IDENTIFIER = """\
3800{
3801 'missing-identifier': {}
3802}
3803"""
3804
Sven Zhengef0d0872022-04-04 22:13:293805MATRIX_COMPOUND_EMPTY_IDENTIFIER = """\
3806{
3807 'basic_suites': {
3808 'foo_tests': {
3809 'foo_test': {},
3810 },
3811 },
3812 'matrix_compound_suites': {
3813 'matrix_tests': {
3814 'foo_tests': {
3815 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403816 'empty-identifier',
Sven Zhengef0d0872022-04-04 22:13:293817 ],
3818 },
3819 },
3820 },
3821}
3822"""
3823
Garrett Beaty2022db42023-08-29 17:22:403824EMPTY_IDENTIFIER_VARIANTS = """\
3825{
3826 'empty-identifier': {
3827 'identifier': '',
3828 'swarming': {
3829 'dimensions': {
3830 'foo': 'empty identifier not allowed',
3831 },
3832 },
3833 },
3834}
3835"""
3836
Sven Zhengef0d0872022-04-04 22:13:293837MATRIX_COMPOUND_TRAILING_IDENTIFIER = """\
3838{
3839 'basic_suites': {
3840 'foo_tests': {
3841 'foo_test': {},
3842 },
3843 },
3844 'matrix_compound_suites': {
3845 'matrix_tests': {
3846 'foo_tests': {
3847 'variants': [
Garrett Beaty2022db42023-08-29 17:22:403848 'trailing-whitespace',
Sven Zhengef0d0872022-04-04 22:13:293849 ],
3850 },
Garrett Beaty2022db42023-08-29 17:22:403851 },
3852 },
3853}
3854"""
3855
3856TRAILING_WHITESPACE_VARIANTS = """\
3857{
3858 'trailing-whitespace': {
3859 'identifier': 'id ',
3860 'swarming': {
3861 'dimensions': {
3862 'foo': 'trailing whitespace not allowed',
Sven Zhengef0d0872022-04-04 22:13:293863 },
3864 },
3865 },
3866}
3867"""
3868
Jeff Yoon8154e582019-12-03 23:30:013869MATRIX_REF_NONEXISTENT = """\
3870{
3871 'basic_suites': {
3872 'foo_tests': {
3873 'foo_test': {},
3874 },
3875 },
3876 'matrix_compound_suites': {
3877 'matrix_tests': {
3878 'bar_test': {},
3879 },
3880 },
3881}
3882"""
3883
Jeff Yoon67c3e832020-02-08 07:39:383884MATRIX_COMPOUND_REF_COMPOSITION = """\
Jeff Yoon8154e582019-12-03 23:30:013885{
3886 'basic_suites': {
3887 'foo_tests': {
3888 'foo_test': {},
3889 },
3890 },
3891 'compound_suites': {
3892 'sample_composition': {
3893 'foo_tests': {},
3894 },
3895 },
3896 'matrix_compound_suites': {
3897 'matrix_tests': {
3898 'sample_composition': {},
3899 },
3900 },
3901}
3902"""
3903
3904MATRIX_COMPOSITION_REF_MATRIX = """\
3905{
3906 'basic_suites': {
3907 'foo_tests': {
3908 'foo_test': {},
3909 },
3910 },
3911 'matrix_compound_suites': {
3912 'a_test': {
3913 'foo_tests': {},
3914 },
3915 'matrix_tests': {
3916 'a_test': {},
3917 },
3918 },
3919}
3920"""
3921
Jeff Yoon67c3e832020-02-08 07:39:383922MATRIX_COMPOUND_VARIANTS_MIXINS_MERGE = """\
3923{
3924 'basic_suites': {
3925 'foo_tests': {
3926 'set': {
3927 'mixins': [ 'test_mixin' ],
3928 },
3929 },
3930 },
3931 'matrix_compound_suites': {
3932 'matrix_tests': {
3933 'foo_tests': {
3934 'variants': [
3935 {
3936 'mixins': [ 'dimension_mixin' ],
3937 },
3938 ],
3939 },
3940 },
3941 },
3942}
3943"""
3944
3945MATRIX_COMPOUND_VARIANTS_MIXINS = """\
3946{
3947 'basic_suites': {
3948 'foo_tests': {
3949 'set': {
3950 'mixins': [ 'test_mixin' ],
3951 },
3952 },
3953 },
3954 'matrix_compound_suites': {
3955 'matrix_tests': {
3956 'foo_tests': {
3957 'variants': [
3958 {
3959 'mixins': [
3960 'dimension_mixin',
3961 'waterfall_mixin',
3962 'builder_mixin',
3963 'random_mixin'
3964 ],
3965 },
3966 ],
3967 },
3968 },
3969 },
3970}
3971"""
3972
3973MATRIX_COMPOUND_VARIANTS_MIXINS_REMOVE = """\
3974{
3975 'basic_suites': {
3976 'foo_tests': {
3977 'set': {
3978 'remove_mixins': ['builder_mixin'],
3979 },
3980 },
3981 },
3982 'matrix_compound_suites': {
3983 'matrix_tests': {
3984 'foo_tests': {
3985 'variants': [
3986 {
3987 'mixins': [ 'builder_mixin' ],
3988 }
3989 ],
3990 },
3991 },
3992 },
3993}
3994"""
3995
3996MATRIX_COMPOUND_CONFLICTING_TEST_SUITES = """\
3997{
3998 'basic_suites': {
3999 'bar_tests': {
4000 'baz_tests': {
4001 'args': [
4002 '--bar',
4003 ],
4004 }
4005 },
4006 'foo_tests': {
4007 'baz_tests': {
4008 'args': [
4009 '--foo',
4010 ],
4011 }
4012 },
4013 },
4014 'matrix_compound_suites': {
4015 'matrix_tests': {
4016 'bar_tests': {
4017 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404018 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:384019 ],
4020 },
4021 'foo_tests': {
4022 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404023 'a_variant',
Jeff Yoon67c3e832020-02-08 07:39:384024 ]
4025 }
4026 },
4027 },
4028}
4029"""
4030
Garrett Beaty60a7b2a2023-09-13 23:00:404031MATRIX_COMPOUND_EMPTY_VARIANTS = """\
4032{
4033 'basic_suites': {
4034 'foo_tests': {
4035 'baz_tests': {
4036 'args': [
4037 '--foo',
4038 ],
4039 }
4040 },
4041 },
4042 'matrix_compound_suites': {
4043 'matrix_tests': {
4044 'foo_tests': {
4045 'variants': [],
4046 }
4047 },
4048 },
4049}
4050"""
4051
Jeff Yoon67c3e832020-02-08 07:39:384052MATRIX_COMPOUND_TARGETS_ARGS = """\
4053{
4054 'basic_suites': {
4055 'foo_tests': {
4056 'args_test': {
4057 'args': [
4058 '--iam'
4059 ],
4060 },
4061 }
4062 },
4063 'matrix_compound_suites': {
4064 'matrix_tests': {
4065 'foo_tests': {
4066 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404067 'an-arg',
Jeff Yoon67c3e832020-02-08 07:39:384068 ],
4069 },
4070 },
4071 },
4072}
4073"""
4074
Garrett Beaty2022db42023-08-29 17:22:404075ARGS_VARIANTS_FILE = """\
4076{
4077 'an-arg': {
4078 'identifier': 'args',
4079 'args': [
4080 '--anarg',
4081 ],
4082 },
4083}
4084"""
4085
Jeff Yoon67c3e832020-02-08 07:39:384086MATRIX_COMPOUND_TARGETS_MIXINS = """\
4087{
4088 'basic_suites': {
4089 'foo_tests': {
4090 'mixins_test': {
4091 'mixins': [ 'test_mixin' ],
4092 },
4093 }
4094 },
4095 'matrix_compound_suites': {
4096 'matrix_tests': {
4097 'foo_tests': {
Jeff Yoon85fb8df2020-08-20 16:47:434098 'mixins': [ 'random_mixin' ],
Jeff Yoon67c3e832020-02-08 07:39:384099 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404100 'mixins',
Jeff Yoon67c3e832020-02-08 07:39:384101 ],
4102 },
4103 },
4104 },
4105}
4106"""
4107
Garrett Beaty2022db42023-08-29 17:22:404108MIXINS_VARIANTS_FILE = """\
4109{
4110 'mixins': {
4111 'identifier': 'mixins',
4112 'mixins': [ 'dimension_mixin' ],
4113 },
4114}
4115"""
4116
Jeff Yoon67c3e832020-02-08 07:39:384117MATRIX_COMPOUND_TARGETS_SWARMING = """\
4118{
4119 'basic_suites': {
4120 'foo_tests': {
4121 'swarming_test': {
4122 'swarming': {
4123 'foo': 'bar',
Garrett Beatyade673d2023-08-04 22:00:254124 'dimensions': {
4125 'foo': 'bar',
4126 },
Jeff Yoon67c3e832020-02-08 07:39:384127 },
4128 },
4129 }
4130 },
4131 'matrix_compound_suites': {
4132 'matrix_tests': {
4133 'foo_tests': {
4134 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404135 'swarming-variant',
Jeff Yoon67c3e832020-02-08 07:39:384136 ],
4137 },
4138 },
4139 },
4140}
4141"""
Jeff Yoon8154e582019-12-03 23:30:014142
Garrett Beaty2022db42023-08-29 17:22:404143SWARMING_VARIANTS_FILE = """\
4144{
4145 'swarming-variant': {
4146 'identifier': 'swarming',
4147 'swarming': {
4148 'a': 'b',
4149 'dimensions': {
4150 'hello': 'world',
4151 },
4152 },
4153 },
4154}
4155"""
4156
Jeff Yoonda581c32020-03-06 03:56:054157MATRIX_COMPOUND_VARIANTS_REF = """\
4158{
4159 'basic_suites': {
4160 'foo_tests': {
4161 'swarming_test': {},
4162 }
4163 },
4164 'matrix_compound_suites': {
4165 'matrix_tests': {
4166 'foo_tests': {
4167 'variants': [
4168 'a_variant'
4169 ],
4170 },
4171 },
4172 },
4173}
4174"""
4175
Sven Zhengb51bd0482022-08-26 18:26:254176MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION = """\
4177{
4178 'basic_suites': {
4179 'foo_tests': {
4180 'swarming_test': {
4181 'description': 'This is a swarming test.'
4182 },
4183 }
4184 },
4185 'matrix_compound_suites': {
4186 'matrix_tests': {
4187 'foo_tests': {
4188 'variants': [
4189 'a_variant'
4190 ],
4191 },
4192 },
4193 },
4194}
4195"""
4196
Rakib M. Hasanc9e01c62020-07-27 22:48:124197MATRIX_COMPOUND_TEST_WITH_TEST_KEY = """\
4198{
4199 'basic_suites': {
4200 'foo_tests': {
4201 'swarming_test': {
4202 'test': 'foo_test_apk'
4203 },
4204 }
4205 },
4206 'matrix_compound_suites': {
4207 'matrix_tests': {
4208 'foo_tests': {
4209 'variants': [
4210 'a_variant',
4211 ],
4212 },
4213 },
4214 },
4215}
4216"""
4217
Jeff Yoonda581c32020-03-06 03:56:054218MATRIX_COMPOUND_MIXED_VARIANTS_REF = """\
4219{
4220 'basic_suites': {
4221 'foo_tests': {
4222 'swarming_test': {},
4223 }
4224 },
4225 'matrix_compound_suites': {
4226 'matrix_tests': {
4227 'foo_tests': {
4228 'variants': [
4229 'a_variant',
Garrett Beaty2022db42023-08-29 17:22:404230 'b_variant',
Jeff Yoonda581c32020-03-06 03:56:054231 ],
4232 },
4233 },
4234 },
4235}
4236"""
4237
4238VARIANTS_FILE = """\
4239{
4240 'a_variant': {
4241 'args': [
4242 '--platform',
4243 'device',
4244 '--version',
4245 '1'
4246 ],
4247 'identifier': 'a_variant'
4248 }
4249}
4250"""
4251
Sven Zhengb51bd0482022-08-26 18:26:254252VARIANTS_FILE_WITH_DESCRIPTION = """\
4253{
4254 'a_variant': {
4255 'identifier': 'a_variant',
4256 'description': 'Variant description.'
4257 }
4258}
4259"""
4260
Jeff Yoonda581c32020-03-06 03:56:054261MULTI_VARIANTS_FILE = """\
4262{
4263 'a_variant': {
4264 'args': [
4265 '--platform',
4266 'device',
4267 '--version',
4268 '1'
4269 ],
4270 'identifier': 'a_variant'
4271 },
4272 'b_variant': {
4273 'args': [
4274 '--platform',
4275 'sim',
4276 '--version',
4277 '2'
4278 ],
4279 'identifier': 'b_variant'
4280 }
4281}
4282"""
4283
Jeff Yoon8154e582019-12-03 23:30:014284# # Dictionary composition test suite outputs
4285
Xinan Lin05fb9c1752020-12-17 00:15:524286EMPTY_SKYLAB_TEST_EXCEPTIONS = """\
4287{
Sven Zhengef0d0872022-04-04 22:13:294288 'tast.foo OCTOPUS_TOT': {
Xinan Lin05fb9c1752020-12-17 00:15:524289 'remove_from': [
4290 'Fake Tester',
4291 ]
4292 },
Sven Zhengef0d0872022-04-04 22:13:294293 'tast.foo OCTOPUS_TOT-1': {
Xinan Lin05fb9c1752020-12-17 00:15:524294 'remove_from': [
4295 'Fake Tester',
4296 ]
4297 }
4298}
4299"""
4300
4301MATRIX_SKYLAB_WATERFALL = """\
4302[
4303 {
4304 'project': 'chromium',
4305 'bucket': 'ci',
4306 'name': 'chromium.test',
4307 'machines': {
4308 'Fake Tester': {
4309 'test_suites': {
4310 'skylab_tests': 'cros_skylab_basic_x86',
4311 },
4312 },
4313 },
4314 },
4315]
4316"""
4317
4318MATRIX_COMPOUND_SKYLAB_REF = """\
4319{
4320 'basic_suites': {
4321 'cros_skylab_basic': {
4322 'tast.basic': {
4323 'suite': 'tast.basic',
4324 'timeout': 3600,
4325 },
4326 'tast.foo': {
4327 'suite': 'tast.foo',
4328 'timeout': 3600,
4329 },
4330 },
4331 },
4332 'compound_suites': {},
4333 'matrix_compound_suites': {
4334 'cros_skylab_basic_x86': {
4335 'cros_skylab_basic': {
4336 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404337 'octopus-89',
4338 'octopus-88',
4339 ],
Jieting Yangef6b1042021-11-30 21:33:484340 },
4341 },
4342 },
4343}
4344"""
4345
Garrett Beaty2022db42023-08-29 17:22:404346SKYLAB_VARIANTS = """\
4347{
4348 'octopus-89': {
4349 'skylab': {
4350 'cros_board': 'octopus',
4351 'cros_chrome_version': '89.0.3234.0',
4352 'cros_img': 'octopus-release/R89-13655.0.0',
4353 },
4354 'enabled': True,
4355 'identifier': 'OCTOPUS_TOT',
4356 },
4357 'octopus-88': {
4358 'skylab': {
4359 'cros_board': 'octopus',
4360 'cros_chrome_version': '88.0.2324.0',
4361 'cros_img': 'octopus-release/R88-13597.23.0',
4362 },
4363 'enabled': True,
4364 'identifier': 'OCTOPUS_TOT-1',
4365 },
4366}
4367"""
4368
Jieting Yangef6b1042021-11-30 21:33:484369ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF = """\
4370{
4371 'basic_suites': {
4372 'cros_skylab_basic': {
4373 'tast.basic': {
4374 'suite': 'tast.basic',
4375 'timeout': 3600,
4376 },
4377 'tast.foo': {
4378 'suite': 'tast.foo',
4379 'timeout': 3600,
4380 },
4381 },
4382 },
4383 'compound_suites': {},
4384 'matrix_compound_suites': {
4385 'cros_skylab_basic_x86': {
4386 'cros_skylab_basic': {
4387 'variants': [
Garrett Beaty2022db42023-08-29 17:22:404388 'enabled',
4389 'disabled',
4390 ],
Xinan Lin05fb9c1752020-12-17 00:15:524391 },
4392 },
4393 },
4394}
4395"""
4396
Garrett Beaty2022db42023-08-29 17:22:404397ENABLED_AND_DISABLED_VARIANTS = """\
4398{
4399 'enabled': {
4400 'skylab': {
4401 'cros_board': 'octopus',
4402 'cros_chrome_version': '89.0.3234.0',
4403 'cros_img': 'octopus-release/R89-13655.0.0',
4404 },
4405 'enabled': True,
4406 'identifier': 'OCTOPUS_TOT',
4407 },
4408 'disabled': {
4409 'skylab': {
4410 'cros_board': 'octopus',
4411 'cros_chrome_version': '88.0.2324.0',
4412 'cros_img': 'octopus-release/R88-13597.23.0',
4413 },
4414 'enabled': False,
4415 'identifier': 'OCTOPUS_TOT-1',
4416 },
4417}
4418"""
4419
Garrett Beaty1afaccc2020-06-25 19:58:154420
4421class MatrixCompositionTests(TestCase):
Jeff Yoon8154e582019-12-03 23:30:014422
4423 def test_good_structure_no_configs(self):
4424 """
4425 Tests matrix compound test suite structure with no configs,
4426 no conflicts and no bad references
4427 """
Garrett Beaty1afaccc2020-06-25 19:58:154428 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4429 MATRIX_COMPOUND_EMPTY, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014430 fbb.check_output_file_consistency(verbose=True)
4431 self.assertFalse(fbb.printed_lines)
4432
Sven Zhengb51bd0482022-08-26 18:26:254433 def test_good_structure_with_description(self):
4434 """
4435 Tests matrix compound test suite structure with description.
4436 """
4437 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4438 MATRIX_COMPOUND_EMPTY_WITH_DESCRIPTION, LUCI_MILO_CFG)
Sven Zhengb51bd0482022-08-26 18:26:254439 fbb.check_output_file_consistency(verbose=True)
4440 self.assertFalse(fbb.printed_lines)
4441
Jeff Yoon67c3e832020-02-08 07:39:384442 def test_missing_identifier(self):
Jeff Yoon8154e582019-12-03 23:30:014443 """
Jeff Yoon67c3e832020-02-08 07:39:384444 Variant is missing an identifier
Jeff Yoon8154e582019-12-03 23:30:014445 """
Garrett Beaty2022db42023-08-29 17:22:404446 fbb = FakeBBGen(self.args,
4447 MATRIX_GTEST_SUITE_WATERFALL,
4448 MATRIX_COMPOUND_MISSING_IDENTIFIER,
4449 LUCI_MILO_CFG,
4450 variants=VARIANTS_FILE_MISSING_IDENTIFIER)
Jamie Madillcf4f8c72021-05-20 19:24:234451 with self.assertRaisesRegex(
4452 generate_buildbot_json.BBGenErr,
Jeff Yoon67c3e832020-02-08 07:39:384453 'Missing required identifier field in matrix compound suite*'):
4454 fbb.check_output_file_consistency(verbose=True)
Jeff Yoon8154e582019-12-03 23:30:014455
Sven Zhengef0d0872022-04-04 22:13:294456 def test_empty_identifier(self):
4457 """
4458 Variant identifier is empty.
4459 """
Garrett Beaty2022db42023-08-29 17:22:404460 fbb = FakeBBGen(self.args,
4461 MATRIX_GTEST_SUITE_WATERFALL,
4462 MATRIX_COMPOUND_EMPTY_IDENTIFIER,
4463 LUCI_MILO_CFG,
4464 variants=EMPTY_IDENTIFIER_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294465 with self.assertRaisesRegex(
4466 generate_buildbot_json.BBGenErr,
4467 'Identifier field can not be "" in matrix compound suite*'):
4468 fbb.check_output_file_consistency(verbose=True)
4469
4470 def test_trailing_identifier(self):
4471 """
4472 Variant identifier has trailing whitespace.
4473 """
Garrett Beaty2022db42023-08-29 17:22:404474 fbb = FakeBBGen(self.args,
4475 MATRIX_GTEST_SUITE_WATERFALL,
4476 MATRIX_COMPOUND_TRAILING_IDENTIFIER,
4477 LUCI_MILO_CFG,
4478 variants=TRAILING_WHITESPACE_VARIANTS)
Sven Zhengef0d0872022-04-04 22:13:294479 with self.assertRaisesRegex(
4480 generate_buildbot_json.BBGenErr,
4481 'Identifier field can not have leading and trailing whitespace in'
4482 ' matrix compound suite*'):
4483 fbb.check_output_file_consistency(verbose=True)
4484
Jeff Yoon8154e582019-12-03 23:30:014485 def test_noexistent_ref(self):
4486 """
4487 Test referencing a non-existent basic test suite
4488 """
Garrett Beaty1afaccc2020-06-25 19:58:154489 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4490 MATRIX_REF_NONEXISTENT, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234491 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4492 'Unable to find reference to *'):
Jeff Yoon8154e582019-12-03 23:30:014493 fbb.check_output_file_consistency(verbose=True)
4494
4495 def test_ref_to_composition(self):
4496 """
4497 Test referencing another composition test suite
4498 """
Garrett Beaty1afaccc2020-06-25 19:58:154499 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4500 MATRIX_COMPOUND_REF_COMPOSITION, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234501 with self.assertRaisesRegex(
4502 generate_buildbot_json.BBGenErr,
4503 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014504 fbb.check_output_file_consistency(verbose=True)
4505
4506 def test_ref_to_matrix(self):
4507 """
4508 Test referencing another matrix test suite
4509 """
Garrett Beaty1afaccc2020-06-25 19:58:154510 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4511 MATRIX_COMPOSITION_REF_MATRIX, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234512 with self.assertRaisesRegex(
4513 generate_buildbot_json.BBGenErr,
4514 'matrix_compound_suites may not refer to other *'):
Jeff Yoon8154e582019-12-03 23:30:014515 fbb.check_output_file_consistency(verbose=True)
4516
Jeff Yoon67c3e832020-02-08 07:39:384517 def test_conflicting_names(self):
Garrett Beaty2022db42023-08-29 17:22:404518 fbb = FakeBBGen(self.args,
4519 MATRIX_GTEST_SUITE_WATERFALL,
4520 MATRIX_COMPOUND_CONFLICTING_TEST_SUITES,
4521 LUCI_MILO_CFG,
4522 variants=VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234523 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4524 'Conflicting test definitions.*'):
Jeff Yoon67c3e832020-02-08 07:39:384525 fbb.check_input_file_consistency(verbose=True)
4526 self.assertFalse(fbb.printed_lines)
4527
Garrett Beaty60a7b2a2023-09-13 23:00:404528 def test_empty_variants(self):
4529 fbb = FakeBBGen(self.args,
4530 MATRIX_GTEST_SUITE_WATERFALL,
4531 MATRIX_COMPOUND_EMPTY_VARIANTS,
4532 LUCI_MILO_CFG,
4533 mixins=SWARMING_MIXINS)
4534 fbb.check_output_file_consistency(verbose=True)
4535 self.assertFalse(fbb.printed_lines)
4536
Jeff Yoon67c3e832020-02-08 07:39:384537 def test_variants_swarming_dict_merge_args(self):
4538 """
4539 Test targets with swarming dictionary defined by both basic and matrix
4540 """
Garrett Beaty1afaccc2020-06-25 19:58:154541 fbb = FakeBBGen(self.args,
4542 MATRIX_GTEST_SUITE_WATERFALL,
4543 MATRIX_COMPOUND_TARGETS_ARGS,
4544 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404545 mixins=SWARMING_MIXINS,
4546 variants=ARGS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384547 fbb.check_output_file_consistency(verbose=True)
4548 self.assertFalse(fbb.printed_lines)
4549
4550 def test_variants_swarming_dict_merge_mixins(self):
4551 """
4552 Test targets with swarming dictionary defined by both basic and matrix
4553 """
Garrett Beaty1afaccc2020-06-25 19:58:154554 fbb = FakeBBGen(self.args,
4555 MATRIX_GTEST_SUITE_WATERFALL,
4556 MATRIX_COMPOUND_TARGETS_MIXINS,
4557 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404558 mixins=SWARMING_MIXINS,
4559 variants=MIXINS_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384560 fbb.check_output_file_consistency(verbose=True)
4561 self.assertFalse(fbb.printed_lines)
4562
4563 def test_variants_swarming_dict_swarming(self):
4564 """
4565 Test targets with swarming dictionary defined by both basic and matrix
4566 """
Garrett Beaty1afaccc2020-06-25 19:58:154567 fbb = FakeBBGen(self.args,
4568 MATRIX_GTEST_SUITE_WATERFALL,
4569 MATRIX_COMPOUND_TARGETS_SWARMING,
4570 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404571 variants=SWARMING_VARIANTS_FILE)
Jeff Yoon67c3e832020-02-08 07:39:384572 fbb.check_output_file_consistency(verbose=True)
4573 self.assertFalse(fbb.printed_lines)
4574
Rakib M. Hasanc9e01c62020-07-27 22:48:124575 def test_variant_test_suite_with_test_key(self):
4576 """
4577 Test targets in matrix compound test suites with variants
4578 """
4579 fbb = FakeBBGen(self.args,
4580 MATRIX_GTEST_SUITE_WATERFALL,
4581 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
4582 LUCI_MILO_CFG,
4583 variants=VARIANTS_FILE)
Rakib M. Hasanc9e01c62020-07-27 22:48:124584 fbb.check_output_file_consistency(verbose=True)
4585 self.assertFalse(fbb.printed_lines)
4586
Sven Zhengb51bd0482022-08-26 18:26:254587 def test_variants_with_description(self):
4588 """Test variants with description field"""
4589 fbb = FakeBBGen(self.args,
4590 MATRIX_GTEST_SUITE_WATERFALL,
4591 MATRIX_COMPOUND_VARIANTS_REF,
4592 LUCI_MILO_CFG,
4593 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254594 fbb.check_output_file_consistency(verbose=True)
4595 self.assertFalse(fbb.printed_lines)
4596
4597 def test_both_test_suite_and_variants_with_description(self):
4598 """Test both test suite and variants with description field"""
4599 fbb = FakeBBGen(self.args,
4600 MATRIX_GTEST_SUITE_WATERFALL,
4601 MATRIX_COMPOUND_VARIANTS_REF_WITH_DESCRIPTION,
4602 LUCI_MILO_CFG,
4603 variants=VARIANTS_FILE_WITH_DESCRIPTION)
Sven Zhengb51bd0482022-08-26 18:26:254604 fbb.check_output_file_consistency(verbose=True)
4605 self.assertFalse(fbb.printed_lines)
4606
Jeff Yoonda581c32020-03-06 03:56:054607 def test_variants_pyl_ref(self):
4608 """Test targets with variants string ref"""
Garrett Beaty1afaccc2020-06-25 19:58:154609 fbb = FakeBBGen(self.args,
4610 MATRIX_GTEST_SUITE_WATERFALL,
4611 MATRIX_COMPOUND_VARIANTS_REF,
4612 LUCI_MILO_CFG,
4613 variants=VARIANTS_FILE)
Jeff Yoonda581c32020-03-06 03:56:054614 fbb.check_output_file_consistency(verbose=True)
4615 self.assertFalse(fbb.printed_lines)
4616
4617 def test_variants_pyl_no_ref(self):
4618 """Test targets with variants string ref, not defined in variants.pyl"""
Garrett Beaty1afaccc2020-06-25 19:58:154619 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
4620 MATRIX_COMPOUND_VARIANTS_REF, LUCI_MILO_CFG)
Jamie Madillcf4f8c72021-05-20 19:24:234621 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4622 'Missing variant definition for *'):
Jeff Yoonda581c32020-03-06 03:56:054623 fbb.check_output_file_consistency(verbose=True)
4624
4625 def test_variants_pyl_all_unreferenced(self):
4626 """Test targets with variants in variants.pyl, unreferenced in tests"""
Garrett Beaty1afaccc2020-06-25 19:58:154627 fbb = FakeBBGen(self.args,
4628 MATRIX_GTEST_SUITE_WATERFALL,
Garrett Beaty2022db42023-08-29 17:22:404629 MATRIX_COMPOUND_VARIANTS_REF,
Garrett Beaty1afaccc2020-06-25 19:58:154630 LUCI_MILO_CFG,
4631 variants=MULTI_VARIANTS_FILE)
Jamie Madillcf4f8c72021-05-20 19:24:234632 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4633 'The following variants were unreferenced *'):
Jeff Yoonda581c32020-03-06 03:56:054634 fbb.check_input_file_consistency(verbose=True)
4635
Xinan Lin05fb9c1752020-12-17 00:15:524636 def test_good_skylab_matrix_with_variants(self):
4637 fbb = FakeBBGen(self.args,
4638 MATRIX_SKYLAB_WATERFALL,
4639 MATRIX_COMPOUND_SKYLAB_REF,
4640 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404641 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4642 variants=SKYLAB_VARIANTS)
Xinan Lin05fb9c1752020-12-17 00:15:524643 fbb.check_input_file_consistency(verbose=True)
4644 fbb.check_output_file_consistency(verbose=True)
4645 self.assertFalse(fbb.printed_lines)
4646
Jieting Yangef6b1042021-11-30 21:33:484647 def test_enabled_and_disabled_skylab_matrix_with_variants(self):
4648 """Test with disabled variants"""
4649 fbb = FakeBBGen(self.args,
4650 MATRIX_SKYLAB_WATERFALL,
4651 ENABLED_AND_DISABLED_MATRIX_COMPOUND_SKYLAB_REF,
4652 LUCI_MILO_CFG,
Garrett Beaty2022db42023-08-29 17:22:404653 exceptions=EMPTY_SKYLAB_TEST_EXCEPTIONS,
4654 variants=ENABLED_AND_DISABLED_VARIANTS)
Jieting Yangef6b1042021-11-30 21:33:484655 # some skylab test variant is disabled; the corresponding skylab tests
4656 # is not generated.
Jieting Yangef6b1042021-11-30 21:33:484657 fbb.check_input_file_consistency(verbose=True)
4658 fbb.check_output_file_consistency(verbose=True)
4659 self.assertFalse(fbb.printed_lines)
4660
Jeff Yoon8154e582019-12-03 23:30:014661
Dirk Pranke772f55f2021-04-28 04:51:164662MAC_TEST_SUITE = """\
4663{
4664 'basic_suites': {
4665 'foo_tests': {
4666 'foo_test': {
4667 },
4668 },
4669 },
4670}
4671"""
4672
Ben Pastene338f56b2023-03-31 21:24:454673NO_DIMENSIONS_GTESTS_WATERFALL = """\
Dirk Pranke772f55f2021-04-28 04:51:164674[
4675 {
4676 'project': 'chromium',
4677 'bucket': 'ci',
4678 'name': 'chromium.test',
4679 'machines': {
4680 'Mac': {
Garrett Beatybb18d532023-06-26 22:16:334681 'swarming': {},
Dirk Pranke772f55f2021-04-28 04:51:164682 'test_suites': {
4683 'gtest_tests': 'foo_tests',
4684 },
4685 },
4686 },
4687 },
4688]
4689"""
4690
Ben Pastene338f56b2023-03-31 21:24:454691NO_OS_GTESTS_WATERFALL = """\
4692[
4693 {
4694 'project': 'chromium',
4695 'bucket': 'ci',
4696 'name': 'chromium.test',
4697 'machines': {
4698 'Mac': {
4699 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254700 'dimensions': {
4701 'foo': 'bar',
4702 },
Ben Pastene338f56b2023-03-31 21:24:454703 },
4704 'test_suites': {
4705 'gtest_tests': 'foo_tests',
4706 },
4707 },
4708 },
4709 },
4710]
4711"""
4712
Dirk Pranke772f55f2021-04-28 04:51:164713MAC_ISOLATED_SCRIPTS_WATERFALL = """\
4714[
4715 {
4716 'project': 'chromium',
4717 'bucket': 'ci',
4718 'name': 'chromium.test',
4719 'machines': {
4720 'Mac': {
4721 'swarming': {
Garrett Beatyade673d2023-08-04 22:00:254722 'dimensions': {
4723 'os': 'Mac',
4724 },
Dirk Pranke772f55f2021-04-28 04:51:164725 },
4726 'test_suites': {
4727 'isolated_scripts': 'foo_tests',
4728 },
4729 },
4730 },
4731 },
4732]
4733"""
4734
Dirk Pranke772f55f2021-04-28 04:51:164735MAC_LUCI_MILO_CFG = """\
4736consoles {
4737 builders {
4738 name: "buildbucket/luci.chromium.ci/Mac"
4739 }
4740}
4741"""
4742
4743
4744class SwarmingTests(TestCase):
Ben Pastene338f56b2023-03-31 21:24:454745 def test_builder_with_no_dimension_fails(self):
4746 fbb = FakeBBGen(self.args, NO_DIMENSIONS_GTESTS_WATERFALL, MAC_TEST_SUITE,
Dirk Pranke772f55f2021-04-28 04:51:164747 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164748 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014749 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4750 'os must be specified for all swarmed tests'):
4751 fbb.check_output_file_consistency(verbose=True)
Ben Pastene338f56b2023-03-31 21:24:454752 self.assertFalse(fbb.printed_lines)
4753
4754 def test_builder_with_no_os_dimension_fails(self):
4755 fbb = FakeBBGen(self.args, NO_OS_GTESTS_WATERFALL, MAC_TEST_SUITE,
4756 MAC_LUCI_MILO_CFG)
4757 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014758 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4759 'os must be specified for all swarmed tests'):
4760 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164761 self.assertFalse(fbb.printed_lines)
4762
4763 def test_mac_builder_with_no_cpu_dimension_in_isolated_script_fails(self):
4764 fbb = FakeBBGen(self.args, MAC_ISOLATED_SCRIPTS_WATERFALL, MAC_TEST_SUITE,
4765 MAC_LUCI_MILO_CFG)
Dirk Pranke772f55f2021-04-28 04:51:164766 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty992342df2023-06-23 17:38:014767 with self.assertRaisesRegex(generate_buildbot_json.BBGenErr,
4768 'cpu must be specified for mac'):
4769 fbb.check_output_file_consistency(verbose=True)
Dirk Pranke772f55f2021-04-28 04:51:164770 self.assertFalse(fbb.printed_lines)
4771
4772
Kenneth Russelleb60cbd22017-12-05 07:54:284773if __name__ == '__main__':
4774 unittest.main()