blob: 266674f8d75beef43e11f1883b1dc17ea8fd8edc [file] [log] [blame]
Garrett Beaty86bb4962020-07-27 21:02:291#!/usr/bin/env vpython
Kenneth Russelleb60cbd22017-12-05 07:54:282# Copyright 2017 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for generate_buildbot_json.py."""
7
Zhiling Huangbe008172018-03-08 19:13:118import argparse
Garrett Beaty777c2912020-05-07 00:54:339import contextlib
10import json
Zhiling Huangbe008172018-03-08 19:13:1111import os
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
Nodir Turakulovfce34292019-12-18 17:05:4117EMPTY_PYL_FILE = """\
18{
19}
20"""
21
Garrett Beaty1afaccc2020-06-25 19:58:1522# Use this value to refer to the directory containing this code
23# The tests use a fake filesystem and python filesystem calls are monkey-patched
24# to use the fake filesystem, which affects abspath
25THIS_DIR = os.path.dirname(os.path.abspath(__file__))
26
27
28class TestCase(fake_filesystem_unittest.TestCase):
29 def setUp(self):
30 self.setUpPyfakefs()
31 self.fs.cwd = THIS_DIR
32 self.args = generate_buildbot_json.BBJSONGenerator.parse_args([])
33
34 def override_args(self, **kwargs):
35 for k, v in kwargs.iteritems():
36 setattr(self.args, k, v)
37
38 def create_testing_buildbot_json_file(self, path, contents):
39 return self.fs.create_file(os.path.join(THIS_DIR, path), contents=contents)
40
Kenneth Russelleb60cbd22017-12-05 07:54:2841
Garrett Beaty777c2912020-05-07 00:54:3342@contextlib.contextmanager
43def dump_on_failure(fbb, dump=True):
44 try:
45 yield
46 except:
47 if dump:
48 for l in fbb.printed_lines:
49 print l
50 raise
51
Kenneth Russelleb60cbd22017-12-05 07:54:2852class FakeBBGen(generate_buildbot_json.BBJSONGenerator):
Garrett Beaty1afaccc2020-06-25 19:58:1553 def __init__(self,
54 args,
55 waterfalls,
56 test_suites,
57 luci_milo_cfg,
Garrett Beaty4f3e9212020-06-25 20:21:4958 project_pyl='{"validate_source_side_specs_have_builder": True}',
Nodir Turakulovfce34292019-12-18 17:05:4159 exceptions=EMPTY_PYL_FILE,
60 mixins=EMPTY_PYL_FILE,
Jeff Yoonda581c32020-03-06 03:56:0561 gn_isolate_map=EMPTY_PYL_FILE,
62 variants=EMPTY_PYL_FILE):
Garrett Beaty1afaccc2020-06-25 19:58:1563 super(FakeBBGen, self).__init__(args)
64
65 pyl_files_dir = args.pyl_files_dir or THIS_DIR
66 infra_config_dir = args.infra_config_dir
67
68 files = {
69 (pyl_files_dir, 'waterfalls.pyl'): waterfalls,
70 (pyl_files_dir, 'test_suites.pyl'): test_suites,
71 (pyl_files_dir, 'test_suite_exceptions.pyl'): exceptions,
72 (pyl_files_dir, 'mixins.pyl'): mixins,
73 (pyl_files_dir, 'gn_isolate_map.pyl'): gn_isolate_map,
74 (pyl_files_dir, 'variants.pyl'): variants,
Garrett Beaty4f3e9212020-06-25 20:21:4975 (infra_config_dir, 'generated/project.pyl'): project_pyl,
Garrett Beaty1afaccc2020-06-25 19:58:1576 (infra_config_dir, 'generated/luci-milo.cfg'): luci_milo_cfg,
77 (infra_config_dir, 'generated/luci-milo-dev.cfg'): '',
Kenneth Russelleb60cbd22017-12-05 07:54:2878 }
Garrett Beaty1afaccc2020-06-25 19:58:1579 for (d, filename), content in files.iteritems():
Garrett Beaty4f3e9212020-06-25 20:21:4980 if content is None:
81 continue
Garrett Beaty1afaccc2020-06-25 19:58:1582 path = os.path.join(d, filename)
83 parent = os.path.abspath(os.path.dirname(path))
84 if not os.path.exists(parent):
85 os.makedirs(parent)
86 with open(path, 'w') as f:
87 f.write(content)
88
Stephen Martinis7eb8b612018-09-21 00:17:5089 self.printed_lines = []
90
91 def print_line(self, line):
92 self.printed_lines.append(line)
Kenneth Russelleb60cbd22017-12-05 07:54:2893
Kenneth Russell73c3bd8b2018-10-19 22:30:1994 # pragma pylint: disable=arguments-differ
95 def check_output_file_consistency(self, verbose=False, dump=True):
Garrett Beaty777c2912020-05-07 00:54:3396 with dump_on_failure(self, dump=verbose and dump):
Kenneth Russell73c3bd8b2018-10-19 22:30:1997 super(FakeBBGen, self).check_output_file_consistency(verbose)
Kenneth Russell73c3bd8b2018-10-19 22:30:1998# pragma pylint: enable=arguments-differ
99
Kenneth Russelleb60cbd22017-12-05 07:54:28100
101FOO_GTESTS_WATERFALL = """\
102[
103 {
Greg Gutermanf60eb052020-03-12 17:40:01104 'project': 'chromium',
105 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28106 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43107 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28108 'Fake Tester': {
109 'swarming': {
110 'dimension_sets': [
111 {
112 'kvm': '1',
113 },
114 ],
115 },
116 'test_suites': {
117 'gtest_tests': 'foo_tests',
118 },
119 },
120 },
121 },
122]
123"""
124
Kenneth Russell650995a2018-05-03 21:17:01125FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
126[
127 {
Greg Gutermanf60eb052020-03-12 17:40:01128 'project': 'chromium',
129 'bucket': 'ci',
Kenneth Russell650995a2018-05-03 21:17:01130 'name': 'chromium.test',
131 'machines': {
132 'Fake Tester': {
133 'test_suites': {
134 'gtest_tests': 'foo_tests',
135 },
136 'args': [
137 '--enable-features=Baz',
138 ],
139 },
140 },
141 },
142]
143"""
144
Ben Pastenea9e583b2019-01-16 02:57:26145FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL = """\
146[
147 {
Greg Gutermanf60eb052020-03-12 17:40:01148 'project': 'chromium',
149 'bucket': 'ci',
Ben Pastenea9e583b2019-01-16 02:57:26150 'name': 'chromium.test',
151 'machines': {
152 'Fake Tester': {
153 'swarming': {
154 'dimension_sets': [
155 {
156 "device_type": "foo_device",
157 },
158 ],
159 },
160 'test_suites': {
161 'gtest_tests': 'foo_tests',
162 },
163 'os_type': 'chromeos',
164 },
165 },
166 },
167]
168"""
Stephen Martinisf83893722018-09-19 00:02:18169
Kenneth Russell8a386d42018-06-02 09:48:01170FOO_LINUX_GTESTS_WATERFALL = """\
171[
172 {
Greg Gutermanf60eb052020-03-12 17:40:01173 'project': 'chromium',
174 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01175 'name': 'chromium.test',
176 'machines': {
177 'Fake Tester': {
178 'os_type': 'linux',
179 'test_suites': {
180 'gtest_tests': 'foo_tests',
181 },
182 },
183 },
184 },
185]
186"""
187
Kenneth Russelleb60cbd22017-12-05 07:54:28188COMPOSITION_GTEST_SUITE_WATERFALL = """\
189[
190 {
Greg Gutermanf60eb052020-03-12 17:40:01191 'project': 'chromium',
192 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28193 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43194 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28195 'Fake Tester': {
196 'test_suites': {
197 'gtest_tests': 'composition_tests',
198 },
199 },
200 },
201 },
202]
203"""
204
John Budorickedfe7f872018-01-23 15:27:22205COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
206[
207 {
Greg Gutermanf60eb052020-03-12 17:40:01208 'project': 'chromium',
209 'bucket': 'ci',
John Budorickedfe7f872018-01-23 15:27:22210 'name': 'chromium.test',
211 'machines': {
212 'Fake Tester': {
213 'test_suites': {
214 'gtest_tests': 'composition_tests',
215 },
216 'args': [
217 '--this-is-an-argument',
218 ],
219 },
220 },
221 },
222]
223"""
224
Kenneth Russelleb60cbd22017-12-05 07:54:28225FOO_ISOLATED_SCRIPTS_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 'isolated_scripts': 'composition_tests',
235 },
236 },
237 },
238 },
239]
240"""
241
Dirk Pranke0e879b22020-07-16 23:53:56242FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID = """\
243[
244 {
245 'project': 'chromium',
246 'bucket': 'ci',
247 'name': 'chromium.test',
248 'machines': {
249 'Fake Tester': {
250 'test_suites': {
251 'isolated_scripts': 'composition_tests',
252 },
253 'use_android_presentation': True,
254 },
255 },
256 },
257]
258"""
259
Kenneth Russelleb60cbd22017-12-05 07:54:28260FOO_SCRIPT_WATERFALL = """\
261[
262 {
Greg Gutermanf60eb052020-03-12 17:40:01263 'project': 'chromium',
264 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28265 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43266 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28267 'Fake Tester': {
268 'test_suites': {
269 'scripts': 'foo_scripts',
270 },
271 },
272 },
273 },
274]
275"""
276
Brian Sheedy158cd0f2019-04-26 01:12:44277FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS = """\
278[
279 {
Greg Gutermanf60eb052020-03-12 17:40:01280 'project': 'chromium',
281 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44282 'name': 'chromium.test',
283 'machines': {
284 'Fake Tester': {
285 'forbid_script_tests': True,
286 'test_suites': {
287 'scripts': 'foo_scripts',
288 },
289 },
290 },
291 },
292]
293"""
294
295FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS = """\
296[
297 {
Greg Gutermanf60eb052020-03-12 17:40:01298 'project': 'chromium',
299 'bucket': 'ci',
Brian Sheedy158cd0f2019-04-26 01:12:44300 'name': 'chromium.test',
301 'forbid_script_tests': True,
302 'machines': {
303 'Fake Tester': {
304 'test_suites': {
305 'scripts': 'foo_scripts',
306 },
307 },
308 },
309 },
310]
311"""
312
Kenneth Russelleb60cbd22017-12-05 07:54:28313FOO_JUNIT_WATERFALL = """\
314[
315 {
Greg Gutermanf60eb052020-03-12 17:40:01316 'project': 'chromium',
317 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28318 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43319 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28320 'Fake Tester': {
321 'test_suites': {
322 'junit_tests': 'composition_tests',
323 },
324 },
325 },
326 },
327]
328"""
329
Kenneth Russell8a386d42018-06-02 09:48:01330FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
331[
332 {
Greg Gutermanf60eb052020-03-12 17:40:01333 'project': 'chromium',
334 'bucket': 'ci',
Kenneth Russell8a386d42018-06-02 09:48:01335 'name': 'chromium.test',
336 'machines': {
337 'Fake Tester': {
338 'os_type': 'win',
339 'browser_config': 'release',
340 'swarming': {
341 'dimension_sets': [
342 {
343 'gpu': '10de:1cb3',
344 },
345 ],
346 },
347 'test_suites': {
348 'gpu_telemetry_tests': 'composition_tests',
349 },
350 },
351 },
352 },
353]
354"""
355
Kenneth Russell384a1732019-03-16 02:36:02356NVIDIA_GPU_TELEMETRY_TEST_WATERFALL = """\
357[
358 {
Greg Gutermanf60eb052020-03-12 17:40:01359 'project': 'chromium',
360 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02361 'name': 'chromium.test',
362 'machines': {
363 'Fake Tester': {
364 'os_type': 'win',
365 'browser_config': 'release',
366 'swarming': {
367 'dimension_sets': [
368 {
Brian Sheedy0e26c4e02020-05-28 22:09:09369 'gpu': '10de:1cb3-26.21.14.3102',
Kenneth Russell384a1732019-03-16 02:36:02370 },
371 ],
372 },
373 'test_suites': {
374 'gpu_telemetry_tests': 'composition_tests',
375 },
376 },
377 },
378 },
379]
380"""
381
382INTEL_GPU_TELEMETRY_TEST_WATERFALL = """\
383[
384 {
Greg Gutermanf60eb052020-03-12 17:40:01385 'project': 'chromium',
386 'bucket': 'ci',
Kenneth Russell384a1732019-03-16 02:36:02387 'name': 'chromium.test',
388 'machines': {
389 'Fake Tester': {
390 'os_type': 'win',
391 'browser_config': 'release',
392 'swarming': {
393 'dimension_sets': [
394 {
Brian Sheedy0e26c4e02020-05-28 22:09:09395 'gpu': '8086:5912-24.20.100.6286',
Kenneth Russell384a1732019-03-16 02:36:02396 },
397 ],
398 },
399 'test_suites': {
400 'gpu_telemetry_tests': 'composition_tests',
401 },
402 },
403 },
404 },
405]
406"""
407
Brian Sheedyf9387db7b2019-08-05 19:26:10408INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL = """\
409[
410 {
Greg Gutermanf60eb052020-03-12 17:40:01411 'project': 'chromium',
412 'bucket': 'ci',
Brian Sheedyf9387db7b2019-08-05 19:26:10413 'name': 'chromium.test',
414 'machines': {
415 'Fake Tester': {
416 'os_type': 'win',
417 'browser_config': 'release',
418 'swarming': {
419 'dimension_sets': [
420 {
Brian Sheedy0e26c4e02020-05-28 22:09:09421 'gpu': '8086:3e92-24.20.100.6286',
Brian Sheedyf9387db7b2019-08-05 19:26:10422 },
423 ],
424 },
425 'test_suites': {
426 'gpu_telemetry_tests': 'composition_tests',
427 },
428 },
429 },
430 },
431]
432"""
433
Kenneth Russelleb60cbd22017-12-05 07:54:28434UNKNOWN_TEST_SUITE_WATERFALL = """\
435[
436 {
Greg Gutermanf60eb052020-03-12 17:40:01437 'project': 'chromium',
438 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28439 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43440 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28441 'Fake Tester': {
442 'test_suites': {
443 'gtest_tests': 'baz_tests',
444 },
445 },
446 },
447 },
448]
449"""
450
451UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
452[
453 {
Greg Gutermanf60eb052020-03-12 17:40:01454 'project': 'chromium',
455 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28456 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43457 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28458 'Fake Tester': {
459 'test_suites': {
460 'gtest_tests': 'foo_tests',
461 'foo_test_type': 'foo_tests',
462 },
463 },
464 },
465 },
466]
467"""
468
469ANDROID_WATERFALL = """\
470[
471 {
Greg Gutermanf60eb052020-03-12 17:40:01472 'project': 'chromium',
473 'bucket': 'ci',
Kenneth Russelleb60cbd22017-12-05 07:54:28474 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43475 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28476 'Android Builder': {
477 'additional_compile_targets': [
478 'bar_test',
479 ],
480 },
Kenneth Russelleb60cbd22017-12-05 07:54:28481 'Fake Android K Tester': {
482 'additional_compile_targets': [
483 'bar_test',
484 ],
485 'swarming': {
486 'dimension_sets': [
487 {
488 'device_os': 'KTU84P',
489 'device_type': 'hammerhead',
Ben Pastened15aa8a2019-05-16 16:59:22490 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28491 },
492 ],
493 },
494 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49495 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28496 'test_suites': {
497 'gtest_tests': 'foo_tests',
498 },
499 },
500 'Fake Android L Tester': {
501 'swarming': {
502 'dimension_sets': [
503 {
Ben Pastenee012aea42019-05-14 22:32:28504 'device_os': 'LMY41U',
505 'device_os_type': 'user',
Kenneth Russelleb60cbd22017-12-05 07:54:28506 'device_type': 'hammerhead',
Ben Pastened15aa8a2019-05-16 16:59:22507 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28508 },
509 ],
510 },
511 'os_type': 'android',
512 'skip_merge_script': True,
513 'skip_output_links': True,
514 'test_suites': {
515 'gtest_tests': 'foo_tests',
516 },
517 },
518 'Fake Android M Tester': {
519 'swarming': {
520 'dimension_sets': [
521 {
522 'device_os': 'MMB29Q',
523 'device_type': 'bullhead',
Ben Pastened15aa8a2019-05-16 16:59:22524 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28525 },
526 ],
527 },
528 'os_type': 'android',
529 'use_swarming': False,
530 'test_suites': {
531 'gtest_tests': 'foo_tests',
532 },
533 },
534 },
535 },
536]
537"""
538
Nico Weberd18b8962018-05-16 19:39:38539UNKNOWN_BOT_GTESTS_WATERFALL = """\
540[
541 {
Greg Gutermanf60eb052020-03-12 17:40:01542 'project': 'chromium',
543 'bucket': 'ci',
Nico Weberd18b8962018-05-16 19:39:38544 'name': 'chromium.test',
545 'machines': {
546 'Unknown Bot': {
547 'test_suites': {
548 'gtest_tests': 'foo_tests',
549 },
550 },
551 },
552 },
553]
554"""
555
Jeff Yoon8154e582019-12-03 23:30:01556MATRIX_GTEST_SUITE_WATERFALL = """\
557[
558 {
Greg Gutermanf60eb052020-03-12 17:40:01559 'project': 'chromium',
560 'bucket': 'ci',
Jeff Yoon8154e582019-12-03 23:30:01561 'name': 'chromium.test',
562 'machines': {
563 'Fake Tester': {
564 'test_suites': {
565 'gtest_tests': 'matrix_tests',
566 },
567 },
568 },
569 },
570]
571"""
572
Jeff Yoon67c3e832020-02-08 07:39:38573MATRIX_GTEST_SUITE_WATERFALL_MIXINS = """\
574[
575 {
Greg Gutermanf60eb052020-03-12 17:40:01576 'project': 'chromium',
577 'bucket': 'ci',
Jeff Yoon67c3e832020-02-08 07:39:38578 'name': 'chromium.test',
579 'machines': {
580 'Fake Tester': {
581 'mixins': ['dimension_mixin'],
582 'test_suites': {
583 'gtest_tests': 'matrix_tests',
584 },
585 },
586 },
587 },
588]
589"""
590
Kenneth Russelleb60cbd22017-12-05 07:54:28591FOO_TEST_SUITE = """\
592{
Stephen Martinis54d64ad2018-09-21 22:16:20593 'basic_suites': {
594 'foo_tests': {
595 'foo_test': {
596 'swarming': {
597 'dimension_sets': [
598 {
599 'integrity': 'high',
600 }
601 ],
602 'expiration': 120,
603 },
Kenneth Russelleb60cbd22017-12-05 07:54:28604 },
605 },
606 },
607}
608"""
609
Brian Sheedycae63b22020-06-10 22:52:11610FOO_TEST_SUITE_NO_DIMENSIONS = """\
611{
612 'basic_suites': {
613 'foo_tests': {
614 'foo_test': {
615 },
616 },
617 },
618}
619"""
620
Stephen Martinis5bef0fc2020-01-06 22:47:53621FOO_TEST_SUITE_NOT_SORTED = """\
622{
623 'basic_suites': {
624 'foo_tests': {
625 'foo_test': {},
626 'a_test': {},
627 },
628 },
629}
630"""
631
Kenneth Russell8ceeabf2017-12-11 17:53:28632FOO_TEST_SUITE_WITH_ARGS = """\
633{
Stephen Martinis54d64ad2018-09-21 22:16:20634 'basic_suites': {
635 'foo_tests': {
636 'foo_test': {
637 'args': [
638 '--c_arg',
639 ],
640 },
Kenneth Russell8ceeabf2017-12-11 17:53:28641 },
642 },
643}
644"""
645
Kenneth Russell8a386d42018-06-02 09:48:01646FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
647{
Stephen Martinis54d64ad2018-09-21 22:16:20648 'basic_suites': {
649 'foo_tests': {
650 'foo_test': {
651 'linux_args': [
652 '--no-xvfb',
653 ],
654 },
Kenneth Russell8a386d42018-06-02 09:48:01655 },
656 },
657}
658"""
659
Kenneth Russell650995a2018-05-03 21:17:01660FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
661{
Stephen Martinis54d64ad2018-09-21 22:16:20662 'basic_suites': {
663 'foo_tests': {
664 'foo_test': {
665 'args': [
666 '--enable-features=Foo,Bar',
667 ],
668 },
Kenneth Russell650995a2018-05-03 21:17:01669 },
670 },
671}
672"""
673
Brian Sheedy7658c982020-01-08 02:27:58674FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN = """\
675{
676 'basic_suites': {
677 'foo_tests': {
678 'foo_test': {
679 'remove_mixins': ['waterfall_mixin'],
680 'swarming': {
681 'dimension_sets': [
682 {
683 'integrity': 'high',
684 }
685 ],
686 'expiration': 120,
687 },
688 },
689 },
690 },
691}
692"""
693
694FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN = """\
695{
696 'basic_suites': {
697 'foo_tests': {
698 'foo_test': {
699 'remove_mixins': ['builder_mixin'],
700 'swarming': {
701 'dimension_sets': [
702 {
703 'integrity': 'high',
704 }
705 ],
706 'expiration': 120,
707 },
708 },
709 },
710 },
711}
712"""
713
Stephen Martinisb6a50492018-09-12 23:59:32714
Kenneth Russelleb60cbd22017-12-05 07:54:28715FOO_SCRIPT_SUITE = """\
716{
Stephen Martinis54d64ad2018-09-21 22:16:20717 'basic_suites': {
718 'foo_scripts': {
719 'foo_test': {
720 'script': 'foo.py',
721 },
722 'bar_test': {
723 'script': 'bar.py',
724 },
Kenneth Russelleb60cbd22017-12-05 07:54:28725 },
726 },
727}
728"""
729
Kenneth Russelleb60cbd22017-12-05 07:54:28730GOOD_COMPOSITION_TEST_SUITES = """\
731{
Stephen Martinis54d64ad2018-09-21 22:16:20732 'basic_suites': {
733 'bar_tests': {
734 'bar_test': {},
735 },
736 'foo_tests': {
737 'foo_test': {},
738 },
Kenneth Russelleb60cbd22017-12-05 07:54:28739 },
Stephen Martinis54d64ad2018-09-21 22:16:20740 'compound_suites': {
741 'composition_tests': [
742 'foo_tests',
743 'bar_tests',
744 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28745 },
Kenneth Russelleb60cbd22017-12-05 07:54:28746}
747"""
748
749BAD_COMPOSITION_TEST_SUITES = """\
750{
Stephen Martinis54d64ad2018-09-21 22:16:20751 'basic_suites': {
752 'bar_tests': {},
753 'foo_tests': {},
754 },
755 'compound_suites': {
756 'buggy_composition_tests': [
757 'bar_tests',
758 ],
759 'composition_tests': [
760 'foo_tests',
761 'buggy_composition_tests',
762 ],
763 },
764}
765"""
766
Andrew Luo0f1dee02019-09-06 16:50:47767CONFLICTING_COMPOSITION_TEST_SUITES = """\
768{
769 'basic_suites': {
770 'bar_tests': {
771 'baz_tests': {
772 'args': [
773 '--bar',
774 ],
775 }
776 },
777 'foo_tests': {
778 'baz_tests': {
779 'args': [
780 '--foo',
781 ],
782 }
783 },
784 },
785 'compound_suites': {
786 'foobar_tests': [
787 'foo_tests',
788 'bar_tests',
789 ],
790 },
791}
792"""
793
Stephen Martinis54d64ad2018-09-21 22:16:20794DUPLICATES_COMPOSITION_TEST_SUITES = """\
795{
796 'basic_suites': {
797 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:01798 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:20799 'foo_tests': {},
800 },
801 'compound_suites': {
802 'bar_tests': [
803 'foo_tests',
804 ],
805 'composition_tests': [
806 'foo_tests',
807 'buggy_composition_tests',
808 ],
809 },
Kenneth Russelleb60cbd22017-12-05 07:54:28810}
811"""
812
Dirk Pranke1b767092017-12-07 04:44:23813SCRIPT_SUITE = """\
814{
Stephen Martinis54d64ad2018-09-21 22:16:20815 'basic_suites': {
816 'foo_scripts': {
817 'foo_test': {
818 'script': 'foo.py',
819 },
Dirk Pranke1b767092017-12-07 04:44:23820 },
821 },
822}
823"""
824
Kenneth Russelleb60cbd22017-12-05 07:54:28825UNREFED_TEST_SUITE = """\
826{
Stephen Martinis54d64ad2018-09-21 22:16:20827 'basic_suites': {
828 'bar_tests': {},
829 'foo_tests': {},
830 },
Kenneth Russelleb60cbd22017-12-05 07:54:28831}
832"""
833
834REUSING_TEST_WITH_DIFFERENT_NAME = """\
835{
Stephen Martinis54d64ad2018-09-21 22:16:20836 'basic_suites': {
837 'foo_tests': {
838 'foo_test': {},
839 'variation_test': {
840 'args': [
841 '--variation',
842 ],
843 'test': 'foo_test',
844 },
Kenneth Russelleb60cbd22017-12-05 07:54:28845 },
846 },
847}
848"""
849
Kenneth Russell8a386d42018-06-02 09:48:01850COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST = """\
851{
Stephen Martinis54d64ad2018-09-21 22:16:20852 'basic_suites': {
853 'foo_tests': {
854 'foo': {},
855 },
856 'bar_tests': {
857 'bar_test': {},
858 },
Kenneth Russell8a386d42018-06-02 09:48:01859 },
Stephen Martinis54d64ad2018-09-21 22:16:20860 'compound_suites': {
861 'composition_tests': [
862 'foo_tests',
863 'bar_tests',
864 ],
Kenneth Russell8a386d42018-06-02 09:48:01865 },
Kenneth Russell8a386d42018-06-02 09:48:01866}
867"""
868
Kenneth Russell384a1732019-03-16 02:36:02869COMPOSITION_SUITE_WITH_GPU_ARGS = """\
870{
871 'basic_suites': {
872 'foo_tests': {
873 'foo': {
874 'args': [
875 '--gpu-vendor-id',
876 '${gpu_vendor_id}',
877 '--gpu-device-id',
878 '${gpu_device_id}',
879 ],
880 },
881 },
882 'bar_tests': {
883 'bar_test': {},
884 },
885 },
886 'compound_suites': {
887 'composition_tests': [
888 'foo_tests',
889 'bar_tests',
890 ],
891 },
892}
893"""
894
Jamie Madilla8be0d72020-10-02 05:24:04895GTEST_AS_ISOLATED_SCRIPT_SUITE = """\
896{
897 'basic_suites': {
898 'foo_tests': {
899 'foo_test': {
900 'script': 'foo.py',
901 'use_isolated_scripts_api': True,
902 },
903 },
904 },
905}
906"""
907
Dirk Pranke1b767092017-12-07 04:44:23908SCRIPT_WITH_ARGS_EXCEPTIONS = """\
909{
910 'foo_test': {
911 'modifications': {
912 'Fake Tester': {
913 'args': ['--fake-arg'],
914 },
915 },
916 },
917}
918"""
919
Stephen Martinis0382bc12018-09-17 22:29:07920SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
921{
922 'foo_test': {
923 'modifications': {
924 'Fake Tester': {
925 'swarming': {
926 'value': 'exception',
927 },
928 },
929 },
930 },
931}
932"""
933
Kenneth Russelleb60cbd22017-12-05 07:54:28934NO_BAR_TEST_EXCEPTIONS = """\
935{
936 'bar_test': {
937 'remove_from': [
938 'Fake Tester',
939 ]
940 }
941}
942"""
943
944EMPTY_BAR_TEST_EXCEPTIONS = """\
945{
946 'bar_test': {
947 }
948}
949"""
950
Stephen Martinis54d64ad2018-09-21 22:16:20951EXCEPTIONS_SORTED = """\
952{
953 'suite_c': {
954 'modifications': {
955 'Fake Tester': {
956 'foo': 'bar',
957 },
958 },
959 },
960 'suite_d': {
961 'modifications': {
962 'Fake Tester': {
963 'foo': 'baz',
964 },
965 },
966 },
967}
968"""
969
970EXCEPTIONS_UNSORTED = """\
971{
972 'suite_d': {
973 'modifications': {
974 'Fake Tester': {
975 'foo': 'baz',
976 },
977 },
978 },
979 'suite_c': {
980 'modifications': {
981 'Fake Tester': {
982 'foo': 'bar',
983 },
984 },
985 },
986}
987"""
988
Stephen Martinis5bef0fc2020-01-06 22:47:53989EXCEPTIONS_PER_TEST_UNSORTED = """\
990{
991 'suite_d': {
992 'modifications': {
993 'Other Tester': {
994 'foo': 'baz',
995 },
996 'Fake Tester': {
997 'foo': 'baz',
998 },
999 },
1000 },
1001}
1002"""
1003
1004EXCEPTIONS_DUPS_REMOVE_FROM = """\
1005{
1006 'suite_d': {
1007 'remove_from': [
1008 'Fake Tester',
1009 'Fake Tester',
1010 ],
1011 'modifications': {
1012 'Fake Tester': {
1013 'foo': 'baz',
1014 },
1015 },
1016 },
1017}
1018"""
1019
Kenneth Russelleb60cbd22017-12-05 07:54:281020FOO_TEST_MODIFICATIONS = """\
1021{
1022 'foo_test': {
1023 'modifications': {
1024 'Fake Tester': {
1025 'args': [
1026 '--bar',
1027 ],
1028 'swarming': {
1029 'hard_timeout': 600,
1030 },
1031 },
1032 },
1033 }
1034}
1035"""
1036
John Budorick5bc387fe2019-05-09 20:02:531037FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
1038{
1039 'foo_test': {
1040 'modifications': {
1041 'Fake Tester': {
1042 'swarming': {
1043 'dimension_sets': [
1044 {
1045 'integrity': None,
1046 },
1047 ],
1048 },
1049 },
1050 },
1051 },
1052}
1053"""
1054
Kenneth Russelleb60cbd22017-12-05 07:54:281055NONEXISTENT_REMOVAL = """\
1056{
1057 'foo_test': {
1058 'remove_from': [
1059 'Nonexistent Tester',
1060 ]
1061 }
1062}
1063"""
1064
1065NONEXISTENT_MODIFICATION = """\
1066{
1067 'foo_test': {
1068 'modifications': {
1069 'Nonexistent Tester': {
1070 'args': [],
1071 },
1072 },
1073 }
1074}
1075"""
1076
1077COMPOSITION_WATERFALL_OUTPUT = """\
1078{
1079 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1080 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1081 "Fake Tester": {
1082 "gtest_tests": [
1083 {
Stephen Martinisbc7b7772019-05-01 22:01:431084 "merge": {
1085 "args": [],
1086 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1087 },
Kenneth Russelleb60cbd22017-12-05 07:54:281088 "swarming": {
1089 "can_use_on_swarming_builders": true
1090 },
1091 "test": "bar_test"
1092 },
1093 {
Stephen Martinisbc7b7772019-05-01 22:01:431094 "merge": {
1095 "args": [],
1096 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1097 },
Kenneth Russelleb60cbd22017-12-05 07:54:281098 "swarming": {
1099 "can_use_on_swarming_builders": true
1100 },
1101 "test": "foo_test"
1102 }
1103 ]
1104 }
1105}
1106"""
1107
John Budorickedfe7f872018-01-23 15:27:221108COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT = """\
1109{
1110 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1111 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1112 "Fake Tester": {
1113 "gtest_tests": [
1114 {
1115 "args": [
1116 "--this-is-an-argument"
1117 ],
Stephen Martinisbc7b7772019-05-01 22:01:431118 "merge": {
1119 "args": [],
1120 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1121 },
John Budorickedfe7f872018-01-23 15:27:221122 "swarming": {
1123 "can_use_on_swarming_builders": true
1124 },
1125 "test": "bar_test"
1126 },
1127 {
1128 "args": [
1129 "--this-is-an-argument"
1130 ],
Stephen Martinisbc7b7772019-05-01 22:01:431131 "merge": {
1132 "args": [],
1133 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1134 },
John Budorickedfe7f872018-01-23 15:27:221135 "swarming": {
1136 "can_use_on_swarming_builders": true
1137 },
1138 "test": "foo_test"
1139 }
1140 ]
1141 }
1142}
1143"""
1144
Kenneth Russelleb60cbd22017-12-05 07:54:281145VARIATION_GTEST_OUTPUT = """\
1146{
1147 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1148 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1149 "Fake Tester": {
1150 "gtest_tests": [
1151 {
Stephen Martinisbc7b7772019-05-01 22:01:431152 "merge": {
1153 "args": [],
1154 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1155 },
Kenneth Russelleb60cbd22017-12-05 07:54:281156 "swarming": {
1157 "can_use_on_swarming_builders": true,
1158 "dimension_sets": [
1159 {
1160 "kvm": "1"
1161 }
1162 ]
1163 },
Nodir Turakulovfce34292019-12-18 17:05:411164 "test": "foo_test",
Chan Lia3ad1502020-04-28 05:32:111165 "test_id_prefix": "ninja://chrome/test:foo_test/"
Kenneth Russelleb60cbd22017-12-05 07:54:281166 },
1167 {
1168 "args": [
1169 "--variation"
1170 ],
Stephen Martinisbc7b7772019-05-01 22:01:431171 "merge": {
1172 "args": [],
1173 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1174 },
Kenneth Russelleb60cbd22017-12-05 07:54:281175 "name": "variation_test",
1176 "swarming": {
1177 "can_use_on_swarming_builders": true,
1178 "dimension_sets": [
1179 {
1180 "kvm": "1"
1181 }
1182 ]
1183 },
Nodir Turakulovfce34292019-12-18 17:05:411184 "test": "foo_test",
Chan Lia3ad1502020-04-28 05:32:111185 "test_id_prefix": "ninja://chrome/test:foo_test/"
Kenneth Russelleb60cbd22017-12-05 07:54:281186 }
1187 ]
1188 }
1189}
1190"""
1191
Jamie Madilla8be0d72020-10-02 05:24:041192FOO_WATERFALL_GTEST_ISOLATED_SCRIPT_OUTPUT = """\
1193{
1194 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1195 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1196 "Fake Tester": {
1197 "gtest_tests": [
1198 {
1199 "merge": {
1200 "args": [],
1201 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1202 },
1203 "script": "foo.py",
1204 "swarming": {
1205 "can_use_on_swarming_builders": true,
1206 "dimension_sets": [
1207 {
1208 "kvm": "1"
1209 }
1210 ]
1211 },
1212 "test": "foo_test",
1213 "test_id_prefix": "ninja://chrome/test:foo_test/",
1214 "use_isolated_scripts_api": true
1215 }
1216 ]
1217 }
1218}
1219"""
1220
Kenneth Russelleb60cbd22017-12-05 07:54:281221COMPOSITION_WATERFALL_FILTERED_OUTPUT = """\
1222{
1223 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1224 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1225 "Fake Tester": {
1226 "gtest_tests": [
1227 {
Stephen Martinisbc7b7772019-05-01 22:01:431228 "merge": {
1229 "args": [],
1230 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1231 },
Kenneth Russelleb60cbd22017-12-05 07:54:281232 "swarming": {
1233 "can_use_on_swarming_builders": true
1234 },
1235 "test": "foo_test"
1236 }
1237 ]
1238 }
1239}
1240"""
1241
Kenneth Russell8ceeabf2017-12-11 17:53:281242MERGED_ARGS_OUTPUT = """\
1243{
1244 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1245 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1246 "Fake Tester": {
1247 "gtest_tests": [
1248 {
1249 "args": [
Stephen Martinis3bed2ab2018-04-23 19:42:061250 "--c_arg",
1251 "--bar"
Kenneth Russell8ceeabf2017-12-11 17:53:281252 ],
Stephen Martinisbc7b7772019-05-01 22:01:431253 "merge": {
1254 "args": [],
1255 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1256 },
Kenneth Russell8ceeabf2017-12-11 17:53:281257 "swarming": {
1258 "can_use_on_swarming_builders": true,
1259 "dimension_sets": [
1260 {
1261 "kvm": "1"
1262 }
1263 ],
1264 "hard_timeout": 600
1265 },
1266 "test": "foo_test"
1267 }
1268 ]
1269 }
1270}
1271"""
1272
Kenneth Russell8a386d42018-06-02 09:48:011273LINUX_ARGS_OUTPUT = """\
1274{
1275 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1276 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1277 "Fake Tester": {
1278 "gtest_tests": [
1279 {
1280 "args": [
1281 "--no-xvfb"
1282 ],
Stephen Martinisbc7b7772019-05-01 22:01:431283 "merge": {
1284 "args": [],
1285 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1286 },
Kenneth Russell8a386d42018-06-02 09:48:011287 "swarming": {
1288 "can_use_on_swarming_builders": true
1289 },
1290 "test": "foo_test"
1291 }
1292 ]
1293 }
1294}
1295"""
1296
Kenneth Russell650995a2018-05-03 21:17:011297MERGED_ENABLE_FEATURES_OUTPUT = """\
1298{
1299 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1300 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1301 "Fake Tester": {
1302 "gtest_tests": [
1303 {
1304 "args": [
1305 "--enable-features=Foo,Bar,Baz"
1306 ],
Stephen Martinisbc7b7772019-05-01 22:01:431307 "merge": {
1308 "args": [],
1309 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1310 },
Kenneth Russell650995a2018-05-03 21:17:011311 "swarming": {
1312 "can_use_on_swarming_builders": true
1313 },
1314 "test": "foo_test"
1315 }
1316 ]
1317 }
1318}
1319"""
1320
Kenneth Russelleb60cbd22017-12-05 07:54:281321MODIFIED_OUTPUT = """\
1322{
1323 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1324 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1325 "Fake Tester": {
1326 "gtest_tests": [
1327 {
1328 "args": [
1329 "--bar"
1330 ],
Stephen Martinisbc7b7772019-05-01 22:01:431331 "merge": {
1332 "args": [],
1333 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1334 },
Kenneth Russelleb60cbd22017-12-05 07:54:281335 "swarming": {
1336 "can_use_on_swarming_builders": true,
1337 "dimension_sets": [
1338 {
1339 "integrity": "high",
1340 "kvm": "1"
1341 }
1342 ],
1343 "expiration": 120,
1344 "hard_timeout": 600
1345 },
1346 "test": "foo_test"
1347 }
1348 ]
1349 }
1350}
1351"""
1352
John Budorick5bc387fe2019-05-09 20:02:531353EXPLICIT_NONE_OUTPUT = """\
1354{
1355 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1356 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1357 "Fake Tester": {
1358 "gtest_tests": [
1359 {
1360 "merge": {
1361 "args": [],
1362 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1363 },
1364 "swarming": {
1365 "can_use_on_swarming_builders": true,
1366 "dimension_sets": [
1367 {
1368 "kvm": "1"
1369 }
1370 ],
1371 "expiration": 120
1372 },
1373 "test": "foo_test"
1374 }
1375 ]
1376 }
1377}
1378"""
1379
Kenneth Russelleb60cbd22017-12-05 07:54:281380ISOLATED_SCRIPT_OUTPUT = """\
1381{
1382 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1383 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1384 "Fake Tester": {
1385 "isolated_scripts": [
1386 {
1387 "isolate_name": "foo_test",
Stephen Martinisf50047062019-05-06 22:26:171388 "merge": {
1389 "args": [],
1390 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1391 },
Kenneth Russelleb60cbd22017-12-05 07:54:281392 "name": "foo_test",
1393 "swarming": {
1394 "can_use_on_swarming_builders": true
1395 }
1396 }
1397 ]
1398 }
1399}
1400"""
1401
Dirk Pranke0e879b22020-07-16 23:53:561402ISOLATED_SCRIPT_OUTPUT_ANDROID = """\
1403{
1404 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1405 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1406 "Fake Tester": {
1407 "isolated_scripts": [
1408 {
1409 "args": [
1410 "--gs-results-bucket=chromium-result-details"
1411 ],
1412 "isolate_name": "foo_test",
1413 "merge": {
1414 "args": [
1415 "--bucket",
1416 "chromium-result-details",
1417 "--test-name",
1418 "foo_test"
1419 ],
1420 "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
1421 },
1422 "name": "foo_test",
1423 "swarming": {
1424 "can_use_on_swarming_builders": true,
1425 "cipd_packages": [
1426 {
1427 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1428 "location": "bin",
1429 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1430 }
1431 ],
1432 "output_links": [
1433 {
1434 "link": [
1435 "https://luci-logdog.appspot.com/v/?s",
1436 "=android%2Fswarming%2Flogcats%2F",
1437 "${TASK_ID}%2F%2B%2Funified_logcats"
1438 ],
1439 "name": "shard #${SHARD_INDEX} logcats"
1440 }
1441 ]
1442 }
1443 }
1444 ]
1445 }
1446}
1447"""
1448
Kenneth Russelleb60cbd22017-12-05 07:54:281449SCRIPT_OUTPUT = """\
1450{
1451 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1452 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1453 "Fake Tester": {
1454 "scripts": [
1455 {
1456 "name": "foo_test",
1457 "script": "foo.py"
1458 }
1459 ]
1460 }
1461}
1462"""
1463
Dirk Pranke1b767092017-12-07 04:44:231464SCRIPT_WITH_ARGS_OUTPUT = """\
1465{
1466 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1467 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1468 "Fake Tester": {
1469 "scripts": [
1470 {
1471 "args": [
1472 "--fake-arg"
1473 ],
1474 "name": "foo_test",
1475 "script": "foo.py"
1476 }
1477 ]
1478 }
1479}
1480"""
1481
Kenneth Russelleb60cbd22017-12-05 07:54:281482JUNIT_OUTPUT = """\
1483{
1484 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1485 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1486 "Fake Tester": {
1487 "junit_tests": [
1488 {
John Budorickcadc4952019-09-16 23:51:371489 "name": "foo_test",
Kenneth Russelleb60cbd22017-12-05 07:54:281490 "test": "foo_test"
1491 }
1492 ]
1493 }
1494}
1495"""
1496
Kenneth Russell8a386d42018-06-02 09:48:011497GPU_TELEMETRY_TEST_OUTPUT = """\
1498{
1499 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1500 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1501 "Fake Tester": {
1502 "isolated_scripts": [
1503 {
1504 "args": [
1505 "foo",
1506 "--show-stdout",
1507 "--browser=release",
1508 "--passthrough",
1509 "-v",
1510 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1511 ],
1512 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171513 "merge": {
1514 "args": [],
1515 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1516 },
Kenneth Russell8a386d42018-06-02 09:48:011517 "name": "foo_tests",
Kenneth Russell44910c32018-12-03 23:35:111518 "should_retry_with_patch": false,
Kenneth Russell8a386d42018-06-02 09:48:011519 "swarming": {
1520 "can_use_on_swarming_builders": true,
1521 "dimension_sets": [
1522 {
1523 "gpu": "10de:1cb3"
1524 }
erikchen6da2d9b2018-08-03 23:01:141525 ],
1526 "idempotent": false
Chan Liab7d8dd82020-04-24 23:42:191527 },
Chan Li17d969f92020-07-10 00:50:031528 "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
Kenneth Russell8a386d42018-06-02 09:48:011529 }
1530 ]
1531 }
1532}
1533"""
1534
Kenneth Russell384a1732019-03-16 02:36:021535NVIDIA_GPU_TELEMETRY_TEST_OUTPUT = """\
1536{
1537 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1538 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1539 "Fake Tester": {
1540 "isolated_scripts": [
1541 {
1542 "args": [
1543 "foo",
1544 "--show-stdout",
1545 "--browser=release",
1546 "--passthrough",
1547 "-v",
1548 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
1549 "--gpu-vendor-id",
1550 "10de",
1551 "--gpu-device-id",
1552 "1cb3"
1553 ],
1554 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171555 "merge": {
1556 "args": [],
1557 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1558 },
Kenneth Russell384a1732019-03-16 02:36:021559 "name": "foo_tests",
1560 "should_retry_with_patch": false,
1561 "swarming": {
1562 "can_use_on_swarming_builders": true,
1563 "dimension_sets": [
1564 {
Brian Sheedy0e26c4e02020-05-28 22:09:091565 "gpu": "10de:1cb3-26.21.14.3102"
Kenneth Russell384a1732019-03-16 02:36:021566 }
1567 ],
1568 "idempotent": false
Chan Liab7d8dd82020-04-24 23:42:191569 },
Chan Li17d969f92020-07-10 00:50:031570 "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
Kenneth Russell384a1732019-03-16 02:36:021571 }
1572 ]
1573 }
1574}
1575"""
1576
1577INTEL_GPU_TELEMETRY_TEST_OUTPUT = """\
1578{
1579 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1580 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1581 "Fake Tester": {
1582 "isolated_scripts": [
1583 {
1584 "args": [
1585 "foo",
1586 "--show-stdout",
1587 "--browser=release",
1588 "--passthrough",
1589 "-v",
1590 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
1591 "--gpu-vendor-id",
1592 "8086",
1593 "--gpu-device-id",
1594 "5912"
1595 ],
1596 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171597 "merge": {
1598 "args": [],
1599 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1600 },
Kenneth Russell384a1732019-03-16 02:36:021601 "name": "foo_tests",
1602 "should_retry_with_patch": false,
1603 "swarming": {
1604 "can_use_on_swarming_builders": true,
1605 "dimension_sets": [
1606 {
Brian Sheedy0e26c4e02020-05-28 22:09:091607 "gpu": "8086:5912-24.20.100.6286"
Kenneth Russell384a1732019-03-16 02:36:021608 }
1609 ],
1610 "idempotent": false
Chan Liab7d8dd82020-04-24 23:42:191611 },
Chan Li17d969f92020-07-10 00:50:031612 "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
Kenneth Russell384a1732019-03-16 02:36:021613 }
1614 ]
1615 }
1616}
1617"""
1618
Brian Sheedyf9387db7b2019-08-05 19:26:101619INTEL_UHD_GPU_TELEMETRY_TEST_OUTPUT = """\
1620{
1621 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1622 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1623 "Fake Tester": {
1624 "isolated_scripts": [
1625 {
1626 "args": [
1627 "foo",
1628 "--show-stdout",
1629 "--browser=release",
1630 "--passthrough",
1631 "-v",
1632 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
1633 "--gpu-vendor-id",
1634 "8086",
1635 "--gpu-device-id",
1636 "3e92"
1637 ],
1638 "isolate_name": "telemetry_gpu_integration_test",
1639 "merge": {
1640 "args": [],
1641 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1642 },
1643 "name": "foo_tests",
1644 "should_retry_with_patch": false,
1645 "swarming": {
1646 "can_use_on_swarming_builders": true,
1647 "dimension_sets": [
1648 {
Brian Sheedy0e26c4e02020-05-28 22:09:091649 "gpu": "8086:3e92-24.20.100.6286"
Brian Sheedyf9387db7b2019-08-05 19:26:101650 }
1651 ],
1652 "idempotent": false
Chan Liab7d8dd82020-04-24 23:42:191653 },
Chan Li17d969f92020-07-10 00:50:031654 "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
Brian Sheedyf9387db7b2019-08-05 19:26:101655 }
1656 ]
1657 }
1658}
1659"""
1660
Kenneth Russelleb60cbd22017-12-05 07:54:281661ANDROID_WATERFALL_OUTPUT = """\
1662{
1663 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1664 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1665 "Android Builder": {
1666 "additional_compile_targets": [
1667 "bar_test"
1668 ]
1669 },
1670 "Fake Android K Tester": {
1671 "additional_compile_targets": [
1672 "bar_test"
1673 ],
1674 "gtest_tests": [
1675 {
John Budorick826d5ed2017-12-28 19:27:321676 "args": [
Kenneth Russell5612d64a2018-06-02 21:12:301677 "--gs-results-bucket=chromium-result-details",
1678 "--recover-devices"
John Budorick826d5ed2017-12-28 19:27:321679 ],
Stephen Martinisbc7b7772019-05-01 22:01:431680 "merge": {
1681 "args": [],
1682 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1683 },
Kenneth Russelleb60cbd22017-12-05 07:54:281684 "swarming": {
1685 "can_use_on_swarming_builders": true,
1686 "cipd_packages": [
1687 {
1688 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1689 "location": "bin",
1690 "revision": \
1691"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1692 }
1693 ],
1694 "dimension_sets": [
1695 {
1696 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:281697 "device_os_type": "userdebug",
Kenneth Russelleb60cbd22017-12-05 07:54:281698 "device_type": "hammerhead",
Ben Pastened15aa8a2019-05-16 16:59:221699 "integrity": "high",
1700 "os": "Android"
Kenneth Russelleb60cbd22017-12-05 07:54:281701 }
1702 ],
1703 "expiration": 120,
1704 "output_links": [
1705 {
1706 "link": [
1707 "https://luci-logdog.appspot.com/v/?s",
1708 "=android%2Fswarming%2Flogcats%2F",
1709 "${TASK_ID}%2F%2B%2Funified_logcats"
1710 ],
1711 "name": "shard #${SHARD_INDEX} logcats"
1712 }
1713 ]
1714 },
1715 "test": "foo_test"
1716 }
1717 ]
1718 },
1719 "Fake Android L Tester": {
1720 "gtest_tests": [
1721 {
Benjamin Pastene766d48f52017-12-18 21:47:421722 "args": [
John Budorick826d5ed2017-12-28 19:27:321723 "--gs-results-bucket=chromium-result-details",
Benjamin Pastene766d48f52017-12-18 21:47:421724 "--recover-devices"
1725 ],
Stephen Martinisbc7b7772019-05-01 22:01:431726 "merge": {
1727 "args": [],
1728 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1729 },
Kenneth Russelleb60cbd22017-12-05 07:54:281730 "swarming": {
1731 "can_use_on_swarming_builders": true,
1732 "cipd_packages": [
1733 {
1734 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1735 "location": "bin",
1736 "revision": \
1737"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1738 }
1739 ],
1740 "dimension_sets": [
1741 {
Ben Pastenee012aea42019-05-14 22:32:281742 "device_os": "LMY41U",
1743 "device_os_type": "user",
Kenneth Russelleb60cbd22017-12-05 07:54:281744 "device_type": "hammerhead",
Ben Pastened15aa8a2019-05-16 16:59:221745 "integrity": "high",
1746 "os": "Android"
Kenneth Russelleb60cbd22017-12-05 07:54:281747 }
1748 ],
1749 "expiration": 120
1750 },
1751 "test": "foo_test"
1752 }
1753 ]
1754 },
1755 "Fake Android M Tester": {
1756 "gtest_tests": [
1757 {
Stephen Martinisbc7b7772019-05-01 22:01:431758 "merge": {
1759 "args": [],
1760 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1761 },
Kenneth Russelleb60cbd22017-12-05 07:54:281762 "swarming": {
1763 "can_use_on_swarming_builders": false
1764 },
1765 "test": "foo_test"
1766 }
1767 ]
1768 }
1769}
1770"""
1771
Ben Pastenea9e583b2019-01-16 02:57:261772CHROMEOS_TRIGGER_SCRIPT_OUTPUT = """\
1773{
1774 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1775 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1776 "Fake Tester": {
1777 "gtest_tests": [
1778 {
Stephen Martinisbc7b7772019-05-01 22:01:431779 "merge": {
1780 "args": [],
1781 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1782 },
Ben Pastenea9e583b2019-01-16 02:57:261783 "swarming": {
1784 "can_use_on_swarming_builders": true,
1785 "dimension_sets": [
1786 {
1787 "device_type": "foo_device",
1788 "integrity": "high"
1789 }
1790 ],
1791 "expiration": 120
1792 },
1793 "test": "foo_test",
1794 "trigger_script": {
1795 "script": "//testing/trigger_scripts/chromeos_device_trigger.py"
1796 }
1797 }
1798 ]
1799 }
1800}
1801"""
1802
Stephen Martinis2a0667022018-09-25 22:31:141803GPU_DIMENSIONS_WATERFALL_OUTPUT = """\
1804{
1805 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1806 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1807 "Fake Tester": {
1808 "isolated_scripts": [
1809 {
1810 "args": [
1811 "foo_test",
1812 "--show-stdout",
1813 "--browser=release",
1814 "--passthrough",
1815 "-v",
1816 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1817 ],
1818 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171819 "merge": {
1820 "args": [],
1821 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1822 },
Stephen Martinis2a0667022018-09-25 22:31:141823 "name": "foo_test",
Kenneth Russell44910c32018-12-03 23:35:111824 "should_retry_with_patch": false,
Stephen Martinis2a0667022018-09-25 22:31:141825 "swarming": {
1826 "can_use_on_swarming_builders": true,
1827 "dimension_sets": [
1828 {
1829 "iama": "mixin",
1830 "integrity": "high"
1831 }
1832 ],
1833 "expiration": 120,
1834 "idempotent": false,
1835 "value": "test"
Chan Liab7d8dd82020-04-24 23:42:191836 },
Chan Li17d969f92020-07-10 00:50:031837 "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
Stephen Martinis2a0667022018-09-25 22:31:141838 }
1839 ]
1840 }
1841}
1842"""
1843
Kenneth Russell78fd8702018-05-17 01:15:521844LUCI_MILO_CFG = """\
1845consoles {
1846 builders {
1847 name: "buildbucket/luci.chromium.ci/Fake Tester"
1848 }
1849}
1850"""
1851
Stephen Martinis54d64ad2018-09-21 22:16:201852LUCI_MILO_CFG_WATERFALL_SORTING = """\
1853consoles {
1854 builders {
1855 name: "buildbucket/luci.chromium.ci/Fake Tester"
1856 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1857 }
1858}
1859"""
1860
Stephen Martinis54d64ad2018-09-21 22:16:201861TEST_SUITE_SORTING_WATERFALL = """
1862[
1863 {
Greg Gutermanf60eb052020-03-12 17:40:011864 'project': 'chromium',
1865 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201866 'name': 'chromium.test',
1867 'machines': {
1868 'Fake Tester': {
1869 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561870 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201871 'scripts': 'suite_b',
1872 },
1873 },
1874 },
1875 },
1876]
1877"""
1878
1879TEST_SUITE_SORTED_WATERFALL = """
1880[
1881 {
Greg Gutermanf60eb052020-03-12 17:40:011882 'project': 'chromium',
1883 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201884 'name': 'chromium.test',
1885 'machines': {
1886 'Fake Tester': {
1887 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561888 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201889 'scripts': 'suite_b',
1890 },
1891 },
1892 'Really Fake Tester': {
1893 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561894 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201895 'scripts': 'suite_b',
1896 },
1897 },
1898 },
1899 },
1900 {
Greg Gutermanf60eb052020-03-12 17:40:011901 'project': 'chromium',
1902 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201903 'name': 'chromium.zz.test',
1904 'machines': {
1905 'Fake Tester': {
1906 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561907 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201908 'scripts': 'suite_b',
1909 },
1910 },
1911 'Really Fake Tester': {
1912 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561913 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201914 'scripts': 'suite_b',
1915 },
1916 },
1917 },
1918 },
1919]
1920"""
1921
1922TEST_SUITE_UNSORTED_WATERFALL_1 = """
1923[
1924 {
Greg Gutermanf60eb052020-03-12 17:40:011925 'project': 'chromium',
1926 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201927 'name': 'chromium.zz.test',
1928 'machines': {
1929 'Fake Tester': {
1930 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561931 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201932 'scripts': 'suite_b',
1933 },
1934 },
1935 'Really Fake Tester': {
1936 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561937 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201938 'scripts': 'suite_b',
1939 },
1940 },
1941 },
1942 },
1943 {
Greg Gutermanf60eb052020-03-12 17:40:011944 'project': 'chromium',
1945 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201946 'name': 'chromium.test',
1947 'machines': {
1948 'Fake Tester': {
1949 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561950 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201951 'scripts': 'suite_b',
1952 },
1953 },
1954 'Really Fake Tester': {
1955 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561956 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201957 'scripts': 'suite_b',
1958 },
1959 },
1960 },
1961 },
1962]
1963"""
1964
1965TEST_SUITE_UNSORTED_WATERFALL_2 = """
1966[
1967 {
Greg Gutermanf60eb052020-03-12 17:40:011968 'project': 'chromium',
1969 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201970 'name': 'chromium.test',
1971 'machines': {
1972 'Really Fake Tester': {
1973 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561974 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201975 'scripts': 'suite_b',
1976 },
1977 },
1978 'Fake Tester': {
1979 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561980 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201981 'scripts': 'suite_b',
1982 },
1983 },
1984 },
1985 },
1986 {
Greg Gutermanf60eb052020-03-12 17:40:011987 'project': 'chromium',
1988 'bucket': 'ci',
Stephen Martinis54d64ad2018-09-21 22:16:201989 'name': 'chromium.zz.test',
1990 'machines': {
1991 'Fake Tester': {
1992 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561993 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:201994 'scripts': 'suite_b',
1995 },
1996 },
1997 'Really Fake Tester': {
1998 'test_suites': {
Dirk Pranke0e879b22020-07-16 23:53:561999 'gtest_tests': 'suite_a',
Stephen Martinis54d64ad2018-09-21 22:16:202000 'scripts': 'suite_b',
2001 },
2002 },
2003 },
2004 },
2005]
2006"""
2007
2008# Note that the suites in basic_suites would be sorted after the suites in
2009# compound_suites. This is valid though, because each set of suites is sorted
2010# separately.
Dirk Pranke0e879b22020-07-16 23:53:562011# suite_c is a 'gtest_tests' test
2012# suite_d is a 'scripts' test
Stephen Martinis54d64ad2018-09-21 22:16:202013TEST_SUITE_SORTED = """\
2014{
2015 'basic_suites': {
2016 'suite_c': {
2017 'suite_c': {},
2018 },
2019 'suite_d': {
2020 'script': {
2021 'script': 'suite_d.py',
2022 }
2023 },
2024 },
2025 'compound_suites': {
2026 'suite_a': [
2027 'suite_c',
2028 ],
2029 'suite_b': [
2030 'suite_d',
2031 ],
2032 },
2033}
2034"""
2035
2036TEST_SUITE_UNSORTED_1 = """\
2037{
2038 'basic_suites': {
2039 'suite_d': {
2040 'a': 'b',
2041 },
2042 'suite_c': {
2043 'a': 'b',
2044 },
2045 },
2046 'compound_suites': {
2047 'suite_a': [
2048 'suite_c',
2049 ],
2050 'suite_b': [
2051 'suite_d',
2052 ],
2053 },
2054}
2055"""
2056
2057TEST_SUITE_UNSORTED_2 = """\
2058{
2059 'basic_suites': {
2060 'suite_c': {
2061 'a': 'b',
2062 },
2063 'suite_d': {
2064 'a': 'b',
2065 },
2066 },
2067 'compound_suites': {
2068 'suite_b': [
2069 'suite_c',
2070 ],
2071 'suite_a': [
2072 'suite_d',
2073 ],
2074 },
2075}
2076"""
2077TEST_SUITE_UNSORTED_3 = """\
2078{
2079 'basic_suites': {
2080 'suite_d': {
2081 'a': 'b',
2082 },
2083 'suite_c': {
2084 'a': 'b',
2085 },
2086 },
2087 'compound_suites': {
2088 'suite_b': [
2089 'suite_c',
2090 ],
2091 'suite_a': [
2092 'suite_d',
2093 ],
2094 },
2095}
2096"""
2097
2098
2099TEST_SUITES_SYNTAX_ERROR = """\
2100{
2101 'basic_suites': {
2102 3: {
2103 'suite_c': {},
2104 },
2105 },
2106 'compound_suites': {},
2107}
2108"""
2109
Nodir Turakulovfce34292019-12-18 17:05:412110GN_ISOLATE_MAP="""\
2111{
2112 'foo_test': {
2113 'label': '//chrome/test:foo_test',
2114 'type': 'windowed_test_launcher',
2115 }
2116}
2117"""
2118
Chan Liab7d8dd82020-04-24 23:42:192119GPU_TELEMETRY_GN_ISOLATE_MAP="""\
2120{
2121 'telemetry_gpu_integration_test': {
2122 'label': '//chrome/test:telemetry_gpu_integration_test',
2123 'type': 'script',
2124 }
2125}
2126"""
Corentin Wallez55b8e772020-04-24 17:39:282127GN_ISOLATE_MAP_KEY_LABEL_MISMATCH="""\
2128{
2129 'foo_test': {
2130 'label': '//chrome/test:foo_test_tmp',
2131 'type': 'windowed_test_launcher',
2132 }
2133}
2134"""
2135
2136GN_ISOLATE_MAP_USING_IMPLICIT_NAME="""\
2137{
2138 'foo_test': {
2139 'label': '//chrome/foo_test',
2140 'type': 'windowed_test_launcher',
2141 }
2142}
2143"""
2144
Garrett Beaty1afaccc2020-06-25 19:58:152145class UnitTest(TestCase):
Kenneth Russelleb60cbd22017-12-05 07:54:282146 def test_base_generator(self):
2147 # Only needed for complete code coverage.
2148 self.assertRaises(NotImplementedError,
2149 generate_buildbot_json.BaseGenerator(None).generate,
2150 None, None, None, None)
2151 self.assertRaises(NotImplementedError,
2152 generate_buildbot_json.BaseGenerator(None).sort,
2153 None)
2154
2155 def test_good_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:152156 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522157 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502158 fbb.check_input_file_consistency(verbose=True)
2159 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282160
2161 def test_good_composition_test_suites_are_ok(self):
Garrett Beaty1afaccc2020-06-25 19:58:152162 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
2163 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502164 fbb.check_input_file_consistency(verbose=True)
2165 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282166
2167 def test_bad_composition_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152168 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
2169 BAD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502170 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
Jeff Yoon8154e582019-12-03 23:30:012171 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502172 fbb.check_input_file_consistency(verbose=True)
2173 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282174
Andrew Luo0f1dee02019-09-06 16:50:472175 def test_composition_test_suites_no_conflicts(self):
Garrett Beaty1afaccc2020-06-25 19:58:152176 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
2177 CONFLICTING_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Andrew Luo0f1dee02019-09-06 16:50:472178 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2179 'Conflicting test definitions.*'):
2180 fbb.check_input_file_consistency(verbose=True)
2181 self.assertFalse(fbb.printed_lines)
2182
Stephen Martinis54d64ad2018-09-21 22:16:202183 def test_composition_test_suites_no_duplicate_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:152184 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
2185 DUPLICATES_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
Stephen Martinis54d64ad2018-09-21 22:16:202186 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2187 '.*may not duplicate basic test suite.*'):
2188 fbb.check_input_file_consistency(verbose=True)
2189 self.assertFalse(fbb.printed_lines)
2190
Kenneth Russelleb60cbd22017-12-05 07:54:282191 def test_unknown_test_suites_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152192 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522193 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502194 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2195 'Test suite baz_tests from machine.*'):
2196 fbb.check_input_file_consistency(verbose=True)
2197 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282198
2199 def test_unknown_test_suite_types_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152200 fbb = FakeBBGen(self.args, UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
2201 FOO_TEST_SUITE, LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502202 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2203 'Unknown test suite type foo_test_type.*'):
2204 fbb.check_input_file_consistency(verbose=True)
2205 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282206
2207 def test_unrefed_test_suite_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152208 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522209 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502210 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2211 '.*unreferenced.*bar_tests.*'):
2212 fbb.check_input_file_consistency(verbose=True)
2213 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282214
2215 def test_good_waterfall_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152216 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WATERFALL,
2217 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
2218 self.create_testing_buildbot_json_file('chromium.test.json',
2219 COMPOSITION_WATERFALL_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282220 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502221 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282222
2223 def test_reusing_gtest_targets(self):
Garrett Beaty1afaccc2020-06-25 19:58:152224 fbb = FakeBBGen(self.args,
2225 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282226 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412227 LUCI_MILO_CFG,
2228 gn_isolate_map=GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:152229 self.create_testing_buildbot_json_file('chromium.test.json',
2230 VARIATION_GTEST_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282231 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502232 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282233
Corentin Wallez55b8e772020-04-24 17:39:282234 def test_gn_isolate_map_with_label_mismatch(self):
Garrett Beaty1afaccc2020-06-25 19:58:152235 fbb = FakeBBGen(self.args,
2236 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:282237 FOO_TEST_SUITE,
2238 LUCI_MILO_CFG,
2239 gn_isolate_map=GN_ISOLATE_MAP_KEY_LABEL_MISMATCH)
2240 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2241 'key name.*foo_test.*label.*'
2242 'foo_test_tmp.*'):
2243 fbb.check_input_file_consistency(verbose=True)
2244 self.assertFalse(fbb.printed_lines)
2245
2246 def test_gn_isolate_map_using_implicit_gn_name(self):
Garrett Beaty1afaccc2020-06-25 19:58:152247 fbb = FakeBBGen(self.args,
2248 FOO_GTESTS_WATERFALL,
Corentin Wallez55b8e772020-04-24 17:39:282249 FOO_TEST_SUITE,
2250 LUCI_MILO_CFG,
2251 gn_isolate_map=GN_ISOLATE_MAP_USING_IMPLICIT_NAME)
2252 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2253 'Malformed.*//chrome/foo_test.*for key.*'
2254 'foo_test.*'):
2255 fbb.check_input_file_consistency(verbose=True)
2256 self.assertFalse(fbb.printed_lines)
2257
Kenneth Russelleb60cbd22017-12-05 07:54:282258 def test_noop_exception_does_nothing(self):
Garrett Beaty1afaccc2020-06-25 19:58:152259 fbb = FakeBBGen(self.args,
2260 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282261 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412262 LUCI_MILO_CFG,
2263 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152264 self.create_testing_buildbot_json_file('chromium.test.json',
2265 COMPOSITION_WATERFALL_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282266 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502267 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282268
Kenneth Russell8ceeabf2017-12-11 17:53:282269 def test_test_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:152270 fbb = FakeBBGen(self.args,
2271 FOO_GTESTS_WATERFALL,
Kenneth Russell8ceeabf2017-12-11 17:53:282272 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412273 LUCI_MILO_CFG,
2274 exceptions=FOO_TEST_MODIFICATIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152275 self.create_testing_buildbot_json_file('chromium.test.json',
2276 MERGED_ARGS_OUTPUT)
Kenneth Russell8ceeabf2017-12-11 17:53:282277 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502278 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:282279
Kenneth Russell650995a2018-05-03 21:17:012280 def test_enable_features_arg_merges(self):
Garrett Beaty1afaccc2020-06-25 19:58:152281 fbb = FakeBBGen(self.args, FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
2282 FOO_TEST_SUITE_WITH_ENABLE_FEATURES, LUCI_MILO_CFG)
2283 self.create_testing_buildbot_json_file('chromium.test.json',
2284 MERGED_ENABLE_FEATURES_OUTPUT)
Kenneth Russell650995a2018-05-03 21:17:012285 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502286 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:012287
Kenneth Russell8a386d42018-06-02 09:48:012288 def test_linux_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152289 fbb = FakeBBGen(self.args, FOO_LINUX_GTESTS_WATERFALL,
2290 FOO_TEST_SUITE_WITH_LINUX_ARGS, LUCI_MILO_CFG)
2291 self.create_testing_buildbot_json_file('chromium.test.json',
2292 LINUX_ARGS_OUTPUT)
Kenneth Russell8a386d42018-06-02 09:48:012293 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502294 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012295
Kenneth Russelleb60cbd22017-12-05 07:54:282296 def test_test_filtering(self):
Garrett Beaty1afaccc2020-06-25 19:58:152297 fbb = FakeBBGen(self.args,
2298 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282299 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412300 LUCI_MILO_CFG,
2301 exceptions=NO_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152302 self.create_testing_buildbot_json_file(
2303 'chromium.test.json', COMPOSITION_WATERFALL_FILTERED_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282304 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502305 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282306
2307 def test_test_modifications(self):
Garrett Beaty1afaccc2020-06-25 19:58:152308 fbb = FakeBBGen(self.args,
2309 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282310 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412311 LUCI_MILO_CFG,
2312 exceptions=FOO_TEST_MODIFICATIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152313 self.create_testing_buildbot_json_file('chromium.test.json',
2314 MODIFIED_OUTPUT)
2315 self.create_testing_buildbot_json_file('chromium.ci.json', MODIFIED_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282316 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502317 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282318
John Budorick5bc387fe2019-05-09 20:02:532319 def test_test_with_explicit_none(self):
Garrett Beaty1afaccc2020-06-25 19:58:152320 fbb = FakeBBGen(self.args,
2321 FOO_GTESTS_WATERFALL,
John Budorick5bc387fe2019-05-09 20:02:532322 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412323 LUCI_MILO_CFG,
2324 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
2325 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:152326 self.create_testing_buildbot_json_file('chromium.test.json',
2327 EXPLICIT_NONE_OUTPUT)
2328 self.create_testing_buildbot_json_file('chromium.ci.json',
2329 EXPLICIT_NONE_OUTPUT)
John Budorick5bc387fe2019-05-09 20:02:532330 fbb.check_output_file_consistency(verbose=True)
2331 self.assertFalse(fbb.printed_lines)
2332
Kenneth Russelleb60cbd22017-12-05 07:54:282333 def test_isolated_script_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152334 fbb = FakeBBGen(self.args,
2335 FOO_ISOLATED_SCRIPTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282336 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412337 LUCI_MILO_CFG,
2338 exceptions=NO_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152339 self.create_testing_buildbot_json_file('chromium.test.json',
2340 ISOLATED_SCRIPT_OUTPUT)
2341 self.create_testing_buildbot_json_file('chromium.ci.json',
2342 ISOLATED_SCRIPT_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282343 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502344 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282345
Dirk Pranke0e879b22020-07-16 23:53:562346 def test_isolated_script_tests(self):
2347 fbb = FakeBBGen(self.args,
2348 FOO_ISOLATED_SCRIPTS_WATERFALL_ANDROID,
2349 GOOD_COMPOSITION_TEST_SUITES,
2350 LUCI_MILO_CFG,
2351 exceptions=NO_BAR_TEST_EXCEPTIONS)
2352 self.create_testing_buildbot_json_file('chromium.test.json',
2353 ISOLATED_SCRIPT_OUTPUT_ANDROID)
2354 self.create_testing_buildbot_json_file('chromium.ci.json',
2355 ISOLATED_SCRIPT_OUTPUT_ANDROID)
2356 fbb.check_output_file_consistency(verbose=True)
2357 self.assertFalse(fbb.printed_lines)
2358
Dirk Pranke1b767092017-12-07 04:44:232359 def test_script_with_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152360 fbb = FakeBBGen(self.args,
2361 FOO_SCRIPT_WATERFALL,
Dirk Pranke1b767092017-12-07 04:44:232362 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412363 LUCI_MILO_CFG,
2364 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152365 self.create_testing_buildbot_json_file('chromium.test.json',
2366 SCRIPT_WITH_ARGS_OUTPUT)
2367 self.create_testing_buildbot_json_file('chromium.ci.json',
2368 SCRIPT_WITH_ARGS_OUTPUT)
Dirk Pranke1b767092017-12-07 04:44:232369 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502370 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:232371
2372 def test_script(self):
Garrett Beaty1afaccc2020-06-25 19:58:152373 fbb = FakeBBGen(self.args,
2374 FOO_SCRIPT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282375 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412376 LUCI_MILO_CFG,
2377 exceptions=NO_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152378 self.create_testing_buildbot_json_file('chromium.test.json', SCRIPT_OUTPUT)
2379 self.create_testing_buildbot_json_file('chromium.ci.json', SCRIPT_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282380 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502381 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282382
Brian Sheedy158cd0f2019-04-26 01:12:442383 def test_script_machine_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:152384 fbb = FakeBBGen(self.args,
2385 FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:442386 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412387 LUCI_MILO_CFG,
2388 exceptions=NO_BAR_TEST_EXCEPTIONS)
Brian Sheedy158cd0f2019-04-26 01:12:442389 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2390 'Attempted to generate a script test on tester.*'):
2391 fbb.check_output_file_consistency(verbose=True)
2392
2393 def test_script_waterfall_forbids_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:152394 fbb = FakeBBGen(self.args,
2395 FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
Brian Sheedy158cd0f2019-04-26 01:12:442396 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412397 LUCI_MILO_CFG,
2398 exceptions=NO_BAR_TEST_EXCEPTIONS)
Brian Sheedy158cd0f2019-04-26 01:12:442399 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2400 'Attempted to generate a script test on tester.*'):
2401 fbb.check_output_file_consistency(verbose=True)
2402
Kenneth Russelleb60cbd22017-12-05 07:54:282403 def test_junit_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152404 fbb = FakeBBGen(self.args,
2405 FOO_JUNIT_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282406 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412407 LUCI_MILO_CFG,
2408 exceptions=NO_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152409 self.create_testing_buildbot_json_file('chromium.test.json', JUNIT_OUTPUT)
2410 self.create_testing_buildbot_json_file('chromium.ci.json', JUNIT_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282411 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502412 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282413
Kenneth Russell8a386d42018-06-02 09:48:012414 def test_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152415 fbb = FakeBBGen(self.args,
2416 FOO_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell8a386d42018-06-02 09:48:012417 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
Nodir Turakulovfce34292019-12-18 17:05:412418 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192419 exceptions=NO_BAR_TEST_EXCEPTIONS,
2420 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:152421 self.create_testing_buildbot_json_file('chromium.test.json',
2422 GPU_TELEMETRY_TEST_OUTPUT)
2423 self.create_testing_buildbot_json_file('chromium.ci.json',
2424 GPU_TELEMETRY_TEST_OUTPUT)
Kenneth Russell8a386d42018-06-02 09:48:012425 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502426 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012427
Kenneth Russell384a1732019-03-16 02:36:022428 def test_nvidia_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152429 fbb = FakeBBGen(self.args,
2430 NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022431 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412432 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192433 exceptions=NO_BAR_TEST_EXCEPTIONS,
2434 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:152435 self.create_testing_buildbot_json_file('chromium.test.json',
2436 NVIDIA_GPU_TELEMETRY_TEST_OUTPUT)
2437 self.create_testing_buildbot_json_file('chromium.ci.json',
2438 NVIDIA_GPU_TELEMETRY_TEST_OUTPUT)
Kenneth Russell384a1732019-03-16 02:36:022439 fbb.check_output_file_consistency(verbose=True)
2440 self.assertFalse(fbb.printed_lines)
2441
2442 def test_intel_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152443 fbb = FakeBBGen(self.args,
2444 INTEL_GPU_TELEMETRY_TEST_WATERFALL,
Kenneth Russell384a1732019-03-16 02:36:022445 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412446 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192447 exceptions=NO_BAR_TEST_EXCEPTIONS,
2448 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:152449 self.create_testing_buildbot_json_file('chromium.test.json',
2450 INTEL_GPU_TELEMETRY_TEST_OUTPUT)
2451 self.create_testing_buildbot_json_file('chromium.ci.json',
2452 INTEL_GPU_TELEMETRY_TEST_OUTPUT)
Kenneth Russell384a1732019-03-16 02:36:022453 fbb.check_output_file_consistency(verbose=True)
2454 self.assertFalse(fbb.printed_lines)
2455
Brian Sheedyf9387db7b2019-08-05 19:26:102456 def test_intel_uhd_gpu_telemetry_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:152457 fbb = FakeBBGen(self.args,
2458 INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
Brian Sheedyf9387db7b2019-08-05 19:26:102459 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412460 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:192461 exceptions=NO_BAR_TEST_EXCEPTIONS,
2462 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:152463 self.create_testing_buildbot_json_file('chromium.test.json',
2464 INTEL_UHD_GPU_TELEMETRY_TEST_OUTPUT)
2465 self.create_testing_buildbot_json_file('chromium.ci.json',
2466 INTEL_UHD_GPU_TELEMETRY_TEST_OUTPUT)
Brian Sheedyf9387db7b2019-08-05 19:26:102467 fbb.check_output_file_consistency(verbose=True)
2468 self.assertFalse(fbb.printed_lines)
2469
Jamie Madilla8be0d72020-10-02 05:24:042470 def test_gtest_as_isolated_Script(self):
2471 fbb = FakeBBGen(self.args,
2472 FOO_GTESTS_WATERFALL,
2473 GTEST_AS_ISOLATED_SCRIPT_SUITE,
2474 LUCI_MILO_CFG,
2475 gn_isolate_map=GN_ISOLATE_MAP)
2476 self.create_testing_buildbot_json_file(
2477 'chromium.test.json', FOO_WATERFALL_GTEST_ISOLATED_SCRIPT_OUTPUT)
2478 self.create_testing_buildbot_json_file(
2479 'chromium.ci.json', FOO_WATERFALL_GTEST_ISOLATED_SCRIPT_OUTPUT)
2480 fbb.check_output_file_consistency(verbose=True)
2481 self.assertFalse(fbb.printed_lines)
2482
Kenneth Russelleb60cbd22017-12-05 07:54:282483 def test_ungenerated_output_files_are_caught(self):
Garrett Beaty1afaccc2020-06-25 19:58:152484 fbb = FakeBBGen(self.args,
2485 COMPOSITION_GTEST_SUITE_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282486 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412487 LUCI_MILO_CFG,
2488 exceptions=NO_BAR_TEST_EXCEPTIONS)
Garrett Beaty1afaccc2020-06-25 19:58:152489 self.create_testing_buildbot_json_file(
2490 'chromium.test.json', '\n' + COMPOSITION_WATERFALL_FILTERED_OUTPUT)
Stephen Martinis7eb8b612018-09-21 00:17:502491 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192492 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502493 joined_lines = ' '.join(fbb.printed_lines)
2494 self.assertRegexpMatches(
Dirk Pranke6269d302020-10-01 00:14:392495 joined_lines, 'File chromium.test.json did not have the following'
Stephen Martinis7eb8b612018-09-21 00:17:502496 ' expected contents:.*')
2497 self.assertRegexpMatches(joined_lines, '.*--- expected.*')
2498 self.assertRegexpMatches(joined_lines, '.*\+\+\+ current.*')
2499 fbb.printed_lines = []
2500 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282501
2502 def test_android_output_options(self):
Garrett Beaty1afaccc2020-06-25 19:58:152503 fbb = FakeBBGen(self.args, ANDROID_WATERFALL, FOO_TEST_SUITE, LUCI_MILO_CFG)
2504 self.create_testing_buildbot_json_file('chromium.test.json',
2505 ANDROID_WATERFALL_OUTPUT)
2506 self.create_testing_buildbot_json_file('chromium.ci.json',
2507 ANDROID_WATERFALL_OUTPUT)
Kenneth Russelleb60cbd22017-12-05 07:54:282508 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502509 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282510
2511 def test_nonexistent_removal_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152512 fbb = FakeBBGen(self.args,
2513 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282514 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412515 LUCI_MILO_CFG,
2516 exceptions=NONEXISTENT_REMOVAL)
Stephen Martinis7eb8b612018-09-21 00:17:502517 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2518 'The following nonexistent machines.*'):
2519 fbb.check_input_file_consistency(verbose=True)
2520 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282521
2522 def test_nonexistent_modification_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152523 fbb = FakeBBGen(self.args,
2524 FOO_GTESTS_WATERFALL,
Kenneth Russelleb60cbd22017-12-05 07:54:282525 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412526 LUCI_MILO_CFG,
2527 exceptions=NONEXISTENT_MODIFICATION)
Stephen Martinis7eb8b612018-09-21 00:17:502528 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2529 'The following nonexistent machines.*'):
2530 fbb.check_input_file_consistency(verbose=True)
2531 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282532
John Budorickedfe7f872018-01-23 15:27:222533 def test_waterfall_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:152534 fbb = FakeBBGen(self.args, COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2535 GOOD_COMPOSITION_TEST_SUITES, LUCI_MILO_CFG)
2536 self.create_testing_buildbot_json_file(
2537 'chromium.test.json', COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT)
2538 self.create_testing_buildbot_json_file(
2539 'chromium.ci.json', COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT)
John Budorickedfe7f872018-01-23 15:27:222540 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502541 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222542
Ben Pastenea9e583b2019-01-16 02:57:262543 def test_chromeos_trigger_script_output(self):
Garrett Beaty1afaccc2020-06-25 19:58:152544 fbb = FakeBBGen(self.args, FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2545 FOO_TEST_SUITE, LUCI_MILO_CFG)
2546 self.create_testing_buildbot_json_file('chromium.test.json',
2547 CHROMEOS_TRIGGER_SCRIPT_OUTPUT)
2548 self.create_testing_buildbot_json_file('chromium.ci.json',
2549 CHROMEOS_TRIGGER_SCRIPT_OUTPUT)
Ben Pastenea9e583b2019-01-16 02:57:262550 fbb.check_output_file_consistency(verbose=True)
2551 self.assertFalse(fbb.printed_lines)
2552
Zhiling Huangbe008172018-03-08 19:13:112553 def test_relative_pyl_file_dir(self):
Garrett Beaty1afaccc2020-06-25 19:58:152554 self.override_args(pyl_files_dir='relative/path/', waterfall_filters=[])
2555 fbb = FakeBBGen(self.args,
2556 FOO_GTESTS_WATERFALL,
Zhiling Huangbe008172018-03-08 19:13:112557 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412558 LUCI_MILO_CFG,
2559 gn_isolate_map=GN_ISOLATE_MAP)
Stephen Martinis7eb8b612018-09-21 00:17:502560 fbb.check_input_file_consistency(verbose=True)
Garrett Beaty1afaccc2020-06-25 19:58:152561 self.create_testing_buildbot_json_file('relative/path/chromium.test.json',
2562 VARIATION_GTEST_OUTPUT)
2563 self.create_testing_buildbot_json_file('relative/path/chromium.ci.json',
2564 VARIATION_GTEST_OUTPUT)
Zhiling Huangbe008172018-03-08 19:13:112565 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502566 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112567
Nico Weberd18b8962018-05-16 19:39:382568 def test_nonexistent_bot_raises(self):
Garrett Beaty1afaccc2020-06-25 19:58:152569 fbb = FakeBBGen(self.args, UNKNOWN_BOT_GTESTS_WATERFALL, FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522570 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382571 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502572 fbb.check_input_file_consistency(verbose=True)
2573 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382574
Garrett Beaty4f3e9212020-06-25 20:21:492575 def test_nonexistent_bot_raises_when_no_project_pyl_exists(self):
Garrett Beaty1afaccc2020-06-25 19:58:152576 fbb = FakeBBGen(self.args,
2577 UNKNOWN_BOT_GTESTS_WATERFALL,
Garrett Beaty2a02de3c2020-05-15 13:57:352578 FOO_TEST_SUITE,
2579 LUCI_MILO_CFG,
Garrett Beaty4f3e9212020-06-25 20:21:492580 project_pyl=None)
2581 with self.assertRaises(generate_buildbot_json.BBGenErr):
2582 fbb.check_input_file_consistency(verbose=True)
2583 self.assertFalse(fbb.printed_lines)
2584
2585 def test_nonexistent_bot_does_not_raise_when_validation_disabled(self):
2586 fbb = FakeBBGen(
2587 self.args,
2588 UNKNOWN_BOT_GTESTS_WATERFALL,
2589 FOO_TEST_SUITE,
2590 LUCI_MILO_CFG,
2591 project_pyl='{"validate_source_side_specs_have_builder": False}')
Garrett Beaty2a02de3c2020-05-15 13:57:352592 fbb.check_input_file_consistency(verbose=True)
2593
Stephen Martinis54d64ad2018-09-21 22:16:202594 def test_waterfalls_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152595 fbb = FakeBBGen(self.args, TEST_SUITE_SORTED_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202596 LUCI_MILO_CFG_WATERFALL_SORTING)
2597 fbb.check_input_file_consistency(verbose=True)
2598 self.assertFalse(fbb.printed_lines)
2599
Garrett Beaty1afaccc2020-06-25 19:58:152600 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_1,
2601 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Stephen Martinis54d64ad2018-09-21 22:16:202602 with self.assertRaisesRegexp(
2603 generate_buildbot_json.BBGenErr,
2604 'The following files have invalid keys: waterfalls.pyl'):
2605 fbb.check_input_file_consistency(verbose=True)
2606 joined_lines = '\n'.join(fbb.printed_lines)
2607 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532608 joined_lines, '.*\+ chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202609 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532610 joined_lines, '.*\- chromium\..*test.*')
Stephen Martinis54d64ad2018-09-21 22:16:202611 fbb.printed_lines = []
2612 self.assertFalse(fbb.printed_lines)
2613
Garrett Beaty1afaccc2020-06-25 19:58:152614 fbb = FakeBBGen(self.args, TEST_SUITE_UNSORTED_WATERFALL_2,
2615 TEST_SUITE_SORTED, LUCI_MILO_CFG_WATERFALL_SORTING)
Stephen Martinis54d64ad2018-09-21 22:16:202616 with self.assertRaisesRegexp(
2617 generate_buildbot_json.BBGenErr,
2618 'The following files have invalid keys: waterfalls.pyl'):
2619 fbb.check_input_file_consistency(verbose=True)
2620 joined_lines = ' '.join(fbb.printed_lines)
2621 self.assertRegexpMatches(
2622 joined_lines, '.*\+.*Fake Tester.*')
2623 self.assertRegexpMatches(
2624 joined_lines, '.*\-.*Fake Tester.*')
2625 fbb.printed_lines = []
2626 self.assertFalse(fbb.printed_lines)
2627
2628 def test_test_suite_exceptions_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152629 fbb = FakeBBGen(self.args,
2630 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202631 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412632 LUCI_MILO_CFG,
2633 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502634 fbb.check_input_file_consistency(verbose=True)
2635 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182636
Garrett Beaty1afaccc2020-06-25 19:58:152637 fbb = FakeBBGen(self.args,
2638 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:202639 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412640 LUCI_MILO_CFG,
Stephen Martinis5bef0fc2020-01-06 22:47:532641 exceptions=EXCEPTIONS_DUPS_REMOVE_FROM)
2642 with self.assertRaises(generate_buildbot_json.BBGenErr):
2643 fbb.check_input_file_consistency(verbose=True)
2644 joined_lines = ' '.join(fbb.printed_lines)
2645 self.assertRegexpMatches(
2646 joined_lines, '.*\- Fake Tester.*')
2647 fbb.printed_lines = []
2648 self.assertFalse(fbb.printed_lines)
2649
2650 def test_test_suite_exceptions_no_dups_remove_from(self):
Garrett Beaty1afaccc2020-06-25 19:58:152651 fbb = FakeBBGen(self.args,
2652 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532653 TEST_SUITE_SORTED,
2654 LUCI_MILO_CFG,
2655 exceptions=EXCEPTIONS_SORTED)
2656 fbb.check_input_file_consistency(verbose=True)
2657 self.assertFalse(fbb.printed_lines)
2658
Garrett Beaty1afaccc2020-06-25 19:58:152659 fbb = FakeBBGen(self.args,
2660 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532661 TEST_SUITE_SORTED,
2662 LUCI_MILO_CFG,
2663 exceptions=EXCEPTIONS_PER_TEST_UNSORTED)
Stephen Martinis5bef0fc2020-01-06 22:47:532664 with self.assertRaises(generate_buildbot_json.BBGenErr):
2665 fbb.check_input_file_consistency(verbose=True)
2666 joined_lines = ' '.join(fbb.printed_lines)
2667 self.assertRegexpMatches(
2668 joined_lines, '.*\+ Fake Tester.*')
2669 self.assertRegexpMatches(
2670 joined_lines, '.*\- Fake Tester.*')
2671 fbb.printed_lines = []
2672 self.assertFalse(fbb.printed_lines)
2673
2674 def test_test_suite_exceptions_per_test_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152675 fbb = FakeBBGen(self.args,
2676 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532677 TEST_SUITE_SORTED,
2678 LUCI_MILO_CFG,
2679 exceptions=EXCEPTIONS_SORTED)
2680 fbb.check_input_file_consistency(verbose=True)
2681 self.assertFalse(fbb.printed_lines)
2682
Garrett Beaty1afaccc2020-06-25 19:58:152683 fbb = FakeBBGen(self.args,
2684 TEST_SUITE_SORTING_WATERFALL,
Stephen Martinis5bef0fc2020-01-06 22:47:532685 TEST_SUITE_SORTED,
2686 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:412687 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202688 with self.assertRaises(generate_buildbot_json.BBGenErr):
2689 fbb.check_input_file_consistency(verbose=True)
2690 joined_lines = ' '.join(fbb.printed_lines)
2691 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532692 joined_lines, '.*\+ suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202693 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532694 joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202695 fbb.printed_lines = []
2696 self.assertFalse(fbb.printed_lines)
2697
2698 def test_test_suites_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:152699 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202700 LUCI_MILO_CFG)
2701 fbb.check_input_file_consistency(verbose=True)
2702 self.assertFalse(fbb.printed_lines)
2703
2704 for unsorted in (
2705 TEST_SUITE_UNSORTED_1,
2706 TEST_SUITE_UNSORTED_2,
2707 TEST_SUITE_UNSORTED_3,
2708 ):
Garrett Beaty1afaccc2020-06-25 19:58:152709 fbb = FakeBBGen(self.args, TEST_SUITE_SORTING_WATERFALL, unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202710 LUCI_MILO_CFG)
2711 with self.assertRaises(generate_buildbot_json.BBGenErr):
2712 fbb.check_input_file_consistency(verbose=True)
2713 joined_lines = ' '.join(fbb.printed_lines)
2714 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532715 joined_lines, '.*\+ suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202716 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:532717 joined_lines, '.*\- suite_.*')
Stephen Martinis54d64ad2018-09-21 22:16:202718 fbb.printed_lines = []
2719 self.assertFalse(fbb.printed_lines)
2720
Stephen Martinis11672542018-10-29 18:17:212721
2722FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2723[
2724 {
2725 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012726 'project': 'chromium',
2727 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212728 'name': 'chromium.test',
2729 'machines': {
2730 'Fake Tester': {
2731 'swarming': {},
2732 'test_suites': {
2733 'gtest_tests': 'foo_tests',
2734 },
2735 },
2736 },
2737 },
2738]
2739"""
2740
2741FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2742[
2743 {
Greg Gutermanf60eb052020-03-12 17:40:012744 'project': 'chromium',
2745 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212746 'name': 'chromium.test',
2747 'machines': {
2748 'Fake Tester': {
2749 'mixins': ['builder_mixin'],
2750 'swarming': {},
2751 'test_suites': {
2752 'gtest_tests': 'foo_tests',
2753 },
2754 },
2755 },
2756 },
2757]
2758"""
2759
Brian Sheedycae63b22020-06-10 22:52:112760FOO_GTESTS_DIMENSION_SETS_MIXIN_WATERFALL = """\
2761[
2762 {
2763 'project': 'chromium',
2764 'bucket': 'ci',
2765 'name': 'chromium.test',
2766 'machines': {
2767 'Fake Tester': {
2768 'mixins': [
2769 'dimension_set_mixin_1',
2770 'dimension_set_mixin_2',
2771 'duplicate_dimension_set_mixin_1',
2772 'dimension_mixin',
2773 ],
2774 'swarming': {},
2775 'test_suites': {
2776 'gtest_tests': 'foo_tests',
2777 },
2778 },
2779 },
2780 },
2781]
2782"""
2783
Brian Sheedy7658c982020-01-08 02:27:582784FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL = """\
2785[
2786 {
2787 'mixins': ['waterfall_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012788 'project': 'chromium',
2789 'bucket': 'ci',
Brian Sheedy7658c982020-01-08 02:27:582790 'name': 'chromium.test',
2791 'machines': {
2792 'Fake Tester': {
2793 'remove_mixins': ['waterfall_mixin'],
2794 'swarming': {},
2795 'test_suites': {
2796 'gtest_tests': 'foo_tests',
2797 },
2798 },
2799 },
2800 },
2801]
2802"""
2803
Stephen Martinis11672542018-10-29 18:17:212804FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2805[
2806 {
Greg Gutermanf60eb052020-03-12 17:40:012807 'project': 'chromium',
2808 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212809 'name': 'chromium.test',
2810 'machines': {
2811 'Fake Tester': {
2812 'mixins': ['random_mixin'],
2813 'swarming': {},
2814 'test_suites': {
2815 'gtest_tests': 'foo_tests',
2816 },
2817 },
2818 },
2819 },
2820]
2821"""
2822
2823FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2824[
2825 {
Greg Gutermanf60eb052020-03-12 17:40:012826 'project': 'chromium',
2827 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212828 'name': 'chromium.test',
2829 'machines': {
2830 'Fake Tester': {
2831 'mixins': ['dimension_mixin'],
2832 'swarming': {},
2833 'test_suites': {
2834 'gtest_tests': 'foo_tests',
2835 },
2836 },
2837 },
2838 },
2839]
2840"""
2841
2842FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2843[
2844 {
Greg Gutermanf60eb052020-03-12 17:40:012845 'project': 'chromium',
2846 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212847 'name': 'chromium.test',
2848 'machines': {
2849 'Fake Tester': {
2850 'mixins': ['dimension_mixin'],
2851 'os_type': 'win',
2852 'browser_config': 'release',
2853 'test_suites': {
2854 'gpu_telemetry_tests': 'foo_tests',
2855 },
2856 },
2857 },
2858 },
2859]
2860"""
2861
2862# Swarming mixins must be a list, a single string is not allowed.
2863FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2864[
2865 {
Greg Gutermanf60eb052020-03-12 17:40:012866 'project': 'chromium',
2867 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212868 'name': 'chromium.test',
2869 'machines': {
2870 'Fake Tester': {
2871 'mixins': 'dimension_mixin',
2872 'swarming': {},
2873 'test_suites': {
2874 'gtest_tests': 'foo_tests',
2875 },
2876 },
2877 },
2878 },
2879]
2880"""
2881FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
2882[
2883 {
Greg Gutermanf60eb052020-03-12 17:40:012884 'project': 'chromium',
2885 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212886 'name': 'chromium.test',
2887 'machines': {
2888 'Fake Tester': {
2889 'mixins': ['nonexistant'],
2890 'swarming': {},
2891 'test_suites': {
2892 'gtest_tests': 'foo_tests',
2893 },
2894 },
2895 },
2896 },
2897]
2898"""
2899
2900FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
2901[
2902 {
Greg Gutermanf60eb052020-03-12 17:40:012903 'project': 'chromium',
2904 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212905 'name': 'chromium.test',
Greg Gutermanf60eb052020-03-12 17:40:012906 'mixins': ['waterfall_mixin'],
Stephen Martinis11672542018-10-29 18:17:212907 'machines': {
2908 'Fake Tester': {
2909 'swarming': {},
2910 'test_suites': {
2911 'gtest_tests': 'foo_tests',
2912 },
2913 },
2914 },
2915 },
2916]
2917"""
2918
2919FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2920[
2921 {
2922 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Greg Gutermanf60eb052020-03-12 17:40:012923 'project': 'chromium',
2924 'bucket': 'ci',
Stephen Martinis11672542018-10-29 18:17:212925 'name': 'chromium.test',
2926 'machines': {
2927 'Fake Tester': {
2928 'swarming': {
2929 'dimension_sets': [
2930 {
2931 'kvm': '1',
2932 },
2933 ],
2934 },
2935 'test_suites': {
2936 'gtest_tests': 'foo_tests',
2937 },
2938 },
2939 },
2940 },
2941]
2942"""
2943
2944FOO_TEST_SUITE_WITH_MIXIN = """\
2945{
2946 'basic_suites': {
2947 'foo_tests': {
2948 'foo_test': {
2949 'swarming': {
2950 'dimension_sets': [
2951 {
2952 'integrity': 'high',
2953 }
2954 ],
2955 'expiration': 120,
2956 },
2957 'mixins': ['test_mixin'],
2958 },
2959 },
2960 },
2961}
2962"""
2963
2964# These mixins are invalid; if passed to check_input_file_consistency, they will
2965# fail. These are used for output file consistency checks.
2966SWARMING_MIXINS = """\
2967{
2968 'builder_mixin': {
2969 'swarming': {
2970 'value': 'builder',
2971 },
2972 },
2973 'dimension_mixin': {
2974 'swarming': {
2975 'dimensions': {
2976 'iama': 'mixin',
2977 },
2978 },
2979 },
2980 'random_mixin': {
2981 'value': 'random',
2982 },
2983 'test_mixin': {
2984 'swarming': {
2985 'value': 'test',
2986 },
2987 },
2988 'waterfall_mixin': {
2989 'swarming': {
2990 'value': 'waterfall',
2991 },
2992 },
2993}
2994"""
2995
Wezc0e835b702018-10-30 00:38:412996SWARMING_MIXINS_APPEND = """\
2997{
2998 'builder_mixin': {
2999 '$mixin_append': {
3000 'args': [ '--mixin-argument' ],
3001 },
3002 },
3003}
3004"""
3005
3006SWARMING_MIXINS_APPEND_NOT_LIST = """\
3007{
3008 'builder_mixin': {
3009 '$mixin_append': {
3010 'args': 'I am not a list',
3011 },
3012 },
3013}
3014"""
3015
3016SWARMING_MIXINS_APPEND_TO_SWARMING = """\
3017{
3018 'builder_mixin': {
3019 '$mixin_append': {
3020 'swarming': [ 'swarming!' ],
3021 },
3022 },
3023}
3024"""
3025
Brian Sheedycae63b22020-06-10 22:52:113026SWARMING_MIXINS_DIMENSION_SETS = """\
3027{
3028 'dimension_set_mixin_1': {
3029 'swarming': {
3030 'dimension_sets': [
3031 {
3032 'value': 'ds1',
3033 },
3034 ],
3035 },
3036 },
3037 'dimension_set_mixin_2': {
3038 'swarming': {
3039 'dimension_sets': [
3040 {
3041 'value': 'ds2',
3042 },
3043 ],
3044 },
3045 },
3046 'duplicate_dimension_set_mixin_1': {
3047 'swarming': {
3048 'dimension_sets': [
3049 {
3050 'value': 'ds1',
3051 },
3052 ],
3053 },
3054 },
3055 'dimension_mixin': {
3056 'swarming': {
3057 'dimensions': {
3058 'other_value': 'dimension_mixin',
3059 },
3060 },
3061 },
3062}
3063"""
3064
Stephen Martinis11672542018-10-29 18:17:213065SWARMING_MIXINS_DUPLICATED = """\
3066{
3067 'builder_mixin': {
3068 'value': 'builder',
3069 },
3070 'builder_mixin': {
3071 'value': 'builder',
3072 },
3073}
3074"""
3075
3076SWARMING_MIXINS_UNSORTED = """\
3077{
3078 'b_mixin': {
3079 'b': 'b',
3080 },
3081 'a_mixin': {
3082 'a': 'a',
3083 },
3084 'c_mixin': {
3085 'c': 'c',
3086 },
3087}
3088"""
3089
3090SWARMING_MIXINS_SORTED = """\
3091{
3092 'a_mixin': {
3093 'a': 'a',
3094 },
3095 'b_mixin': {
3096 'b': 'b',
3097 },
3098 'c_mixin': {
3099 'c': 'c',
3100 },
3101}
3102"""
3103
Brian Sheedycae63b22020-06-10 22:52:113104WATERFALL_DIMENSION_SETS_WATERFALL_OUTPUT = """\
3105{
3106 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3107 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3108 "Fake Tester": {
3109 "gtest_tests": [
3110 {
3111 "merge": {
3112 "args": [],
3113 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3114 },
3115 "swarming": {
3116 "can_use_on_swarming_builders": true,
3117 "dimension_sets": [
3118 {
3119 "other_value": "dimension_mixin",
3120 "value": "ds1"
3121 },
3122 {
3123 "other_value": "dimension_mixin",
3124 "value": "ds2"
3125 }
3126 ]
3127 },
3128 "test": "foo_test"
3129 }
3130 ]
3131 }
3132}
3133"""
3134
Stephen Martinis11672542018-10-29 18:17:213135WATERFALL_MIXIN_WATERFALL_OUTPUT = """\
3136{
3137 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3138 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3139 "Fake Tester": {
3140 "gtest_tests": [
3141 {
Stephen Martinisbc7b7772019-05-01 22:01:433142 "merge": {
3143 "args": [],
3144 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3145 },
Stephen Martinis11672542018-10-29 18:17:213146 "swarming": {
3147 "can_use_on_swarming_builders": true,
3148 "dimension_sets": [
3149 {
3150 "integrity": "high"
3151 }
3152 ],
3153 "expiration": 120,
3154 "value": "waterfall"
3155 },
3156 "test": "foo_test"
3157 }
3158 ]
3159 }
3160}
3161"""
3162
Brian Sheedy7658c982020-01-08 02:27:583163WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT = """\
3164{
3165 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3166 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3167 "Fake Tester": {
3168 "gtest_tests": [
3169 {
3170 "merge": {
3171 "args": [],
3172 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3173 },
3174 "swarming": {
3175 "can_use_on_swarming_builders": true,
3176 "dimension_sets": [
3177 {
3178 "integrity": "high"
3179 }
3180 ],
3181 "expiration": 120
3182 },
3183 "test": "foo_test"
3184 }
3185 ]
3186 }
3187}
3188"""
3189
Stephen Martinis11672542018-10-29 18:17:213190WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT = """\
3191{
3192 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3193 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3194 "Fake Tester": {
3195 "gtest_tests": [
3196 {
Stephen Martinisbc7b7772019-05-01 22:01:433197 "merge": {
3198 "args": [],
3199 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3200 },
Stephen Martinis11672542018-10-29 18:17:213201 "swarming": {
3202 "can_use_on_swarming_builders": true,
3203 "dimension_sets": [
3204 {
3205 "integrity": "high"
3206 }
3207 ],
3208 "expiration": 120,
3209 "value": "exception"
3210 },
3211 "test": "foo_test"
3212 }
3213 ]
3214 }
3215}
3216"""
3217
3218BUILDER_MIXIN_WATERFALL_OUTPUT = """\
3219{
3220 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3221 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3222 "Fake Tester": {
3223 "gtest_tests": [
3224 {
Stephen Martinisbc7b7772019-05-01 22:01:433225 "merge": {
3226 "args": [],
3227 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3228 },
Stephen Martinis11672542018-10-29 18:17:213229 "swarming": {
3230 "can_use_on_swarming_builders": true,
3231 "dimension_sets": [
3232 {
3233 "integrity": "high"
3234 }
3235 ],
3236 "expiration": 120,
3237 "value": "builder"
3238 },
3239 "test": "foo_test"
3240 }
3241 ]
3242 }
3243}
3244"""
3245
3246BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT = """\
3247{
3248 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3249 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3250 "Fake Tester": {
3251 "gtest_tests": [
3252 {
Stephen Martinisbc7b7772019-05-01 22:01:433253 "merge": {
3254 "args": [],
3255 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3256 },
Stephen Martinis11672542018-10-29 18:17:213257 "swarming": {
3258 "can_use_on_swarming_builders": true,
3259 "dimension_sets": [
3260 {
3261 "integrity": "high"
3262 }
3263 ],
3264 "expiration": 120
3265 },
3266 "test": "foo_test",
3267 "value": "random"
3268 }
3269 ]
3270 }
3271}
3272"""
3273
Wezc0e835b702018-10-30 00:38:413274BUILDER_MIXIN_APPEND_ARGS_WATERFALL_OUTPUT = """\
3275{
3276 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3277 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3278 "Fake Tester": {
3279 "gtest_tests": [
3280 {
3281 "args": [
3282 "--c_arg",
3283 "--mixin-argument"
3284 ],
Stephen Martinisbc7b7772019-05-01 22:01:433285 "merge": {
3286 "args": [],
3287 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3288 },
Wezc0e835b702018-10-30 00:38:413289 "swarming": {
3290 "can_use_on_swarming_builders": true
3291 },
3292 "test": "foo_test"
3293 }
3294 ]
3295 }
3296}
3297"""
3298
Stephen Martinis11672542018-10-29 18:17:213299TEST_MIXIN_WATERFALL_OUTPUT = """\
3300{
3301 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3302 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3303 "Fake Tester": {
3304 "gtest_tests": [
3305 {
Stephen Martinisbc7b7772019-05-01 22:01:433306 "merge": {
3307 "args": [],
3308 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3309 },
Stephen Martinis11672542018-10-29 18:17:213310 "swarming": {
3311 "can_use_on_swarming_builders": true,
3312 "dimension_sets": [
3313 {
3314 "integrity": "high",
3315 "kvm": "1"
3316 }
3317 ],
3318 "expiration": 120,
3319 "value": "test"
3320 },
3321 "test": "foo_test"
3322 }
3323 ]
3324 }
3325}
3326"""
3327
3328DIMENSIONS_MIXIN_WATERFALL_OUTPUT = """\
3329{
3330 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3331 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3332 "Fake Tester": {
3333 "gtest_tests": [
3334 {
Stephen Martinisbc7b7772019-05-01 22:01:433335 "merge": {
3336 "args": [],
3337 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3338 },
Stephen Martinis11672542018-10-29 18:17:213339 "swarming": {
3340 "can_use_on_swarming_builders": true,
3341 "dimension_sets": [
3342 {
3343 "iama": "mixin",
3344 "integrity": "high"
3345 }
3346 ],
3347 "expiration": 120,
3348 "value": "test"
3349 },
3350 "test": "foo_test"
3351 }
3352 ]
3353 }
3354}
3355"""
3356
Garrett Beaty1afaccc2020-06-25 19:58:153357
3358class MixinTests(TestCase):
Stephen Martinis11672542018-10-29 18:17:213359 """Tests for the mixins feature."""
3360 def test_mixins_must_be_sorted(self):
Garrett Beaty1afaccc2020-06-25 19:58:153361 fbb = FakeBBGen(self.args,
3362 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213363 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413364 LUCI_MILO_CFG,
3365 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:213366 fbb.check_input_file_consistency(verbose=True)
3367 self.assertFalse(fbb.printed_lines)
3368
Garrett Beaty1afaccc2020-06-25 19:58:153369 fbb = FakeBBGen(self.args,
3370 FOO_GTESTS_SORTING_MIXINS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213371 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413372 LUCI_MILO_CFG,
3373 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:213374 with self.assertRaises(generate_buildbot_json.BBGenErr):
3375 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:533376 joined_lines = '\n'.join(fbb.printed_lines)
Stephen Martinis11672542018-10-29 18:17:213377 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:533378 joined_lines, '.*\+ ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:213379 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:533380 joined_lines, '.*\- ._mixin.*')
Stephen Martinis11672542018-10-29 18:17:213381 fbb.printed_lines = []
3382 self.assertFalse(fbb.printed_lines)
3383
3384 def test_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:153385 fbb = FakeBBGen(self.args,
3386 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213387 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413388 LUCI_MILO_CFG,
3389 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153390 self.create_testing_buildbot_json_file('chromium.test.json',
3391 WATERFALL_MIXIN_WATERFALL_OUTPUT)
3392 self.create_testing_buildbot_json_file('chromium.ci.json',
3393 WATERFALL_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213394 fbb.check_output_file_consistency(verbose=True)
3395 self.assertFalse(fbb.printed_lines)
3396
3397 def test_waterfall_exception_overrides(self):
Garrett Beaty1afaccc2020-06-25 19:58:153398 fbb = FakeBBGen(self.args,
3399 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213400 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413401 LUCI_MILO_CFG,
3402 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
3403 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153404 self.create_testing_buildbot_json_file(
3405 'chromium.test.json', WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT)
3406 self.create_testing_buildbot_json_file(
3407 'chromium.ci.json', WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213408 fbb.check_output_file_consistency(verbose=True)
3409 self.assertFalse(fbb.printed_lines)
3410
3411 def test_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:153412 fbb = FakeBBGen(self.args,
3413 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213414 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413415 LUCI_MILO_CFG,
3416 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153417 self.create_testing_buildbot_json_file('chromium.test.json',
3418 BUILDER_MIXIN_WATERFALL_OUTPUT)
3419 self.create_testing_buildbot_json_file('chromium.ci.json',
3420 BUILDER_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213421 fbb.check_output_file_consistency(verbose=True)
3422 self.assertFalse(fbb.printed_lines)
3423
3424 def test_builder_non_swarming(self):
Garrett Beaty1afaccc2020-06-25 19:58:153425 fbb = FakeBBGen(self.args,
3426 FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213427 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413428 LUCI_MILO_CFG,
3429 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153430 self.create_testing_buildbot_json_file(
3431 'chromium.test.json', BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT)
3432 self.create_testing_buildbot_json_file(
3433 'chromium.ci.json', BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213434 fbb.check_output_file_consistency(verbose=True)
3435 self.assertFalse(fbb.printed_lines)
3436
3437 def test_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:153438 fbb = FakeBBGen(self.args,
3439 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213440 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413441 LUCI_MILO_CFG,
3442 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153443 self.create_testing_buildbot_json_file('chromium.test.json',
3444 TEST_MIXIN_WATERFALL_OUTPUT)
3445 self.create_testing_buildbot_json_file('chromium.ci.json',
3446 TEST_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213447 fbb.check_output_file_consistency(verbose=True)
3448 self.assertFalse(fbb.printed_lines)
3449
3450 def test_dimension(self):
Garrett Beaty1afaccc2020-06-25 19:58:153451 fbb = FakeBBGen(self.args,
3452 FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213453 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413454 LUCI_MILO_CFG,
3455 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153456 self.create_testing_buildbot_json_file('chromium.test.json',
3457 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
3458 self.create_testing_buildbot_json_file('chromium.ci.json',
3459 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213460 fbb.check_output_file_consistency(verbose=True)
3461 self.assertFalse(fbb.printed_lines)
3462
3463 def test_dimension_gpu(self):
Garrett Beaty1afaccc2020-06-25 19:58:153464 fbb = FakeBBGen(self.args,
3465 FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213466 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413467 LUCI_MILO_CFG,
Chan Liab7d8dd82020-04-24 23:42:193468 mixins=SWARMING_MIXINS,
3469 gn_isolate_map=GPU_TELEMETRY_GN_ISOLATE_MAP)
Garrett Beaty1afaccc2020-06-25 19:58:153470 self.create_testing_buildbot_json_file('chromium.test.json',
3471 GPU_DIMENSIONS_WATERFALL_OUTPUT)
3472 self.create_testing_buildbot_json_file('chromium.ci.json',
3473 GPU_DIMENSIONS_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213474 fbb.check_output_file_consistency(verbose=True)
3475 self.assertFalse(fbb.printed_lines)
3476
3477 def test_unreferenced(self):
Garrett Beaty1afaccc2020-06-25 19:58:153478 fbb = FakeBBGen(self.args,
3479 FOO_GTESTS_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213480 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413481 LUCI_MILO_CFG,
3482 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213483 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
3484 '.*mixins are unreferenced.*'):
3485 fbb.check_input_file_consistency(verbose=True)
3486 self.assertFalse(fbb.printed_lines)
3487
Stephen Martinis11672542018-10-29 18:17:213488 def test_unused(self):
Garrett Beaty1afaccc2020-06-25 19:58:153489 fbb = FakeBBGen(self.args,
3490 FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213491 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413492 LUCI_MILO_CFG,
3493 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153494 self.create_testing_buildbot_json_file('chromium.test.json',
3495 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
3496 self.create_testing_buildbot_json_file('chromium.ci.json',
3497 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213498 with self.assertRaises(generate_buildbot_json.BBGenErr):
3499 fbb.check_output_file_consistency(verbose=True)
3500 self.assertFalse(fbb.printed_lines)
3501
3502 def test_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:153503 fbb = FakeBBGen(self.args,
3504 FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
Stephen Martinis11672542018-10-29 18:17:213505 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413506 LUCI_MILO_CFG,
3507 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153508 self.create_testing_buildbot_json_file('chromium.test.json',
3509 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
3510 self.create_testing_buildbot_json_file('chromium.ci.json',
3511 DIMENSIONS_MIXIN_WATERFALL_OUTPUT)
Stephen Martinis11672542018-10-29 18:17:213512 with self.assertRaises(generate_buildbot_json.BBGenErr):
3513 fbb.check_output_file_consistency(verbose=True)
3514 self.assertFalse(fbb.printed_lines)
3515
3516
3517 def test_no_duplicate_keys(self):
Garrett Beaty1afaccc2020-06-25 19:58:153518 fbb = FakeBBGen(self.args,
3519 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Stephen Martinis54d64ad2018-09-21 22:16:203520 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413521 LUCI_MILO_CFG,
3522 mixins=SWARMING_MIXINS_DUPLICATED)
Stephen Martinis54d64ad2018-09-21 22:16:203523 with self.assertRaisesRegexp(
3524 generate_buildbot_json.BBGenErr,
Stephen Martinisb72f6d22018-10-04 23:29:013525 'The following files have invalid keys: mixins.pyl'):
Stephen Martinis54d64ad2018-09-21 22:16:203526 fbb.check_input_file_consistency(verbose=True)
Stephen Martinis5bef0fc2020-01-06 22:47:533527 joined_lines = '\n'.join(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:203528 self.assertRegexpMatches(
Stephen Martinis5bef0fc2020-01-06 22:47:533529 joined_lines, '.*\- builder_mixin')
3530 fbb.printed_lines = []
3531 self.assertFalse(fbb.printed_lines)
3532
3533 def test_no_duplicate_keys_basic_test_suite(self):
Garrett Beaty1afaccc2020-06-25 19:58:153534 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, FOO_TEST_SUITE_NOT_SORTED,
Stephen Martinis5bef0fc2020-01-06 22:47:533535 LUCI_MILO_CFG)
Stephen Martinis5bef0fc2020-01-06 22:47:533536 with self.assertRaisesRegexp(
3537 generate_buildbot_json.BBGenErr,
3538 'The following files have invalid keys: test_suites.pyl'):
3539 fbb.check_input_file_consistency(verbose=True)
3540 joined_lines = '\n'.join(fbb.printed_lines)
3541 self.assertRegexpMatches(joined_lines, '.*\- a_test')
3542 self.assertRegexpMatches(joined_lines, '.*\+ a_test')
Stephen Martinis54d64ad2018-09-21 22:16:203543 fbb.printed_lines = []
3544 self.assertFalse(fbb.printed_lines)
3545
3546 def test_type_assert_printing_help(self):
Garrett Beaty1afaccc2020-06-25 19:58:153547 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL, TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:203548 LUCI_MILO_CFG)
3549 with self.assertRaisesRegexp(
3550 generate_buildbot_json.BBGenErr,
3551 'Invalid \.pyl file \'test_suites.pyl\'.*'):
3552 fbb.check_input_file_consistency(verbose=True)
3553 self.assertEquals(
3554 fbb.printed_lines, [
3555 '== test_suites.pyl ==',
3556 '<snip>',
3557 '1 {',
3558 "2 'basic_suites': {",
3559 '--------------------------------------------------------------------'
3560 '------------',
3561 '3 3: {',
3562 '-------^------------------------------------------------------------'
3563 '------------',
3564 "4 'suite_c': {},",
3565 '5 },',
3566 '<snip>',
3567 ])
3568
Wezc0e835b702018-10-30 00:38:413569 def test_mixin_append_args(self):
Garrett Beaty1afaccc2020-06-25 19:58:153570 fbb = FakeBBGen(self.args,
3571 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:413572 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413573 LUCI_MILO_CFG,
3574 mixins=SWARMING_MIXINS_APPEND)
Garrett Beaty1afaccc2020-06-25 19:58:153575 self.create_testing_buildbot_json_file(
3576 'chromium.test.json', BUILDER_MIXIN_APPEND_ARGS_WATERFALL_OUTPUT)
3577 self.create_testing_buildbot_json_file(
3578 'chromium.ci.json', BUILDER_MIXIN_APPEND_ARGS_WATERFALL_OUTPUT)
Wezc0e835b702018-10-30 00:38:413579 fbb.check_output_file_consistency(verbose=True)
3580 self.assertFalse(fbb.printed_lines)
3581
3582 def test_mixin_append_mixin_field_not_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:153583 fbb = FakeBBGen(self.args,
3584 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:413585 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413586 LUCI_MILO_CFG,
3587 mixins=SWARMING_MIXINS_APPEND_NOT_LIST)
Wezc0e835b702018-10-30 00:38:413588 with self.assertRaisesRegexp(
3589 generate_buildbot_json.BBGenErr,
3590 'Key "args" in \$mixin_append must be a list.'):
3591 fbb.check_output_file_consistency(verbose=True)
3592 self.assertFalse(fbb.printed_lines)
3593
3594 def test_mixin_append_test_field_not_list(self):
Garrett Beaty1afaccc2020-06-25 19:58:153595 fbb = FakeBBGen(self.args,
3596 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Wezc0e835b702018-10-30 00:38:413597 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413598 LUCI_MILO_CFG,
3599 mixins=SWARMING_MIXINS_APPEND_TO_SWARMING)
Wezc0e835b702018-10-30 00:38:413600 with self.assertRaisesRegexp(
3601 generate_buildbot_json.BBGenErr,
3602 'Cannot apply \$mixin_append to non-list "swarming".'):
3603 fbb.check_output_file_consistency(verbose=True)
3604 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:203605
Brian Sheedy7658c982020-01-08 02:27:583606 def test_remove_mixin_builder_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:153607 fbb = FakeBBGen(self.args,
3608 FOO_GTESTS_WATERFALL_MIXIN_BUILDER_REMOVE_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:583609 FOO_TEST_SUITE,
3610 LUCI_MILO_CFG,
3611 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153612 self.create_testing_buildbot_json_file(
3613 'chromium.test.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
3614 self.create_testing_buildbot_json_file(
3615 'chromium.ci.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
Brian Sheedy7658c982020-01-08 02:27:583616 fbb.check_output_file_consistency(verbose=True)
3617 self.assertFalse(fbb.printed_lines)
3618
3619 def test_remove_mixin_test_remove_waterfall(self):
Garrett Beaty1afaccc2020-06-25 19:58:153620 fbb = FakeBBGen(self.args,
3621 FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:583622 FOO_TEST_SUITE_WITH_REMOVE_WATERFALL_MIXIN,
3623 LUCI_MILO_CFG,
3624 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153625 self.create_testing_buildbot_json_file(
3626 'chromium.test.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
3627 self.create_testing_buildbot_json_file(
3628 'chromium.ci.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
Brian Sheedy7658c982020-01-08 02:27:583629 fbb.check_output_file_consistency(verbose=True)
3630 self.assertFalse(fbb.printed_lines)
3631
3632 def test_remove_mixin_test_remove_builder(self):
Garrett Beaty1afaccc2020-06-25 19:58:153633 fbb = FakeBBGen(self.args,
3634 FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
Brian Sheedy7658c982020-01-08 02:27:583635 FOO_TEST_SUITE_WITH_REMOVE_BUILDER_MIXIN,
3636 LUCI_MILO_CFG,
3637 mixins=SWARMING_MIXINS)
Garrett Beaty1afaccc2020-06-25 19:58:153638 self.create_testing_buildbot_json_file(
3639 'chromium.test.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
3640 self.create_testing_buildbot_json_file(
3641 'chromium.ci.json', WATERFALL_MIXIN_REMOVE_WATERFALL_OUTPUT)
Brian Sheedy7658c982020-01-08 02:27:583642 fbb.check_output_file_consistency(verbose=True)
3643 self.assertFalse(fbb.printed_lines)
3644
Brian Sheedycae63b22020-06-10 22:52:113645 def test_dimension_sets_application(self):
Garrett Beaty1afaccc2020-06-25 19:58:153646 fbb = FakeBBGen(self.args,
3647 FOO_GTESTS_DIMENSION_SETS_MIXIN_WATERFALL,
Brian Sheedycae63b22020-06-10 22:52:113648 FOO_TEST_SUITE_NO_DIMENSIONS,
3649 LUCI_MILO_CFG,
3650 mixins=SWARMING_MIXINS_DIMENSION_SETS)
Garrett Beaty1afaccc2020-06-25 19:58:153651 self.create_testing_buildbot_json_file(
3652 'chromium.test.json', WATERFALL_DIMENSION_SETS_WATERFALL_OUTPUT)
3653 self.create_testing_buildbot_json_file(
3654 'chromium.ci.json', WATERFALL_DIMENSION_SETS_WATERFALL_OUTPUT)
Brian Sheedycae63b22020-06-10 22:52:113655 fbb.check_output_file_consistency(verbose=True)
3656 self.assertFalse(fbb.printed_lines)
3657
Karen Qiane24b7ee2019-02-12 23:37:063658TEST_SUITE_WITH_PARAMS = """\
3659{
3660 'basic_suites': {
3661 'bar_tests': {
3662 'bar_test': {
3663 'args': ['--no-xvfb'],
3664 'swarming': {
3665 'dimension_sets': [
3666 {
3667 'device_os': 'NMF26U'
3668 }
3669 ],
3670 },
3671 'should_retry_with_patch': False,
3672 'name': 'bar_test'
3673 },
3674 'bar_test_test': {
3675 'swarming': {
3676 'dimension_sets': [
3677 {
3678 'kvm': '1'
3679 }
3680 ],
3681 'hard_timeout': 1000
3682 },
3683 'should_retry_with_patch': True
3684 }
3685 },
3686 'foo_tests': {
3687 'foo_test_empty': {},
3688 'foo_test': {
3689 'args': [
3690 '--jobs=1',
3691 '--verbose'
3692 ],
3693 'swarming': {
3694 'dimension_sets': [
3695 {
3696 'device_os': 'MMB29Q'
3697 }
3698 ],
3699 'hard_timeout': 1800
3700 }
3701 },
3702 'foo_test_test': {
3703 'swarming': {
3704 },
3705 'name': 'pls'
3706 },
3707 },
3708 },
3709 'compound_suites': {
3710 'composition_tests': [
3711 'foo_tests',
3712 'bar_tests',
3713 ],
3714 },
3715}
3716"""
3717TEST_QUERY_BOTS_OUTPUT = {
3718 "Fake Android M Tester": {
3719 "gtest_tests": [
3720 {
3721 "test": "foo_test",
Stephen Martinisbc7b7772019-05-01 22:01:433722 "merge": {
3723 "args": [],
3724 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3725 },
Karen Qiane24b7ee2019-02-12 23:37:063726 "swarming": {
3727 "can_use_on_swarming_builders": False
3728 }
3729 }
3730 ]
3731 },
3732 "Fake Android L Tester": {
3733 "gtest_tests": [
3734 {
3735 "test": "foo_test",
3736 "args": [
3737 "--gs-results-bucket=chromium-result-details",
3738 "--recover-devices"
3739 ],
Stephen Martinisbc7b7772019-05-01 22:01:433740 "merge": {
3741 "args": [],
3742 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3743 },
Karen Qiane24b7ee2019-02-12 23:37:063744 "swarming": {
3745 "cipd_packages": [
3746 {
3747 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3748 "location": "bin",
3749 "revision":
3750 "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3751 }
3752 ],
3753 "dimension_sets":[
3754 {
Ben Pastenee012aea42019-05-14 22:32:283755 "device_os": "LMY41U",
3756 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223757 "device_type": "hammerhead",
3758 'os': 'Android'
Karen Qiane24b7ee2019-02-12 23:37:063759 }
3760 ],
3761 "can_use_on_swarming_builders": True
3762 }
3763 }
3764 ]
3765 },
3766 "Fake Android K Tester": {
3767 "additional_compile_targets": ["bar_test"],
3768 "gtest_tests": [
3769 {
3770 "test": "foo_test",
3771 "args": [
3772 "--gs-results-bucket=chromium-result-details",
3773 "--recover-devices"
3774 ],
Stephen Martinisbc7b7772019-05-01 22:01:433775 "merge": {
3776 "args": [],
3777 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3778 },
Karen Qiane24b7ee2019-02-12 23:37:063779 "swarming": {
3780 "cipd_packages": [
3781 {
3782 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3783 "location": "bin",
3784 "revision":
3785 "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3786 }
3787 ],
3788 "dimension_sets": [
3789 {
3790 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:283791 "device_os_type": "userdebug",
Ben Pastened15aa8a2019-05-16 16:59:223792 "device_type": "hammerhead",
3793 "os": "Android",
Karen Qiane24b7ee2019-02-12 23:37:063794 }
3795 ],
3796 "can_use_on_swarming_builders": True,
3797 "output_links": [
3798 {
3799 "link": ["https://luci-logdog.appspot.com/v/?s",
3800 "=android%2Fswarming%2Flogcats%2F",
3801 "${TASK_ID}%2F%2B%2Funified_logcats"],
3802 "name": "shard #${SHARD_INDEX} logcats"
3803 }
3804 ]
3805 }
3806 }
3807 ]
3808 },
3809 "Android Builder": {
3810 "additional_compile_targets": ["bar_test"]
3811 }
3812}
3813TEST_QUERY_BOTS_TESTS_OUTPUT = {
3814 "Fake Android M Tester": [
3815 {
Stephen Martinisbc7b7772019-05-01 22:01:433816 "merge": {
3817 "args": [],
3818 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3819 },
Karen Qiane24b7ee2019-02-12 23:37:063820 "test": "foo_test",
3821 "swarming": {
3822 "can_use_on_swarming_builders": False
3823 }
3824 }
3825 ],
3826 "Fake Android L Tester": [
3827 {
3828 "test": "foo_test",
3829 "args": [
3830 "--gs-results-bucket=chromium-result-details",
3831 "--recover-devices"
3832 ],
Stephen Martinisbc7b7772019-05-01 22:01:433833 "merge": {
3834 "args": [],
3835 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3836 },
Karen Qiane24b7ee2019-02-12 23:37:063837 "swarming": {
3838 "cipd_packages": [
3839 {
3840 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3841 "location": "bin",
3842 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3843 }
3844 ],
3845 "dimension_sets": [
3846 {
Ben Pastenee012aea42019-05-14 22:32:283847 "device_os": "LMY41U",
3848 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223849 "device_type": "hammerhead",
3850 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063851 }
3852 ],
3853 "can_use_on_swarming_builders": True
3854 }
3855 }
3856 ],
3857 "Android Builder": [],
3858 "Fake Android K Tester": [
3859 {
3860 "test": "foo_test",
3861 "args": [
3862 "--gs-results-bucket=chromium-result-details",
3863 "--recover-devices"
3864 ],
Stephen Martinisbc7b7772019-05-01 22:01:433865 "merge": {
3866 "args": [],
3867 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3868 },
Karen Qiane24b7ee2019-02-12 23:37:063869 "swarming": {
3870 "cipd_packages": [
3871 {
3872 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3873 "location": "bin",
3874 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3875 }
3876 ],
3877 "dimension_sets": [
3878 {
3879 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:283880 "device_os_type": "userdebug",
Ben Pastened15aa8a2019-05-16 16:59:223881 "device_type": "hammerhead",
3882 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063883 }
3884 ],
3885 "can_use_on_swarming_builders": True,
3886 "output_links": [
3887 {
3888 "link": [
3889 "https://luci-logdog.appspot.com/v/?s",
3890 "=android%2Fswarming%2Flogcats%2F",
3891 "${TASK_ID}%2F%2B%2Funified_logcats"
3892 ],
3893 "name": "shard #${SHARD_INDEX} logcats"
3894 }
3895 ]
3896 }
3897 }
3898 ]
3899}
3900
3901TEST_QUERY_BOT_OUTPUT = {
3902 "additional_compile_targets": ["bar_test"],
3903 "gtest_tests": [
3904 {
Stephen Martinisbc7b7772019-05-01 22:01:433905 "test": "foo_test",
3906 "args": [
Karen Qiane24b7ee2019-02-12 23:37:063907 "--gs-results-bucket=chromium-result-details",
3908 "--recover-devices"
Stephen Martinisbc7b7772019-05-01 22:01:433909 ],
3910 "merge": {
3911 "args": [],
3912 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3913 },
3914 "swarming": {
Karen Qiane24b7ee2019-02-12 23:37:063915 "cipd_packages": [
3916 {
3917 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3918 "location": "bin",
3919 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3920 }
3921 ],
3922 "dimension_sets": [
3923 {
3924 "device_os": "KTU84P",
Ben Pastened15aa8a2019-05-16 16:59:223925 "device_os_type": "userdebug",
3926 "device_type": "hammerhead",
3927 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063928 }
3929 ],
3930 "can_use_on_swarming_builders": True,
3931 "output_links": [
3932 {
3933 "link": ["https://luci-logdog.appspot.com/v/?s",
3934 "=android%2Fswarming%2Flogcats%2F",
3935 "${TASK_ID}%2F%2B%2Funified_logcats"
3936 ],
3937 "name": "shard #${SHARD_INDEX} logcats"
3938 }
3939 ]
3940 }
3941 }
3942 ]
3943}
3944TEST_QUERY_BOT_TESTS_OUTPUT = [
3945 {
3946 "test": "foo_test",
3947 "args": [
3948 "--gs-results-bucket=chromium-result-details",
3949 "--recover-devices"
3950 ],
Stephen Martinisbc7b7772019-05-01 22:01:433951 "merge": {
3952 "args": [],
3953 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3954 },
Karen Qiane24b7ee2019-02-12 23:37:063955 "swarming": {
3956 "cipd_packages": [
3957 {
3958 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3959 "location": "bin",
3960 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3961 }
3962 ],
3963 "dimension_sets": [
3964 {
Ben Pastenee012aea42019-05-14 22:32:283965 "device_os": "LMY41U",
3966 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223967 "device_type": "hammerhead",
3968 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063969 }
3970 ],
3971 "can_use_on_swarming_builders": True
3972 }
3973 }
3974]
3975
3976TEST_QUERY_TESTS_OUTPUT = {
3977 "bar_test": {},
3978 "foo_test": {}
3979}
3980
3981TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ["foo_test"]
3982
3983TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ["bar_test"]
3984
3985TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ["bar_test_test"]
3986
3987TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3988
3989TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3990
3991TEST_QUERY_TEST_OUTPUT = {}
3992
3993TEST_QUERY_TEST_BOTS_OUTPUT = [
3994 "Fake Android M Tester",
3995 "Fake Android L Tester",
3996 "Fake Android K Tester"
3997]
3998
3999TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT = ['Fake Tester']
4000
4001TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT = []
4002
Garrett Beaty1afaccc2020-06-25 19:58:154003
4004class QueryTests(TestCase):
Karen Qiane24b7ee2019-02-12 23:37:064005 """Tests for the query feature."""
4006 def test_query_bots(self):
Garrett Beaty1afaccc2020-06-25 19:58:154007 self.override_args(query='bots',
4008 check=False,
4009 pyl_files_dir=None,
4010 json=None,
4011 waterfall_filters=[])
4012 fbb = FakeBBGen(self.args,
4013 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064014 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414015 LUCI_MILO_CFG,
4016 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064017 fbb.query(fbb.args)
4018 query_json = json.loads("".join(fbb.printed_lines))
4019 self.assertEqual(query_json, TEST_QUERY_BOTS_OUTPUT)
4020
4021 def test_query_bots_invalid(self):
Garrett Beaty1afaccc2020-06-25 19:58:154022 self.override_args(query='bots/blah/blah',
4023 check=False,
4024 pyl_files_dir=None,
4025 json=None,
4026 waterfall_filters=[])
4027 fbb = FakeBBGen(self.args,
4028 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064029 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414030 LUCI_MILO_CFG,
4031 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064032 with self.assertRaises(SystemExit) as cm:
4033 fbb.query(fbb.args)
4034 self.assertEqual(cm.exception.code, 1)
4035 self.assertTrue(fbb.printed_lines)
4036
4037 def test_query_bots_json(self):
Garrett Beaty1afaccc2020-06-25 19:58:154038 self.override_args(query='bots',
4039 check=False,
4040 pyl_files_dir=None,
4041 json='result.json',
4042 waterfall_filters=[])
4043 fbb = FakeBBGen(self.args,
4044 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064045 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414046 LUCI_MILO_CFG,
4047 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064048 fbb.query(fbb.args)
4049 self.assertFalse(fbb.printed_lines)
4050
4051 def test_query_bots_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:154052 self.override_args(query='bots/tests',
4053 check=False,
4054 pyl_files_dir=None,
4055 json=None,
4056 waterfall_filters=[])
4057 fbb = FakeBBGen(self.args,
4058 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064059 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414060 LUCI_MILO_CFG,
4061 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064062 fbb.query(fbb.args)
4063 query_json = json.loads("".join(fbb.printed_lines))
4064 self.assertEqual(query_json, TEST_QUERY_BOTS_TESTS_OUTPUT)
4065
4066 def test_query_invalid_bots_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:154067 self.override_args(query='bots/tdfjdk',
4068 check=False,
4069 pyl_files_dir=None,
4070 json=None,
4071 waterfall_filters=[])
4072 fbb = FakeBBGen(self.args,
4073 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064074 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414075 LUCI_MILO_CFG,
4076 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064077 with self.assertRaises(SystemExit) as cm:
4078 fbb.query(fbb.args)
4079 self.assertEqual(cm.exception.code, 1)
4080 self.assertTrue(fbb.printed_lines)
4081
4082 def test_query_bot(self):
Garrett Beaty1afaccc2020-06-25 19:58:154083 self.override_args(query='bot/Fake Android K Tester',
4084 check=False,
4085 pyl_files_dir=None,
4086 json=None,
4087 waterfall_filters=[])
4088 fbb = FakeBBGen(self.args,
4089 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064090 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414091 LUCI_MILO_CFG,
4092 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064093 fbb.query(fbb.args)
4094 query_json = json.loads("".join(fbb.printed_lines))
Garrett Beaty1afaccc2020-06-25 19:58:154095 self.maxDiff = None # pragma pylint: disable=attribute-defined-outside-init
Karen Qiane24b7ee2019-02-12 23:37:064096 self.assertEqual(query_json, TEST_QUERY_BOT_OUTPUT)
4097
4098 def test_query_bot_invalid_id(self):
Garrett Beaty1afaccc2020-06-25 19:58:154099 self.override_args(query='bot/bot1',
4100 check=False,
4101 pyl_files_dir=None,
4102 json=None,
4103 waterfall_filters=[])
4104 fbb = FakeBBGen(self.args,
4105 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064106 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414107 LUCI_MILO_CFG,
4108 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064109 with self.assertRaises(SystemExit) as cm:
4110 fbb.query(fbb.args)
4111 self.assertEqual(cm.exception.code, 1)
4112 self.assertTrue(fbb.printed_lines)
4113
4114 def test_query_bot_invalid_query_too_many(self):
Garrett Beaty1afaccc2020-06-25 19:58:154115 self.override_args(query='bot/Fake Android K Tester/blah/blah',
4116 check=False,
4117 pyl_files_dir=None,
4118 json=None,
4119 waterfall_filters=[])
4120 fbb = FakeBBGen(self.args,
4121 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064122 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414123 LUCI_MILO_CFG,
4124 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064125 with self.assertRaises(SystemExit) as cm:
4126 fbb.query(fbb.args)
4127 self.assertEqual(cm.exception.code, 1)
4128 self.assertTrue(fbb.printed_lines)
4129
4130 def test_query_bot_invalid_query_no_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:154131 self.override_args(query='bot/Fake Android K Tester/blahs',
4132 check=False,
4133 pyl_files_dir=None,
4134 json=None,
4135 waterfall_filters=[])
4136 fbb = FakeBBGen(self.args,
4137 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064138 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414139 LUCI_MILO_CFG,
4140 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064141 with self.assertRaises(SystemExit) as cm:
4142 fbb.query(fbb.args)
4143 self.assertEqual(cm.exception.code, 1)
4144 self.assertTrue(fbb.printed_lines)
4145
4146 def test_query_bot_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:154147 self.override_args(query='bot/Fake Android L Tester/tests',
4148 check=False,
4149 pyl_files_dir=None,
4150 json=None,
4151 waterfall_filters=[])
4152 fbb = FakeBBGen(self.args,
4153 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064154 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414155 LUCI_MILO_CFG,
4156 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064157 fbb.query(fbb.args)
4158 query_json = json.loads("".join(fbb.printed_lines))
4159 self.assertEqual(query_json, TEST_QUERY_BOT_TESTS_OUTPUT)
4160
4161 def test_query_tests(self):
Garrett Beaty1afaccc2020-06-25 19:58:154162 self.override_args(query='tests',
4163 check=False,
4164 pyl_files_dir=None,
4165 json=None,
4166 waterfall_filters=[])
4167 fbb = FakeBBGen(self.args,
4168 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064169 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414170 LUCI_MILO_CFG,
4171 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064172 fbb.query(fbb.args)
4173 query_json = json.loads("".join(fbb.printed_lines))
4174 self.assertEqual(query_json, TEST_QUERY_TESTS_OUTPUT)
4175
4176 def test_query_tests_invalid(self):
Garrett Beaty1afaccc2020-06-25 19:58:154177 self.override_args(query='tests/blah/blah',
4178 check=False,
4179 pyl_files_dir=None,
4180 json=None,
4181 waterfall_filters=[])
4182 fbb = FakeBBGen(self.args,
4183 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064184 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414185 LUCI_MILO_CFG,
4186 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064187 with self.assertRaises(SystemExit) as cm:
4188 fbb.query(fbb.args)
4189 self.assertEqual(cm.exception.code, 1)
4190 self.assertTrue(fbb.printed_lines)
4191
4192 def test_query_tests_multiple_params(self):
Garrett Beaty1afaccc2020-06-25 19:58:154193 self.override_args(query='tests/--jobs=1&--verbose',
4194 check=False,
4195 pyl_files_dir=None,
4196 json=None,
4197 waterfall_filters=[])
4198 fbb = FakeBBGen(self.args,
4199 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064200 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414201 LUCI_MILO_CFG,
4202 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064203 fbb.query(fbb.args)
4204 query_json = json.loads("".join(fbb.printed_lines))
4205 self.assertEqual(query_json, TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT)
4206
4207 def test_query_tests_invalid_params(self):
Garrett Beaty1afaccc2020-06-25 19:58:154208 self.override_args(query='tests/device_os?',
4209 check=False,
4210 pyl_files_dir=None,
4211 json=None,
4212 waterfall_filters=[])
4213 fbb = FakeBBGen(self.args,
4214 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064215 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414216 LUCI_MILO_CFG,
4217 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064218 with self.assertRaises(SystemExit) as cm:
4219 fbb.query(fbb.args)
4220 self.assertEqual(cm.exception.code, 1)
4221 self.assertTrue(fbb.printed_lines)
4222
4223 def test_query_tests_dimension_params(self):
Garrett Beaty1afaccc2020-06-25 19:58:154224 self.override_args(query='tests/device_os:NMF26U',
4225 check=False,
4226 pyl_files_dir=None,
4227 json=None,
4228 waterfall_filters=[])
4229 fbb = FakeBBGen(self.args,
4230 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064231 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414232 LUCI_MILO_CFG,
4233 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064234 fbb.query(fbb.args)
4235 query_json = json.loads("".join(fbb.printed_lines))
4236 self.assertEqual(query_json, TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT)
4237
4238 def test_query_tests_swarming_params(self):
Garrett Beaty1afaccc2020-06-25 19:58:154239 self.override_args(query='tests/hard_timeout:1000',
4240 check=False,
4241 pyl_files_dir=None,
4242 json=None,
4243 waterfall_filters=[])
4244 fbb = FakeBBGen(self.args,
4245 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064246 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414247 LUCI_MILO_CFG,
4248 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064249 fbb.query(fbb.args)
4250 query_json = json.loads("".join(fbb.printed_lines))
4251 self.assertEqual(query_json, TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT)
4252
4253 def test_query_tests_params(self):
Garrett Beaty1afaccc2020-06-25 19:58:154254 self.override_args(query='tests/should_retry_with_patch:true',
4255 check=False,
4256 pyl_files_dir=None,
4257 json=None,
4258 waterfall_filters=[])
4259 fbb = FakeBBGen(self.args,
4260 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064261 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414262 LUCI_MILO_CFG,
4263 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064264 fbb.query(fbb.args)
4265 query_json = json.loads("".join(fbb.printed_lines))
4266 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_OUTPUT)
4267
4268 def test_query_tests_params_false(self):
Garrett Beaty1afaccc2020-06-25 19:58:154269 self.override_args(query='tests/should_retry_with_patch:false',
4270 check=False,
4271 pyl_files_dir=None,
4272 json=None,
4273 waterfall_filters=[])
4274 fbb = FakeBBGen(self.args,
4275 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064276 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:414277 LUCI_MILO_CFG,
4278 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064279 fbb.query(fbb.args)
4280 query_json = json.loads("".join(fbb.printed_lines))
4281 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT)
4282
4283 def test_query_test(self):
Garrett Beaty1afaccc2020-06-25 19:58:154284 self.override_args(query='test/foo_test',
4285 check=False,
4286 pyl_files_dir=None,
4287 json=None,
4288 waterfall_filters=[])
4289 fbb = FakeBBGen(self.args,
4290 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064291 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414292 LUCI_MILO_CFG,
4293 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064294 fbb.query(fbb.args)
4295 query_json = json.loads("".join(fbb.printed_lines))
4296 self.assertEqual(query_json, TEST_QUERY_TEST_OUTPUT)
4297
4298 def test_query_test_invalid_id(self):
Garrett Beaty1afaccc2020-06-25 19:58:154299 self.override_args(query='test/foo_foo',
4300 check=False,
4301 pyl_files_dir=None,
4302 json=None,
4303 waterfall_filters=[])
4304 fbb = FakeBBGen(self.args,
4305 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064306 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414307 LUCI_MILO_CFG,
4308 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064309 with self.assertRaises(SystemExit) as cm:
4310 fbb.query(fbb.args)
4311 self.assertEqual(cm.exception.code, 1)
4312 self.assertTrue(fbb.printed_lines)
4313
4314 def test_query_test_invalid_length(self):
Garrett Beaty1afaccc2020-06-25 19:58:154315 self.override_args(query='test/foo_tests/foo/foo',
4316 check=False,
4317 pyl_files_dir=None,
4318 json=None,
4319 waterfall_filters=[])
4320 fbb = FakeBBGen(self.args,
4321 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064322 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414323 LUCI_MILO_CFG,
4324 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064325 with self.assertRaises(SystemExit) as cm:
4326 fbb.query(fbb.args)
4327 self.assertEqual(cm.exception.code, 1)
4328 self.assertTrue(fbb.printed_lines)
4329
4330 def test_query_test_bots(self):
Garrett Beaty1afaccc2020-06-25 19:58:154331 self.override_args(query='test/foo_test/bots',
4332 check=False,
4333 pyl_files_dir=None,
4334 json=None,
4335 waterfall_filters=[])
4336 fbb = FakeBBGen(self.args,
4337 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064338 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414339 LUCI_MILO_CFG,
4340 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064341 fbb.query(fbb.args)
4342 query_json = json.loads("".join(fbb.printed_lines))
4343 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_OUTPUT)
4344
4345 def test_query_test_bots_isolated_scripts(self):
Garrett Beaty1afaccc2020-06-25 19:58:154346 self.override_args(query='test/foo_test/bots',
4347 check=False,
4348 pyl_files_dir=None,
4349 json=None,
4350 waterfall_filters=[])
4351 fbb = FakeBBGen(self.args,
4352 FOO_ISOLATED_SCRIPTS_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064353 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414354 LUCI_MILO_CFG,
4355 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064356 fbb.query(fbb.args)
4357 query_json = json.loads("".join(fbb.printed_lines))
4358 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT)
4359
4360 def test_query_test_bots_invalid(self):
Garrett Beaty1afaccc2020-06-25 19:58:154361 self.override_args(query='test/foo_tests/foo',
4362 check=False,
4363 pyl_files_dir=None,
4364 json=None,
4365 waterfall_filters=[])
4366 fbb = FakeBBGen(self.args,
4367 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064368 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414369 LUCI_MILO_CFG,
4370 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064371 with self.assertRaises(SystemExit) as cm:
4372 fbb.query(fbb.args)
4373 self.assertEqual(cm.exception.code, 1)
4374 self.assertTrue(fbb.printed_lines)
4375
4376 def test_query_test_bots_no_bots(self):
Garrett Beaty1afaccc2020-06-25 19:58:154377 self.override_args(query='test/bar_tests/bots',
4378 check=False,
4379 pyl_files_dir=None,
4380 json=None,
4381 waterfall_filters=[])
4382 fbb = FakeBBGen(self.args,
4383 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064384 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414385 LUCI_MILO_CFG,
4386 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064387 fbb.query(fbb.args)
4388 query_json = json.loads("".join(fbb.printed_lines))
4389 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT)
4390
4391 def test_query_invalid(self):
Garrett Beaty1afaccc2020-06-25 19:58:154392 self.override_args(query='foo',
4393 check=False,
4394 pyl_files_dir=None,
4395 json=None,
4396 waterfall_filters=[])
4397 fbb = FakeBBGen(self.args,
4398 ANDROID_WATERFALL,
Karen Qiane24b7ee2019-02-12 23:37:064399 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:414400 LUCI_MILO_CFG,
4401 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:064402 with self.assertRaises(SystemExit) as cm:
4403 fbb.query(fbb.args)
4404 self.assertEqual(cm.exception.code, 1)
4405 self.assertTrue(fbb.printed_lines)
4406
Brian Sheedye6ea0ee2019-07-11 02:54:374407
4408FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES = """\
4409{
4410 'basic_suites': {
4411 'foo_tests': {
4412 'foo_test': {
4413 'args': [
4414 '--enable-features',
4415 'Foo,Bar',
4416 ],
4417 },
4418 },
4419 },
4420}
4421"""
4422
4423
4424FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE = """\
4425{
4426 'foo_test': {
4427 'replacements': {
4428 'Fake Tester': {
4429 'args': {
4430 '--c_arg': None,
4431 },
4432 },
4433 },
4434 },
4435}
4436"""
4437
4438
4439FOO_TEST_REPLACEMENTS_REMOVE_VALUE = """\
4440{
4441 'foo_test': {
4442 'replacements': {
4443 'Fake Tester': {
4444 'args': {
4445 '--enable-features': None,
4446 },
4447 },
4448 },
4449 },
4450}
4451"""
4452
4453
4454FOO_TEST_REPLACEMENTS_REPLACE_VALUE = """\
4455{
4456 'foo_test': {
4457 'replacements': {
4458 'Fake Tester': {
4459 'args': {
4460 '--enable-features': 'Bar,Baz',
4461 },
4462 },
4463 },
4464 },
4465}
4466"""
4467
4468
4469FOO_TEST_REPLACEMENTS_INVALID_KEY = """\
4470{
4471 'foo_test': {
4472 'replacements': {
4473 'Fake Tester': {
4474 'invalid': {
4475 '--enable-features': 'Bar,Baz',
4476 },
4477 },
4478 },
4479 },
4480}
4481"""
4482
4483
4484REPLACEMENTS_REMOVE_OUTPUT = """\
4485{
4486 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4487 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4488 "Fake Tester": {
4489 "gtest_tests": [
4490 {
4491 "args": [],
4492 "merge": {
4493 "args": [],
4494 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4495 },
4496 "swarming": {
4497 "can_use_on_swarming_builders": true,
4498 "dimension_sets": [
4499 {
4500 "kvm": "1"
4501 }
4502 ]
4503 },
4504 "test": "foo_test"
4505 }
4506 ]
4507 }
4508}
4509"""
4510
4511REPLACEMENTS_VALUE_OUTPUT = """\
4512{
4513 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4514 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4515 "Fake Tester": {
4516 "gtest_tests": [
4517 {
4518 "args": [
4519 "--enable-features=Bar,Baz"
4520 ],
4521 "merge": {
4522 "args": [],
4523 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4524 },
4525 "swarming": {
4526 "can_use_on_swarming_builders": true,
4527 "dimension_sets": [
4528 {
4529 "kvm": "1"
4530 }
4531 ]
4532 },
4533 "test": "foo_test"
4534 }
4535 ]
4536 }
4537}
4538"""
4539
4540REPLACEMENTS_VALUE_SEPARATE_ENTRIES_OUTPUT = """\
4541{
4542 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4543 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4544 "Fake Tester": {
4545 "gtest_tests": [
4546 {
4547 "args": [
4548 "--enable-features",
4549 "Bar,Baz"
4550 ],
4551 "merge": {
4552 "args": [],
4553 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4554 },
4555 "swarming": {
4556 "can_use_on_swarming_builders": true,
4557 "dimension_sets": [
4558 {
4559 "kvm": "1"
4560 }
4561 ]
4562 },
4563 "test": "foo_test"
4564 }
4565 ]
4566 }
4567}
4568"""
4569
4570
Garrett Beaty1afaccc2020-06-25 19:58:154571class ReplacementTests(TestCase):
Brian Sheedye6ea0ee2019-07-11 02:54:374572 """Tests for the arg replacement feature."""
4573 def test_replacement_valid_remove_no_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:154574 fbb = FakeBBGen(self.args,
4575 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374576 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:414577 LUCI_MILO_CFG,
4578 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE)
Garrett Beaty1afaccc2020-06-25 19:58:154579 self.create_testing_buildbot_json_file('chromium.test.json',
4580 REPLACEMENTS_REMOVE_OUTPUT)
4581 self.create_testing_buildbot_json_file('chromium.ci.json',
4582 REPLACEMENTS_REMOVE_OUTPUT)
Brian Sheedye6ea0ee2019-07-11 02:54:374583 fbb.check_output_file_consistency(verbose=True)
4584 self.assertFalse(fbb.printed_lines)
4585
4586 def test_replacement_valid_remove_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:154587 fbb = FakeBBGen(self.args,
4588 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374589 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:414590 LUCI_MILO_CFG,
4591 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_VALUE)
Garrett Beaty1afaccc2020-06-25 19:58:154592 self.create_testing_buildbot_json_file('chromium.test.json',
4593 REPLACEMENTS_REMOVE_OUTPUT)
4594 self.create_testing_buildbot_json_file('chromium.ci.json',
4595 REPLACEMENTS_REMOVE_OUTPUT)
Brian Sheedye6ea0ee2019-07-11 02:54:374596 fbb.check_output_file_consistency(verbose=True)
4597 self.assertFalse(fbb.printed_lines)
4598
4599 def test_replacement_valid_replace_value(self):
Garrett Beaty1afaccc2020-06-25 19:58:154600 fbb = FakeBBGen(self.args,
4601 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374602 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:414603 LUCI_MILO_CFG,
4604 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Garrett Beaty1afaccc2020-06-25 19:58:154605 self.create_testing_buildbot_json_file('chromium.test.json',
4606 REPLACEMENTS_VALUE_OUTPUT)
4607 self.create_testing_buildbot_json_file('chromium.ci.json',
4608 REPLACEMENTS_VALUE_OUTPUT)
Brian Sheedye6ea0ee2019-07-11 02:54:374609 fbb.check_output_file_consistency(verbose=True)
4610 self.assertFalse(fbb.printed_lines)
4611
4612 def test_replacement_valid_replace_value_separate_entries(self):
Garrett Beaty1afaccc2020-06-25 19:58:154613 fbb = FakeBBGen(self.args,
4614 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374615 FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES,
Nodir Turakulovfce34292019-12-18 17:05:414616 LUCI_MILO_CFG,
4617 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Garrett Beaty1afaccc2020-06-25 19:58:154618 self.create_testing_buildbot_json_file(
4619 'chromium.test.json', REPLACEMENTS_VALUE_SEPARATE_ENTRIES_OUTPUT)
4620 self.create_testing_buildbot_json_file(
4621 'chromium.ci.json', REPLACEMENTS_VALUE_SEPARATE_ENTRIES_OUTPUT)
Brian Sheedye6ea0ee2019-07-11 02:54:374622 fbb.check_output_file_consistency(verbose=True)
4623 self.assertFalse(fbb.printed_lines)
4624
4625 def test_replacement_invalid_key_not_valid(self):
Garrett Beaty1afaccc2020-06-25 19:58:154626 fbb = FakeBBGen(self.args,
4627 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374628 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:414629 LUCI_MILO_CFG,
4630 exceptions=FOO_TEST_REPLACEMENTS_INVALID_KEY)
Brian Sheedye6ea0ee2019-07-11 02:54:374631 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4632 'Given replacement key *'):
4633 fbb.check_output_file_consistency(verbose=True)
4634
4635 def test_replacement_invalid_key_not_found(self):
Garrett Beaty1afaccc2020-06-25 19:58:154636 fbb = FakeBBGen(self.args,
4637 FOO_GTESTS_WATERFALL,
Brian Sheedye6ea0ee2019-07-11 02:54:374638 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:414639 LUCI_MILO_CFG,
4640 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374641 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4642 'Could not find *'):
4643 fbb.check_output_file_consistency(verbose=True)
4644
Jeff Yoon8154e582019-12-03 23:30:014645
Brian Sheedya31578e2020-05-18 20:24:364646FOO_TEST_SUITE_WITH_MAGIC_ARGS = """\
4647{
4648 'basic_suites': {
4649 'foo_tests': {
4650 'foo_test': {
4651 'args': [
4652 '$$MAGIC_SUBSTITUTION_TestOnlySubstitution',
4653 ],
4654 },
4655 },
4656 },
4657}
4658"""
4659
4660
4661FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS = """\
4662{
4663 'basic_suites': {
4664 'foo_tests': {
4665 'foo_test': {
4666 'args': [
4667 '$$MAGIC_SUBSTITUTION_NotARealSubstitution',
4668 ],
4669 },
4670 },
4671 },
4672}
4673"""
4674
4675
4676MAGIC_SUBSTITUTIONS_OUTPUT = """\
4677{
4678 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4679 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4680 "Fake Tester": {
4681 "gtest_tests": [
4682 {
4683 "args": [
4684 "--magic-substitution-success"
4685 ],
4686 "merge": {
4687 "args": [],
4688 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4689 },
4690 "swarming": {
4691 "can_use_on_swarming_builders": true,
4692 "dimension_sets": [
4693 {
4694 "kvm": "1"
4695 }
4696 ]
4697 },
4698 "test": "foo_test"
4699 }
4700 ]
4701 }
4702}
4703"""
4704
4705
Garrett Beaty1afaccc2020-06-25 19:58:154706class MagicSubstitutionTests(TestCase):
Brian Sheedya31578e2020-05-18 20:24:364707 """Tests for the magic substitution feature."""
4708 def test_valid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:154709 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
4710 FOO_TEST_SUITE_WITH_MAGIC_ARGS, LUCI_MILO_CFG)
4711 self.create_testing_buildbot_json_file('chromium.test.json',
4712 MAGIC_SUBSTITUTIONS_OUTPUT)
4713 self.create_testing_buildbot_json_file('chromium.ci.json',
4714 MAGIC_SUBSTITUTIONS_OUTPUT)
Brian Sheedya31578e2020-05-18 20:24:364715 fbb.check_output_file_consistency(verbose=True)
4716 self.assertFalse(fbb.printed_lines)
4717
4718 def test_invalid_function(self):
Garrett Beaty1afaccc2020-06-25 19:58:154719 fbb = FakeBBGen(self.args, FOO_GTESTS_WATERFALL,
4720 FOO_TEST_SUITE_WITH_INVALID_MAGIC_ARGS, LUCI_MILO_CFG)
Brian Sheedya31578e2020-05-18 20:24:364721 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4722 'Magic substitution function *'):
4723 fbb.check_output_file_consistency(verbose=True)
4724
4725
Jeff Yoon8154e582019-12-03 23:30:014726# Matrix compound composition test suites
4727
4728MATRIX_COMPOUND_EMPTY = """\
4729{
4730 'basic_suites': {
4731 'bar_tests': {
4732 'bar_test': {},
4733 },
4734 'foo_tests': {
4735 'foo_test': {},
4736 },
4737 },
4738 'matrix_compound_suites': {
4739 'matrix_tests': {
4740 'foo_tests': {},
4741 'bar_tests': {},
4742 },
4743 },
4744}
4745"""
4746
Jeff Yoon67c3e832020-02-08 07:39:384747MATRIX_COMPOUND_MISSING_IDENTIFIER = """\
Jeff Yoon8154e582019-12-03 23:30:014748{
4749 'basic_suites': {
4750 'foo_tests': {
4751 'foo_test': {},
4752 },
4753 },
4754 'matrix_compound_suites': {
4755 'matrix_tests': {
4756 'foo_tests': {
Jeff Yoon67c3e832020-02-08 07:39:384757 'variants': [
4758 {
4759 'swarming': {
4760 'dimension_sets': [
4761 {
4762 'foo': 'bar',
4763 },
4764 ],
Jeff Yoon8154e582019-12-03 23:30:014765 },
Jeff Yoon67c3e832020-02-08 07:39:384766 },
4767 ],
Jeff Yoon8154e582019-12-03 23:30:014768 },
4769 },
4770 },
4771}
4772"""
4773
4774MATRIX_MISMATCHED_SWARMING_LENGTH = """\
4775{
4776 'basic_suites': {
4777 'foo_tests': {
4778 'foo_test': {
4779 'swarming': {
4780 'dimension_sets': [
4781 {
4782 'hello': 'world',
4783 }
4784 ],
4785 },
4786 },
4787 },
4788 },
4789 'matrix_compound_suites': {
4790 'matrix_tests': {
4791 'foo_tests': {
Jeff Yoon67c3e832020-02-08 07:39:384792 'variants': [
4793 {
4794 'identifier': 'test',
4795 'swarming': {
4796 'dimension_sets': [
4797 {
4798 'foo': 'bar',
4799 },
4800 {
4801 'bar': 'foo',
4802 }
4803 ],
Jeff Yoon8154e582019-12-03 23:30:014804 },
Jeff Yoon67c3e832020-02-08 07:39:384805 },
4806 ],
Jeff Yoon8154e582019-12-03 23:30:014807 },
4808 },
4809 },
4810}
4811"""
4812
4813MATRIX_REF_NONEXISTENT = """\
4814{
4815 'basic_suites': {
4816 'foo_tests': {
4817 'foo_test': {},
4818 },
4819 },
4820 'matrix_compound_suites': {
4821 'matrix_tests': {
4822 'bar_test': {},
4823 },
4824 },
4825}
4826"""
4827
Jeff Yoon67c3e832020-02-08 07:39:384828MATRIX_COMPOUND_REF_COMPOSITION = """\
Jeff Yoon8154e582019-12-03 23:30:014829{
4830 'basic_suites': {
4831 'foo_tests': {
4832 'foo_test': {},
4833 },
4834 },
4835 'compound_suites': {
4836 'sample_composition': {
4837 'foo_tests': {},
4838 },
4839 },
4840 'matrix_compound_suites': {
4841 'matrix_tests': {
4842 'sample_composition': {},
4843 },
4844 },
4845}
4846"""
4847
4848MATRIX_COMPOSITION_REF_MATRIX = """\
4849{
4850 'basic_suites': {
4851 'foo_tests': {
4852 'foo_test': {},
4853 },
4854 },
4855 'matrix_compound_suites': {
4856 'a_test': {
4857 'foo_tests': {},
4858 },
4859 'matrix_tests': {
4860 'a_test': {},
4861 },
4862 },
4863}
4864"""
4865
Jeff Yoon67c3e832020-02-08 07:39:384866MATRIX_COMPOUND_VARIANTS_MIXINS_MERGE = """\
4867{
4868 'basic_suites': {
4869 'foo_tests': {
4870 'set': {
4871 'mixins': [ 'test_mixin' ],
4872 },
4873 },
4874 },
4875 'matrix_compound_suites': {
4876 'matrix_tests': {
4877 'foo_tests': {
4878 'variants': [
4879 {
4880 'mixins': [ 'dimension_mixin' ],
4881 },
4882 ],
4883 },
4884 },
4885 },
4886}
4887"""
4888
4889MATRIX_COMPOUND_VARIANTS_MIXINS = """\
4890{
4891 'basic_suites': {
4892 'foo_tests': {
4893 'set': {
4894 'mixins': [ 'test_mixin' ],
4895 },
4896 },
4897 },
4898 'matrix_compound_suites': {
4899 'matrix_tests': {
4900 'foo_tests': {
4901 'variants': [
4902 {
4903 'mixins': [
4904 'dimension_mixin',
4905 'waterfall_mixin',
4906 'builder_mixin',
4907 'random_mixin'
4908 ],
4909 },
4910 ],
4911 },
4912 },
4913 },
4914}
4915"""
4916
4917MATRIX_COMPOUND_VARIANTS_MIXINS_REMOVE = """\
4918{
4919 'basic_suites': {
4920 'foo_tests': {
4921 'set': {
4922 'remove_mixins': ['builder_mixin'],
4923 },
4924 },
4925 },
4926 'matrix_compound_suites': {
4927 'matrix_tests': {
4928 'foo_tests': {
4929 'variants': [
4930 {
4931 'mixins': [ 'builder_mixin' ],
4932 }
4933 ],
4934 },
4935 },
4936 },
4937}
4938"""
4939
4940MATRIX_COMPOUND_CONFLICTING_TEST_SUITES = """\
4941{
4942 'basic_suites': {
4943 'bar_tests': {
4944 'baz_tests': {
4945 'args': [
4946 '--bar',
4947 ],
4948 }
4949 },
4950 'foo_tests': {
4951 'baz_tests': {
4952 'args': [
4953 '--foo',
4954 ],
4955 }
4956 },
4957 },
4958 'matrix_compound_suites': {
4959 'matrix_tests': {
4960 'bar_tests': {
4961 'variants': [
4962 {
4963 'identifier': 'bar',
4964 }
4965 ],
4966 },
4967 'foo_tests': {
4968 'variants': [
4969 {
4970 'identifier': 'foo'
4971 }
4972 ]
4973 }
4974 },
4975 },
4976}
4977"""
4978
4979MATRIX_COMPOUND_TARGETS_ARGS = """\
4980{
4981 'basic_suites': {
4982 'foo_tests': {
4983 'args_test': {
4984 'args': [
4985 '--iam'
4986 ],
4987 },
4988 }
4989 },
4990 'matrix_compound_suites': {
4991 'matrix_tests': {
4992 'foo_tests': {
4993 'variants': [
4994 {
4995 'identifier': 'args',
4996 'args': [
4997 '--anarg',
4998 ],
4999 },
5000 {
5001 'identifier': 'swarming',
5002 'swarming': {
5003 'a': 'b',
5004 'dimension_sets': [
5005 {
5006 'hello': 'world',
5007 }
5008 ]
5009 }
5010 },
5011 {
5012 'identifier': 'mixins',
5013 'mixins': [ 'dimension_mixin' ],
5014 }
5015 ],
5016 },
5017 },
5018 },
5019}
5020"""
5021
5022MATRIX_COMPOUND_TARGETS_MIXINS = """\
5023{
5024 'basic_suites': {
5025 'foo_tests': {
5026 'mixins_test': {
5027 'mixins': [ 'test_mixin' ],
5028 },
5029 }
5030 },
5031 'matrix_compound_suites': {
5032 'matrix_tests': {
5033 'foo_tests': {
Jeff Yoon85fb8df2020-08-20 16:47:435034 'mixins': [ 'random_mixin' ],
Jeff Yoon67c3e832020-02-08 07:39:385035 'variants': [
5036 {
5037 'identifier': 'args',
5038 'args': [
5039 '--anarg',
5040 ],
5041 },
5042 {
5043 'identifier': 'swarming',
5044 'swarming': {
5045 'a': 'b',
5046 'dimension_sets': [
5047 {
5048 'hello': 'world',
5049 }
5050 ]
5051 }
5052 },
5053 {
5054 'identifier': 'mixins',
5055 'mixins': [ 'dimension_mixin' ],
5056 }
5057 ],
5058 },
5059 },
5060 },
5061}
5062"""
5063
5064MATRIX_COMPOUND_TARGETS_SWARMING = """\
5065{
5066 'basic_suites': {
5067 'foo_tests': {
5068 'swarming_test': {
5069 'swarming': {
5070 'foo': 'bar',
5071 'dimension_sets': [
5072 {
5073 'foo': 'bar',
5074 },
5075 ],
5076 },
5077 },
5078 }
5079 },
5080 'matrix_compound_suites': {
5081 'matrix_tests': {
5082 'foo_tests': {
5083 'variants': [
5084 {
5085 'identifier': 'args',
5086 'args': [
5087 '--anarg',
5088 ],
5089 },
5090 {
5091 'identifier': 'swarming',
5092 'swarming': {
5093 'a': 'b',
5094 'dimension_sets': [
5095 {
5096 'hello': 'world',
5097 }
5098 ]
5099 }
5100 },
5101 {
5102 'identifier': 'mixins',
5103 'mixins': [ 'dimension_mixin' ],
5104 }
5105 ],
5106 },
5107 },
5108 },
5109}
5110"""
Jeff Yoon8154e582019-12-03 23:30:015111
Jeff Yoonda581c32020-03-06 03:56:055112MATRIX_COMPOUND_VARIANTS_REF = """\
5113{
5114 'basic_suites': {
5115 'foo_tests': {
5116 'swarming_test': {},
5117 }
5118 },
5119 'matrix_compound_suites': {
5120 'matrix_tests': {
5121 'foo_tests': {
5122 'variants': [
5123 'a_variant'
5124 ],
5125 },
5126 },
5127 },
5128}
5129"""
5130
Rakib M. Hasanc9e01c62020-07-27 22:48:125131MATRIX_COMPOUND_TEST_WITH_TEST_KEY = """\
5132{
5133 'basic_suites': {
5134 'foo_tests': {
5135 'swarming_test': {
5136 'test': 'foo_test_apk'
5137 },
5138 }
5139 },
5140 'matrix_compound_suites': {
5141 'matrix_tests': {
5142 'foo_tests': {
5143 'variants': [
5144 'a_variant',
5145 ],
5146 },
5147 },
5148 },
5149}
5150"""
5151
Jeff Yoonda581c32020-03-06 03:56:055152MATRIX_COMPOUND_MIXED_VARIANTS_REF = """\
5153{
5154 'basic_suites': {
5155 'foo_tests': {
5156 'swarming_test': {},
5157 }
5158 },
5159 'matrix_compound_suites': {
5160 'matrix_tests': {
5161 'foo_tests': {
5162 'variants': [
5163 'a_variant',
5164 {
5165 'args': [
5166 'a',
5167 'b'
5168 ],
5169 'identifier': 'ab',
5170 }
5171 ],
5172 },
5173 },
5174 },
5175}
5176"""
5177
5178VARIANTS_FILE = """\
5179{
5180 'a_variant': {
5181 'args': [
5182 '--platform',
5183 'device',
5184 '--version',
5185 '1'
5186 ],
5187 'identifier': 'a_variant'
5188 }
5189}
5190"""
5191
5192MULTI_VARIANTS_FILE = """\
5193{
5194 'a_variant': {
5195 'args': [
5196 '--platform',
5197 'device',
5198 '--version',
5199 '1'
5200 ],
5201 'identifier': 'a_variant'
5202 },
5203 'b_variant': {
5204 'args': [
5205 '--platform',
5206 'sim',
5207 '--version',
5208 '2'
5209 ],
5210 'identifier': 'b_variant'
5211 }
5212}
5213"""
5214
Jeff Yoon8154e582019-12-03 23:30:015215# # Dictionary composition test suite outputs
5216
5217MATRIX_COMPOUND_EMPTY_OUTPUT = """\
5218{
5219 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5220 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5221 "Fake Tester": {
Jeff Yoon67c3e832020-02-08 07:39:385222 "gtest_tests": []
Jeff Yoon8154e582019-12-03 23:30:015223 }
5224}
5225"""
5226
Rakib M. Hasanc9e01c62020-07-27 22:48:125227MATRIX_COMPOUND_TEST_SUITE_WITH_TEST_KEY_DICT = """\
5228{
5229 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5230 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5231 "Fake Tester": {
5232 "gtest_tests": [
5233 {
5234 "args": [
5235 "--platform",
5236 "device",
5237 "--version",
5238 "1"
5239 ],
5240 "merge": {
5241 "args": [],
5242 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5243 },
5244 "name": "swarming_test_a_variant",
5245 "swarming": {
5246 "can_use_on_swarming_builders": true
5247 },
5248 "test": "foo_test_apk"
5249 }
5250 ]
5251 }
5252}
5253"""
5254
Jeff Yoon67c3e832020-02-08 07:39:385255MATRIX_TARGET_DICT_MERGE_OUTPUT_ARGS = """\
Jeff Yoon8154e582019-12-03 23:30:015256{
5257 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5258 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5259 "Fake Tester": {
5260 "gtest_tests": [
5261 {
Jeff Yoon67c3e832020-02-08 07:39:385262 "args": [
5263 "--iam",
5264 "--anarg"
5265 ],
Jeff Yoon8154e582019-12-03 23:30:015266 "merge": {
5267 "args": [],
5268 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5269 },
Jeff Yoon67c3e832020-02-08 07:39:385270 "name": "args_test_args",
5271 "swarming": {
5272 "can_use_on_swarming_builders": true
5273 },
5274 "test": "args_test"
5275 },
5276 {
5277 "args": [
5278 "--iam"
5279 ],
5280 "merge": {
5281 "args": [],
5282 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5283 },
5284 "name": "args_test_mixins",
5285 "swarming": {
5286 "can_use_on_swarming_builders": true,
5287 "dimension_sets": [
5288 {
5289 "iama": "mixin"
5290 }
5291 ]
5292 },
5293 "test": "args_test"
5294 },
5295 {
5296 "args": [
5297 "--iam"
5298 ],
5299 "merge": {
5300 "args": [],
5301 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5302 },
5303 "name": "args_test_swarming",
5304 "swarming": {
5305 "a": "b",
5306 "can_use_on_swarming_builders": true,
5307 "dimension_sets": [
5308 {
5309 "hello": "world"
5310 }
5311 ]
5312 },
5313 "test": "args_test"
5314 }
5315 ]
5316 }
5317}
5318"""
5319
5320MATRIX_TARGET_DICT_MERGE_OUTPUT_MIXINS = """\
5321{
5322 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5323 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5324 "Fake Tester": {
5325 "gtest_tests": [
5326 {
5327 "args": [
5328 "--anarg"
5329 ],
5330 "merge": {
5331 "args": [],
5332 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5333 },
5334 "name": "mixins_test_args",
5335 "swarming": {
5336 "can_use_on_swarming_builders": true,
5337 "value": "test"
5338 },
Jeff Yoon85fb8df2020-08-20 16:47:435339 "test": "mixins_test",
5340 "value": "random"
Jeff Yoon67c3e832020-02-08 07:39:385341 },
5342 {
5343 "args": [],
5344 "merge": {
5345 "args": [],
5346 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5347 },
5348 "name": "mixins_test_mixins",
5349 "swarming": {
5350 "can_use_on_swarming_builders": true,
5351 "dimension_sets": [
5352 {
5353 "iama": "mixin"
5354 }
5355 ],
5356 "value": "test"
5357 },
Jeff Yoon85fb8df2020-08-20 16:47:435358 "test": "mixins_test",
5359 "value": "random"
Jeff Yoon67c3e832020-02-08 07:39:385360 },
5361 {
5362 "args": [],
5363 "merge": {
5364 "args": [],
5365 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5366 },
5367 "name": "mixins_test_swarming",
5368 "swarming": {
5369 "a": "b",
5370 "can_use_on_swarming_builders": true,
5371 "dimension_sets": [
5372 {
5373 "hello": "world"
5374 }
5375 ],
5376 "value": "test"
5377 },
Jeff Yoon85fb8df2020-08-20 16:47:435378 "test": "mixins_test",
5379 "value": "random"
Jeff Yoon67c3e832020-02-08 07:39:385380 }
5381 ]
5382 }
5383}
5384"""
5385
5386MATRIX_TARGET_DICT_MERGE_OUTPUT_SWARMING = """\
5387{
5388 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5389 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5390 "Fake Tester": {
5391 "gtest_tests": [
5392 {
5393 "args": [
5394 "--anarg"
5395 ],
5396 "merge": {
5397 "args": [],
5398 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5399 },
5400 "name": "swarming_test_args",
Jeff Yoon8154e582019-12-03 23:30:015401 "swarming": {
5402 "can_use_on_swarming_builders": true,
5403 "dimension_sets": [
5404 {
5405 "foo": "bar"
5406 }
Jeff Yoon67c3e832020-02-08 07:39:385407 ],
5408 "foo": "bar"
Jeff Yoon8154e582019-12-03 23:30:015409 },
Jeff Yoon67c3e832020-02-08 07:39:385410 "test": "swarming_test"
5411 },
Jeff Yoon8154e582019-12-03 23:30:015412 {
Jeff Yoon67c3e832020-02-08 07:39:385413 "args": [],
Jeff Yoon8154e582019-12-03 23:30:015414 "merge": {
5415 "args": [],
5416 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5417 },
Jeff Yoon67c3e832020-02-08 07:39:385418 "name": "swarming_test_mixins",
Jeff Yoon8154e582019-12-03 23:30:015419 "swarming": {
5420 "can_use_on_swarming_builders": true,
5421 "dimension_sets": [
5422 {
5423 "foo": "bar",
Jeff Yoon67c3e832020-02-08 07:39:385424 "iama": "mixin"
5425 }
5426 ],
5427 "foo": "bar"
5428 },
5429 "test": "swarming_test"
5430 },
5431 {
5432 "args": [],
5433 "merge": {
5434 "args": [],
5435 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5436 },
5437 "name": "swarming_test_swarming",
5438 "swarming": {
5439 "a": "b",
5440 "can_use_on_swarming_builders": true,
5441 "dimension_sets": [
5442 {
5443 "foo": "bar",
Jeff Yoon8154e582019-12-03 23:30:015444 "hello": "world"
5445 }
Jeff Yoon67c3e832020-02-08 07:39:385446 ],
5447 "foo": "bar"
Jeff Yoon8154e582019-12-03 23:30:015448 },
Jeff Yoon67c3e832020-02-08 07:39:385449 "test": "swarming_test"
Jeff Yoon8154e582019-12-03 23:30:015450 }
5451 ]
5452 }
5453}
5454"""
5455
Jeff Yoonda581c32020-03-06 03:56:055456MATRIX_COMPOUND_VARIANTS_REF_OUTPUT = """\
5457{
5458 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
5459 "AAAAA2 See generate_buildbot_json.py to make changes": {},
5460 "Fake Tester": {
5461 "gtest_tests": [
5462 {
5463 "args": [
5464 "--platform",
5465 "device",
5466 "--version",
5467 "1"
5468 ],
5469 "merge": {
5470 "args": [],
5471 "script": "//testing/merge_scripts/standard_gtest_merge.py"
5472 },
5473 "name": "swarming_test_a_variant",
5474 "swarming": {
5475 "can_use_on_swarming_builders": true
5476 },
5477 "test": "swarming_test"
5478 }
5479 ]
5480 }
5481}
5482"""
5483
Garrett Beaty1afaccc2020-06-25 19:58:155484
5485class MatrixCompositionTests(TestCase):
Jeff Yoon8154e582019-12-03 23:30:015486
5487 def test_good_structure_no_configs(self):
5488 """
5489 Tests matrix compound test suite structure with no configs,
5490 no conflicts and no bad references
5491 """
Garrett Beaty1afaccc2020-06-25 19:58:155492 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5493 MATRIX_COMPOUND_EMPTY, LUCI_MILO_CFG)
5494 self.create_testing_buildbot_json_file('chromium.test.json',
5495 MATRIX_COMPOUND_EMPTY_OUTPUT)
5496 self.create_testing_buildbot_json_file('chromium.ci.json',
5497 MATRIX_COMPOUND_EMPTY_OUTPUT)
Jeff Yoon8154e582019-12-03 23:30:015498 fbb.check_output_file_consistency(verbose=True)
5499 self.assertFalse(fbb.printed_lines)
5500
Jeff Yoon67c3e832020-02-08 07:39:385501 def test_missing_identifier(self):
Jeff Yoon8154e582019-12-03 23:30:015502 """
Jeff Yoon67c3e832020-02-08 07:39:385503 Variant is missing an identifier
Jeff Yoon8154e582019-12-03 23:30:015504 """
Garrett Beaty1afaccc2020-06-25 19:58:155505 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5506 MATRIX_COMPOUND_MISSING_IDENTIFIER, LUCI_MILO_CFG)
Jeff Yoon67c3e832020-02-08 07:39:385507 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5508 'Missing required identifier field in matrix compound suite*'):
5509 fbb.check_output_file_consistency(verbose=True)
Jeff Yoon8154e582019-12-03 23:30:015510
5511 def test_mismatched_swarming_length(self):
5512 """
5513 Swarming dimension set length mismatch test. Composition set > basic set
5514 """
Garrett Beaty1afaccc2020-06-25 19:58:155515 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5516 MATRIX_MISMATCHED_SWARMING_LENGTH, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:015517 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5518 'Error merging lists by key *'):
5519 fbb.check_output_file_consistency(verbose=True)
5520
Jeff Yoon8154e582019-12-03 23:30:015521 def test_noexistent_ref(self):
5522 """
5523 Test referencing a non-existent basic test suite
5524 """
Garrett Beaty1afaccc2020-06-25 19:58:155525 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5526 MATRIX_REF_NONEXISTENT, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:015527 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5528 'Unable to find reference to *'):
5529 fbb.check_output_file_consistency(verbose=True)
5530
5531 def test_ref_to_composition(self):
5532 """
5533 Test referencing another composition test suite
5534 """
Garrett Beaty1afaccc2020-06-25 19:58:155535 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5536 MATRIX_COMPOUND_REF_COMPOSITION, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:015537 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5538 'matrix_compound_suites may not refer to other *'):
5539 fbb.check_output_file_consistency(verbose=True)
5540
5541 def test_ref_to_matrix(self):
5542 """
5543 Test referencing another matrix test suite
5544 """
Garrett Beaty1afaccc2020-06-25 19:58:155545 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5546 MATRIX_COMPOSITION_REF_MATRIX, LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:015547 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5548 'matrix_compound_suites may not refer to other *'):
5549 fbb.check_output_file_consistency(verbose=True)
5550
Jeff Yoon67c3e832020-02-08 07:39:385551 def test_conflicting_names(self):
Garrett Beaty1afaccc2020-06-25 19:58:155552 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5553 MATRIX_COMPOUND_CONFLICTING_TEST_SUITES, LUCI_MILO_CFG)
Jeff Yoon67c3e832020-02-08 07:39:385554 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5555 'Conflicting test definitions.*'):
5556 fbb.check_input_file_consistency(verbose=True)
5557 self.assertFalse(fbb.printed_lines)
5558
5559 def test_variants_swarming_dict_merge_args(self):
5560 """
5561 Test targets with swarming dictionary defined by both basic and matrix
5562 """
Garrett Beaty1afaccc2020-06-25 19:58:155563 fbb = FakeBBGen(self.args,
5564 MATRIX_GTEST_SUITE_WATERFALL,
5565 MATRIX_COMPOUND_TARGETS_ARGS,
5566 LUCI_MILO_CFG,
5567 mixins=SWARMING_MIXINS)
5568 self.create_testing_buildbot_json_file(
5569 'chromium.test.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_ARGS)
5570 self.create_testing_buildbot_json_file(
5571 'chromium.ci.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_ARGS)
Jeff Yoon67c3e832020-02-08 07:39:385572 fbb.check_output_file_consistency(verbose=True)
5573 self.assertFalse(fbb.printed_lines)
5574
5575 def test_variants_swarming_dict_merge_mixins(self):
5576 """
5577 Test targets with swarming dictionary defined by both basic and matrix
5578 """
Garrett Beaty1afaccc2020-06-25 19:58:155579 fbb = FakeBBGen(self.args,
5580 MATRIX_GTEST_SUITE_WATERFALL,
5581 MATRIX_COMPOUND_TARGETS_MIXINS,
5582 LUCI_MILO_CFG,
5583 mixins=SWARMING_MIXINS)
5584 self.create_testing_buildbot_json_file(
5585 'chromium.test.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_MIXINS)
5586 self.create_testing_buildbot_json_file(
5587 'chromium.ci.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_MIXINS)
Jeff Yoon67c3e832020-02-08 07:39:385588 fbb.check_output_file_consistency(verbose=True)
5589 self.assertFalse(fbb.printed_lines)
5590
5591 def test_variants_swarming_dict_swarming(self):
5592 """
5593 Test targets with swarming dictionary defined by both basic and matrix
5594 """
Garrett Beaty1afaccc2020-06-25 19:58:155595 fbb = FakeBBGen(self.args,
5596 MATRIX_GTEST_SUITE_WATERFALL,
5597 MATRIX_COMPOUND_TARGETS_SWARMING,
5598 LUCI_MILO_CFG,
5599 mixins=SWARMING_MIXINS)
5600 self.create_testing_buildbot_json_file(
5601 'chromium.test.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_SWARMING)
5602 self.create_testing_buildbot_json_file(
5603 'chromium.ci.json', MATRIX_TARGET_DICT_MERGE_OUTPUT_SWARMING)
Jeff Yoon67c3e832020-02-08 07:39:385604 fbb.check_output_file_consistency(verbose=True)
5605 self.assertFalse(fbb.printed_lines)
5606
Rakib M. Hasanc9e01c62020-07-27 22:48:125607 def test_variant_test_suite_with_test_key(self):
5608 """
5609 Test targets in matrix compound test suites with variants
5610 """
5611 fbb = FakeBBGen(self.args,
5612 MATRIX_GTEST_SUITE_WATERFALL,
5613 MATRIX_COMPOUND_TEST_WITH_TEST_KEY,
5614 LUCI_MILO_CFG,
5615 variants=VARIANTS_FILE)
5616 self.create_testing_buildbot_json_file(
5617 'chromium.test.json', MATRIX_COMPOUND_TEST_SUITE_WITH_TEST_KEY_DICT)
5618 self.create_testing_buildbot_json_file(
5619 'chromium.ci.json', MATRIX_COMPOUND_TEST_SUITE_WITH_TEST_KEY_DICT)
5620 fbb.check_output_file_consistency(verbose=True)
5621 self.assertFalse(fbb.printed_lines)
5622
Jeff Yoonda581c32020-03-06 03:56:055623 def test_variants_pyl_ref(self):
5624 """Test targets with variants string ref"""
Garrett Beaty1afaccc2020-06-25 19:58:155625 fbb = FakeBBGen(self.args,
5626 MATRIX_GTEST_SUITE_WATERFALL,
5627 MATRIX_COMPOUND_VARIANTS_REF,
5628 LUCI_MILO_CFG,
5629 variants=VARIANTS_FILE)
5630 self.create_testing_buildbot_json_file('chromium.test.json',
5631 MATRIX_COMPOUND_VARIANTS_REF_OUTPUT)
5632 self.create_testing_buildbot_json_file('chromium.ci.json',
5633 MATRIX_COMPOUND_VARIANTS_REF_OUTPUT)
Jeff Yoonda581c32020-03-06 03:56:055634 fbb.check_output_file_consistency(verbose=True)
5635 self.assertFalse(fbb.printed_lines)
5636
5637 def test_variants_pyl_no_ref(self):
5638 """Test targets with variants string ref, not defined in variants.pyl"""
Garrett Beaty1afaccc2020-06-25 19:58:155639 fbb = FakeBBGen(self.args, MATRIX_GTEST_SUITE_WATERFALL,
5640 MATRIX_COMPOUND_VARIANTS_REF, LUCI_MILO_CFG)
Jeff Yoonda581c32020-03-06 03:56:055641 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5642 'Missing variant definition for *'):
5643 fbb.check_output_file_consistency(verbose=True)
5644
5645 def test_variants_pyl_all_unreferenced(self):
5646 """Test targets with variants in variants.pyl, unreferenced in tests"""
Garrett Beaty1afaccc2020-06-25 19:58:155647 fbb = FakeBBGen(self.args,
5648 MATRIX_GTEST_SUITE_WATERFALL,
5649 MATRIX_COMPOUND_MIXED_VARIANTS_REF,
5650 LUCI_MILO_CFG,
5651 variants=MULTI_VARIANTS_FILE)
5652 # self.create_testing_buildbot_json_file(
5653 # 'chromium.test.json', MATRIX_COMPOUND_VARIANTS_REF_OUTPUT)
Jeff Yoonda581c32020-03-06 03:56:055654 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
5655 'The following variants were unreferenced *'):
5656 fbb.check_input_file_consistency(verbose=True)
5657
Jeff Yoon8154e582019-12-03 23:30:015658
Kenneth Russelleb60cbd22017-12-05 07:54:285659if __name__ == '__main__':
5660 unittest.main()