blob: cda3f158d119923e451b8315d51bafb8810568d5 [file] [log] [blame]
Kenneth Russelleb60cbd22017-12-05 07:54:281#!/usr/bin/python
2# 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
9import os
Kenneth Russelleb60cbd22017-12-05 07:54:2810import unittest
Karen Qiane24b7ee2019-02-12 23:37:0611import json
Kenneth Russelleb60cbd22017-12-05 07:54:2812import generate_buildbot_json
13
Nodir Turakulovfce34292019-12-18 17:05:4114EMPTY_PYL_FILE = """\
15{
16}
17"""
18
Kenneth Russelleb60cbd22017-12-05 07:54:2819
20class FakeBBGen(generate_buildbot_json.BBJSONGenerator):
Nodir Turakulovfce34292019-12-18 17:05:4121 def __init__(self, waterfalls, test_suites, luci_milo_cfg,
22 exceptions=EMPTY_PYL_FILE,
23 mixins=EMPTY_PYL_FILE,
24 gn_isolate_map=EMPTY_PYL_FILE):
Kenneth Russelleb60cbd22017-12-05 07:54:2825 super(FakeBBGen, self).__init__()
John Budorickc12abd12018-08-14 19:37:4326 infra_config_dir = os.path.abspath(
27 os.path.join(os.path.dirname(__file__), '..', '..',
John Budorick699282e2019-02-13 01:27:3328 'infra', 'config'))
Garrett Beatybb8322bf2019-10-17 20:53:0529 luci_milo_cfg_path = os.path.join(
30 infra_config_dir, 'generated', 'luci-milo.cfg')
Garrett Beatye95b81722019-10-24 17:12:1831 luci_milo_dev_cfg_path = os.path.join(
32 infra_config_dir, 'generated', 'luci-milo-dev.cfg')
Kenneth Russelleb60cbd22017-12-05 07:54:2833 self.files = {
34 'waterfalls.pyl': waterfalls,
35 'test_suites.pyl': test_suites,
36 'test_suite_exceptions.pyl': exceptions,
Stephen Martinisb72f6d22018-10-04 23:29:0137 'mixins.pyl': mixins,
Nodir Turakulovfce34292019-12-18 17:05:4138 'gn_isolate_map.pyl': gn_isolate_map,
John Budorickc12abd12018-08-14 19:37:4339 luci_milo_cfg_path: luci_milo_cfg,
40 luci_milo_dev_cfg_path: '',
Kenneth Russelleb60cbd22017-12-05 07:54:2841 }
Stephen Martinis7eb8b612018-09-21 00:17:5042 self.printed_lines = []
43
44 def print_line(self, line):
45 self.printed_lines.append(line)
Kenneth Russelleb60cbd22017-12-05 07:54:2846
47 def read_file(self, relative_path):
48 return self.files[relative_path]
49
50 def write_file(self, relative_path, contents):
51 self.files[relative_path] = contents
52
Kenneth Russell73c3bd8b2018-10-19 22:30:1953 # pragma pylint: disable=arguments-differ
54 def check_output_file_consistency(self, verbose=False, dump=True):
55 try:
56 super(FakeBBGen, self).check_output_file_consistency(verbose)
57 except generate_buildbot_json.BBGenErr:
58 if verbose and dump:
59 # Assume we want to see the difference in the waterfalls'
60 # generated output to make it easier to rebaseline the test.
61 for line in self.printed_lines:
62 print line
63 raise
64# pragma pylint: enable=arguments-differ
65
Kenneth Russelleb60cbd22017-12-05 07:54:2866
67FOO_GTESTS_WATERFALL = """\
68[
69 {
70 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:4371 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:2872 'Fake Tester': {
73 'swarming': {
74 'dimension_sets': [
75 {
76 'kvm': '1',
77 },
78 ],
79 },
80 'test_suites': {
81 'gtest_tests': 'foo_tests',
82 },
83 },
84 },
85 },
86]
87"""
88
Kenneth Russell650995a2018-05-03 21:17:0189FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
90[
91 {
92 'name': 'chromium.test',
93 'machines': {
94 'Fake Tester': {
95 'test_suites': {
96 'gtest_tests': 'foo_tests',
97 },
98 'args': [
99 '--enable-features=Baz',
100 ],
101 },
102 },
103 },
104]
105"""
106
Shenghua Zhangaba8bad2018-02-07 02:12:09107FOO_GTESTS_MULTI_DIMENSION_WATERFALL = """\
108[
109 {
110 'name': 'chromium.test',
111 'machines': {
112 'Fake Tester': {
113 'swarming': {
114 'dimension_sets': [
115 {
116 "gpu": "none",
117 "os": "1",
118 },
119 ],
120 },
121 'use_multi_dimension_trigger_script': True,
122 'alternate_swarming_dimensions': [
123 {
124 "gpu": "none",
125 "os": "2",
126 },
127 ],
128 'test_suites': {
129 'gtest_tests': 'foo_tests',
130 },
131 },
132 },
133 },
134]
135"""
136
Ben Pastenea9e583b2019-01-16 02:57:26137FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL = """\
138[
139 {
140 'name': 'chromium.test',
141 'machines': {
142 'Fake Tester': {
143 'swarming': {
144 'dimension_sets': [
145 {
146 "device_type": "foo_device",
147 },
148 ],
149 },
150 'test_suites': {
151 'gtest_tests': 'foo_tests',
152 },
153 'os_type': 'chromeos',
154 },
155 },
156 },
157]
158"""
Stephen Martinisf83893722018-09-19 00:02:18159
Kenneth Russell8a386d42018-06-02 09:48:01160FOO_LINUX_GTESTS_WATERFALL = """\
161[
162 {
163 'name': 'chromium.test',
164 'machines': {
165 'Fake Tester': {
166 'os_type': 'linux',
167 'test_suites': {
168 'gtest_tests': 'foo_tests',
169 },
170 },
171 },
172 },
173]
174"""
175
Kenneth Russelleb60cbd22017-12-05 07:54:28176COMPOSITION_GTEST_SUITE_WATERFALL = """\
177[
178 {
179 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43180 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28181 'Fake Tester': {
182 'test_suites': {
183 'gtest_tests': 'composition_tests',
184 },
185 },
186 },
187 },
188]
189"""
190
John Budorickedfe7f872018-01-23 15:27:22191COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
192[
193 {
194 'name': 'chromium.test',
195 'machines': {
196 'Fake Tester': {
197 'test_suites': {
198 'gtest_tests': 'composition_tests',
199 },
200 'args': [
201 '--this-is-an-argument',
202 ],
203 },
204 },
205 },
206]
207"""
208
Kenneth Russelleb60cbd22017-12-05 07:54:28209FOO_ISOLATED_SCRIPTS_WATERFALL = """\
210[
211 {
212 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43213 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28214 'Fake Tester': {
215 'test_suites': {
216 'isolated_scripts': 'composition_tests',
217 },
218 },
219 },
220 },
221]
222"""
223
224FOO_SCRIPT_WATERFALL = """\
225[
226 {
227 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43228 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28229 'Fake Tester': {
230 'test_suites': {
231 'scripts': 'foo_scripts',
232 },
233 },
234 },
235 },
236]
237"""
238
Brian Sheedy158cd0f2019-04-26 01:12:44239FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS = """\
240[
241 {
242 'name': 'chromium.test',
243 'machines': {
244 'Fake Tester': {
245 'forbid_script_tests': True,
246 'test_suites': {
247 'scripts': 'foo_scripts',
248 },
249 },
250 },
251 },
252]
253"""
254
255FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS = """\
256[
257 {
258 'name': 'chromium.test',
259 'forbid_script_tests': True,
260 'machines': {
261 'Fake Tester': {
262 'test_suites': {
263 'scripts': 'foo_scripts',
264 },
265 },
266 },
267 },
268]
269"""
270
Kenneth Russelleb60cbd22017-12-05 07:54:28271FOO_JUNIT_WATERFALL = """\
272[
273 {
274 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43275 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28276 'Fake Tester': {
277 'test_suites': {
278 'junit_tests': 'composition_tests',
279 },
280 },
281 },
282 },
283]
284"""
285
286FOO_CTS_WATERFALL = """\
287[
288 {
289 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43290 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28291 'Fake Tester': {
292 'test_suites': {
293 'cts_tests': 'foo_cts_tests',
294 },
295 },
296 },
297 },
298]
299"""
300
Ben Pastene858f4be2019-01-09 23:52:09301FOO_ISOLATED_CTS_WATERFALL = """\
302[
303 {
304 'name': 'chromium.test',
305 'machines': {
306 'Fake Tester': {
307 'test_suites': {
308 'isolated_scripts': 'isolated_foo_cts_tests',
309 },
310 'use_android_presentation': True,
311 },
312 },
313 },
314]
315"""
316
Kenneth Russelleb60cbd22017-12-05 07:54:28317FOO_INSTRUMENTATION_TEST_WATERFALL = """\
318[
319 {
320 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43321 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28322 'Fake Tester': {
323 'test_suites': {
324 'instrumentation_tests': 'composition_tests',
325 },
326 },
327 },
328 },
329]
330"""
331
Kenneth Russell8a386d42018-06-02 09:48:01332FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
333[
334 {
335 '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 {
359 'name': 'chromium.test',
360 'machines': {
361 'Fake Tester': {
362 'os_type': 'win',
363 'browser_config': 'release',
364 'swarming': {
365 'dimension_sets': [
366 {
367 'gpu': 'nvidia-quadro-p400-win10-stable',
368 },
369 ],
370 },
371 'test_suites': {
372 'gpu_telemetry_tests': 'composition_tests',
373 },
374 },
375 },
376 },
377]
378"""
379
380INTEL_GPU_TELEMETRY_TEST_WATERFALL = """\
381[
382 {
383 'name': 'chromium.test',
384 'machines': {
385 'Fake Tester': {
386 'os_type': 'win',
387 'browser_config': 'release',
388 'swarming': {
389 'dimension_sets': [
390 {
391 'gpu': 'intel-hd-630-win10-stable',
392 },
393 ],
394 },
395 'test_suites': {
396 'gpu_telemetry_tests': 'composition_tests',
397 },
398 },
399 },
400 },
401]
402"""
403
Brian Sheedyf9387db7b2019-08-05 19:26:10404INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL = """\
405[
406 {
407 'name': 'chromium.test',
408 'machines': {
409 'Fake Tester': {
410 'os_type': 'win',
411 'browser_config': 'release',
412 'swarming': {
413 'dimension_sets': [
414 {
415 'gpu': 'intel-uhd-630-win10-stable',
416 },
417 ],
418 },
419 'test_suites': {
420 'gpu_telemetry_tests': 'composition_tests',
421 },
422 },
423 },
424 },
425]
426"""
427
Kenneth Russelleb60cbd22017-12-05 07:54:28428UNKNOWN_TEST_SUITE_WATERFALL = """\
429[
430 {
431 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43432 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28433 'Fake Tester': {
434 'test_suites': {
435 'gtest_tests': 'baz_tests',
436 },
437 },
438 },
439 },
440]
441"""
442
443UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
444[
445 {
446 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43447 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28448 'Fake Tester': {
449 'test_suites': {
450 'gtest_tests': 'foo_tests',
451 'foo_test_type': 'foo_tests',
452 },
453 },
454 },
455 },
456]
457"""
458
459ANDROID_WATERFALL = """\
460[
461 {
462 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43463 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28464 'Android Builder': {
465 'additional_compile_targets': [
466 'bar_test',
467 ],
468 },
Kenneth Russelleb60cbd22017-12-05 07:54:28469 'Fake Android K Tester': {
470 'additional_compile_targets': [
471 'bar_test',
472 ],
473 'swarming': {
474 'dimension_sets': [
475 {
476 'device_os': 'KTU84P',
477 'device_type': 'hammerhead',
Ben Pastened15aa8a2019-05-16 16:59:22478 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28479 },
480 ],
481 },
482 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49483 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28484 'test_suites': {
485 'gtest_tests': 'foo_tests',
486 },
487 },
488 'Fake Android L Tester': {
489 'swarming': {
490 'dimension_sets': [
491 {
Ben Pastenee012aea42019-05-14 22:32:28492 'device_os': 'LMY41U',
493 'device_os_type': 'user',
Kenneth Russelleb60cbd22017-12-05 07:54:28494 'device_type': 'hammerhead',
Ben Pastened15aa8a2019-05-16 16:59:22495 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28496 },
497 ],
498 },
499 'os_type': 'android',
500 'skip_merge_script': True,
501 'skip_output_links': True,
502 'test_suites': {
503 'gtest_tests': 'foo_tests',
504 },
505 },
506 'Fake Android M Tester': {
507 'swarming': {
508 'dimension_sets': [
509 {
510 'device_os': 'MMB29Q',
511 'device_type': 'bullhead',
Ben Pastened15aa8a2019-05-16 16:59:22512 'os': 'Android',
Kenneth Russelleb60cbd22017-12-05 07:54:28513 },
514 ],
515 },
516 'os_type': 'android',
517 'use_swarming': False,
518 'test_suites': {
519 'gtest_tests': 'foo_tests',
520 },
521 },
522 },
523 },
524]
525"""
526
Nico Weberd18b8962018-05-16 19:39:38527UNKNOWN_BOT_GTESTS_WATERFALL = """\
528[
529 {
530 'name': 'chromium.test',
531 'machines': {
532 'Unknown Bot': {
533 'test_suites': {
534 'gtest_tests': 'foo_tests',
535 },
536 },
537 },
538 },
539]
540"""
541
Jeff Yoon8154e582019-12-03 23:30:01542MATRIX_GTEST_SUITE_WATERFALL = """\
543[
544 {
545 'name': 'chromium.test',
546 'machines': {
547 'Fake Tester': {
548 'test_suites': {
549 'gtest_tests': 'matrix_tests',
550 },
551 },
552 },
553 },
554]
555"""
556
Kenneth Russelleb60cbd22017-12-05 07:54:28557FOO_TEST_SUITE = """\
558{
Stephen Martinis54d64ad2018-09-21 22:16:20559 'basic_suites': {
560 'foo_tests': {
561 'foo_test': {
562 'swarming': {
563 'dimension_sets': [
564 {
565 'integrity': 'high',
566 }
567 ],
568 'expiration': 120,
569 },
Kenneth Russelleb60cbd22017-12-05 07:54:28570 },
571 },
572 },
573}
574"""
575
Kenneth Russell8ceeabf2017-12-11 17:53:28576FOO_TEST_SUITE_WITH_ARGS = """\
577{
Stephen Martinis54d64ad2018-09-21 22:16:20578 'basic_suites': {
579 'foo_tests': {
580 'foo_test': {
581 'args': [
582 '--c_arg',
583 ],
584 },
Kenneth Russell8ceeabf2017-12-11 17:53:28585 },
586 },
587}
588"""
589
Kenneth Russell8a386d42018-06-02 09:48:01590FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
591{
Stephen Martinis54d64ad2018-09-21 22:16:20592 'basic_suites': {
593 'foo_tests': {
594 'foo_test': {
595 'linux_args': [
596 '--no-xvfb',
597 ],
598 },
Kenneth Russell8a386d42018-06-02 09:48:01599 },
600 },
601}
602"""
603
Kenneth Russell650995a2018-05-03 21:17:01604FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
605{
Stephen Martinis54d64ad2018-09-21 22:16:20606 'basic_suites': {
607 'foo_tests': {
608 'foo_test': {
609 'args': [
610 '--enable-features=Foo,Bar',
611 ],
612 },
Kenneth Russell650995a2018-05-03 21:17:01613 },
614 },
615}
616"""
617
Stephen Martinisb6a50492018-09-12 23:59:32618
Kenneth Russelleb60cbd22017-12-05 07:54:28619FOO_SCRIPT_SUITE = """\
620{
Stephen Martinis54d64ad2018-09-21 22:16:20621 'basic_suites': {
622 'foo_scripts': {
623 'foo_test': {
624 'script': 'foo.py',
625 },
626 'bar_test': {
627 'script': 'bar.py',
628 },
Kenneth Russelleb60cbd22017-12-05 07:54:28629 },
630 },
631}
632"""
633
634FOO_CTS_SUITE = """\
635{
Stephen Martinis54d64ad2018-09-21 22:16:20636 'basic_suites': {
637 'foo_cts_tests': {
638 'arch': 'arm64',
639 'platform': 'L',
640 },
Kenneth Russelleb60cbd22017-12-05 07:54:28641 },
642}
643"""
644
Ben Pastene858f4be2019-01-09 23:52:09645FOO_ISOLATED_CTS_SUITE = """\
646{
647 'basic_suites': {
648 'isolated_foo_cts_tests': {
649 'foo_cts_tests': {},
650 },
651 },
652}
653"""
654
Kenneth Russelleb60cbd22017-12-05 07:54:28655GOOD_COMPOSITION_TEST_SUITES = """\
656{
Stephen Martinis54d64ad2018-09-21 22:16:20657 'basic_suites': {
658 'bar_tests': {
659 'bar_test': {},
660 },
661 'foo_tests': {
662 'foo_test': {},
663 },
Kenneth Russelleb60cbd22017-12-05 07:54:28664 },
Stephen Martinis54d64ad2018-09-21 22:16:20665 'compound_suites': {
666 'composition_tests': [
667 'foo_tests',
668 'bar_tests',
669 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28670 },
Kenneth Russelleb60cbd22017-12-05 07:54:28671}
672"""
673
674BAD_COMPOSITION_TEST_SUITES = """\
675{
Stephen Martinis54d64ad2018-09-21 22:16:20676 'basic_suites': {
677 'bar_tests': {},
678 'foo_tests': {},
679 },
680 'compound_suites': {
681 'buggy_composition_tests': [
682 'bar_tests',
683 ],
684 'composition_tests': [
685 'foo_tests',
686 'buggy_composition_tests',
687 ],
688 },
689}
690"""
691
Andrew Luo0f1dee02019-09-06 16:50:47692CONFLICTING_COMPOSITION_TEST_SUITES = """\
693{
694 'basic_suites': {
695 'bar_tests': {
696 'baz_tests': {
697 'args': [
698 '--bar',
699 ],
700 }
701 },
702 'foo_tests': {
703 'baz_tests': {
704 'args': [
705 '--foo',
706 ],
707 }
708 },
709 },
710 'compound_suites': {
711 'foobar_tests': [
712 'foo_tests',
713 'bar_tests',
714 ],
715 },
716}
717"""
718
Stephen Martinis54d64ad2018-09-21 22:16:20719DUPLICATES_COMPOSITION_TEST_SUITES = """\
720{
721 'basic_suites': {
722 'bar_tests': {},
Jeff Yoon8154e582019-12-03 23:30:01723 'buggy_composition_tests': {},
Stephen Martinis54d64ad2018-09-21 22:16:20724 'foo_tests': {},
725 },
726 'compound_suites': {
727 'bar_tests': [
728 'foo_tests',
729 ],
730 'composition_tests': [
731 'foo_tests',
732 'buggy_composition_tests',
733 ],
734 },
Kenneth Russelleb60cbd22017-12-05 07:54:28735}
736"""
737
Kenneth Russell8ceeabf2017-12-11 17:53:28738INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES = """\
739{
Stephen Martinis54d64ad2018-09-21 22:16:20740 'basic_suites': {
741 'composition_tests': {
742 'foo_tests': {
743 'test': 'foo_test',
744 },
745 'bar_tests': {
746 'test': 'foo_test',
747 },
Kenneth Russell8ceeabf2017-12-11 17:53:28748 },
749 },
750}
751"""
752
Dirk Pranke1b767092017-12-07 04:44:23753SCRIPT_SUITE = """\
754{
Stephen Martinis54d64ad2018-09-21 22:16:20755 'basic_suites': {
756 'foo_scripts': {
757 'foo_test': {
758 'script': 'foo.py',
759 },
Dirk Pranke1b767092017-12-07 04:44:23760 },
761 },
762}
763"""
764
Kenneth Russelleb60cbd22017-12-05 07:54:28765UNREFED_TEST_SUITE = """\
766{
Stephen Martinis54d64ad2018-09-21 22:16:20767 'basic_suites': {
768 'bar_tests': {},
769 'foo_tests': {},
770 },
Kenneth Russelleb60cbd22017-12-05 07:54:28771}
772"""
773
774REUSING_TEST_WITH_DIFFERENT_NAME = """\
775{
Stephen Martinis54d64ad2018-09-21 22:16:20776 'basic_suites': {
777 'foo_tests': {
778 'foo_test': {},
779 'variation_test': {
780 'args': [
781 '--variation',
782 ],
783 'test': 'foo_test',
784 },
Kenneth Russelleb60cbd22017-12-05 07:54:28785 },
786 },
787}
788"""
789
Kenneth Russell8a386d42018-06-02 09:48:01790COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST = """\
791{
Stephen Martinis54d64ad2018-09-21 22:16:20792 'basic_suites': {
793 'foo_tests': {
794 'foo': {},
795 },
796 'bar_tests': {
797 'bar_test': {},
798 },
Kenneth Russell8a386d42018-06-02 09:48:01799 },
Stephen Martinis54d64ad2018-09-21 22:16:20800 'compound_suites': {
801 'composition_tests': [
802 'foo_tests',
803 'bar_tests',
804 ],
Kenneth Russell8a386d42018-06-02 09:48:01805 },
Kenneth Russell8a386d42018-06-02 09:48:01806}
807"""
808
Kenneth Russell384a1732019-03-16 02:36:02809COMPOSITION_SUITE_WITH_GPU_ARGS = """\
810{
811 'basic_suites': {
812 'foo_tests': {
813 'foo': {
814 'args': [
815 '--gpu-vendor-id',
816 '${gpu_vendor_id}',
817 '--gpu-device-id',
818 '${gpu_device_id}',
819 ],
820 },
821 },
822 'bar_tests': {
823 'bar_test': {},
824 },
825 },
826 'compound_suites': {
827 'composition_tests': [
828 'foo_tests',
829 'bar_tests',
830 ],
831 },
832}
833"""
834
Dirk Pranke1b767092017-12-07 04:44:23835SCRIPT_WITH_ARGS_EXCEPTIONS = """\
836{
837 'foo_test': {
838 'modifications': {
839 'Fake Tester': {
840 'args': ['--fake-arg'],
841 },
842 },
843 },
844}
845"""
846
Stephen Martinis0382bc12018-09-17 22:29:07847SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
848{
849 'foo_test': {
850 'modifications': {
851 'Fake Tester': {
852 'swarming': {
853 'value': 'exception',
854 },
855 },
856 },
857 },
858}
859"""
860
Kenneth Russelleb60cbd22017-12-05 07:54:28861NO_BAR_TEST_EXCEPTIONS = """\
862{
863 'bar_test': {
864 'remove_from': [
865 'Fake Tester',
866 ]
867 }
868}
869"""
870
871EMPTY_BAR_TEST_EXCEPTIONS = """\
872{
873 'bar_test': {
874 }
875}
876"""
877
Stephen Martinis54d64ad2018-09-21 22:16:20878EXCEPTIONS_SORTED = """\
879{
880 'suite_c': {
881 'modifications': {
882 'Fake Tester': {
883 'foo': 'bar',
884 },
885 },
886 },
887 'suite_d': {
888 'modifications': {
889 'Fake Tester': {
890 'foo': 'baz',
891 },
892 },
893 },
894}
895"""
896
897EXCEPTIONS_UNSORTED = """\
898{
899 'suite_d': {
900 'modifications': {
901 'Fake Tester': {
902 'foo': 'baz',
903 },
904 },
905 },
906 'suite_c': {
907 'modifications': {
908 'Fake Tester': {
909 'foo': 'bar',
910 },
911 },
912 },
913}
914"""
915
Kenneth Russelleb60cbd22017-12-05 07:54:28916FOO_TEST_MODIFICATIONS = """\
917{
918 'foo_test': {
919 'modifications': {
920 'Fake Tester': {
921 'args': [
922 '--bar',
923 ],
924 'swarming': {
925 'hard_timeout': 600,
926 },
927 },
928 },
929 }
930}
931"""
932
John Budorick5bc387fe2019-05-09 20:02:53933FOO_TEST_EXPLICIT_NONE_EXCEPTIONS = """\
934{
935 'foo_test': {
936 'modifications': {
937 'Fake Tester': {
938 'swarming': {
939 'dimension_sets': [
940 {
941 'integrity': None,
942 },
943 ],
944 },
945 },
946 },
947 },
948}
949"""
950
Kenneth Russelleb60cbd22017-12-05 07:54:28951NONEXISTENT_REMOVAL = """\
952{
953 'foo_test': {
954 'remove_from': [
955 'Nonexistent Tester',
956 ]
957 }
958}
959"""
960
961NONEXISTENT_MODIFICATION = """\
962{
963 'foo_test': {
964 'modifications': {
965 'Nonexistent Tester': {
966 'args': [],
967 },
968 },
969 }
970}
971"""
972
973COMPOSITION_WATERFALL_OUTPUT = """\
974{
975 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
976 "AAAAA2 See generate_buildbot_json.py to make changes": {},
977 "Fake Tester": {
978 "gtest_tests": [
979 {
Stephen Martinisbc7b7772019-05-01 22:01:43980 "merge": {
981 "args": [],
982 "script": "//testing/merge_scripts/standard_gtest_merge.py"
983 },
Kenneth Russelleb60cbd22017-12-05 07:54:28984 "swarming": {
985 "can_use_on_swarming_builders": true
986 },
987 "test": "bar_test"
988 },
989 {
Stephen Martinisbc7b7772019-05-01 22:01:43990 "merge": {
991 "args": [],
992 "script": "//testing/merge_scripts/standard_gtest_merge.py"
993 },
Kenneth Russelleb60cbd22017-12-05 07:54:28994 "swarming": {
995 "can_use_on_swarming_builders": true
996 },
997 "test": "foo_test"
998 }
999 ]
1000 }
1001}
1002"""
1003
John Budorickedfe7f872018-01-23 15:27:221004COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT = """\
1005{
1006 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1007 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1008 "Fake Tester": {
1009 "gtest_tests": [
1010 {
1011 "args": [
1012 "--this-is-an-argument"
1013 ],
Stephen Martinisbc7b7772019-05-01 22:01:431014 "merge": {
1015 "args": [],
1016 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1017 },
John Budorickedfe7f872018-01-23 15:27:221018 "swarming": {
1019 "can_use_on_swarming_builders": true
1020 },
1021 "test": "bar_test"
1022 },
1023 {
1024 "args": [
1025 "--this-is-an-argument"
1026 ],
Stephen Martinisbc7b7772019-05-01 22:01:431027 "merge": {
1028 "args": [],
1029 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1030 },
John Budorickedfe7f872018-01-23 15:27:221031 "swarming": {
1032 "can_use_on_swarming_builders": true
1033 },
1034 "test": "foo_test"
1035 }
1036 ]
1037 }
1038}
1039"""
1040
Kenneth Russelleb60cbd22017-12-05 07:54:281041VARIATION_GTEST_OUTPUT = """\
1042{
1043 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1044 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1045 "Fake Tester": {
1046 "gtest_tests": [
1047 {
Stephen Martinisbc7b7772019-05-01 22:01:431048 "merge": {
1049 "args": [],
1050 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1051 },
Kenneth Russelleb60cbd22017-12-05 07:54:281052 "swarming": {
1053 "can_use_on_swarming_builders": true,
1054 "dimension_sets": [
1055 {
1056 "kvm": "1"
1057 }
1058 ]
1059 },
Nodir Turakulovfce34292019-12-18 17:05:411060 "test": "foo_test",
1061 "test_target": "//chrome/test:foo_test"
Kenneth Russelleb60cbd22017-12-05 07:54:281062 },
1063 {
1064 "args": [
1065 "--variation"
1066 ],
Stephen Martinisbc7b7772019-05-01 22:01:431067 "merge": {
1068 "args": [],
1069 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1070 },
Kenneth Russelleb60cbd22017-12-05 07:54:281071 "name": "variation_test",
1072 "swarming": {
1073 "can_use_on_swarming_builders": true,
1074 "dimension_sets": [
1075 {
1076 "kvm": "1"
1077 }
1078 ]
1079 },
Nodir Turakulovfce34292019-12-18 17:05:411080 "test": "foo_test",
1081 "test_target": "//chrome/test:foo_test"
Kenneth Russelleb60cbd22017-12-05 07:54:281082 }
1083 ]
1084 }
1085}
1086"""
1087
1088COMPOSITION_WATERFALL_FILTERED_OUTPUT = """\
1089{
1090 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1091 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1092 "Fake Tester": {
1093 "gtest_tests": [
1094 {
Stephen Martinisbc7b7772019-05-01 22:01:431095 "merge": {
1096 "args": [],
1097 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1098 },
Kenneth Russelleb60cbd22017-12-05 07:54:281099 "swarming": {
1100 "can_use_on_swarming_builders": true
1101 },
1102 "test": "foo_test"
1103 }
1104 ]
1105 }
1106}
1107"""
1108
Kenneth Russell8ceeabf2017-12-11 17:53:281109MERGED_ARGS_OUTPUT = """\
1110{
1111 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1112 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1113 "Fake Tester": {
1114 "gtest_tests": [
1115 {
1116 "args": [
Stephen Martinis3bed2ab2018-04-23 19:42:061117 "--c_arg",
1118 "--bar"
Kenneth Russell8ceeabf2017-12-11 17:53:281119 ],
Stephen Martinisbc7b7772019-05-01 22:01:431120 "merge": {
1121 "args": [],
1122 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1123 },
Kenneth Russell8ceeabf2017-12-11 17:53:281124 "swarming": {
1125 "can_use_on_swarming_builders": true,
1126 "dimension_sets": [
1127 {
1128 "kvm": "1"
1129 }
1130 ],
1131 "hard_timeout": 600
1132 },
1133 "test": "foo_test"
1134 }
1135 ]
1136 }
1137}
1138"""
1139
Kenneth Russell8a386d42018-06-02 09:48:011140LINUX_ARGS_OUTPUT = """\
1141{
1142 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1143 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1144 "Fake Tester": {
1145 "gtest_tests": [
1146 {
1147 "args": [
1148 "--no-xvfb"
1149 ],
Stephen Martinisbc7b7772019-05-01 22:01:431150 "merge": {
1151 "args": [],
1152 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1153 },
Kenneth Russell8a386d42018-06-02 09:48:011154 "swarming": {
1155 "can_use_on_swarming_builders": true
1156 },
1157 "test": "foo_test"
1158 }
1159 ]
1160 }
1161}
1162"""
1163
Kenneth Russell650995a2018-05-03 21:17:011164MERGED_ENABLE_FEATURES_OUTPUT = """\
1165{
1166 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1167 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1168 "Fake Tester": {
1169 "gtest_tests": [
1170 {
1171 "args": [
1172 "--enable-features=Foo,Bar,Baz"
1173 ],
Stephen Martinisbc7b7772019-05-01 22:01:431174 "merge": {
1175 "args": [],
1176 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1177 },
Kenneth Russell650995a2018-05-03 21:17:011178 "swarming": {
1179 "can_use_on_swarming_builders": true
1180 },
1181 "test": "foo_test"
1182 }
1183 ]
1184 }
1185}
1186"""
1187
Kenneth Russelleb60cbd22017-12-05 07:54:281188MODIFIED_OUTPUT = """\
1189{
1190 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1191 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1192 "Fake Tester": {
1193 "gtest_tests": [
1194 {
1195 "args": [
1196 "--bar"
1197 ],
Stephen Martinisbc7b7772019-05-01 22:01:431198 "merge": {
1199 "args": [],
1200 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1201 },
Kenneth Russelleb60cbd22017-12-05 07:54:281202 "swarming": {
1203 "can_use_on_swarming_builders": true,
1204 "dimension_sets": [
1205 {
1206 "integrity": "high",
1207 "kvm": "1"
1208 }
1209 ],
1210 "expiration": 120,
1211 "hard_timeout": 600
1212 },
1213 "test": "foo_test"
1214 }
1215 ]
1216 }
1217}
1218"""
1219
John Budorick5bc387fe2019-05-09 20:02:531220EXPLICIT_NONE_OUTPUT = """\
1221{
1222 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1223 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1224 "Fake Tester": {
1225 "gtest_tests": [
1226 {
1227 "merge": {
1228 "args": [],
1229 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1230 },
1231 "swarming": {
1232 "can_use_on_swarming_builders": true,
1233 "dimension_sets": [
1234 {
1235 "kvm": "1"
1236 }
1237 ],
1238 "expiration": 120
1239 },
1240 "test": "foo_test"
1241 }
1242 ]
1243 }
1244}
1245"""
1246
Kenneth Russelleb60cbd22017-12-05 07:54:281247ISOLATED_SCRIPT_OUTPUT = """\
1248{
1249 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1250 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1251 "Fake Tester": {
1252 "isolated_scripts": [
1253 {
1254 "isolate_name": "foo_test",
Stephen Martinisf50047062019-05-06 22:26:171255 "merge": {
1256 "args": [],
1257 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1258 },
Kenneth Russelleb60cbd22017-12-05 07:54:281259 "name": "foo_test",
1260 "swarming": {
1261 "can_use_on_swarming_builders": true
1262 }
1263 }
1264 ]
1265 }
1266}
1267"""
1268
1269SCRIPT_OUTPUT = """\
1270{
1271 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1272 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1273 "Fake Tester": {
1274 "scripts": [
1275 {
1276 "name": "foo_test",
1277 "script": "foo.py"
1278 }
1279 ]
1280 }
1281}
1282"""
1283
Dirk Pranke1b767092017-12-07 04:44:231284SCRIPT_WITH_ARGS_OUTPUT = """\
1285{
1286 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1287 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1288 "Fake Tester": {
1289 "scripts": [
1290 {
1291 "args": [
1292 "--fake-arg"
1293 ],
1294 "name": "foo_test",
1295 "script": "foo.py"
1296 }
1297 ]
1298 }
1299}
1300"""
1301
Kenneth Russelleb60cbd22017-12-05 07:54:281302JUNIT_OUTPUT = """\
1303{
1304 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1305 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1306 "Fake Tester": {
1307 "junit_tests": [
1308 {
John Budorickcadc4952019-09-16 23:51:371309 "name": "foo_test",
Kenneth Russelleb60cbd22017-12-05 07:54:281310 "test": "foo_test"
1311 }
1312 ]
1313 }
1314}
1315"""
1316
1317CTS_OUTPUT = """\
1318{
1319 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1320 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1321 "Fake Tester": {
1322 "cts_tests": [
1323 {
1324 "arch": "arm64",
1325 "platform": "L"
1326 }
1327 ]
1328 }
1329}
1330"""
1331
Ben Pastene858f4be2019-01-09 23:52:091332CTS_ISOLATED_OUTPUT = """\
1333{
1334 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1335 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1336 "Fake Tester": {
1337 "isolated_scripts": [
1338 {
1339 "args": [
1340 "--gs-results-bucket=chromium-result-details"
1341 ],
1342 "isolate_name": "foo_cts_tests",
1343 "merge": {
1344 "args": [
1345 "--bucket",
1346 "chromium-result-details",
1347 "--test-name",
1348 "foo_cts_tests"
1349 ],
1350 "script": \
1351"//build/android/pylib/results/presentation/test_results_presentation.py"
1352 },
1353 "name": "foo_cts_tests",
1354 "swarming": {
1355 "can_use_on_swarming_builders": true,
1356 "cipd_packages": [
1357 {
1358 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1359 "location": "bin",
1360 "revision": \
1361"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1362 }
1363 ],
1364 "output_links": [
1365 {
1366 "link": [
1367 "https://luci-logdog.appspot.com/v/?s",
1368 "=android%2Fswarming%2Flogcats%2F",
1369 "${TASK_ID}%2F%2B%2Funified_logcats"
1370 ],
1371 "name": "shard #${SHARD_INDEX} logcats"
1372 }
1373 ]
1374 }
1375 }
1376 ]
1377 }
1378}
1379"""
1380
Kenneth Russelleb60cbd22017-12-05 07:54:281381INSTRUMENTATION_TEST_OUTPUT = """\
1382{
1383 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1384 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1385 "Fake Tester": {
1386 "instrumentation_tests": [
1387 {
1388 "test": "foo_test"
1389 }
1390 ]
1391 }
1392}
1393"""
1394
Kenneth Russell8ceeabf2017-12-11 17:53:281395INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT = """\
1396{
1397 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1398 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1399 "Fake Tester": {
1400 "instrumentation_tests": [
1401 {
1402 "name": "bar_tests",
Nodir Turakulovfce34292019-12-18 17:05:411403 "test": "foo_test",
1404 "test_target": "//chrome/test:foo_test"
Kenneth Russell8ceeabf2017-12-11 17:53:281405 },
1406 {
1407 "name": "foo_tests",
Nodir Turakulovfce34292019-12-18 17:05:411408 "test": "foo_test",
1409 "test_target": "//chrome/test:foo_test"
Kenneth Russell8ceeabf2017-12-11 17:53:281410 }
1411 ]
1412 }
1413}
1414"""
1415
Kenneth Russell8a386d42018-06-02 09:48:011416GPU_TELEMETRY_TEST_OUTPUT = """\
1417{
1418 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1419 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1420 "Fake Tester": {
1421 "isolated_scripts": [
1422 {
1423 "args": [
1424 "foo",
1425 "--show-stdout",
1426 "--browser=release",
1427 "--passthrough",
1428 "-v",
1429 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1430 ],
1431 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171432 "merge": {
1433 "args": [],
1434 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1435 },
Kenneth Russell8a386d42018-06-02 09:48:011436 "name": "foo_tests",
Kenneth Russell44910c32018-12-03 23:35:111437 "should_retry_with_patch": false,
Kenneth Russell8a386d42018-06-02 09:48:011438 "swarming": {
1439 "can_use_on_swarming_builders": true,
1440 "dimension_sets": [
1441 {
1442 "gpu": "10de:1cb3"
1443 }
erikchen6da2d9b2018-08-03 23:01:141444 ],
1445 "idempotent": false
Kenneth Russell8a386d42018-06-02 09:48:011446 }
1447 }
1448 ]
1449 }
1450}
1451"""
1452
Kenneth Russell384a1732019-03-16 02:36:021453NVIDIA_GPU_TELEMETRY_TEST_OUTPUT = """\
1454{
1455 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1456 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1457 "Fake Tester": {
1458 "isolated_scripts": [
1459 {
1460 "args": [
1461 "foo",
1462 "--show-stdout",
1463 "--browser=release",
1464 "--passthrough",
1465 "-v",
1466 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
1467 "--gpu-vendor-id",
1468 "10de",
1469 "--gpu-device-id",
1470 "1cb3"
1471 ],
1472 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171473 "merge": {
1474 "args": [],
1475 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1476 },
Kenneth Russell384a1732019-03-16 02:36:021477 "name": "foo_tests",
1478 "should_retry_with_patch": false,
1479 "swarming": {
1480 "can_use_on_swarming_builders": true,
1481 "dimension_sets": [
1482 {
1483 "gpu": "nvidia-quadro-p400-win10-stable"
1484 }
1485 ],
1486 "idempotent": false
1487 }
1488 }
1489 ]
1490 }
1491}
1492"""
1493
1494INTEL_GPU_TELEMETRY_TEST_OUTPUT = """\
1495{
1496 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1497 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1498 "Fake Tester": {
1499 "isolated_scripts": [
1500 {
1501 "args": [
1502 "foo",
1503 "--show-stdout",
1504 "--browser=release",
1505 "--passthrough",
1506 "-v",
1507 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
1508 "--gpu-vendor-id",
1509 "8086",
1510 "--gpu-device-id",
1511 "5912"
1512 ],
1513 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171514 "merge": {
1515 "args": [],
1516 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1517 },
Kenneth Russell384a1732019-03-16 02:36:021518 "name": "foo_tests",
1519 "should_retry_with_patch": false,
1520 "swarming": {
1521 "can_use_on_swarming_builders": true,
1522 "dimension_sets": [
1523 {
1524 "gpu": "intel-hd-630-win10-stable"
1525 }
1526 ],
1527 "idempotent": false
1528 }
1529 }
1530 ]
1531 }
1532}
1533"""
1534
Brian Sheedyf9387db7b2019-08-05 19:26:101535INTEL_UHD_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 "8086",
1551 "--gpu-device-id",
1552 "3e92"
1553 ],
1554 "isolate_name": "telemetry_gpu_integration_test",
1555 "merge": {
1556 "args": [],
1557 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1558 },
1559 "name": "foo_tests",
1560 "should_retry_with_patch": false,
1561 "swarming": {
1562 "can_use_on_swarming_builders": true,
1563 "dimension_sets": [
1564 {
1565 "gpu": "intel-uhd-630-win10-stable"
1566 }
1567 ],
1568 "idempotent": false
1569 }
1570 }
1571 ]
1572 }
1573}
1574"""
1575
Kenneth Russelleb60cbd22017-12-05 07:54:281576ANDROID_WATERFALL_OUTPUT = """\
1577{
1578 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1579 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1580 "Android Builder": {
1581 "additional_compile_targets": [
1582 "bar_test"
1583 ]
1584 },
1585 "Fake Android K Tester": {
1586 "additional_compile_targets": [
1587 "bar_test"
1588 ],
1589 "gtest_tests": [
1590 {
John Budorick826d5ed2017-12-28 19:27:321591 "args": [
Kenneth Russell5612d64a2018-06-02 21:12:301592 "--gs-results-bucket=chromium-result-details",
1593 "--recover-devices"
John Budorick826d5ed2017-12-28 19:27:321594 ],
Stephen Martinisbc7b7772019-05-01 22:01:431595 "merge": {
1596 "args": [],
1597 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1598 },
Kenneth Russelleb60cbd22017-12-05 07:54:281599 "swarming": {
1600 "can_use_on_swarming_builders": true,
1601 "cipd_packages": [
1602 {
1603 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1604 "location": "bin",
1605 "revision": \
1606"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1607 }
1608 ],
1609 "dimension_sets": [
1610 {
1611 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:281612 "device_os_type": "userdebug",
Kenneth Russelleb60cbd22017-12-05 07:54:281613 "device_type": "hammerhead",
Ben Pastened15aa8a2019-05-16 16:59:221614 "integrity": "high",
1615 "os": "Android"
Kenneth Russelleb60cbd22017-12-05 07:54:281616 }
1617 ],
1618 "expiration": 120,
1619 "output_links": [
1620 {
1621 "link": [
1622 "https://luci-logdog.appspot.com/v/?s",
1623 "=android%2Fswarming%2Flogcats%2F",
1624 "${TASK_ID}%2F%2B%2Funified_logcats"
1625 ],
1626 "name": "shard #${SHARD_INDEX} logcats"
1627 }
1628 ]
1629 },
1630 "test": "foo_test"
1631 }
1632 ]
1633 },
1634 "Fake Android L Tester": {
1635 "gtest_tests": [
1636 {
Benjamin Pastene766d48f52017-12-18 21:47:421637 "args": [
John Budorick826d5ed2017-12-28 19:27:321638 "--gs-results-bucket=chromium-result-details",
Benjamin Pastene766d48f52017-12-18 21:47:421639 "--recover-devices"
1640 ],
Stephen Martinisbc7b7772019-05-01 22:01:431641 "merge": {
1642 "args": [],
1643 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1644 },
Kenneth Russelleb60cbd22017-12-05 07:54:281645 "swarming": {
1646 "can_use_on_swarming_builders": true,
1647 "cipd_packages": [
1648 {
1649 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1650 "location": "bin",
1651 "revision": \
1652"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1653 }
1654 ],
1655 "dimension_sets": [
1656 {
Ben Pastenee012aea42019-05-14 22:32:281657 "device_os": "LMY41U",
1658 "device_os_type": "user",
Kenneth Russelleb60cbd22017-12-05 07:54:281659 "device_type": "hammerhead",
Ben Pastened15aa8a2019-05-16 16:59:221660 "integrity": "high",
1661 "os": "Android"
Kenneth Russelleb60cbd22017-12-05 07:54:281662 }
1663 ],
1664 "expiration": 120
1665 },
1666 "test": "foo_test"
1667 }
1668 ]
1669 },
1670 "Fake Android M Tester": {
1671 "gtest_tests": [
1672 {
Stephen Martinisbc7b7772019-05-01 22:01:431673 "merge": {
1674 "args": [],
1675 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1676 },
Kenneth Russelleb60cbd22017-12-05 07:54:281677 "swarming": {
1678 "can_use_on_swarming_builders": false
1679 },
1680 "test": "foo_test"
1681 }
1682 ]
1683 }
1684}
1685"""
1686
Shenghua Zhangaba8bad2018-02-07 02:12:091687MULTI_DIMENSION_OUTPUT = """\
1688{
1689 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1690 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1691 "Fake Tester": {
1692 "gtest_tests": [
1693 {
Stephen Martinisbc7b7772019-05-01 22:01:431694 "merge": {
1695 "args": [],
1696 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1697 },
Shenghua Zhangaba8bad2018-02-07 02:12:091698 "swarming": {
1699 "can_use_on_swarming_builders": true,
1700 "dimension_sets": [
1701 {
1702 "gpu": "none",
1703 "integrity": "high",
1704 "os": "1"
1705 }
1706 ],
1707 "expiration": 120
1708 },
1709 "test": "foo_test",
1710 "trigger_script": {
1711 "args": [
1712 "--multiple-trigger-configs",
Kenneth Russell73c3bd8b2018-10-19 22:30:191713 "[{\\"gpu\\": \\"none\\", \\"integrity\\": \\"high\\", \
1714\\"os\\": \\"1\\"}, \
Shenghua Zhangaba8bad2018-02-07 02:12:091715{\\"gpu\\": \\"none\\", \\"os\\": \\"2\\"}]",
1716 "--multiple-dimension-script-verbose",
1717 "True"
1718 ],
1719 "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
1720 }
1721 }
1722 ]
1723 }
1724}
1725"""
1726
Ben Pastenea9e583b2019-01-16 02:57:261727CHROMEOS_TRIGGER_SCRIPT_OUTPUT = """\
1728{
1729 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1730 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1731 "Fake Tester": {
1732 "gtest_tests": [
1733 {
Stephen Martinisbc7b7772019-05-01 22:01:431734 "merge": {
1735 "args": [],
1736 "script": "//testing/merge_scripts/standard_gtest_merge.py"
1737 },
Ben Pastenea9e583b2019-01-16 02:57:261738 "swarming": {
1739 "can_use_on_swarming_builders": true,
1740 "dimension_sets": [
1741 {
1742 "device_type": "foo_device",
1743 "integrity": "high"
1744 }
1745 ],
1746 "expiration": 120
1747 },
1748 "test": "foo_test",
1749 "trigger_script": {
1750 "script": "//testing/trigger_scripts/chromeos_device_trigger.py"
1751 }
1752 }
1753 ]
1754 }
1755}
1756"""
1757
Stephen Martinis2a0667022018-09-25 22:31:141758GPU_DIMENSIONS_WATERFALL_OUTPUT = """\
1759{
1760 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1761 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1762 "Fake Tester": {
1763 "isolated_scripts": [
1764 {
1765 "args": [
1766 "foo_test",
1767 "--show-stdout",
1768 "--browser=release",
1769 "--passthrough",
1770 "-v",
1771 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1772 ],
1773 "isolate_name": "telemetry_gpu_integration_test",
Stephen Martinisf50047062019-05-06 22:26:171774 "merge": {
1775 "args": [],
1776 "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
1777 },
Stephen Martinis2a0667022018-09-25 22:31:141778 "name": "foo_test",
Kenneth Russell44910c32018-12-03 23:35:111779 "should_retry_with_patch": false,
Stephen Martinis2a0667022018-09-25 22:31:141780 "swarming": {
1781 "can_use_on_swarming_builders": true,
1782 "dimension_sets": [
1783 {
1784 "iama": "mixin",
1785 "integrity": "high"
1786 }
1787 ],
1788 "expiration": 120,
1789 "idempotent": false,
1790 "value": "test"
1791 }
1792 }
1793 ]
1794 }
1795}
1796"""
1797
Kenneth Russell78fd8702018-05-17 01:15:521798LUCI_MILO_CFG = """\
1799consoles {
1800 builders {
1801 name: "buildbucket/luci.chromium.ci/Fake Tester"
1802 }
1803}
1804"""
1805
Stephen Martinis54d64ad2018-09-21 22:16:201806LUCI_MILO_CFG_WATERFALL_SORTING = """\
1807consoles {
1808 builders {
1809 name: "buildbucket/luci.chromium.ci/Fake Tester"
1810 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1811 }
1812}
1813"""
1814
Stephen Martinis54d64ad2018-09-21 22:16:201815TEST_SUITE_SORTING_WATERFALL = """
1816[
1817 {
1818 'name': 'chromium.test',
1819 'machines': {
1820 'Fake Tester': {
1821 'test_suites': {
1822 'instrumentation_tests': 'suite_a',
1823 'scripts': 'suite_b',
1824 },
1825 },
1826 },
1827 },
1828]
1829"""
1830
1831TEST_SUITE_SORTED_WATERFALL = """
1832[
1833 {
1834 'name': 'chromium.test',
1835 'machines': {
1836 'Fake Tester': {
1837 'test_suites': {
1838 'instrumentation_tests': 'suite_a',
1839 'scripts': 'suite_b',
1840 },
1841 },
1842 'Really Fake Tester': {
1843 'test_suites': {
1844 'instrumentation_tests': 'suite_a',
1845 'scripts': 'suite_b',
1846 },
1847 },
1848 },
1849 },
1850 {
1851 'name': 'chromium.zz.test',
1852 'machines': {
1853 'Fake Tester': {
1854 'test_suites': {
1855 'instrumentation_tests': 'suite_a',
1856 'scripts': 'suite_b',
1857 },
1858 },
1859 'Really Fake Tester': {
1860 'test_suites': {
1861 'instrumentation_tests': 'suite_a',
1862 'scripts': 'suite_b',
1863 },
1864 },
1865 },
1866 },
1867]
1868"""
1869
1870TEST_SUITE_UNSORTED_WATERFALL_1 = """
1871[
1872 {
1873 'name': 'chromium.zz.test',
1874 'machines': {
1875 'Fake Tester': {
1876 'test_suites': {
1877 'instrumentation_tests': 'suite_a',
1878 'scripts': 'suite_b',
1879 },
1880 },
1881 'Really Fake Tester': {
1882 'test_suites': {
1883 'instrumentation_tests': 'suite_a',
1884 'scripts': 'suite_b',
1885 },
1886 },
1887 },
1888 },
1889 {
1890 'name': 'chromium.test',
1891 'machines': {
1892 'Fake Tester': {
1893 'test_suites': {
1894 'instrumentation_tests': 'suite_a',
1895 'scripts': 'suite_b',
1896 },
1897 },
1898 'Really Fake Tester': {
1899 'test_suites': {
1900 'instrumentation_tests': 'suite_a',
1901 'scripts': 'suite_b',
1902 },
1903 },
1904 },
1905 },
1906]
1907"""
1908
1909TEST_SUITE_UNSORTED_WATERFALL_2 = """
1910[
1911 {
1912 'name': 'chromium.test',
1913 'machines': {
1914 'Really Fake Tester': {
1915 'test_suites': {
1916 'instrumentation_tests': 'suite_a',
1917 'scripts': 'suite_b',
1918 },
1919 },
1920 'Fake Tester': {
1921 'test_suites': {
1922 'instrumentation_tests': 'suite_a',
1923 'scripts': 'suite_b',
1924 },
1925 },
1926 },
1927 },
1928 {
1929 'name': 'chromium.zz.test',
1930 'machines': {
1931 'Fake Tester': {
1932 'test_suites': {
1933 'instrumentation_tests': 'suite_a',
1934 'scripts': 'suite_b',
1935 },
1936 },
1937 'Really Fake Tester': {
1938 'test_suites': {
1939 'instrumentation_tests': 'suite_a',
1940 'scripts': 'suite_b',
1941 },
1942 },
1943 },
1944 },
1945]
1946"""
1947
1948# Note that the suites in basic_suites would be sorted after the suites in
1949# compound_suites. This is valid though, because each set of suites is sorted
1950# separately.
1951# suite_c is an 'instrumentation_tests' test
1952# suite_d is an 'scripts' test
1953TEST_SUITE_SORTED = """\
1954{
1955 'basic_suites': {
1956 'suite_c': {
1957 'suite_c': {},
1958 },
1959 'suite_d': {
1960 'script': {
1961 'script': 'suite_d.py',
1962 }
1963 },
1964 },
1965 'compound_suites': {
1966 'suite_a': [
1967 'suite_c',
1968 ],
1969 'suite_b': [
1970 'suite_d',
1971 ],
1972 },
1973}
1974"""
1975
1976TEST_SUITE_UNSORTED_1 = """\
1977{
1978 'basic_suites': {
1979 'suite_d': {
1980 'a': 'b',
1981 },
1982 'suite_c': {
1983 'a': 'b',
1984 },
1985 },
1986 'compound_suites': {
1987 'suite_a': [
1988 'suite_c',
1989 ],
1990 'suite_b': [
1991 'suite_d',
1992 ],
1993 },
1994}
1995"""
1996
1997TEST_SUITE_UNSORTED_2 = """\
1998{
1999 'basic_suites': {
2000 'suite_c': {
2001 'a': 'b',
2002 },
2003 'suite_d': {
2004 'a': 'b',
2005 },
2006 },
2007 'compound_suites': {
2008 'suite_b': [
2009 'suite_c',
2010 ],
2011 'suite_a': [
2012 'suite_d',
2013 ],
2014 },
2015}
2016"""
2017TEST_SUITE_UNSORTED_3 = """\
2018{
2019 'basic_suites': {
2020 'suite_d': {
2021 'a': 'b',
2022 },
2023 'suite_c': {
2024 'a': 'b',
2025 },
2026 },
2027 'compound_suites': {
2028 'suite_b': [
2029 'suite_c',
2030 ],
2031 'suite_a': [
2032 'suite_d',
2033 ],
2034 },
2035}
2036"""
2037
2038
2039TEST_SUITES_SYNTAX_ERROR = """\
2040{
2041 'basic_suites': {
2042 3: {
2043 'suite_c': {},
2044 },
2045 },
2046 'compound_suites': {},
2047}
2048"""
2049
Nodir Turakulovfce34292019-12-18 17:05:412050GN_ISOLATE_MAP="""\
2051{
2052 'foo_test': {
2053 'label': '//chrome/test:foo_test',
2054 'type': 'windowed_test_launcher',
2055 }
2056}
2057"""
2058
Kenneth Russelleb60cbd22017-12-05 07:54:282059class UnitTest(unittest.TestCase):
2060 def test_base_generator(self):
2061 # Only needed for complete code coverage.
2062 self.assertRaises(NotImplementedError,
2063 generate_buildbot_json.BaseGenerator(None).generate,
2064 None, None, None, None)
2065 self.assertRaises(NotImplementedError,
2066 generate_buildbot_json.BaseGenerator(None).sort,
2067 None)
2068
2069 def test_good_test_suites_are_ok(self):
2070 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2071 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522072 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502073 fbb.check_input_file_consistency(verbose=True)
2074 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282075
Shenghua Zhangaba8bad2018-02-07 02:12:092076 def test_good_multi_dimension_test_suites_are_ok(self):
2077 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
2078 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522079 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502080 fbb.check_input_file_consistency(verbose=True)
2081 self.assertFalse(fbb.printed_lines)
Shenghua Zhangaba8bad2018-02-07 02:12:092082
Kenneth Russelleb60cbd22017-12-05 07:54:282083 def test_good_composition_test_suites_are_ok(self):
2084 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2085 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522086 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502087 fbb.check_input_file_consistency(verbose=True)
2088 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282089
2090 def test_bad_composition_test_suites_are_caught(self):
2091 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2092 BAD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522093 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502094 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
Jeff Yoon8154e582019-12-03 23:30:012095 'compound_suites may not refer to.*'):
Stephen Martinis7eb8b612018-09-21 00:17:502096 fbb.check_input_file_consistency(verbose=True)
2097 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282098
Andrew Luo0f1dee02019-09-06 16:50:472099 def test_composition_test_suites_no_conflicts(self):
2100 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2101 CONFLICTING_COMPOSITION_TEST_SUITES,
Andrew Luo0f1dee02019-09-06 16:50:472102 LUCI_MILO_CFG)
2103 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2104 'Conflicting test definitions.*'):
2105 fbb.check_input_file_consistency(verbose=True)
2106 self.assertFalse(fbb.printed_lines)
2107
Stephen Martinis54d64ad2018-09-21 22:16:202108 def test_composition_test_suites_no_duplicate_names(self):
2109 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2110 DUPLICATES_COMPOSITION_TEST_SUITES,
Stephen Martinis54d64ad2018-09-21 22:16:202111 LUCI_MILO_CFG)
2112 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2113 '.*may not duplicate basic test suite.*'):
2114 fbb.check_input_file_consistency(verbose=True)
2115 self.assertFalse(fbb.printed_lines)
2116
Kenneth Russelleb60cbd22017-12-05 07:54:282117 def test_unknown_test_suites_are_caught(self):
2118 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_WATERFALL,
2119 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522120 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502121 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2122 'Test suite baz_tests from machine.*'):
2123 fbb.check_input_file_consistency(verbose=True)
2124 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282125
2126 def test_unknown_test_suite_types_are_caught(self):
2127 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
2128 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522129 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502130 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2131 'Unknown test suite type foo_test_type.*'):
2132 fbb.check_input_file_consistency(verbose=True)
2133 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282134
2135 def test_unrefed_test_suite_caught(self):
2136 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2137 UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522138 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502139 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2140 '.*unreferenced.*bar_tests.*'):
2141 fbb.check_input_file_consistency(verbose=True)
2142 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282143
2144 def test_good_waterfall_output(self):
2145 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2146 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522147 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282148 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
2149 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502150 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282151
2152 def test_reusing_gtest_targets(self):
2153 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2154 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412155 LUCI_MILO_CFG,
2156 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russelleb60cbd22017-12-05 07:54:282157 fbb.files['chromium.test.json'] = VARIATION_GTEST_OUTPUT
2158 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502159 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282160
2161 def test_noop_exception_does_nothing(self):
2162 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2163 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412164 LUCI_MILO_CFG,
2165 exceptions=EMPTY_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282166 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
2167 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502168 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282169
Kenneth Russell8ceeabf2017-12-11 17:53:282170 def test_test_arg_merges(self):
2171 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2172 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412173 LUCI_MILO_CFG,
2174 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russell8ceeabf2017-12-11 17:53:282175 fbb.files['chromium.test.json'] = MERGED_ARGS_OUTPUT
2176 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502177 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:282178
Kenneth Russell650995a2018-05-03 21:17:012179 def test_enable_features_arg_merges(self):
2180 fbb = FakeBBGen(FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
2181 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Kenneth Russell78fd8702018-05-17 01:15:522182 LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:012183 fbb.files['chromium.test.json'] = MERGED_ENABLE_FEATURES_OUTPUT
2184 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502185 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:012186
Kenneth Russell8a386d42018-06-02 09:48:012187 def test_linux_args(self):
2188 fbb = FakeBBGen(FOO_LINUX_GTESTS_WATERFALL,
2189 FOO_TEST_SUITE_WITH_LINUX_ARGS,
Kenneth Russell8a386d42018-06-02 09:48:012190 LUCI_MILO_CFG)
2191 fbb.files['chromium.test.json'] = LINUX_ARGS_OUTPUT
2192 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502193 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012194
Kenneth Russelleb60cbd22017-12-05 07:54:282195 def test_test_filtering(self):
2196 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2197 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412198 LUCI_MILO_CFG,
2199 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282200 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_FILTERED_OUTPUT
2201 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502202 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282203
2204 def test_test_modifications(self):
2205 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2206 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412207 LUCI_MILO_CFG,
2208 exceptions=FOO_TEST_MODIFICATIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282209 fbb.files['chromium.test.json'] = MODIFIED_OUTPUT
2210 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502211 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282212
John Budorick5bc387fe2019-05-09 20:02:532213 def test_test_with_explicit_none(self):
2214 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2215 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412216 LUCI_MILO_CFG,
2217 exceptions=FOO_TEST_EXPLICIT_NONE_EXCEPTIONS,
2218 mixins=SWARMING_MIXINS)
John Budorick5bc387fe2019-05-09 20:02:532219 fbb.files['chromium.test.json'] = EXPLICIT_NONE_OUTPUT
2220 fbb.check_output_file_consistency(verbose=True)
2221 self.assertFalse(fbb.printed_lines)
2222
Kenneth Russelleb60cbd22017-12-05 07:54:282223 def test_isolated_script_tests(self):
2224 fbb = FakeBBGen(FOO_ISOLATED_SCRIPTS_WATERFALL,
2225 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412226 LUCI_MILO_CFG,
2227 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282228 fbb.files['chromium.test.json'] = ISOLATED_SCRIPT_OUTPUT
2229 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502230 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282231
Dirk Pranke1b767092017-12-07 04:44:232232 def test_script_with_args(self):
2233 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
2234 SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412235 LUCI_MILO_CFG,
2236 exceptions=SCRIPT_WITH_ARGS_EXCEPTIONS)
Dirk Pranke1b767092017-12-07 04:44:232237 fbb.files['chromium.test.json'] = SCRIPT_WITH_ARGS_OUTPUT
2238 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502239 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:232240
2241 def test_script(self):
Kenneth Russelleb60cbd22017-12-05 07:54:282242 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
2243 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412244 LUCI_MILO_CFG,
2245 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282246 fbb.files['chromium.test.json'] = SCRIPT_OUTPUT
2247 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502248 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282249
Brian Sheedy158cd0f2019-04-26 01:12:442250 def test_script_machine_forbids_scripts(self):
2251 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL_MACHINE_FORBIDS_SCRIPT_TESTS,
2252 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412253 LUCI_MILO_CFG,
2254 exceptions=NO_BAR_TEST_EXCEPTIONS)
Brian Sheedy158cd0f2019-04-26 01:12:442255 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2256 'Attempted to generate a script test on tester.*'):
2257 fbb.check_output_file_consistency(verbose=True)
2258
2259 def test_script_waterfall_forbids_scripts(self):
2260 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL_FORBID_SCRIPT_TESTS,
2261 FOO_SCRIPT_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412262 LUCI_MILO_CFG,
2263 exceptions=NO_BAR_TEST_EXCEPTIONS)
Brian Sheedy158cd0f2019-04-26 01:12:442264 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2265 'Attempted to generate a script test on tester.*'):
2266 fbb.check_output_file_consistency(verbose=True)
2267
Kenneth Russelleb60cbd22017-12-05 07:54:282268 def test_junit_tests(self):
2269 fbb = FakeBBGen(FOO_JUNIT_WATERFALL,
2270 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412271 LUCI_MILO_CFG,
2272 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282273 fbb.files['chromium.test.json'] = JUNIT_OUTPUT
2274 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502275 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282276
2277 def test_cts_tests(self):
2278 fbb = FakeBBGen(FOO_CTS_WATERFALL,
2279 FOO_CTS_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522280 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282281 fbb.files['chromium.test.json'] = CTS_OUTPUT
2282 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502283 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282284
Ben Pastene858f4be2019-01-09 23:52:092285 def test_isolated_cts_tests(self):
2286 fbb = FakeBBGen(FOO_ISOLATED_CTS_WATERFALL,
2287 FOO_ISOLATED_CTS_SUITE,
Ben Pastene858f4be2019-01-09 23:52:092288 LUCI_MILO_CFG)
2289 fbb.files['chromium.test.json'] = CTS_ISOLATED_OUTPUT
2290 fbb.check_output_file_consistency(verbose=True)
2291 self.assertFalse(fbb.printed_lines)
2292
Kenneth Russelleb60cbd22017-12-05 07:54:282293 def test_instrumentation_tests(self):
2294 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
2295 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412296 LUCI_MILO_CFG,
2297 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282298 fbb.files['chromium.test.json'] = INSTRUMENTATION_TEST_OUTPUT
2299 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502300 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282301
Kenneth Russell8a386d42018-06-02 09:48:012302 def test_gpu_telemetry_tests(self):
2303 fbb = FakeBBGen(FOO_GPU_TELEMETRY_TEST_WATERFALL,
2304 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
Nodir Turakulovfce34292019-12-18 17:05:412305 LUCI_MILO_CFG,
2306 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russell8a386d42018-06-02 09:48:012307 fbb.files['chromium.test.json'] = GPU_TELEMETRY_TEST_OUTPUT
2308 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502309 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012310
Kenneth Russell384a1732019-03-16 02:36:022311 def test_nvidia_gpu_telemetry_tests(self):
2312 fbb = FakeBBGen(NVIDIA_GPU_TELEMETRY_TEST_WATERFALL,
2313 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412314 LUCI_MILO_CFG,
2315 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russell384a1732019-03-16 02:36:022316 fbb.files['chromium.test.json'] = NVIDIA_GPU_TELEMETRY_TEST_OUTPUT
2317 fbb.check_output_file_consistency(verbose=True)
2318 self.assertFalse(fbb.printed_lines)
2319
2320 def test_intel_gpu_telemetry_tests(self):
2321 fbb = FakeBBGen(INTEL_GPU_TELEMETRY_TEST_WATERFALL,
2322 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412323 LUCI_MILO_CFG,
2324 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russell384a1732019-03-16 02:36:022325 fbb.files['chromium.test.json'] = INTEL_GPU_TELEMETRY_TEST_OUTPUT
2326 fbb.check_output_file_consistency(verbose=True)
2327 self.assertFalse(fbb.printed_lines)
2328
Brian Sheedyf9387db7b2019-08-05 19:26:102329 def test_intel_uhd_gpu_telemetry_tests(self):
2330 fbb = FakeBBGen(INTEL_UHD_GPU_TELEMETRY_TEST_WATERFALL,
2331 COMPOSITION_SUITE_WITH_GPU_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:412332 LUCI_MILO_CFG,
2333 exceptions=NO_BAR_TEST_EXCEPTIONS)
Brian Sheedyf9387db7b2019-08-05 19:26:102334 fbb.files['chromium.test.json'] = INTEL_UHD_GPU_TELEMETRY_TEST_OUTPUT
2335 fbb.check_output_file_consistency(verbose=True)
2336 self.assertFalse(fbb.printed_lines)
2337
Kenneth Russell8ceeabf2017-12-11 17:53:282338 def test_instrumentation_tests_with_different_names(self):
2339 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
2340 INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES,
Nodir Turakulovfce34292019-12-18 17:05:412341 LUCI_MILO_CFG,
2342 gn_isolate_map=GN_ISOLATE_MAP)
Kenneth Russell8ceeabf2017-12-11 17:53:282343 fbb.files['chromium.test.json'] = \
2344 INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT
2345 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502346 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:282347
Kenneth Russelleb60cbd22017-12-05 07:54:282348 def test_ungenerated_output_files_are_caught(self):
2349 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2350 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:412351 LUCI_MILO_CFG,
2352 exceptions=NO_BAR_TEST_EXCEPTIONS)
Kenneth Russelleb60cbd22017-12-05 07:54:282353 fbb.files['chromium.test.json'] = (
2354 '\n' + COMPOSITION_WATERFALL_FILTERED_OUTPUT)
Stephen Martinis7eb8b612018-09-21 00:17:502355 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192356 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502357 joined_lines = ' '.join(fbb.printed_lines)
2358 self.assertRegexpMatches(
2359 joined_lines, 'Waterfall chromium.test did not have the following'
2360 ' expected contents:.*')
2361 self.assertRegexpMatches(joined_lines, '.*--- expected.*')
2362 self.assertRegexpMatches(joined_lines, '.*\+\+\+ current.*')
2363 fbb.printed_lines = []
2364 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282365
2366 def test_android_output_options(self):
2367 fbb = FakeBBGen(ANDROID_WATERFALL,
2368 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522369 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282370 fbb.files['chromium.test.json'] = ANDROID_WATERFALL_OUTPUT
2371 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502372 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282373
2374 def test_nonexistent_removal_raises(self):
2375 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2376 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412377 LUCI_MILO_CFG,
2378 exceptions=NONEXISTENT_REMOVAL)
Stephen Martinis7eb8b612018-09-21 00:17:502379 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2380 'The following nonexistent machines.*'):
2381 fbb.check_input_file_consistency(verbose=True)
2382 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282383
2384 def test_nonexistent_modification_raises(self):
2385 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2386 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:412387 LUCI_MILO_CFG,
2388 exceptions=NONEXISTENT_MODIFICATION)
Stephen Martinis7eb8b612018-09-21 00:17:502389 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2390 'The following nonexistent machines.*'):
2391 fbb.check_input_file_consistency(verbose=True)
2392 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282393
John Budorickedfe7f872018-01-23 15:27:222394 def test_waterfall_args(self):
2395 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2396 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522397 LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222398 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT
2399 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502400 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222401
Shenghua Zhangaba8bad2018-02-07 02:12:092402 def test_multi_dimension_output(self):
2403 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
2404 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522405 LUCI_MILO_CFG)
Shenghua Zhangaba8bad2018-02-07 02:12:092406 fbb.files['chromium.test.json'] = MULTI_DIMENSION_OUTPUT
2407 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502408 self.assertFalse(fbb.printed_lines)
Shenghua Zhangaba8bad2018-02-07 02:12:092409
Ben Pastenea9e583b2019-01-16 02:57:262410 def test_chromeos_trigger_script_output(self):
2411 fbb = FakeBBGen(FOO_CHROMEOS_TRIGGER_SCRIPT_WATERFALL,
2412 FOO_TEST_SUITE,
Ben Pastenea9e583b2019-01-16 02:57:262413 LUCI_MILO_CFG)
2414 fbb.files['chromium.test.json'] = CHROMEOS_TRIGGER_SCRIPT_OUTPUT
2415 fbb.check_output_file_consistency(verbose=True)
2416 self.assertFalse(fbb.printed_lines)
2417
Zhiling Huangbe008172018-03-08 19:13:112418 def test_relative_pyl_file_dir(self):
2419 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2420 REUSING_TEST_WITH_DIFFERENT_NAME,
Nodir Turakulovfce34292019-12-18 17:05:412421 LUCI_MILO_CFG,
2422 gn_isolate_map=GN_ISOLATE_MAP)
Zhiling Huangbe008172018-03-08 19:13:112423 fbb.args = argparse.Namespace(pyl_files_dir='relative/path/')
2424 for file_name in list(fbb.files):
Kenneth Russell78fd8702018-05-17 01:15:522425 if not 'luci-milo.cfg' in file_name:
2426 fbb.files[os.path.join('relative/path/', file_name)] = (
2427 fbb.files.pop(file_name))
Stephen Martinis7eb8b612018-09-21 00:17:502428 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112429 fbb.files['relative/path/chromium.test.json'] = VARIATION_GTEST_OUTPUT
2430 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502431 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112432
Nico Weberd18b8962018-05-16 19:39:382433 def test_nonexistent_bot_raises(self):
2434 fbb = FakeBBGen(UNKNOWN_BOT_GTESTS_WATERFALL,
2435 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522436 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382437 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502438 fbb.check_input_file_consistency(verbose=True)
2439 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382440
Stephen Martinis54d64ad2018-09-21 22:16:202441 def test_waterfalls_must_be_sorted(self):
2442 fbb = FakeBBGen(TEST_SUITE_SORTED_WATERFALL,
2443 TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202444 LUCI_MILO_CFG_WATERFALL_SORTING)
2445 fbb.check_input_file_consistency(verbose=True)
2446 self.assertFalse(fbb.printed_lines)
2447
2448 fbb = FakeBBGen(TEST_SUITE_UNSORTED_WATERFALL_1,
2449 TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202450 LUCI_MILO_CFG_WATERFALL_SORTING)
2451 with self.assertRaisesRegexp(
2452 generate_buildbot_json.BBGenErr,
2453 'The following files have invalid keys: waterfalls.pyl'):
2454 fbb.check_input_file_consistency(verbose=True)
2455 joined_lines = '\n'.join(fbb.printed_lines)
2456 self.assertRegexpMatches(
2457 joined_lines, '.*\+chromium\..*test.*')
2458 self.assertRegexpMatches(
2459 joined_lines, '.*\-chromium\..*test.*')
2460 fbb.printed_lines = []
2461 self.assertFalse(fbb.printed_lines)
2462
2463 fbb = FakeBBGen(TEST_SUITE_UNSORTED_WATERFALL_2,
2464 TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202465 LUCI_MILO_CFG_WATERFALL_SORTING)
2466 with self.assertRaisesRegexp(
2467 generate_buildbot_json.BBGenErr,
2468 'The following files have invalid keys: waterfalls.pyl'):
2469 fbb.check_input_file_consistency(verbose=True)
2470 joined_lines = ' '.join(fbb.printed_lines)
2471 self.assertRegexpMatches(
2472 joined_lines, '.*\+.*Fake Tester.*')
2473 self.assertRegexpMatches(
2474 joined_lines, '.*\-.*Fake Tester.*')
2475 fbb.printed_lines = []
2476 self.assertFalse(fbb.printed_lines)
2477
2478 def test_test_suite_exceptions_must_be_sorted(self):
2479 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2480 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412481 LUCI_MILO_CFG,
2482 exceptions=EXCEPTIONS_SORTED)
Stephen Martinis7eb8b612018-09-21 00:17:502483 fbb.check_input_file_consistency(verbose=True)
2484 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182485
Stephen Martinis54d64ad2018-09-21 22:16:202486 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2487 TEST_SUITE_SORTED,
Nodir Turakulovfce34292019-12-18 17:05:412488 LUCI_MILO_CFG,
2489 exceptions=EXCEPTIONS_UNSORTED)
Stephen Martinis54d64ad2018-09-21 22:16:202490 with self.assertRaises(generate_buildbot_json.BBGenErr):
2491 fbb.check_input_file_consistency(verbose=True)
2492 joined_lines = ' '.join(fbb.printed_lines)
2493 self.assertRegexpMatches(
2494 joined_lines, '.*\+suite_.*')
2495 self.assertRegexpMatches(
2496 joined_lines, '.*\-suite_.*')
2497 fbb.printed_lines = []
2498 self.assertFalse(fbb.printed_lines)
2499
2500 def test_test_suites_must_be_sorted(self):
2501 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2502 TEST_SUITE_SORTED,
Stephen Martinis54d64ad2018-09-21 22:16:202503 LUCI_MILO_CFG)
2504 fbb.check_input_file_consistency(verbose=True)
2505 self.assertFalse(fbb.printed_lines)
2506
2507 for unsorted in (
2508 TEST_SUITE_UNSORTED_1,
2509 TEST_SUITE_UNSORTED_2,
2510 TEST_SUITE_UNSORTED_3,
2511 ):
2512 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2513 unsorted,
Stephen Martinis54d64ad2018-09-21 22:16:202514 LUCI_MILO_CFG)
2515 with self.assertRaises(generate_buildbot_json.BBGenErr):
2516 fbb.check_input_file_consistency(verbose=True)
2517 joined_lines = ' '.join(fbb.printed_lines)
2518 self.assertRegexpMatches(
2519 joined_lines, '.*\+suite_.*')
2520 self.assertRegexpMatches(
2521 joined_lines, '.*\-suite_.*')
2522 fbb.printed_lines = []
2523 self.assertFalse(fbb.printed_lines)
2524
Stephen Martinis11672542018-10-29 18:17:212525
2526FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
2527[
2528 {
2529 'mixins': ['waterfall_mixin'],
2530 'name': 'chromium.test',
2531 'machines': {
2532 'Fake Tester': {
2533 'swarming': {},
2534 'test_suites': {
2535 'gtest_tests': 'foo_tests',
2536 },
2537 },
2538 },
2539 },
2540]
2541"""
2542
2543FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
2544[
2545 {
2546 'name': 'chromium.test',
2547 'machines': {
2548 'Fake Tester': {
2549 'mixins': ['builder_mixin'],
2550 'swarming': {},
2551 'test_suites': {
2552 'gtest_tests': 'foo_tests',
2553 },
2554 },
2555 },
2556 },
2557]
2558"""
2559
2560FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
2561[
2562 {
2563 'name': 'chromium.test',
2564 'machines': {
2565 'Fake Tester': {
2566 'mixins': ['random_mixin'],
2567 'swarming': {},
2568 'test_suites': {
2569 'gtest_tests': 'foo_tests',
2570 },
2571 },
2572 },
2573 },
2574]
2575"""
2576
2577FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
2578[
2579 {
2580 'name': 'chromium.test',
2581 'machines': {
2582 'Fake Tester': {
2583 'mixins': ['dimension_mixin'],
2584 'swarming': {},
2585 'test_suites': {
2586 'gtest_tests': 'foo_tests',
2587 },
2588 },
2589 },
2590 },
2591]
2592"""
2593
2594FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
2595[
2596 {
2597 'name': 'chromium.test',
2598 'machines': {
2599 'Fake Tester': {
2600 'mixins': ['dimension_mixin'],
2601 'os_type': 'win',
2602 'browser_config': 'release',
2603 'test_suites': {
2604 'gpu_telemetry_tests': 'foo_tests',
2605 },
2606 },
2607 },
2608 },
2609]
2610"""
2611
2612# Swarming mixins must be a list, a single string is not allowed.
2613FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
2614[
2615 {
2616 'name': 'chromium.test',
2617 'machines': {
2618 'Fake Tester': {
2619 'mixins': 'dimension_mixin',
2620 'swarming': {},
2621 'test_suites': {
2622 'gtest_tests': 'foo_tests',
2623 },
2624 },
2625 },
2626 },
2627]
2628"""
2629FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
2630[
2631 {
2632 'name': 'chromium.test',
2633 'machines': {
2634 'Fake Tester': {
2635 'mixins': ['nonexistant'],
2636 'swarming': {},
2637 'test_suites': {
2638 'gtest_tests': 'foo_tests',
2639 },
2640 },
2641 },
2642 },
2643]
2644"""
2645
2646FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
2647[
2648 {
2649 'mixins': ['waterfall_mixin'],
2650 'name': 'chromium.test',
2651 'machines': {
2652 'Fake Tester': {
2653 'swarming': {},
2654 'test_suites': {
2655 'gtest_tests': 'foo_tests',
2656 },
2657 },
2658 },
2659 },
2660]
2661"""
2662
2663FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
2664[
2665 {
2666 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
2667 'name': 'chromium.test',
2668 'machines': {
2669 'Fake Tester': {
2670 'swarming': {
2671 'dimension_sets': [
2672 {
2673 'kvm': '1',
2674 },
2675 ],
2676 },
2677 'test_suites': {
2678 'gtest_tests': 'foo_tests',
2679 },
2680 },
2681 },
2682 },
2683]
2684"""
2685
2686FOO_TEST_SUITE_WITH_MIXIN = """\
2687{
2688 'basic_suites': {
2689 'foo_tests': {
2690 'foo_test': {
2691 'swarming': {
2692 'dimension_sets': [
2693 {
2694 'integrity': 'high',
2695 }
2696 ],
2697 'expiration': 120,
2698 },
2699 'mixins': ['test_mixin'],
2700 },
2701 },
2702 },
2703}
2704"""
2705
2706# These mixins are invalid; if passed to check_input_file_consistency, they will
2707# fail. These are used for output file consistency checks.
2708SWARMING_MIXINS = """\
2709{
2710 'builder_mixin': {
2711 'swarming': {
2712 'value': 'builder',
2713 },
2714 },
2715 'dimension_mixin': {
2716 'swarming': {
2717 'dimensions': {
2718 'iama': 'mixin',
2719 },
2720 },
2721 },
2722 'random_mixin': {
2723 'value': 'random',
2724 },
2725 'test_mixin': {
2726 'swarming': {
2727 'value': 'test',
2728 },
2729 },
2730 'waterfall_mixin': {
2731 'swarming': {
2732 'value': 'waterfall',
2733 },
2734 },
2735}
2736"""
2737
Wezc0e835b702018-10-30 00:38:412738SWARMING_MIXINS_APPEND = """\
2739{
2740 'builder_mixin': {
2741 '$mixin_append': {
2742 'args': [ '--mixin-argument' ],
2743 },
2744 },
2745}
2746"""
2747
2748SWARMING_MIXINS_APPEND_NOT_LIST = """\
2749{
2750 'builder_mixin': {
2751 '$mixin_append': {
2752 'args': 'I am not a list',
2753 },
2754 },
2755}
2756"""
2757
2758SWARMING_MIXINS_APPEND_TO_SWARMING = """\
2759{
2760 'builder_mixin': {
2761 '$mixin_append': {
2762 'swarming': [ 'swarming!' ],
2763 },
2764 },
2765}
2766"""
2767
Stephen Martinis11672542018-10-29 18:17:212768SWARMING_MIXINS_DUPLICATED = """\
2769{
2770 'builder_mixin': {
2771 'value': 'builder',
2772 },
2773 'builder_mixin': {
2774 'value': 'builder',
2775 },
2776}
2777"""
2778
2779SWARMING_MIXINS_UNSORTED = """\
2780{
2781 'b_mixin': {
2782 'b': 'b',
2783 },
2784 'a_mixin': {
2785 'a': 'a',
2786 },
2787 'c_mixin': {
2788 'c': 'c',
2789 },
2790}
2791"""
2792
2793SWARMING_MIXINS_SORTED = """\
2794{
2795 'a_mixin': {
2796 'a': 'a',
2797 },
2798 'b_mixin': {
2799 'b': 'b',
2800 },
2801 'c_mixin': {
2802 'c': 'c',
2803 },
2804}
2805"""
2806
2807FOO_CTS_WATERFALL_MIXINS = """\
2808[
2809 {
2810 'name': 'chromium.test',
2811 'machines': {
2812 'Fake Tester': {
2813 'mixins': ['test_mixin'],
2814 'test_suites': {
2815 'cts_tests': 'foo_cts_tests',
2816 },
2817 },
2818 },
2819 },
2820]
2821"""
2822
2823WATERFALL_MIXIN_WATERFALL_OUTPUT = """\
2824{
2825 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2826 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2827 "Fake Tester": {
2828 "gtest_tests": [
2829 {
Stephen Martinisbc7b7772019-05-01 22:01:432830 "merge": {
2831 "args": [],
2832 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2833 },
Stephen Martinis11672542018-10-29 18:17:212834 "swarming": {
2835 "can_use_on_swarming_builders": true,
2836 "dimension_sets": [
2837 {
2838 "integrity": "high"
2839 }
2840 ],
2841 "expiration": 120,
2842 "value": "waterfall"
2843 },
2844 "test": "foo_test"
2845 }
2846 ]
2847 }
2848}
2849"""
2850
2851WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT = """\
2852{
2853 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2854 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2855 "Fake Tester": {
2856 "gtest_tests": [
2857 {
Stephen Martinisbc7b7772019-05-01 22:01:432858 "merge": {
2859 "args": [],
2860 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2861 },
Stephen Martinis11672542018-10-29 18:17:212862 "swarming": {
2863 "can_use_on_swarming_builders": true,
2864 "dimension_sets": [
2865 {
2866 "integrity": "high"
2867 }
2868 ],
2869 "expiration": 120,
2870 "value": "exception"
2871 },
2872 "test": "foo_test"
2873 }
2874 ]
2875 }
2876}
2877"""
2878
2879BUILDER_MIXIN_WATERFALL_OUTPUT = """\
2880{
2881 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2882 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2883 "Fake Tester": {
2884 "gtest_tests": [
2885 {
Stephen Martinisbc7b7772019-05-01 22:01:432886 "merge": {
2887 "args": [],
2888 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2889 },
Stephen Martinis11672542018-10-29 18:17:212890 "swarming": {
2891 "can_use_on_swarming_builders": true,
2892 "dimension_sets": [
2893 {
2894 "integrity": "high"
2895 }
2896 ],
2897 "expiration": 120,
2898 "value": "builder"
2899 },
2900 "test": "foo_test"
2901 }
2902 ]
2903 }
2904}
2905"""
2906
2907BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT = """\
2908{
2909 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2910 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2911 "Fake Tester": {
2912 "gtest_tests": [
2913 {
Stephen Martinisbc7b7772019-05-01 22:01:432914 "merge": {
2915 "args": [],
2916 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2917 },
Stephen Martinis11672542018-10-29 18:17:212918 "swarming": {
2919 "can_use_on_swarming_builders": true,
2920 "dimension_sets": [
2921 {
2922 "integrity": "high"
2923 }
2924 ],
2925 "expiration": 120
2926 },
2927 "test": "foo_test",
2928 "value": "random"
2929 }
2930 ]
2931 }
2932}
2933"""
2934
Wezc0e835b702018-10-30 00:38:412935BUILDER_MIXIN_APPEND_ARGS_WATERFALL_OUTPUT = """\
2936{
2937 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2938 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2939 "Fake Tester": {
2940 "gtest_tests": [
2941 {
2942 "args": [
2943 "--c_arg",
2944 "--mixin-argument"
2945 ],
Stephen Martinisbc7b7772019-05-01 22:01:432946 "merge": {
2947 "args": [],
2948 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2949 },
Wezc0e835b702018-10-30 00:38:412950 "swarming": {
2951 "can_use_on_swarming_builders": true
2952 },
2953 "test": "foo_test"
2954 }
2955 ]
2956 }
2957}
2958"""
2959
Stephen Martinis11672542018-10-29 18:17:212960TEST_MIXIN_WATERFALL_OUTPUT = """\
2961{
2962 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2963 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2964 "Fake Tester": {
2965 "gtest_tests": [
2966 {
Stephen Martinisbc7b7772019-05-01 22:01:432967 "merge": {
2968 "args": [],
2969 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2970 },
Stephen Martinis11672542018-10-29 18:17:212971 "swarming": {
2972 "can_use_on_swarming_builders": true,
2973 "dimension_sets": [
2974 {
2975 "integrity": "high",
2976 "kvm": "1"
2977 }
2978 ],
2979 "expiration": 120,
2980 "value": "test"
2981 },
2982 "test": "foo_test"
2983 }
2984 ]
2985 }
2986}
2987"""
2988
2989DIMENSIONS_MIXIN_WATERFALL_OUTPUT = """\
2990{
2991 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
2992 "AAAAA2 See generate_buildbot_json.py to make changes": {},
2993 "Fake Tester": {
2994 "gtest_tests": [
2995 {
Stephen Martinisbc7b7772019-05-01 22:01:432996 "merge": {
2997 "args": [],
2998 "script": "//testing/merge_scripts/standard_gtest_merge.py"
2999 },
Stephen Martinis11672542018-10-29 18:17:213000 "swarming": {
3001 "can_use_on_swarming_builders": true,
3002 "dimension_sets": [
3003 {
3004 "iama": "mixin",
3005 "integrity": "high"
3006 }
3007 ],
3008 "expiration": 120,
3009 "value": "test"
3010 },
3011 "test": "foo_test"
3012 }
3013 ]
3014 }
3015}
3016"""
3017
3018class MixinTests(unittest.TestCase):
3019 """Tests for the mixins feature."""
3020 def test_mixins_must_be_sorted(self):
3021 fbb = FakeBBGen(FOO_GTESTS_SORTING_MIXINS_WATERFALL,
3022 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413023 LUCI_MILO_CFG,
3024 mixins=SWARMING_MIXINS_SORTED)
Stephen Martinis11672542018-10-29 18:17:213025 fbb.check_input_file_consistency(verbose=True)
3026 self.assertFalse(fbb.printed_lines)
3027
3028 fbb = FakeBBGen(FOO_GTESTS_SORTING_MIXINS_WATERFALL,
3029 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413030 LUCI_MILO_CFG,
3031 mixins=SWARMING_MIXINS_UNSORTED)
Stephen Martinis11672542018-10-29 18:17:213032 with self.assertRaises(generate_buildbot_json.BBGenErr):
3033 fbb.check_input_file_consistency(verbose=True)
3034 joined_lines = ' '.join(fbb.printed_lines)
3035 self.assertRegexpMatches(
3036 joined_lines, '.*\+._mixin.*')
3037 self.assertRegexpMatches(
3038 joined_lines, '.*\-._mixin.*')
3039 fbb.printed_lines = []
3040 self.assertFalse(fbb.printed_lines)
3041
3042 def test_waterfall(self):
3043 fbb = FakeBBGen(FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
3044 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413045 LUCI_MILO_CFG,
3046 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213047 fbb.files['chromium.test.json'] = WATERFALL_MIXIN_WATERFALL_OUTPUT
3048 fbb.check_output_file_consistency(verbose=True)
3049 self.assertFalse(fbb.printed_lines)
3050
3051 def test_waterfall_exception_overrides(self):
3052 fbb = FakeBBGen(FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
3053 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413054 LUCI_MILO_CFG,
3055 exceptions=SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
3056 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213057 fbb.files['chromium.test.json'] = WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT
3058 fbb.check_output_file_consistency(verbose=True)
3059 self.assertFalse(fbb.printed_lines)
3060
3061 def test_builder(self):
3062 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
3063 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413064 LUCI_MILO_CFG,
3065 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213066 fbb.files['chromium.test.json'] = BUILDER_MIXIN_WATERFALL_OUTPUT
3067 fbb.check_output_file_consistency(verbose=True)
3068 self.assertFalse(fbb.printed_lines)
3069
3070 def test_builder_non_swarming(self):
3071 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
3072 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413073 LUCI_MILO_CFG,
3074 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213075 fbb.files['chromium.test.json'] = (
3076 BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT)
3077 fbb.check_output_file_consistency(verbose=True)
3078 self.assertFalse(fbb.printed_lines)
3079
3080 def test_test_suite(self):
3081 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
3082 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413083 LUCI_MILO_CFG,
3084 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213085 fbb.files['chromium.test.json'] = TEST_MIXIN_WATERFALL_OUTPUT
3086 fbb.check_output_file_consistency(verbose=True)
3087 self.assertFalse(fbb.printed_lines)
3088
3089 def test_dimension(self):
3090 fbb = FakeBBGen(FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
3091 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413092 LUCI_MILO_CFG,
3093 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213094 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
3095 fbb.check_output_file_consistency(verbose=True)
3096 self.assertFalse(fbb.printed_lines)
3097
3098 def test_dimension_gpu(self):
3099 fbb = FakeBBGen(FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
3100 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413101 LUCI_MILO_CFG,
3102 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213103 fbb.files['chromium.test.json'] = GPU_DIMENSIONS_WATERFALL_OUTPUT
3104 fbb.check_output_file_consistency(verbose=True)
3105 self.assertFalse(fbb.printed_lines)
3106
3107 def test_unreferenced(self):
3108 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
3109 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413110 LUCI_MILO_CFG,
3111 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213112 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
3113 '.*mixins are unreferenced.*'):
3114 fbb.check_input_file_consistency(verbose=True)
3115 self.assertFalse(fbb.printed_lines)
3116
3117 def test_cts(self):
3118 fbb = FakeBBGen(FOO_CTS_WATERFALL_MIXINS,
Nodir Turakulovfce34292019-12-18 17:05:413119 FOO_CTS_SUITE,
Stephen Martinis11672542018-10-29 18:17:213120 LUCI_MILO_CFG)
3121 fbb.files['chromium.test.json'] = CTS_OUTPUT
3122 fbb.check_input_file_consistency(verbose=True)
3123 fbb.check_output_file_consistency(verbose=True)
3124 self.assertFalse(fbb.printed_lines)
3125
3126 def test_unused(self):
3127 fbb = FakeBBGen(FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
3128 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413129 LUCI_MILO_CFG,
3130 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213131 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
3132 with self.assertRaises(generate_buildbot_json.BBGenErr):
3133 fbb.check_output_file_consistency(verbose=True)
3134 self.assertFalse(fbb.printed_lines)
3135
3136 def test_list(self):
3137 fbb = FakeBBGen(FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
3138 FOO_TEST_SUITE_WITH_MIXIN,
Nodir Turakulovfce34292019-12-18 17:05:413139 LUCI_MILO_CFG,
3140 mixins=SWARMING_MIXINS)
Stephen Martinis11672542018-10-29 18:17:213141 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
3142 with self.assertRaises(generate_buildbot_json.BBGenErr):
3143 fbb.check_output_file_consistency(verbose=True)
3144 self.assertFalse(fbb.printed_lines)
3145
3146
3147 def test_no_duplicate_keys(self):
Stephen Martinis54d64ad2018-09-21 22:16:203148 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
3149 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413150 LUCI_MILO_CFG,
3151 mixins=SWARMING_MIXINS_DUPLICATED)
Stephen Martinis54d64ad2018-09-21 22:16:203152 with self.assertRaisesRegexp(
3153 generate_buildbot_json.BBGenErr,
Stephen Martinisb72f6d22018-10-04 23:29:013154 'The following files have invalid keys: mixins.pyl'):
Stephen Martinis54d64ad2018-09-21 22:16:203155 fbb.check_input_file_consistency(verbose=True)
3156 joined_lines = ' '.join(fbb.printed_lines)
3157 self.assertRegexpMatches(
3158 joined_lines, 'Key .* is duplicated')
3159 fbb.printed_lines = []
3160 self.assertFalse(fbb.printed_lines)
3161
3162 def test_type_assert_printing_help(self):
3163 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
3164 TEST_SUITES_SYNTAX_ERROR,
Stephen Martinis54d64ad2018-09-21 22:16:203165 LUCI_MILO_CFG)
3166 with self.assertRaisesRegexp(
3167 generate_buildbot_json.BBGenErr,
3168 'Invalid \.pyl file \'test_suites.pyl\'.*'):
3169 fbb.check_input_file_consistency(verbose=True)
3170 self.assertEquals(
3171 fbb.printed_lines, [
3172 '== test_suites.pyl ==',
3173 '<snip>',
3174 '1 {',
3175 "2 'basic_suites': {",
3176 '--------------------------------------------------------------------'
3177 '------------',
3178 '3 3: {',
3179 '-------^------------------------------------------------------------'
3180 '------------',
3181 "4 'suite_c': {},",
3182 '5 },',
3183 '<snip>',
3184 ])
3185
Wezc0e835b702018-10-30 00:38:413186 def test_mixin_append_args(self):
3187 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
3188 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413189 LUCI_MILO_CFG,
3190 mixins=SWARMING_MIXINS_APPEND)
Wezc0e835b702018-10-30 00:38:413191 fbb.files['chromium.test.json'] = BUILDER_MIXIN_APPEND_ARGS_WATERFALL_OUTPUT
3192 fbb.check_output_file_consistency(verbose=True)
3193 self.assertFalse(fbb.printed_lines)
3194
3195 def test_mixin_append_mixin_field_not_list(self):
3196 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
3197 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:413198 LUCI_MILO_CFG,
3199 mixins=SWARMING_MIXINS_APPEND_NOT_LIST)
Wezc0e835b702018-10-30 00:38:413200 with self.assertRaisesRegexp(
3201 generate_buildbot_json.BBGenErr,
3202 'Key "args" in \$mixin_append must be a list.'):
3203 fbb.check_output_file_consistency(verbose=True)
3204 self.assertFalse(fbb.printed_lines)
3205
3206 def test_mixin_append_test_field_not_list(self):
3207 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
3208 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:413209 LUCI_MILO_CFG,
3210 mixins=SWARMING_MIXINS_APPEND_TO_SWARMING)
Wezc0e835b702018-10-30 00:38:413211 with self.assertRaisesRegexp(
3212 generate_buildbot_json.BBGenErr,
3213 'Cannot apply \$mixin_append to non-list "swarming".'):
3214 fbb.check_output_file_consistency(verbose=True)
3215 self.assertFalse(fbb.printed_lines)
Stephen Martinis54d64ad2018-09-21 22:16:203216
Karen Qiane24b7ee2019-02-12 23:37:063217TEST_SUITE_WITH_PARAMS = """\
3218{
3219 'basic_suites': {
3220 'bar_tests': {
3221 'bar_test': {
3222 'args': ['--no-xvfb'],
3223 'swarming': {
3224 'dimension_sets': [
3225 {
3226 'device_os': 'NMF26U'
3227 }
3228 ],
3229 },
3230 'should_retry_with_patch': False,
3231 'name': 'bar_test'
3232 },
3233 'bar_test_test': {
3234 'swarming': {
3235 'dimension_sets': [
3236 {
3237 'kvm': '1'
3238 }
3239 ],
3240 'hard_timeout': 1000
3241 },
3242 'should_retry_with_patch': True
3243 }
3244 },
3245 'foo_tests': {
3246 'foo_test_empty': {},
3247 'foo_test': {
3248 'args': [
3249 '--jobs=1',
3250 '--verbose'
3251 ],
3252 'swarming': {
3253 'dimension_sets': [
3254 {
3255 'device_os': 'MMB29Q'
3256 }
3257 ],
3258 'hard_timeout': 1800
3259 }
3260 },
3261 'foo_test_test': {
3262 'swarming': {
3263 },
3264 'name': 'pls'
3265 },
3266 },
3267 },
3268 'compound_suites': {
3269 'composition_tests': [
3270 'foo_tests',
3271 'bar_tests',
3272 ],
3273 },
3274}
3275"""
3276TEST_QUERY_BOTS_OUTPUT = {
3277 "Fake Android M Tester": {
3278 "gtest_tests": [
3279 {
3280 "test": "foo_test",
Stephen Martinisbc7b7772019-05-01 22:01:433281 "merge": {
3282 "args": [],
3283 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3284 },
Karen Qiane24b7ee2019-02-12 23:37:063285 "swarming": {
3286 "can_use_on_swarming_builders": False
3287 }
3288 }
3289 ]
3290 },
3291 "Fake Android L Tester": {
3292 "gtest_tests": [
3293 {
3294 "test": "foo_test",
3295 "args": [
3296 "--gs-results-bucket=chromium-result-details",
3297 "--recover-devices"
3298 ],
Stephen Martinisbc7b7772019-05-01 22:01:433299 "merge": {
3300 "args": [],
3301 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3302 },
Karen Qiane24b7ee2019-02-12 23:37:063303 "swarming": {
3304 "cipd_packages": [
3305 {
3306 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3307 "location": "bin",
3308 "revision":
3309 "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3310 }
3311 ],
3312 "dimension_sets":[
3313 {
Ben Pastenee012aea42019-05-14 22:32:283314 "device_os": "LMY41U",
3315 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223316 "device_type": "hammerhead",
3317 'os': 'Android'
Karen Qiane24b7ee2019-02-12 23:37:063318 }
3319 ],
3320 "can_use_on_swarming_builders": True
3321 }
3322 }
3323 ]
3324 },
3325 "Fake Android K Tester": {
3326 "additional_compile_targets": ["bar_test"],
3327 "gtest_tests": [
3328 {
3329 "test": "foo_test",
3330 "args": [
3331 "--gs-results-bucket=chromium-result-details",
3332 "--recover-devices"
3333 ],
Stephen Martinisbc7b7772019-05-01 22:01:433334 "merge": {
3335 "args": [],
3336 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3337 },
Karen Qiane24b7ee2019-02-12 23:37:063338 "swarming": {
3339 "cipd_packages": [
3340 {
3341 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3342 "location": "bin",
3343 "revision":
3344 "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3345 }
3346 ],
3347 "dimension_sets": [
3348 {
3349 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:283350 "device_os_type": "userdebug",
Ben Pastened15aa8a2019-05-16 16:59:223351 "device_type": "hammerhead",
3352 "os": "Android",
Karen Qiane24b7ee2019-02-12 23:37:063353 }
3354 ],
3355 "can_use_on_swarming_builders": True,
3356 "output_links": [
3357 {
3358 "link": ["https://luci-logdog.appspot.com/v/?s",
3359 "=android%2Fswarming%2Flogcats%2F",
3360 "${TASK_ID}%2F%2B%2Funified_logcats"],
3361 "name": "shard #${SHARD_INDEX} logcats"
3362 }
3363 ]
3364 }
3365 }
3366 ]
3367 },
3368 "Android Builder": {
3369 "additional_compile_targets": ["bar_test"]
3370 }
3371}
3372TEST_QUERY_BOTS_TESTS_OUTPUT = {
3373 "Fake Android M Tester": [
3374 {
Stephen Martinisbc7b7772019-05-01 22:01:433375 "merge": {
3376 "args": [],
3377 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3378 },
Karen Qiane24b7ee2019-02-12 23:37:063379 "test": "foo_test",
3380 "swarming": {
3381 "can_use_on_swarming_builders": False
3382 }
3383 }
3384 ],
3385 "Fake Android L Tester": [
3386 {
3387 "test": "foo_test",
3388 "args": [
3389 "--gs-results-bucket=chromium-result-details",
3390 "--recover-devices"
3391 ],
Stephen Martinisbc7b7772019-05-01 22:01:433392 "merge": {
3393 "args": [],
3394 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3395 },
Karen Qiane24b7ee2019-02-12 23:37:063396 "swarming": {
3397 "cipd_packages": [
3398 {
3399 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3400 "location": "bin",
3401 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3402 }
3403 ],
3404 "dimension_sets": [
3405 {
Ben Pastenee012aea42019-05-14 22:32:283406 "device_os": "LMY41U",
3407 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223408 "device_type": "hammerhead",
3409 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063410 }
3411 ],
3412 "can_use_on_swarming_builders": True
3413 }
3414 }
3415 ],
3416 "Android Builder": [],
3417 "Fake Android K Tester": [
3418 {
3419 "test": "foo_test",
3420 "args": [
3421 "--gs-results-bucket=chromium-result-details",
3422 "--recover-devices"
3423 ],
Stephen Martinisbc7b7772019-05-01 22:01:433424 "merge": {
3425 "args": [],
3426 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3427 },
Karen Qiane24b7ee2019-02-12 23:37:063428 "swarming": {
3429 "cipd_packages": [
3430 {
3431 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3432 "location": "bin",
3433 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3434 }
3435 ],
3436 "dimension_sets": [
3437 {
3438 "device_os": "KTU84P",
Ben Pastenee012aea42019-05-14 22:32:283439 "device_os_type": "userdebug",
Ben Pastened15aa8a2019-05-16 16:59:223440 "device_type": "hammerhead",
3441 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063442 }
3443 ],
3444 "can_use_on_swarming_builders": True,
3445 "output_links": [
3446 {
3447 "link": [
3448 "https://luci-logdog.appspot.com/v/?s",
3449 "=android%2Fswarming%2Flogcats%2F",
3450 "${TASK_ID}%2F%2B%2Funified_logcats"
3451 ],
3452 "name": "shard #${SHARD_INDEX} logcats"
3453 }
3454 ]
3455 }
3456 }
3457 ]
3458}
3459
3460TEST_QUERY_BOT_OUTPUT = {
3461 "additional_compile_targets": ["bar_test"],
3462 "gtest_tests": [
3463 {
Stephen Martinisbc7b7772019-05-01 22:01:433464 "test": "foo_test",
3465 "args": [
Karen Qiane24b7ee2019-02-12 23:37:063466 "--gs-results-bucket=chromium-result-details",
3467 "--recover-devices"
Stephen Martinisbc7b7772019-05-01 22:01:433468 ],
3469 "merge": {
3470 "args": [],
3471 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3472 },
3473 "swarming": {
Karen Qiane24b7ee2019-02-12 23:37:063474 "cipd_packages": [
3475 {
3476 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3477 "location": "bin",
3478 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3479 }
3480 ],
3481 "dimension_sets": [
3482 {
3483 "device_os": "KTU84P",
Ben Pastened15aa8a2019-05-16 16:59:223484 "device_os_type": "userdebug",
3485 "device_type": "hammerhead",
3486 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063487 }
3488 ],
3489 "can_use_on_swarming_builders": True,
3490 "output_links": [
3491 {
3492 "link": ["https://luci-logdog.appspot.com/v/?s",
3493 "=android%2Fswarming%2Flogcats%2F",
3494 "${TASK_ID}%2F%2B%2Funified_logcats"
3495 ],
3496 "name": "shard #${SHARD_INDEX} logcats"
3497 }
3498 ]
3499 }
3500 }
3501 ]
3502}
3503TEST_QUERY_BOT_TESTS_OUTPUT = [
3504 {
3505 "test": "foo_test",
3506 "args": [
3507 "--gs-results-bucket=chromium-result-details",
3508 "--recover-devices"
3509 ],
Stephen Martinisbc7b7772019-05-01 22:01:433510 "merge": {
3511 "args": [],
3512 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3513 },
Karen Qiane24b7ee2019-02-12 23:37:063514 "swarming": {
3515 "cipd_packages": [
3516 {
3517 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
3518 "location": "bin",
3519 "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
3520 }
3521 ],
3522 "dimension_sets": [
3523 {
Ben Pastenee012aea42019-05-14 22:32:283524 "device_os": "LMY41U",
3525 "device_os_type": "user",
Ben Pastened15aa8a2019-05-16 16:59:223526 "device_type": "hammerhead",
3527 "os": "Android"
Karen Qiane24b7ee2019-02-12 23:37:063528 }
3529 ],
3530 "can_use_on_swarming_builders": True
3531 }
3532 }
3533]
3534
3535TEST_QUERY_TESTS_OUTPUT = {
3536 "bar_test": {},
3537 "foo_test": {}
3538}
3539
3540TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT = ["foo_test"]
3541
3542TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT = ["bar_test"]
3543
3544TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT = ["bar_test_test"]
3545
3546TEST_QUERY_TESTS_PARAMS_OUTPUT = ['bar_test_test']
3547
3548TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT = ['bar_test']
3549
3550TEST_QUERY_TEST_OUTPUT = {}
3551
3552TEST_QUERY_TEST_BOTS_OUTPUT = [
3553 "Fake Android M Tester",
3554 "Fake Android L Tester",
3555 "Fake Android K Tester"
3556]
3557
3558TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT = ['Fake Tester']
3559
3560TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT = []
3561
3562class QueryTests(unittest.TestCase):
3563 """Tests for the query feature."""
3564 def test_query_bots(self):
3565 fbb = FakeBBGen(ANDROID_WATERFALL,
3566 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413567 LUCI_MILO_CFG,
3568 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063569 fbb.args = argparse.Namespace(query='bots', check=False,
3570 pyl_files_dir=None, json=None,
3571 waterfall_filters = [])
3572 fbb.query(fbb.args)
3573 query_json = json.loads("".join(fbb.printed_lines))
3574 self.assertEqual(query_json, TEST_QUERY_BOTS_OUTPUT)
3575
3576 def test_query_bots_invalid(self):
3577 fbb = FakeBBGen(ANDROID_WATERFALL,
3578 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413579 LUCI_MILO_CFG,
3580 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063581 fbb.args = argparse.Namespace(query='bots/blah/blah', check=False,
3582 pyl_files_dir=None, json=None,
3583 waterfall_filters = [])
3584 with self.assertRaises(SystemExit) as cm:
3585 fbb.query(fbb.args)
3586 self.assertEqual(cm.exception.code, 1)
3587 self.assertTrue(fbb.printed_lines)
3588
3589 def test_query_bots_json(self):
3590 fbb = FakeBBGen(ANDROID_WATERFALL,
3591 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413592 LUCI_MILO_CFG,
3593 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063594 fbb.args = argparse.Namespace(query='bots', check=False,
3595 pyl_files_dir=None, json='result.json',
3596 waterfall_filters = [])
3597 fbb.query(fbb.args)
3598 self.assertFalse(fbb.printed_lines)
3599
3600 def test_query_bots_tests(self):
3601 fbb = FakeBBGen(ANDROID_WATERFALL,
3602 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413603 LUCI_MILO_CFG,
3604 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063605 fbb.args = argparse.Namespace(query='bots/tests', check=False,
3606 pyl_files_dir=None, json=None,
3607 waterfall_filters = [])
3608 fbb.query(fbb.args)
3609 query_json = json.loads("".join(fbb.printed_lines))
3610 self.assertEqual(query_json, TEST_QUERY_BOTS_TESTS_OUTPUT)
3611
3612 def test_query_invalid_bots_tests(self):
3613 fbb = FakeBBGen(ANDROID_WATERFALL,
3614 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413615 LUCI_MILO_CFG,
3616 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063617 fbb.args = argparse.Namespace(query='bots/tdfjdk', check=False,
3618 pyl_files_dir=None, json=None,
3619 waterfall_filters = [])
3620 with self.assertRaises(SystemExit) as cm:
3621 fbb.query(fbb.args)
3622 self.assertEqual(cm.exception.code, 1)
3623 self.assertTrue(fbb.printed_lines)
3624
3625 def test_query_bot(self):
3626 fbb = FakeBBGen(ANDROID_WATERFALL,
3627 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413628 LUCI_MILO_CFG,
3629 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063630 fbb.args = argparse.Namespace(query='bot/Fake Android K Tester',
3631 check=False, pyl_files_dir=None, json=None,
3632 waterfall_filters = [])
3633 fbb.query(fbb.args)
3634 query_json = json.loads("".join(fbb.printed_lines))
Stephen Martinisf50047062019-05-06 22:26:173635 self.maxDiff = None
Karen Qiane24b7ee2019-02-12 23:37:063636 self.assertEqual(query_json, TEST_QUERY_BOT_OUTPUT)
3637
3638 def test_query_bot_invalid_id(self):
3639 fbb = FakeBBGen(ANDROID_WATERFALL,
3640 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413641 LUCI_MILO_CFG,
3642 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063643 fbb.args = argparse.Namespace(query='bot/bot1', check=False,
3644 pyl_files_dir=None, json=None,
3645 waterfall_filters = [])
3646 with self.assertRaises(SystemExit) as cm:
3647 fbb.query(fbb.args)
3648 self.assertEqual(cm.exception.code, 1)
3649 self.assertTrue(fbb.printed_lines)
3650
3651 def test_query_bot_invalid_query_too_many(self):
3652 fbb = FakeBBGen(ANDROID_WATERFALL,
3653 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413654 LUCI_MILO_CFG,
3655 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063656 fbb.args = argparse.Namespace(query='bot/Fake Android K Tester/blah/blah',
3657 check=False, pyl_files_dir=None, json=None,
3658 waterfall_filters = [])
3659 with self.assertRaises(SystemExit) as cm:
3660 fbb.query(fbb.args)
3661 self.assertEqual(cm.exception.code, 1)
3662 self.assertTrue(fbb.printed_lines)
3663
3664 def test_query_bot_invalid_query_no_tests(self):
3665 fbb = FakeBBGen(ANDROID_WATERFALL,
3666 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413667 LUCI_MILO_CFG,
3668 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063669 fbb.args = argparse.Namespace(query='bot/Fake Android K Tester/blahs',
3670 check=False, pyl_files_dir=None, json=None,
3671 waterfall_filters = [])
3672 with self.assertRaises(SystemExit) as cm:
3673 fbb.query(fbb.args)
3674 self.assertEqual(cm.exception.code, 1)
3675 self.assertTrue(fbb.printed_lines)
3676
3677 def test_query_bot_tests(self):
3678 fbb = FakeBBGen(ANDROID_WATERFALL,
3679 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413680 LUCI_MILO_CFG,
3681 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063682 fbb.args = argparse.Namespace(query='bot/Fake Android L Tester/tests',
3683 check=False, pyl_files_dir=None, json=None,
3684 waterfall_filters = [])
3685 fbb.query(fbb.args)
3686 query_json = json.loads("".join(fbb.printed_lines))
3687 self.assertEqual(query_json, TEST_QUERY_BOT_TESTS_OUTPUT)
3688
3689 def test_query_tests(self):
3690 fbb = FakeBBGen(ANDROID_WATERFALL,
3691 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413692 LUCI_MILO_CFG,
3693 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063694 fbb.args = argparse.Namespace(query='tests', check=False,
3695 pyl_files_dir=None, json=None,
3696 waterfall_filters = [])
3697 fbb.query(fbb.args)
3698 query_json = json.loads("".join(fbb.printed_lines))
3699 self.assertEqual(query_json, TEST_QUERY_TESTS_OUTPUT)
3700
3701 def test_query_tests_invalid(self):
3702 fbb = FakeBBGen(ANDROID_WATERFALL,
3703 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413704 LUCI_MILO_CFG,
3705 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063706 fbb.args = argparse.Namespace(query='tests/blah/blah', check=False,
3707 pyl_files_dir=None, json=None,
3708 waterfall_filters = [])
3709 with self.assertRaises(SystemExit) as cm:
3710 fbb.query(fbb.args)
3711 self.assertEqual(cm.exception.code, 1)
3712 self.assertTrue(fbb.printed_lines)
3713
3714 def test_query_tests_multiple_params(self):
3715 fbb = FakeBBGen(ANDROID_WATERFALL,
3716 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413717 LUCI_MILO_CFG,
3718 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063719 fbb.args = argparse.Namespace(query='tests/--jobs=1&--verbose', check=False,
3720 pyl_files_dir=None, json=None,
3721 waterfall_filters = [])
3722 fbb.query(fbb.args)
3723 query_json = json.loads("".join(fbb.printed_lines))
3724 self.assertEqual(query_json, TEST_QUERY_TESTS_MULTIPLE_PARAMS_OUTPUT)
3725
3726 def test_query_tests_invalid_params(self):
3727 fbb = FakeBBGen(ANDROID_WATERFALL,
3728 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413729 LUCI_MILO_CFG,
3730 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063731 fbb.args = argparse.Namespace(query='tests/device_os?', check=False,
3732 pyl_files_dir=None, json=None,
3733 waterfall_filters = [])
3734 with self.assertRaises(SystemExit) as cm:
3735 fbb.query(fbb.args)
3736 self.assertEqual(cm.exception.code, 1)
3737 self.assertTrue(fbb.printed_lines)
3738
3739 def test_query_tests_dimension_params(self):
3740 fbb = FakeBBGen(ANDROID_WATERFALL,
3741 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413742 LUCI_MILO_CFG,
3743 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063744 fbb.args = argparse.Namespace(query='tests/device_os:NMF26U',
3745 check=False, pyl_files_dir=None,
3746 json=None, waterfall_filters = [])
3747 fbb.query(fbb.args)
3748 query_json = json.loads("".join(fbb.printed_lines))
3749 self.assertEqual(query_json, TEST_QUERY_TESTS_DIMENSION_PARAMS_OUTPUT)
3750
3751 def test_query_tests_swarming_params(self):
3752 fbb = FakeBBGen(ANDROID_WATERFALL,
3753 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413754 LUCI_MILO_CFG,
3755 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063756 fbb.args = argparse.Namespace(query='tests/hard_timeout:1000',
3757 check=False, pyl_files_dir=None,
3758 json=None, waterfall_filters = [])
3759 fbb.query(fbb.args)
3760 query_json = json.loads("".join(fbb.printed_lines))
3761 self.assertEqual(query_json, TEST_QUERY_TESTS_SWARMING_PARAMS_OUTPUT)
3762
3763 def test_query_tests_params(self):
3764 fbb = FakeBBGen(ANDROID_WATERFALL,
3765 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413766 LUCI_MILO_CFG,
3767 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063768 fbb.args = argparse.Namespace(query='tests/should_retry_with_patch:true',
3769 check=False, pyl_files_dir=None,
3770 json=None, waterfall_filters = [])
3771 fbb.query(fbb.args)
3772 query_json = json.loads("".join(fbb.printed_lines))
3773 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_OUTPUT)
3774
3775 def test_query_tests_params_false(self):
3776 fbb = FakeBBGen(ANDROID_WATERFALL,
3777 TEST_SUITE_WITH_PARAMS,
Nodir Turakulovfce34292019-12-18 17:05:413778 LUCI_MILO_CFG,
3779 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063780 fbb.args = argparse.Namespace(query='tests/should_retry_with_patch:false',
3781 check=False, pyl_files_dir=None,
3782 json=None, waterfall_filters = [])
3783 fbb.query(fbb.args)
3784 query_json = json.loads("".join(fbb.printed_lines))
3785 self.assertEqual(query_json, TEST_QUERY_TESTS_PARAMS_FALSE_OUTPUT)
3786
3787 def test_query_test(self):
3788 fbb = FakeBBGen(ANDROID_WATERFALL,
3789 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413790 LUCI_MILO_CFG,
3791 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063792 fbb.args = argparse.Namespace(query='test/foo_test', check=False,
3793 pyl_files_dir=None, json=None,
3794 waterfall_filters = [])
3795 fbb.query(fbb.args)
3796 query_json = json.loads("".join(fbb.printed_lines))
3797 self.assertEqual(query_json, TEST_QUERY_TEST_OUTPUT)
3798
3799 def test_query_test_invalid_id(self):
3800 fbb = FakeBBGen(ANDROID_WATERFALL,
3801 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413802 LUCI_MILO_CFG,
3803 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063804 fbb.args = argparse.Namespace(query='test/foo_foo', check=False,
3805 pyl_files_dir=None, json=None,
3806 waterfall_filters = [])
3807 with self.assertRaises(SystemExit) as cm:
3808 fbb.query(fbb.args)
3809 self.assertEqual(cm.exception.code, 1)
3810 self.assertTrue(fbb.printed_lines)
3811
3812 def test_query_test_invalid_length(self):
3813 fbb = FakeBBGen(ANDROID_WATERFALL,
3814 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413815 LUCI_MILO_CFG,
3816 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063817 fbb.args = argparse.Namespace(query='test/foo_tests/foo/foo', check=False,
3818 pyl_files_dir=None, json=None,
3819 waterfall_filters = [])
3820 with self.assertRaises(SystemExit) as cm:
3821 fbb.query(fbb.args)
3822 self.assertEqual(cm.exception.code, 1)
3823 self.assertTrue(fbb.printed_lines)
3824
3825 def test_query_test_bots(self):
3826 fbb = FakeBBGen(ANDROID_WATERFALL,
3827 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413828 LUCI_MILO_CFG,
3829 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063830 fbb.args = argparse.Namespace(query='test/foo_test/bots', check=False,
3831 pyl_files_dir=None, json=None,
3832 waterfall_filters = [])
3833 fbb.query(fbb.args)
3834 query_json = json.loads("".join(fbb.printed_lines))
3835 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_OUTPUT)
3836
3837 def test_query_test_bots_isolated_scripts(self):
3838 fbb = FakeBBGen(FOO_ISOLATED_SCRIPTS_WATERFALL,
3839 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413840 LUCI_MILO_CFG,
3841 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063842 fbb.args = argparse.Namespace(query='test/foo_test/bots', check=False,
3843 pyl_files_dir=None, json=None,
3844 waterfall_filters = [])
3845 fbb.query(fbb.args)
3846 query_json = json.loads("".join(fbb.printed_lines))
3847 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_ISOLATED_SCRIPTS_OUTPUT)
3848
3849 def test_query_test_bots_invalid(self):
3850 fbb = FakeBBGen(ANDROID_WATERFALL,
3851 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413852 LUCI_MILO_CFG,
3853 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063854 fbb.args = argparse.Namespace(query='test/foo_tests/foo', check=False,
3855 pyl_files_dir=None, json=None,
3856 waterfall_filters = [])
3857 with self.assertRaises(SystemExit) as cm:
3858 fbb.query(fbb.args)
3859 self.assertEqual(cm.exception.code, 1)
3860 self.assertTrue(fbb.printed_lines)
3861
3862 def test_query_test_bots_no_bots(self):
3863 fbb = FakeBBGen(ANDROID_WATERFALL,
3864 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413865 LUCI_MILO_CFG,
3866 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063867 fbb.args = argparse.Namespace(query='test/bar_tests/bots', check=False,
3868 pyl_files_dir=None, json=None,
3869 waterfall_filters = [])
3870 fbb.query(fbb.args)
3871 query_json = json.loads("".join(fbb.printed_lines))
3872 self.assertEqual(query_json, TEST_QUERY_TEST_BOTS_NO_BOTS_OUTPUT)
3873
3874 def test_query_invalid(self):
3875 fbb = FakeBBGen(ANDROID_WATERFALL,
3876 GOOD_COMPOSITION_TEST_SUITES,
Nodir Turakulovfce34292019-12-18 17:05:413877 LUCI_MILO_CFG,
3878 mixins=SWARMING_MIXINS_SORTED)
Karen Qiane24b7ee2019-02-12 23:37:063879 fbb.args = argparse.Namespace(query='foo', check=False,
3880 pyl_files_dir=None, json=None,
3881 waterfall_filters = [])
3882 with self.assertRaises(SystemExit) as cm:
3883 fbb.query(fbb.args)
3884 self.assertEqual(cm.exception.code, 1)
3885 self.assertTrue(fbb.printed_lines)
3886
Brian Sheedye6ea0ee2019-07-11 02:54:373887
3888FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES = """\
3889{
3890 'basic_suites': {
3891 'foo_tests': {
3892 'foo_test': {
3893 'args': [
3894 '--enable-features',
3895 'Foo,Bar',
3896 ],
3897 },
3898 },
3899 },
3900}
3901"""
3902
3903
3904FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE = """\
3905{
3906 'foo_test': {
3907 'replacements': {
3908 'Fake Tester': {
3909 'args': {
3910 '--c_arg': None,
3911 },
3912 },
3913 },
3914 },
3915}
3916"""
3917
3918
3919FOO_TEST_REPLACEMENTS_REMOVE_VALUE = """\
3920{
3921 'foo_test': {
3922 'replacements': {
3923 'Fake Tester': {
3924 'args': {
3925 '--enable-features': None,
3926 },
3927 },
3928 },
3929 },
3930}
3931"""
3932
3933
3934FOO_TEST_REPLACEMENTS_REPLACE_VALUE = """\
3935{
3936 'foo_test': {
3937 'replacements': {
3938 'Fake Tester': {
3939 'args': {
3940 '--enable-features': 'Bar,Baz',
3941 },
3942 },
3943 },
3944 },
3945}
3946"""
3947
3948
3949FOO_TEST_REPLACEMENTS_INVALID_KEY = """\
3950{
3951 'foo_test': {
3952 'replacements': {
3953 'Fake Tester': {
3954 'invalid': {
3955 '--enable-features': 'Bar,Baz',
3956 },
3957 },
3958 },
3959 },
3960}
3961"""
3962
3963
3964REPLACEMENTS_REMOVE_OUTPUT = """\
3965{
3966 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3967 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3968 "Fake Tester": {
3969 "gtest_tests": [
3970 {
3971 "args": [],
3972 "merge": {
3973 "args": [],
3974 "script": "//testing/merge_scripts/standard_gtest_merge.py"
3975 },
3976 "swarming": {
3977 "can_use_on_swarming_builders": true,
3978 "dimension_sets": [
3979 {
3980 "kvm": "1"
3981 }
3982 ]
3983 },
3984 "test": "foo_test"
3985 }
3986 ]
3987 }
3988}
3989"""
3990
3991REPLACEMENTS_VALUE_OUTPUT = """\
3992{
3993 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
3994 "AAAAA2 See generate_buildbot_json.py to make changes": {},
3995 "Fake Tester": {
3996 "gtest_tests": [
3997 {
3998 "args": [
3999 "--enable-features=Bar,Baz"
4000 ],
4001 "merge": {
4002 "args": [],
4003 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4004 },
4005 "swarming": {
4006 "can_use_on_swarming_builders": true,
4007 "dimension_sets": [
4008 {
4009 "kvm": "1"
4010 }
4011 ]
4012 },
4013 "test": "foo_test"
4014 }
4015 ]
4016 }
4017}
4018"""
4019
4020REPLACEMENTS_VALUE_SEPARATE_ENTRIES_OUTPUT = """\
4021{
4022 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4023 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4024 "Fake Tester": {
4025 "gtest_tests": [
4026 {
4027 "args": [
4028 "--enable-features",
4029 "Bar,Baz"
4030 ],
4031 "merge": {
4032 "args": [],
4033 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4034 },
4035 "swarming": {
4036 "can_use_on_swarming_builders": true,
4037 "dimension_sets": [
4038 {
4039 "kvm": "1"
4040 }
4041 ]
4042 },
4043 "test": "foo_test"
4044 }
4045 ]
4046 }
4047}
4048"""
4049
4050
4051class ReplacementTests(unittest.TestCase):
4052 """Tests for the arg replacement feature."""
4053 def test_replacement_valid_remove_no_value(self):
4054 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4055 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:414056 LUCI_MILO_CFG,
4057 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_NO_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374058 fbb.files['chromium.test.json'] = REPLACEMENTS_REMOVE_OUTPUT
4059 fbb.check_output_file_consistency(verbose=True)
4060 self.assertFalse(fbb.printed_lines)
4061
4062 def test_replacement_valid_remove_value(self):
4063 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4064 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:414065 LUCI_MILO_CFG,
4066 exceptions=FOO_TEST_REPLACEMENTS_REMOVE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374067 fbb.files['chromium.test.json'] = REPLACEMENTS_REMOVE_OUTPUT
4068 fbb.check_output_file_consistency(verbose=True)
4069 self.assertFalse(fbb.printed_lines)
4070
4071 def test_replacement_valid_replace_value(self):
4072 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4073 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Nodir Turakulovfce34292019-12-18 17:05:414074 LUCI_MILO_CFG,
4075 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374076 fbb.files['chromium.test.json'] = REPLACEMENTS_VALUE_OUTPUT
4077 fbb.check_output_file_consistency(verbose=True)
4078 self.assertFalse(fbb.printed_lines)
4079
4080 def test_replacement_valid_replace_value_separate_entries(self):
4081 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4082 FOO_TEST_SUITE_WITH_ENABLE_FEATURES_SEPARATE_ENTRIES,
Nodir Turakulovfce34292019-12-18 17:05:414083 LUCI_MILO_CFG,
4084 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374085 fbb.files['chromium.test.json'] = REPLACEMENTS_VALUE_SEPARATE_ENTRIES_OUTPUT
4086 fbb.check_output_file_consistency(verbose=True)
4087 self.assertFalse(fbb.printed_lines)
4088
4089 def test_replacement_invalid_key_not_valid(self):
4090 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4091 FOO_TEST_SUITE,
Nodir Turakulovfce34292019-12-18 17:05:414092 LUCI_MILO_CFG,
4093 exceptions=FOO_TEST_REPLACEMENTS_INVALID_KEY)
Brian Sheedye6ea0ee2019-07-11 02:54:374094 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4095 'Given replacement key *'):
4096 fbb.check_output_file_consistency(verbose=True)
4097
4098 def test_replacement_invalid_key_not_found(self):
4099 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
4100 FOO_TEST_SUITE_WITH_ARGS,
Nodir Turakulovfce34292019-12-18 17:05:414101 LUCI_MILO_CFG,
4102 exceptions=FOO_TEST_REPLACEMENTS_REPLACE_VALUE)
Brian Sheedye6ea0ee2019-07-11 02:54:374103 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4104 'Could not find *'):
4105 fbb.check_output_file_consistency(verbose=True)
4106
Jeff Yoon8154e582019-12-03 23:30:014107
4108# Matrix compound composition test suites
4109
4110MATRIX_COMPOUND_EMPTY = """\
4111{
4112 'basic_suites': {
4113 'bar_tests': {
4114 'bar_test': {},
4115 },
4116 'foo_tests': {
4117 'foo_test': {},
4118 },
4119 },
4120 'matrix_compound_suites': {
4121 'matrix_tests': {
4122 'foo_tests': {},
4123 'bar_tests': {},
4124 },
4125 },
4126}
4127"""
4128
4129MATRIX_COMPOUND_SWARMING_SET = """\
4130{
4131 'basic_suites': {
4132 'foo_tests': {
4133 'foo_test': {},
4134 },
4135 },
4136 'matrix_compound_suites': {
4137 'matrix_tests': {
4138 'foo_tests': {
4139 'swarming': {
4140 'dimension_sets': [
4141 {
4142 'foo': 'bar',
4143 },
4144 ],
4145 },
4146 },
4147 },
4148 },
4149}
4150"""
4151
4152MATRIX_COMPOUND_DIMENSION_SET_MERGE = """\
4153{
4154 'basic_suites': {
4155 'foo_tests': {
4156 'foo_test': {
4157 'swarming': {
4158 'dimension_sets': [
4159 {
4160 'hello': 'world',
4161 },
4162 ],
4163 },
4164 },
4165 },
4166 },
4167 'matrix_compound_suites': {
4168 'matrix_tests': {
4169 'foo_tests': {
4170 'swarming': {
4171 'dimension_sets': [
4172 {
4173 'foo': 'bar',
4174 },
4175 ],
4176 },
4177 },
4178 },
4179 },
4180}
4181"""
4182
4183MATRIX_BASIC_DIMENSION_SET_LARGER = """\
4184{
4185 'basic_suites': {
4186 'foo_tests': {
4187 'foo_test': {
4188 'swarming': {
4189 'dimension_sets': [
4190 {
4191 'hello': 'world',
4192 },
4193 {
4194 'random': 'dimension',
4195 },
4196 ],
4197 },
4198 },
4199 },
4200 },
4201 'matrix_compound_suites': {
4202 'matrix_tests': {
4203 'foo_tests': {
4204 'swarming': {
4205 'dimension_sets': [
4206 {
4207 'foo': 'bar',
4208 }
4209 ],
4210 },
4211 },
4212 },
4213 },
4214}
4215"""
4216
4217MATRIX_MISMATCHED_SWARMING_LENGTH = """\
4218{
4219 'basic_suites': {
4220 'foo_tests': {
4221 'foo_test': {
4222 'swarming': {
4223 'dimension_sets': [
4224 {
4225 'hello': 'world',
4226 }
4227 ],
4228 },
4229 },
4230 },
4231 },
4232 'matrix_compound_suites': {
4233 'matrix_tests': {
4234 'foo_tests': {
4235 'swarming': {
4236 'dimension_sets': [
4237 {
4238 'foo': 'bar',
4239 },
4240 {
4241 'random': 'dimension',
4242 },
4243 ],
4244 },
4245 },
4246 },
4247 },
4248}
4249"""
4250
4251MATRIX_OTHER_ARGS = """\
4252{
4253 'basic_suites': {
4254 'foo_tests': {
4255 'foo_test': {},
4256 },
4257 },
4258 'matrix_compound_suites': {
4259 'matrix_tests': {
4260 'foo_tests': {
4261 'basic_argument': 'arg1',
4262 'mixins': ['random_mixin']
4263 },
4264 },
4265 },
4266}
4267"""
4268
4269MATRIX_REF_NONEXISTENT = """\
4270{
4271 'basic_suites': {
4272 'foo_tests': {
4273 'foo_test': {},
4274 },
4275 },
4276 'matrix_compound_suites': {
4277 'matrix_tests': {
4278 'bar_test': {},
4279 },
4280 },
4281}
4282"""
4283
4284MATRIX_COMPOSITION_REF_COMPOSITION = """\
4285{
4286 'basic_suites': {
4287 'foo_tests': {
4288 'foo_test': {},
4289 },
4290 },
4291 'compound_suites': {
4292 'sample_composition': {
4293 'foo_tests': {},
4294 },
4295 },
4296 'matrix_compound_suites': {
4297 'matrix_tests': {
4298 'sample_composition': {},
4299 },
4300 },
4301}
4302"""
4303
4304MATRIX_COMPOSITION_REF_MATRIX = """\
4305{
4306 'basic_suites': {
4307 'foo_tests': {
4308 'foo_test': {},
4309 },
4310 },
4311 'matrix_compound_suites': {
4312 'a_test': {
4313 'foo_tests': {},
4314 },
4315 'matrix_tests': {
4316 'a_test': {},
4317 },
4318 },
4319}
4320"""
4321
4322
4323# # Dictionary composition test suite outputs
4324
4325MATRIX_COMPOUND_EMPTY_OUTPUT = """\
4326{
4327 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4328 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4329 "Fake Tester": {
4330 "gtest_tests": [
4331 {
4332 "merge": {
4333 "args": [],
4334 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4335 },
4336 "swarming": {
4337 "can_use_on_swarming_builders": true
4338 },
4339 "test": "bar_test"
4340 },
4341 {
4342 "merge": {
4343 "args": [],
4344 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4345 },
4346 "swarming": {
4347 "can_use_on_swarming_builders": true
4348 },
4349 "test": "foo_test"
4350 }
4351 ]
4352 }
4353}
4354"""
4355
4356MATRIX_COMPOUND_SWARMING_SET_OUTPUT = """\
4357{
4358 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4359 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4360 "Fake Tester": {
4361 "gtest_tests": [
4362 {
4363 "merge": {
4364 "args": [],
4365 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4366 },
4367 "swarming": {
4368 "can_use_on_swarming_builders": true,
4369 "dimension_sets": [
4370 {
4371 "foo": "bar"
4372 }
4373 ]
4374 },
4375 "test": "foo_test"
4376 }
4377 ]
4378 }
4379}
4380"""
4381
4382MATRIX_COMPOUND_SWARMING_MERGE_OUTPUT = """\
4383{
4384 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4385 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4386 "Fake Tester": {
4387 "gtest_tests": [
4388 {
4389 "merge": {
4390 "args": [],
4391 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4392 },
4393 "swarming": {
4394 "can_use_on_swarming_builders": true,
4395 "dimension_sets": [
4396 {
4397 "foo": "bar",
4398 "hello": "world"
4399 }
4400 ]
4401 },
4402 "test": "foo_test"
4403 }
4404 ]
4405 }
4406}
4407"""
4408
4409MATRIX_DIFFERENT_SIZE_MERGE_OUTPUT = """\
4410{
4411 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4412 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4413 "Fake Tester": {
4414 "gtest_tests": [
4415 {
4416 "merge": {
4417 "args": [],
4418 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4419 },
4420 "swarming": {
4421 "can_use_on_swarming_builders": true,
4422 "dimension_sets": [
4423 {
4424 "foo": "bar",
4425 "hello": "world"
4426 },
4427 {
4428 "random": "dimension"
4429 }
4430 ]
4431 },
4432 "test": "foo_test"
4433 }
4434 ]
4435 }
4436}
4437"""
4438
4439MATRIX_OTHER_ARGS_OUTPUT = """\
4440{
4441 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
4442 "AAAAA2 See generate_buildbot_json.py to make changes": {},
4443 "Fake Tester": {
4444 "gtest_tests": [
4445 {
4446 "basic_argument": "arg1",
4447 "merge": {
4448 "args": [],
4449 "script": "//testing/merge_scripts/standard_gtest_merge.py"
4450 },
4451 "swarming": {
4452 "can_use_on_swarming_builders": true
4453 },
4454 "test": "foo_test",
4455 "value": "random"
4456 }
4457 ]
4458 }
4459}
4460"""
4461
4462
4463class DictionaryCompositionTests(unittest.TestCase):
4464
4465 def test_good_structure_no_configs(self):
4466 """
4467 Tests matrix compound test suite structure with no configs,
4468 no conflicts and no bad references
4469 """
4470 fbb = FakeBBGen(
4471 MATRIX_GTEST_SUITE_WATERFALL,
4472 MATRIX_COMPOUND_EMPTY,
Nodir Turakulovfce34292019-12-18 17:05:414473 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014474 fbb.files['chromium.test.json'] = MATRIX_COMPOUND_EMPTY_OUTPUT
4475 fbb.check_output_file_consistency(verbose=True)
4476 self.assertFalse(fbb.printed_lines)
4477
4478 def test_good_structure_swarming_composite_only(self):
4479 """
4480 Tests matrix compound test suite structure with swarming configs,
4481 only defined at matrix
4482 """
4483 fbb = FakeBBGen(
4484 MATRIX_GTEST_SUITE_WATERFALL,
4485 MATRIX_COMPOUND_SWARMING_SET,
Nodir Turakulovfce34292019-12-18 17:05:414486 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014487 fbb.files['chromium.test.json'] = MATRIX_COMPOUND_SWARMING_SET_OUTPUT
4488 fbb.check_output_file_consistency(verbose=True)
4489 self.assertFalse(fbb.printed_lines)
4490
4491 def test_swarming_dimension_set_merge(self):
4492 """
4493 Tests matrix compound test suite structure with swarming dimension set
4494 merge.
4495 """
4496 fbb = FakeBBGen(
4497 MATRIX_GTEST_SUITE_WATERFALL,
4498 MATRIX_COMPOUND_DIMENSION_SET_MERGE,
Nodir Turakulovfce34292019-12-18 17:05:414499 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014500 fbb.files['chromium.test.json'] = MATRIX_COMPOUND_SWARMING_MERGE_OUTPUT
4501 fbb.check_output_file_consistency(verbose=True)
4502 self.assertFalse(fbb.printed_lines)
4503
4504 def test_mismatched_swarming_length_okay(self):
4505 """
4506 Swarming dimension set length mismatch test. Basic set > composition set
4507 """
4508 fbb = FakeBBGen(
4509 MATRIX_GTEST_SUITE_WATERFALL,
4510 MATRIX_BASIC_DIMENSION_SET_LARGER,
Nodir Turakulovfce34292019-12-18 17:05:414511 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014512 fbb.files['chromium.test.json'] = MATRIX_DIFFERENT_SIZE_MERGE_OUTPUT
4513 fbb.check_output_file_consistency(verbose=True)
4514 self.assertFalse(fbb.printed_lines)
4515
4516 def test_mismatched_swarming_length(self):
4517 """
4518 Swarming dimension set length mismatch test. Composition set > basic set
4519 """
4520 fbb = FakeBBGen(
4521 MATRIX_GTEST_SUITE_WATERFALL,
4522 MATRIX_MISMATCHED_SWARMING_LENGTH,
Nodir Turakulovfce34292019-12-18 17:05:414523 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014524 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4525 'Error merging lists by key *'):
4526 fbb.check_output_file_consistency(verbose=True)
4527
4528 def test_other_args(self):
4529 """
4530 Ensures other args, such as mixins, are simply passed to the test definition
4531 Mixins would be applied accordingly after being copied over
4532 """
4533 fbb = FakeBBGen(
4534 MATRIX_GTEST_SUITE_WATERFALL,
4535 MATRIX_OTHER_ARGS,
Jeff Yoon8154e582019-12-03 23:30:014536 LUCI_MILO_CFG,
Nodir Turakulovfce34292019-12-18 17:05:414537 mixins=SWARMING_MIXINS,
4538 )
Jeff Yoon8154e582019-12-03 23:30:014539 fbb.files['chromium.test.json'] = MATRIX_OTHER_ARGS_OUTPUT
4540 fbb.check_output_file_consistency(verbose=True)
4541 self.assertFalse(fbb.printed_lines)
4542
4543 def test_noexistent_ref(self):
4544 """
4545 Test referencing a non-existent basic test suite
4546 """
4547 fbb = FakeBBGen(
4548 MATRIX_GTEST_SUITE_WATERFALL,
4549 MATRIX_REF_NONEXISTENT,
Nodir Turakulovfce34292019-12-18 17:05:414550 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014551 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4552 'Unable to find reference to *'):
4553 fbb.check_output_file_consistency(verbose=True)
4554
4555 def test_ref_to_composition(self):
4556 """
4557 Test referencing another composition test suite
4558 """
4559 fbb = FakeBBGen(
4560 MATRIX_GTEST_SUITE_WATERFALL,
4561 MATRIX_COMPOSITION_REF_COMPOSITION,
Nodir Turakulovfce34292019-12-18 17:05:414562 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014563 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4564 'matrix_compound_suites may not refer to other *'):
4565 fbb.check_output_file_consistency(verbose=True)
4566
4567 def test_ref_to_matrix(self):
4568 """
4569 Test referencing another matrix test suite
4570 """
4571 fbb = FakeBBGen(
4572 MATRIX_GTEST_SUITE_WATERFALL,
4573 MATRIX_COMPOSITION_REF_MATRIX,
Nodir Turakulovfce34292019-12-18 17:05:414574 LUCI_MILO_CFG)
Jeff Yoon8154e582019-12-03 23:30:014575 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
4576 'matrix_compound_suites may not refer to other *'):
4577 fbb.check_output_file_consistency(verbose=True)
4578
4579
Kenneth Russelleb60cbd22017-12-05 07:54:284580if __name__ == '__main__':
4581 unittest.main()