blob: 09da7b92fc428c6de943bdb3d7908a4b0433e251 [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
11
12import generate_buildbot_json
13
14
15class FakeBBGen(generate_buildbot_json.BBJSONGenerator):
Stephen Martinisb72f6d22018-10-04 23:29:0116 def __init__(self, waterfalls, test_suites, exceptions, mixins,
Stephen Martinisb6a50492018-09-12 23:59:3217 luci_milo_cfg):
Kenneth Russelleb60cbd22017-12-05 07:54:2818 super(FakeBBGen, self).__init__()
John Budorickc12abd12018-08-14 19:37:4319 infra_config_dir = os.path.abspath(
20 os.path.join(os.path.dirname(__file__), '..', '..',
21 'infra', 'config', 'global'))
22 luci_milo_cfg_path = os.path.join(infra_config_dir, 'luci-milo.cfg')
23 luci_milo_dev_cfg_path = os.path.join(infra_config_dir, 'luci-milo-dev.cfg')
Kenneth Russelleb60cbd22017-12-05 07:54:2824 self.files = {
25 'waterfalls.pyl': waterfalls,
26 'test_suites.pyl': test_suites,
27 'test_suite_exceptions.pyl': exceptions,
Stephen Martinisb72f6d22018-10-04 23:29:0128 'mixins.pyl': mixins,
John Budorickc12abd12018-08-14 19:37:4329 luci_milo_cfg_path: luci_milo_cfg,
30 luci_milo_dev_cfg_path: '',
Kenneth Russelleb60cbd22017-12-05 07:54:2831 }
Stephen Martinis7eb8b612018-09-21 00:17:5032 self.printed_lines = []
33
34 def print_line(self, line):
35 self.printed_lines.append(line)
Kenneth Russelleb60cbd22017-12-05 07:54:2836
37 def read_file(self, relative_path):
38 return self.files[relative_path]
39
40 def write_file(self, relative_path, contents):
41 self.files[relative_path] = contents
42
Kenneth Russell73c3bd8b2018-10-19 22:30:1943 # pragma pylint: disable=arguments-differ
44 def check_output_file_consistency(self, verbose=False, dump=True):
45 try:
46 super(FakeBBGen, self).check_output_file_consistency(verbose)
47 except generate_buildbot_json.BBGenErr:
48 if verbose and dump:
49 # Assume we want to see the difference in the waterfalls'
50 # generated output to make it easier to rebaseline the test.
51 for line in self.printed_lines:
52 print line
53 raise
54# pragma pylint: enable=arguments-differ
55
Kenneth Russelleb60cbd22017-12-05 07:54:2856
57FOO_GTESTS_WATERFALL = """\
58[
59 {
60 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:4361 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:2862 'Fake Tester': {
63 'swarming': {
64 'dimension_sets': [
65 {
66 'kvm': '1',
67 },
68 ],
69 },
70 'test_suites': {
71 'gtest_tests': 'foo_tests',
72 },
73 },
74 },
75 },
76]
77"""
78
Kenneth Russell650995a2018-05-03 21:17:0179FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
80[
81 {
82 'name': 'chromium.test',
83 'machines': {
84 'Fake Tester': {
85 'test_suites': {
86 'gtest_tests': 'foo_tests',
87 },
88 'args': [
89 '--enable-features=Baz',
90 ],
91 },
92 },
93 },
94]
95"""
96
Shenghua Zhangaba8bad2018-02-07 02:12:0997FOO_GTESTS_MULTI_DIMENSION_WATERFALL = """\
98[
99 {
100 'name': 'chromium.test',
101 'machines': {
102 'Fake Tester': {
103 'swarming': {
104 'dimension_sets': [
105 {
106 "gpu": "none",
107 "os": "1",
108 },
109 ],
110 },
111 'use_multi_dimension_trigger_script': True,
112 'alternate_swarming_dimensions': [
113 {
114 "gpu": "none",
115 "os": "2",
116 },
117 ],
118 'test_suites': {
119 'gtest_tests': 'foo_tests',
120 },
121 },
122 },
123 },
124]
125"""
126
Stephen Martinisb6a50492018-09-12 23:59:32127FOO_GTESTS_WATERFALL_MIXIN_WATERFALL = """\
128[
129 {
Stephen Martinisb72f6d22018-10-04 23:29:01130 'mixins': ['waterfall_mixin'],
Stephen Martinisb6a50492018-09-12 23:59:32131 'name': 'chromium.test',
132 'machines': {
133 'Fake Tester': {
134 'swarming': {},
135 'test_suites': {
136 'gtest_tests': 'foo_tests',
137 },
138 },
139 },
140 },
141]
142"""
143
144FOO_GTESTS_BUILDER_MIXIN_WATERFALL = """\
145[
146 {
147 'name': 'chromium.test',
148 'machines': {
149 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01150 'mixins': ['builder_mixin'],
151 'swarming': {},
152 'test_suites': {
153 'gtest_tests': 'foo_tests',
154 },
155 },
156 },
157 },
158]
159"""
160
161FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL = """\
162[
163 {
164 'name': 'chromium.test',
165 'machines': {
166 'Fake Tester': {
167 'mixins': ['random_mixin'],
Stephen Martinisb6a50492018-09-12 23:59:32168 'swarming': {},
169 'test_suites': {
170 'gtest_tests': 'foo_tests',
171 },
172 },
173 },
174 },
175]
176"""
177
178FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL = """\
179[
180 {
181 'name': 'chromium.test',
182 'machines': {
183 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01184 'mixins': ['dimension_mixin'],
Stephen Martinisb6a50492018-09-12 23:59:32185 'swarming': {},
186 'test_suites': {
187 'gtest_tests': 'foo_tests',
188 },
189 },
190 },
191 },
192]
193"""
194
Stephen Martinis2a0667022018-09-25 22:31:14195FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL = """\
196[
197 {
198 'name': 'chromium.test',
199 'machines': {
200 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01201 'mixins': ['dimension_mixin'],
Stephen Martinis2a0667022018-09-25 22:31:14202 'os_type': 'win',
203 'browser_config': 'release',
204 'test_suites': {
205 'gpu_telemetry_tests': 'foo_tests',
206 },
207 },
208 },
209 },
210]
211"""
212
Stephen Martinisb6a50492018-09-12 23:59:32213# Swarming mixins must be a list, a single string is not allowed.
214FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL = """\
215[
216 {
217 'name': 'chromium.test',
218 'machines': {
219 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01220 'mixins': 'dimension_mixin',
Stephen Martinisb6a50492018-09-12 23:59:32221 'swarming': {},
222 'test_suites': {
223 'gtest_tests': 'foo_tests',
224 },
225 },
226 },
227 },
228]
229"""
230FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL = """\
231[
232 {
233 'name': 'chromium.test',
234 'machines': {
235 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01236 'mixins': ['nonexistant'],
Stephen Martinisb6a50492018-09-12 23:59:32237 'swarming': {},
238 'test_suites': {
239 'gtest_tests': 'foo_tests',
240 },
241 },
242 },
243 },
244]
245"""
246
247FOO_GTESTS_TEST_MIXIN_WATERFALL = """\
248[
249 {
Stephen Martinisb72f6d22018-10-04 23:29:01250 'mixins': ['waterfall_mixin'],
Stephen Martinisb6a50492018-09-12 23:59:32251 'name': 'chromium.test',
252 'machines': {
253 'Fake Tester': {
254 'swarming': {},
255 'test_suites': {
256 'gtest_tests': 'foo_tests',
257 },
258 },
259 },
260 },
261]
262"""
263
Stephen Martinisf83893722018-09-19 00:02:18264FOO_GTESTS_SORTING_MIXINS_WATERFALL = """\
265[
266 {
Stephen Martinisb72f6d22018-10-04 23:29:01267 'mixins': ['a_mixin', 'b_mixin', 'c_mixin'],
Stephen Martinisf83893722018-09-19 00:02:18268 'name': 'chromium.test',
269 'machines': {
270 'Fake Tester': {
271 'swarming': {
272 'dimension_sets': [
273 {
274 'kvm': '1',
275 },
276 ],
277 },
278 'test_suites': {
279 'gtest_tests': 'foo_tests',
280 },
281 },
282 },
283 },
284]
285"""
286
Kenneth Russell8a386d42018-06-02 09:48:01287FOO_LINUX_GTESTS_WATERFALL = """\
288[
289 {
290 'name': 'chromium.test',
291 'machines': {
292 'Fake Tester': {
293 'os_type': 'linux',
294 'test_suites': {
295 'gtest_tests': 'foo_tests',
296 },
297 },
298 },
299 },
300]
301"""
302
Kenneth Russelleb60cbd22017-12-05 07:54:28303COMPOSITION_GTEST_SUITE_WATERFALL = """\
304[
305 {
306 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43307 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28308 'Fake Tester': {
309 'test_suites': {
310 'gtest_tests': 'composition_tests',
311 },
312 },
313 },
314 },
315]
316"""
317
John Budorickedfe7f872018-01-23 15:27:22318COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
319[
320 {
321 'name': 'chromium.test',
322 'machines': {
323 'Fake Tester': {
324 'test_suites': {
325 'gtest_tests': 'composition_tests',
326 },
327 'args': [
328 '--this-is-an-argument',
329 ],
330 },
331 },
332 },
333]
334"""
335
Kenneth Russelleb60cbd22017-12-05 07:54:28336FOO_ISOLATED_SCRIPTS_WATERFALL = """\
337[
338 {
339 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43340 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28341 'Fake Tester': {
342 'test_suites': {
343 'isolated_scripts': 'composition_tests',
344 },
345 },
346 },
347 },
348]
349"""
350
351FOO_SCRIPT_WATERFALL = """\
352[
353 {
354 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43355 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28356 'Fake Tester': {
357 'test_suites': {
358 'scripts': 'foo_scripts',
359 },
360 },
361 },
362 },
363]
364"""
365
366FOO_JUNIT_WATERFALL = """\
367[
368 {
369 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43370 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28371 'Fake Tester': {
372 'test_suites': {
373 'junit_tests': 'composition_tests',
374 },
375 },
376 },
377 },
378]
379"""
380
381FOO_CTS_WATERFALL = """\
382[
383 {
384 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43385 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28386 'Fake Tester': {
387 'test_suites': {
388 'cts_tests': 'foo_cts_tests',
389 },
390 },
391 },
392 },
393]
394"""
395
Stephen Martinis7eb8b612018-09-21 00:17:50396FOO_CTS_WATERFALL_MIXINS = """\
397[
398 {
399 'name': 'chromium.test',
400 'machines': {
401 'Fake Tester': {
Stephen Martinisb72f6d22018-10-04 23:29:01402 'mixins': ['test_mixin'],
Stephen Martinis7eb8b612018-09-21 00:17:50403 'test_suites': {
404 'cts_tests': 'foo_cts_tests',
405 },
406 },
407 },
408 },
409]
410"""
411
Kenneth Russelleb60cbd22017-12-05 07:54:28412FOO_INSTRUMENTATION_TEST_WATERFALL = """\
413[
414 {
415 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43416 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28417 'Fake Tester': {
418 'test_suites': {
419 'instrumentation_tests': 'composition_tests',
420 },
421 },
422 },
423 },
424]
425"""
426
Kenneth Russell8a386d42018-06-02 09:48:01427FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
428[
429 {
430 'name': 'chromium.test',
431 'machines': {
432 'Fake Tester': {
433 'os_type': 'win',
434 'browser_config': 'release',
435 'swarming': {
436 'dimension_sets': [
437 {
438 'gpu': '10de:1cb3',
439 },
440 ],
441 },
442 'test_suites': {
443 'gpu_telemetry_tests': 'composition_tests',
444 },
445 },
446 },
447 },
448]
449"""
450
Kenneth Russelleb60cbd22017-12-05 07:54:28451UNKNOWN_TEST_SUITE_WATERFALL = """\
452[
453 {
454 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43455 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28456 'Fake Tester': {
457 'test_suites': {
458 'gtest_tests': 'baz_tests',
459 },
460 },
461 },
462 },
463]
464"""
465
466UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
467[
468 {
469 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43470 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28471 'Fake Tester': {
472 'test_suites': {
473 'gtest_tests': 'foo_tests',
474 'foo_test_type': 'foo_tests',
475 },
476 },
477 },
478 },
479]
480"""
481
482ANDROID_WATERFALL = """\
483[
484 {
485 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43486 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28487 'Android Builder': {
488 'additional_compile_targets': [
489 'bar_test',
490 ],
491 },
Kenneth Russelleb60cbd22017-12-05 07:54:28492 'Fake Android K Tester': {
493 'additional_compile_targets': [
494 'bar_test',
495 ],
496 'swarming': {
497 'dimension_sets': [
498 {
499 'device_os': 'KTU84P',
500 'device_type': 'hammerhead',
501 },
502 ],
503 },
504 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49505 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28506 'test_suites': {
507 'gtest_tests': 'foo_tests',
508 },
509 },
510 'Fake Android L Tester': {
511 'swarming': {
512 'dimension_sets': [
513 {
514 'device_os': 'KTU84P',
515 'device_type': 'hammerhead',
516 },
517 ],
518 },
519 'os_type': 'android',
520 'skip_merge_script': True,
521 'skip_output_links': True,
522 'test_suites': {
523 'gtest_tests': 'foo_tests',
524 },
525 },
526 'Fake Android M Tester': {
527 'swarming': {
528 'dimension_sets': [
529 {
530 'device_os': 'MMB29Q',
531 'device_type': 'bullhead',
532 },
533 ],
534 },
535 'os_type': 'android',
536 'use_swarming': False,
537 'test_suites': {
538 'gtest_tests': 'foo_tests',
539 },
540 },
541 },
542 },
543]
544"""
545
Nico Weberd18b8962018-05-16 19:39:38546UNKNOWN_BOT_GTESTS_WATERFALL = """\
547[
548 {
549 'name': 'chromium.test',
550 'machines': {
551 'Unknown Bot': {
552 'test_suites': {
553 'gtest_tests': 'foo_tests',
554 },
555 },
556 },
557 },
558]
559"""
560
Kenneth Russelleb60cbd22017-12-05 07:54:28561FOO_TEST_SUITE = """\
562{
Stephen Martinis54d64ad2018-09-21 22:16:20563 'basic_suites': {
564 'foo_tests': {
565 'foo_test': {
566 'swarming': {
567 'dimension_sets': [
568 {
569 'integrity': 'high',
570 }
571 ],
572 'expiration': 120,
573 },
Kenneth Russelleb60cbd22017-12-05 07:54:28574 },
575 },
576 },
577}
578"""
579
Kenneth Russell8ceeabf2017-12-11 17:53:28580FOO_TEST_SUITE_WITH_ARGS = """\
581{
Stephen Martinis54d64ad2018-09-21 22:16:20582 'basic_suites': {
583 'foo_tests': {
584 'foo_test': {
585 'args': [
586 '--c_arg',
587 ],
588 },
Kenneth Russell8ceeabf2017-12-11 17:53:28589 },
590 },
591}
592"""
593
Kenneth Russell8a386d42018-06-02 09:48:01594FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
595{
Stephen Martinis54d64ad2018-09-21 22:16:20596 'basic_suites': {
597 'foo_tests': {
598 'foo_test': {
599 'linux_args': [
600 '--no-xvfb',
601 ],
602 },
Kenneth Russell8a386d42018-06-02 09:48:01603 },
604 },
605}
606"""
607
Kenneth Russell650995a2018-05-03 21:17:01608FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
609{
Stephen Martinis54d64ad2018-09-21 22:16:20610 'basic_suites': {
611 'foo_tests': {
612 'foo_test': {
613 'args': [
614 '--enable-features=Foo,Bar',
615 ],
616 },
Kenneth Russell650995a2018-05-03 21:17:01617 },
618 },
619}
620"""
621
Stephen Martinisb6a50492018-09-12 23:59:32622FOO_TEST_SUITE_WITH_MIXIN = """\
623{
Stephen Martinis54d64ad2018-09-21 22:16:20624 'basic_suites': {
625 'foo_tests': {
626 'foo_test': {
627 'swarming': {
628 'dimension_sets': [
629 {
630 'integrity': 'high',
631 }
632 ],
633 'expiration': 120,
634 },
Stephen Martinisb72f6d22018-10-04 23:29:01635 'mixins': ['test_mixin'],
Stephen Martinisb6a50492018-09-12 23:59:32636 },
Stephen Martinisb6a50492018-09-12 23:59:32637 },
638 },
639}
640"""
641
Kenneth Russelleb60cbd22017-12-05 07:54:28642FOO_SCRIPT_SUITE = """\
643{
Stephen Martinis54d64ad2018-09-21 22:16:20644 'basic_suites': {
645 'foo_scripts': {
646 'foo_test': {
647 'script': 'foo.py',
648 },
649 'bar_test': {
650 'script': 'bar.py',
651 },
Kenneth Russelleb60cbd22017-12-05 07:54:28652 },
653 },
654}
655"""
656
657FOO_CTS_SUITE = """\
658{
Stephen Martinis54d64ad2018-09-21 22:16:20659 'basic_suites': {
660 'foo_cts_tests': {
661 'arch': 'arm64',
662 'platform': 'L',
663 },
Kenneth Russelleb60cbd22017-12-05 07:54:28664 },
665}
666"""
667
668GOOD_COMPOSITION_TEST_SUITES = """\
669{
Stephen Martinis54d64ad2018-09-21 22:16:20670 'basic_suites': {
671 'bar_tests': {
672 'bar_test': {},
673 },
674 'foo_tests': {
675 'foo_test': {},
676 },
Kenneth Russelleb60cbd22017-12-05 07:54:28677 },
Stephen Martinis54d64ad2018-09-21 22:16:20678 'compound_suites': {
679 'composition_tests': [
680 'foo_tests',
681 'bar_tests',
682 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28683 },
Kenneth Russelleb60cbd22017-12-05 07:54:28684}
685"""
686
687BAD_COMPOSITION_TEST_SUITES = """\
688{
Stephen Martinis54d64ad2018-09-21 22:16:20689 'basic_suites': {
690 'bar_tests': {},
691 'foo_tests': {},
692 },
693 'compound_suites': {
694 'buggy_composition_tests': [
695 'bar_tests',
696 ],
697 'composition_tests': [
698 'foo_tests',
699 'buggy_composition_tests',
700 ],
701 },
702}
703"""
704
705DUPLICATES_COMPOSITION_TEST_SUITES = """\
706{
707 'basic_suites': {
708 'bar_tests': {},
709 'foo_tests': {},
710 },
711 'compound_suites': {
712 'bar_tests': [
713 'foo_tests',
714 ],
715 'composition_tests': [
716 'foo_tests',
717 'buggy_composition_tests',
718 ],
719 },
Kenneth Russelleb60cbd22017-12-05 07:54:28720}
721"""
722
Kenneth Russell8ceeabf2017-12-11 17:53:28723INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES = """\
724{
Stephen Martinis54d64ad2018-09-21 22:16:20725 'basic_suites': {
726 'composition_tests': {
727 'foo_tests': {
728 'test': 'foo_test',
729 },
730 'bar_tests': {
731 'test': 'foo_test',
732 },
Kenneth Russell8ceeabf2017-12-11 17:53:28733 },
734 },
735}
736"""
737
Dirk Pranke1b767092017-12-07 04:44:23738SCRIPT_SUITE = """\
739{
Stephen Martinis54d64ad2018-09-21 22:16:20740 'basic_suites': {
741 'foo_scripts': {
742 'foo_test': {
743 'script': 'foo.py',
744 },
Dirk Pranke1b767092017-12-07 04:44:23745 },
746 },
747}
748"""
749
Kenneth Russelleb60cbd22017-12-05 07:54:28750UNREFED_TEST_SUITE = """\
751{
Stephen Martinis54d64ad2018-09-21 22:16:20752 'basic_suites': {
753 'bar_tests': {},
754 'foo_tests': {},
755 },
Kenneth Russelleb60cbd22017-12-05 07:54:28756}
757"""
758
759REUSING_TEST_WITH_DIFFERENT_NAME = """\
760{
Stephen Martinis54d64ad2018-09-21 22:16:20761 'basic_suites': {
762 'foo_tests': {
763 'foo_test': {},
764 'variation_test': {
765 'args': [
766 '--variation',
767 ],
768 'test': 'foo_test',
769 },
Kenneth Russelleb60cbd22017-12-05 07:54:28770 },
771 },
772}
773"""
774
Kenneth Russell8a386d42018-06-02 09:48:01775COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST = """\
776{
Stephen Martinis54d64ad2018-09-21 22:16:20777 'basic_suites': {
778 'foo_tests': {
779 'foo': {},
780 },
781 'bar_tests': {
782 'bar_test': {},
783 },
Kenneth Russell8a386d42018-06-02 09:48:01784 },
Stephen Martinis54d64ad2018-09-21 22:16:20785 'compound_suites': {
786 'composition_tests': [
787 'foo_tests',
788 'bar_tests',
789 ],
Kenneth Russell8a386d42018-06-02 09:48:01790 },
Kenneth Russell8a386d42018-06-02 09:48:01791}
792"""
793
Stephen Martinisb6a50492018-09-12 23:59:32794EMPTY_PYL_FILE = """\
Kenneth Russelleb60cbd22017-12-05 07:54:28795{
796}
797"""
798
Dirk Pranke1b767092017-12-07 04:44:23799SCRIPT_WITH_ARGS_EXCEPTIONS = """\
800{
801 'foo_test': {
802 'modifications': {
803 'Fake Tester': {
804 'args': ['--fake-arg'],
805 },
806 },
807 },
808}
809"""
810
Stephen Martinis0382bc12018-09-17 22:29:07811SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS = """\
812{
813 'foo_test': {
814 'modifications': {
815 'Fake Tester': {
816 'swarming': {
817 'value': 'exception',
818 },
819 },
820 },
821 },
822}
823"""
824
Kenneth Russelleb60cbd22017-12-05 07:54:28825NO_BAR_TEST_EXCEPTIONS = """\
826{
827 'bar_test': {
828 'remove_from': [
829 'Fake Tester',
830 ]
831 }
832}
833"""
834
835EMPTY_BAR_TEST_EXCEPTIONS = """\
836{
837 'bar_test': {
838 }
839}
840"""
841
Stephen Martinis54d64ad2018-09-21 22:16:20842EXCEPTIONS_SORTED = """\
843{
844 'suite_c': {
845 'modifications': {
846 'Fake Tester': {
847 'foo': 'bar',
848 },
849 },
850 },
851 'suite_d': {
852 'modifications': {
853 'Fake Tester': {
854 'foo': 'baz',
855 },
856 },
857 },
858}
859"""
860
861EXCEPTIONS_UNSORTED = """\
862{
863 'suite_d': {
864 'modifications': {
865 'Fake Tester': {
866 'foo': 'baz',
867 },
868 },
869 },
870 'suite_c': {
871 'modifications': {
872 'Fake Tester': {
873 'foo': 'bar',
874 },
875 },
876 },
877}
878"""
879
Kenneth Russelleb60cbd22017-12-05 07:54:28880FOO_TEST_MODIFICATIONS = """\
881{
882 'foo_test': {
883 'modifications': {
884 'Fake Tester': {
885 'args': [
886 '--bar',
887 ],
888 'swarming': {
889 'hard_timeout': 600,
890 },
891 },
892 },
893 }
894}
895"""
896
Kenneth Russelleb60cbd22017-12-05 07:54:28897NONEXISTENT_REMOVAL = """\
898{
899 'foo_test': {
900 'remove_from': [
901 'Nonexistent Tester',
902 ]
903 }
904}
905"""
906
907NONEXISTENT_MODIFICATION = """\
908{
909 'foo_test': {
910 'modifications': {
911 'Nonexistent Tester': {
912 'args': [],
913 },
914 },
915 }
916}
917"""
918
919COMPOSITION_WATERFALL_OUTPUT = """\
920{
921 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
922 "AAAAA2 See generate_buildbot_json.py to make changes": {},
923 "Fake Tester": {
924 "gtest_tests": [
925 {
926 "swarming": {
927 "can_use_on_swarming_builders": true
928 },
929 "test": "bar_test"
930 },
931 {
932 "swarming": {
933 "can_use_on_swarming_builders": true
934 },
935 "test": "foo_test"
936 }
937 ]
938 }
939}
940"""
941
John Budorickedfe7f872018-01-23 15:27:22942COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT = """\
943{
944 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
945 "AAAAA2 See generate_buildbot_json.py to make changes": {},
946 "Fake Tester": {
947 "gtest_tests": [
948 {
949 "args": [
950 "--this-is-an-argument"
951 ],
952 "swarming": {
953 "can_use_on_swarming_builders": true
954 },
955 "test": "bar_test"
956 },
957 {
958 "args": [
959 "--this-is-an-argument"
960 ],
961 "swarming": {
962 "can_use_on_swarming_builders": true
963 },
964 "test": "foo_test"
965 }
966 ]
967 }
968}
969"""
970
Kenneth Russelleb60cbd22017-12-05 07:54:28971VARIATION_GTEST_OUTPUT = """\
972{
973 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
974 "AAAAA2 See generate_buildbot_json.py to make changes": {},
975 "Fake Tester": {
976 "gtest_tests": [
977 {
978 "swarming": {
979 "can_use_on_swarming_builders": true,
980 "dimension_sets": [
981 {
982 "kvm": "1"
983 }
984 ]
985 },
986 "test": "foo_test"
987 },
988 {
989 "args": [
990 "--variation"
991 ],
992 "name": "variation_test",
993 "swarming": {
994 "can_use_on_swarming_builders": true,
995 "dimension_sets": [
996 {
997 "kvm": "1"
998 }
999 ]
1000 },
1001 "test": "foo_test"
1002 }
1003 ]
1004 }
1005}
1006"""
1007
1008COMPOSITION_WATERFALL_FILTERED_OUTPUT = """\
1009{
1010 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1011 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1012 "Fake Tester": {
1013 "gtest_tests": [
1014 {
1015 "swarming": {
1016 "can_use_on_swarming_builders": true
1017 },
1018 "test": "foo_test"
1019 }
1020 ]
1021 }
1022}
1023"""
1024
Kenneth Russell8ceeabf2017-12-11 17:53:281025MERGED_ARGS_OUTPUT = """\
1026{
1027 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1028 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1029 "Fake Tester": {
1030 "gtest_tests": [
1031 {
1032 "args": [
Stephen Martinis3bed2ab2018-04-23 19:42:061033 "--c_arg",
1034 "--bar"
Kenneth Russell8ceeabf2017-12-11 17:53:281035 ],
1036 "swarming": {
1037 "can_use_on_swarming_builders": true,
1038 "dimension_sets": [
1039 {
1040 "kvm": "1"
1041 }
1042 ],
1043 "hard_timeout": 600
1044 },
1045 "test": "foo_test"
1046 }
1047 ]
1048 }
1049}
1050"""
1051
Kenneth Russell8a386d42018-06-02 09:48:011052LINUX_ARGS_OUTPUT = """\
1053{
1054 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1055 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1056 "Fake Tester": {
1057 "gtest_tests": [
1058 {
1059 "args": [
1060 "--no-xvfb"
1061 ],
1062 "swarming": {
1063 "can_use_on_swarming_builders": true
1064 },
1065 "test": "foo_test"
1066 }
1067 ]
1068 }
1069}
1070"""
1071
Kenneth Russell650995a2018-05-03 21:17:011072MERGED_ENABLE_FEATURES_OUTPUT = """\
1073{
1074 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1075 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1076 "Fake Tester": {
1077 "gtest_tests": [
1078 {
1079 "args": [
1080 "--enable-features=Foo,Bar,Baz"
1081 ],
1082 "swarming": {
1083 "can_use_on_swarming_builders": true
1084 },
1085 "test": "foo_test"
1086 }
1087 ]
1088 }
1089}
1090"""
1091
Kenneth Russelleb60cbd22017-12-05 07:54:281092MODIFIED_OUTPUT = """\
1093{
1094 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1095 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1096 "Fake Tester": {
1097 "gtest_tests": [
1098 {
1099 "args": [
1100 "--bar"
1101 ],
1102 "swarming": {
1103 "can_use_on_swarming_builders": true,
1104 "dimension_sets": [
1105 {
1106 "integrity": "high",
1107 "kvm": "1"
1108 }
1109 ],
1110 "expiration": 120,
1111 "hard_timeout": 600
1112 },
1113 "test": "foo_test"
1114 }
1115 ]
1116 }
1117}
1118"""
1119
1120ISOLATED_SCRIPT_OUTPUT = """\
1121{
1122 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1123 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1124 "Fake Tester": {
1125 "isolated_scripts": [
1126 {
1127 "isolate_name": "foo_test",
1128 "name": "foo_test",
1129 "swarming": {
1130 "can_use_on_swarming_builders": true
1131 }
1132 }
1133 ]
1134 }
1135}
1136"""
1137
1138SCRIPT_OUTPUT = """\
1139{
1140 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1141 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1142 "Fake Tester": {
1143 "scripts": [
1144 {
1145 "name": "foo_test",
1146 "script": "foo.py"
1147 }
1148 ]
1149 }
1150}
1151"""
1152
Dirk Pranke1b767092017-12-07 04:44:231153SCRIPT_WITH_ARGS_OUTPUT = """\
1154{
1155 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1156 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1157 "Fake Tester": {
1158 "scripts": [
1159 {
1160 "args": [
1161 "--fake-arg"
1162 ],
1163 "name": "foo_test",
1164 "script": "foo.py"
1165 }
1166 ]
1167 }
1168}
1169"""
1170
Kenneth Russelleb60cbd22017-12-05 07:54:281171JUNIT_OUTPUT = """\
1172{
1173 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1174 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1175 "Fake Tester": {
1176 "junit_tests": [
1177 {
1178 "test": "foo_test"
1179 }
1180 ]
1181 }
1182}
1183"""
1184
1185CTS_OUTPUT = """\
1186{
1187 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1188 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1189 "Fake Tester": {
1190 "cts_tests": [
1191 {
1192 "arch": "arm64",
1193 "platform": "L"
1194 }
1195 ]
1196 }
1197}
1198"""
1199
1200INSTRUMENTATION_TEST_OUTPUT = """\
1201{
1202 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1203 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1204 "Fake Tester": {
1205 "instrumentation_tests": [
1206 {
1207 "test": "foo_test"
1208 }
1209 ]
1210 }
1211}
1212"""
1213
Kenneth Russell8ceeabf2017-12-11 17:53:281214INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT = """\
1215{
1216 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1217 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1218 "Fake Tester": {
1219 "instrumentation_tests": [
1220 {
1221 "name": "bar_tests",
1222 "test": "foo_test"
1223 },
1224 {
1225 "name": "foo_tests",
1226 "test": "foo_test"
1227 }
1228 ]
1229 }
1230}
1231"""
1232
Kenneth Russell8a386d42018-06-02 09:48:011233GPU_TELEMETRY_TEST_OUTPUT = """\
1234{
1235 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1236 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1237 "Fake Tester": {
1238 "isolated_scripts": [
1239 {
1240 "args": [
1241 "foo",
1242 "--show-stdout",
1243 "--browser=release",
1244 "--passthrough",
1245 "-v",
1246 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1247 ],
1248 "isolate_name": "telemetry_gpu_integration_test",
1249 "name": "foo_tests",
1250 "swarming": {
1251 "can_use_on_swarming_builders": true,
1252 "dimension_sets": [
1253 {
1254 "gpu": "10de:1cb3"
1255 }
erikchen6da2d9b2018-08-03 23:01:141256 ],
1257 "idempotent": false
Kenneth Russell8a386d42018-06-02 09:48:011258 }
1259 }
1260 ]
1261 }
1262}
1263"""
1264
Kenneth Russelleb60cbd22017-12-05 07:54:281265ANDROID_WATERFALL_OUTPUT = """\
1266{
1267 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1268 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1269 "Android Builder": {
1270 "additional_compile_targets": [
1271 "bar_test"
1272 ]
1273 },
1274 "Fake Android K Tester": {
1275 "additional_compile_targets": [
1276 "bar_test"
1277 ],
1278 "gtest_tests": [
1279 {
John Budorick826d5ed2017-12-28 19:27:321280 "args": [
Kenneth Russell5612d64a2018-06-02 21:12:301281 "--gs-results-bucket=chromium-result-details",
1282 "--recover-devices"
John Budorick826d5ed2017-12-28 19:27:321283 ],
Kenneth Russelleb60cbd22017-12-05 07:54:281284 "swarming": {
1285 "can_use_on_swarming_builders": true,
1286 "cipd_packages": [
1287 {
1288 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1289 "location": "bin",
1290 "revision": \
1291"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1292 }
1293 ],
1294 "dimension_sets": [
1295 {
1296 "device_os": "KTU84P",
1297 "device_type": "hammerhead",
1298 "integrity": "high"
1299 }
1300 ],
1301 "expiration": 120,
1302 "output_links": [
1303 {
1304 "link": [
1305 "https://luci-logdog.appspot.com/v/?s",
1306 "=android%2Fswarming%2Flogcats%2F",
1307 "${TASK_ID}%2F%2B%2Funified_logcats"
1308 ],
1309 "name": "shard #${SHARD_INDEX} logcats"
1310 }
1311 ]
1312 },
1313 "test": "foo_test"
1314 }
1315 ]
1316 },
1317 "Fake Android L Tester": {
1318 "gtest_tests": [
1319 {
Benjamin Pastene766d48f52017-12-18 21:47:421320 "args": [
John Budorick826d5ed2017-12-28 19:27:321321 "--gs-results-bucket=chromium-result-details",
Benjamin Pastene766d48f52017-12-18 21:47:421322 "--recover-devices"
1323 ],
Kenneth Russelleb60cbd22017-12-05 07:54:281324 "swarming": {
1325 "can_use_on_swarming_builders": true,
1326 "cipd_packages": [
1327 {
1328 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1329 "location": "bin",
1330 "revision": \
1331"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1332 }
1333 ],
1334 "dimension_sets": [
1335 {
1336 "device_os": "KTU84P",
1337 "device_type": "hammerhead",
1338 "integrity": "high"
1339 }
1340 ],
1341 "expiration": 120
1342 },
1343 "test": "foo_test"
1344 }
1345 ]
1346 },
1347 "Fake Android M Tester": {
1348 "gtest_tests": [
1349 {
1350 "swarming": {
1351 "can_use_on_swarming_builders": false
1352 },
1353 "test": "foo_test"
1354 }
1355 ]
1356 }
1357}
1358"""
1359
Shenghua Zhangaba8bad2018-02-07 02:12:091360MULTI_DIMENSION_OUTPUT = """\
1361{
1362 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1363 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1364 "Fake Tester": {
1365 "gtest_tests": [
1366 {
1367 "swarming": {
1368 "can_use_on_swarming_builders": true,
1369 "dimension_sets": [
1370 {
1371 "gpu": "none",
1372 "integrity": "high",
1373 "os": "1"
1374 }
1375 ],
1376 "expiration": 120
1377 },
1378 "test": "foo_test",
1379 "trigger_script": {
1380 "args": [
1381 "--multiple-trigger-configs",
Kenneth Russell73c3bd8b2018-10-19 22:30:191382 "[{\\"gpu\\": \\"none\\", \\"integrity\\": \\"high\\", \
1383\\"os\\": \\"1\\"}, \
Shenghua Zhangaba8bad2018-02-07 02:12:091384{\\"gpu\\": \\"none\\", \\"os\\": \\"2\\"}]",
1385 "--multiple-dimension-script-verbose",
1386 "True"
1387 ],
1388 "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
1389 }
1390 }
1391 ]
1392 }
1393}
1394"""
1395
Stephen Martinisb6a50492018-09-12 23:59:321396WATERFALL_MIXIN_WATERFALL_OUTPUT = """\
1397{
1398 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1399 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1400 "Fake Tester": {
1401 "gtest_tests": [
1402 {
1403 "swarming": {
1404 "can_use_on_swarming_builders": true,
1405 "dimension_sets": [
1406 {
1407 "integrity": "high"
1408 }
1409 ],
Stephen Martinis0382bc12018-09-17 22:29:071410 "expiration": 120,
1411 "value": "waterfall"
Stephen Martinisb6a50492018-09-12 23:59:321412 },
Stephen Martinis0382bc12018-09-17 22:29:071413 "test": "foo_test"
1414 }
1415 ]
1416 }
1417}
1418"""
1419
1420WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT = """\
1421{
1422 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1423 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1424 "Fake Tester": {
1425 "gtest_tests": [
1426 {
1427 "swarming": {
1428 "can_use_on_swarming_builders": true,
1429 "dimension_sets": [
1430 {
1431 "integrity": "high"
1432 }
1433 ],
1434 "expiration": 120,
1435 "value": "exception"
1436 },
1437 "test": "foo_test"
Stephen Martinisb6a50492018-09-12 23:59:321438 }
1439 ]
1440 }
1441}
1442"""
1443
1444BUILDER_MIXIN_WATERFALL_OUTPUT = """\
1445{
1446 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1447 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1448 "Fake Tester": {
1449 "gtest_tests": [
1450 {
1451 "swarming": {
1452 "can_use_on_swarming_builders": true,
1453 "dimension_sets": [
1454 {
1455 "integrity": "high"
1456 }
1457 ],
Stephen Martinis0382bc12018-09-17 22:29:071458 "expiration": 120,
1459 "value": "builder"
Stephen Martinisb6a50492018-09-12 23:59:321460 },
Stephen Martinis0382bc12018-09-17 22:29:071461 "test": "foo_test"
Stephen Martinisb6a50492018-09-12 23:59:321462 }
1463 ]
1464 }
1465}
1466"""
1467
Stephen Martinisb72f6d22018-10-04 23:29:011468BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT = """\
1469{
1470 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1471 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1472 "Fake Tester": {
1473 "gtest_tests": [
1474 {
1475 "swarming": {
1476 "can_use_on_swarming_builders": true,
1477 "dimension_sets": [
1478 {
1479 "integrity": "high"
1480 }
1481 ],
1482 "expiration": 120
1483 },
1484 "test": "foo_test",
1485 "value": "random"
1486 }
1487 ]
1488 }
1489}
1490"""
1491
Stephen Martinisb6a50492018-09-12 23:59:321492TEST_MIXIN_WATERFALL_OUTPUT = """\
1493{
1494 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1495 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1496 "Fake Tester": {
1497 "gtest_tests": [
1498 {
1499 "swarming": {
1500 "can_use_on_swarming_builders": true,
1501 "dimension_sets": [
1502 {
1503 "integrity": "high",
1504 "kvm": "1"
1505 }
1506 ],
Stephen Martinis0382bc12018-09-17 22:29:071507 "expiration": 120,
1508 "value": "test"
Stephen Martinisb6a50492018-09-12 23:59:321509 },
Stephen Martinis0382bc12018-09-17 22:29:071510 "test": "foo_test"
Stephen Martinisb6a50492018-09-12 23:59:321511 }
1512 ]
1513 }
1514}
1515"""
1516
1517DIMENSIONS_MIXIN_WATERFALL_OUTPUT = """\
1518{
1519 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1520 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1521 "Fake Tester": {
1522 "gtest_tests": [
1523 {
1524 "swarming": {
1525 "can_use_on_swarming_builders": true,
1526 "dimension_sets": [
1527 {
1528 "iama": "mixin",
1529 "integrity": "high"
1530 }
1531 ],
Stephen Martinis0382bc12018-09-17 22:29:071532 "expiration": 120,
1533 "value": "test"
Stephen Martinisb6a50492018-09-12 23:59:321534 },
Stephen Martinis0382bc12018-09-17 22:29:071535 "test": "foo_test"
Stephen Martinisb6a50492018-09-12 23:59:321536 }
1537 ]
1538 }
1539}
1540"""
1541
Stephen Martinis2a0667022018-09-25 22:31:141542GPU_DIMENSIONS_WATERFALL_OUTPUT = """\
1543{
1544 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1545 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1546 "Fake Tester": {
1547 "isolated_scripts": [
1548 {
1549 "args": [
1550 "foo_test",
1551 "--show-stdout",
1552 "--browser=release",
1553 "--passthrough",
1554 "-v",
1555 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
1556 ],
1557 "isolate_name": "telemetry_gpu_integration_test",
1558 "name": "foo_test",
1559 "swarming": {
1560 "can_use_on_swarming_builders": true,
1561 "dimension_sets": [
1562 {
1563 "iama": "mixin",
1564 "integrity": "high"
1565 }
1566 ],
1567 "expiration": 120,
1568 "idempotent": false,
1569 "value": "test"
1570 }
1571 }
1572 ]
1573 }
1574}
1575"""
1576
Kenneth Russell78fd8702018-05-17 01:15:521577LUCI_MILO_CFG = """\
1578consoles {
1579 builders {
1580 name: "buildbucket/luci.chromium.ci/Fake Tester"
1581 }
1582}
1583"""
1584
Stephen Martinis54d64ad2018-09-21 22:16:201585LUCI_MILO_CFG_WATERFALL_SORTING = """\
1586consoles {
1587 builders {
1588 name: "buildbucket/luci.chromium.ci/Fake Tester"
1589 name: "buildbucket/luci.chromium.ci/Really Fake Tester"
1590 }
1591}
1592"""
1593
Stephen Martinisf83893722018-09-19 00:02:181594# These mixins are invalid; if passed to check_input_file_consistency, they will
1595# fail. These are used for output file consistency checks.
Stephen Martinisb6a50492018-09-12 23:59:321596SWARMING_MIXINS = """\
1597{
Stephen Martinis54d64ad2018-09-21 22:16:201598 'builder_mixin': {
Stephen Martinisb72f6d22018-10-04 23:29:011599 'swarming': {
1600 'value': 'builder',
Stephen Martinisb6a50492018-09-12 23:59:321601 },
1602 },
Stephen Martinisb72f6d22018-10-04 23:29:011603 'dimension_mixin': {
1604 'swarming': {
1605 'dimensions': {
1606 'iama': 'mixin',
1607 },
1608 },
1609 },
1610 'random_mixin': {
1611 'value': 'random',
1612 },
Stephen Martinis54d64ad2018-09-21 22:16:201613 'test_mixin': {
Stephen Martinisb72f6d22018-10-04 23:29:011614 'swarming': {
1615 'value': 'test',
1616 },
Stephen Martinis54d64ad2018-09-21 22:16:201617 },
Stephen Martinisb6a50492018-09-12 23:59:321618 'waterfall_mixin': {
Stephen Martinisb72f6d22018-10-04 23:29:011619 'swarming': {
1620 'value': 'waterfall',
1621 },
Stephen Martinisb6a50492018-09-12 23:59:321622 },
Stephen Martinis54d64ad2018-09-21 22:16:201623}
1624"""
1625
1626SWARMING_MIXINS_DUPLICATED = """\
1627{
Stephen Martinisb6a50492018-09-12 23:59:321628 'builder_mixin': {
1629 'value': 'builder',
1630 },
Stephen Martinis54d64ad2018-09-21 22:16:201631 'builder_mixin': {
1632 'value': 'builder',
Stephen Martinisb6a50492018-09-12 23:59:321633 },
1634}
1635"""
1636
Stephen Martinisf83893722018-09-19 00:02:181637SWARMING_MIXINS_UNSORTED = """\
1638{
1639 'b_mixin': {
1640 'b': 'b',
1641 },
1642 'a_mixin': {
1643 'a': 'a',
1644 },
1645 'c_mixin': {
1646 'c': 'c',
1647 },
1648}
1649"""
1650
1651SWARMING_MIXINS_SORTED = """\
1652{
1653 'a_mixin': {
1654 'a': 'a',
1655 },
1656 'b_mixin': {
1657 'b': 'b',
1658 },
1659 'c_mixin': {
1660 'c': 'c',
1661 },
1662}
1663"""
1664
Stephen Martinis54d64ad2018-09-21 22:16:201665TEST_SUITE_SORTING_WATERFALL = """
1666[
1667 {
1668 'name': 'chromium.test',
1669 'machines': {
1670 'Fake Tester': {
1671 'test_suites': {
1672 'instrumentation_tests': 'suite_a',
1673 'scripts': 'suite_b',
1674 },
1675 },
1676 },
1677 },
1678]
1679"""
1680
1681TEST_SUITE_SORTED_WATERFALL = """
1682[
1683 {
1684 'name': 'chromium.test',
1685 'machines': {
1686 'Fake Tester': {
1687 'test_suites': {
1688 'instrumentation_tests': 'suite_a',
1689 'scripts': 'suite_b',
1690 },
1691 },
1692 'Really Fake Tester': {
1693 'test_suites': {
1694 'instrumentation_tests': 'suite_a',
1695 'scripts': 'suite_b',
1696 },
1697 },
1698 },
1699 },
1700 {
1701 'name': 'chromium.zz.test',
1702 'machines': {
1703 'Fake Tester': {
1704 'test_suites': {
1705 'instrumentation_tests': 'suite_a',
1706 'scripts': 'suite_b',
1707 },
1708 },
1709 'Really Fake Tester': {
1710 'test_suites': {
1711 'instrumentation_tests': 'suite_a',
1712 'scripts': 'suite_b',
1713 },
1714 },
1715 },
1716 },
1717]
1718"""
1719
1720TEST_SUITE_UNSORTED_WATERFALL_1 = """
1721[
1722 {
1723 'name': 'chromium.zz.test',
1724 'machines': {
1725 'Fake Tester': {
1726 'test_suites': {
1727 'instrumentation_tests': 'suite_a',
1728 'scripts': 'suite_b',
1729 },
1730 },
1731 'Really Fake Tester': {
1732 'test_suites': {
1733 'instrumentation_tests': 'suite_a',
1734 'scripts': 'suite_b',
1735 },
1736 },
1737 },
1738 },
1739 {
1740 'name': 'chromium.test',
1741 'machines': {
1742 'Fake Tester': {
1743 'test_suites': {
1744 'instrumentation_tests': 'suite_a',
1745 'scripts': 'suite_b',
1746 },
1747 },
1748 'Really Fake Tester': {
1749 'test_suites': {
1750 'instrumentation_tests': 'suite_a',
1751 'scripts': 'suite_b',
1752 },
1753 },
1754 },
1755 },
1756]
1757"""
1758
1759TEST_SUITE_UNSORTED_WATERFALL_2 = """
1760[
1761 {
1762 'name': 'chromium.test',
1763 'machines': {
1764 'Really Fake Tester': {
1765 'test_suites': {
1766 'instrumentation_tests': 'suite_a',
1767 'scripts': 'suite_b',
1768 },
1769 },
1770 'Fake Tester': {
1771 'test_suites': {
1772 'instrumentation_tests': 'suite_a',
1773 'scripts': 'suite_b',
1774 },
1775 },
1776 },
1777 },
1778 {
1779 'name': 'chromium.zz.test',
1780 'machines': {
1781 'Fake Tester': {
1782 'test_suites': {
1783 'instrumentation_tests': 'suite_a',
1784 'scripts': 'suite_b',
1785 },
1786 },
1787 'Really Fake Tester': {
1788 'test_suites': {
1789 'instrumentation_tests': 'suite_a',
1790 'scripts': 'suite_b',
1791 },
1792 },
1793 },
1794 },
1795]
1796"""
1797
1798# Note that the suites in basic_suites would be sorted after the suites in
1799# compound_suites. This is valid though, because each set of suites is sorted
1800# separately.
1801# suite_c is an 'instrumentation_tests' test
1802# suite_d is an 'scripts' test
1803TEST_SUITE_SORTED = """\
1804{
1805 'basic_suites': {
1806 'suite_c': {
1807 'suite_c': {},
1808 },
1809 'suite_d': {
1810 'script': {
1811 'script': 'suite_d.py',
1812 }
1813 },
1814 },
1815 'compound_suites': {
1816 'suite_a': [
1817 'suite_c',
1818 ],
1819 'suite_b': [
1820 'suite_d',
1821 ],
1822 },
1823}
1824"""
1825
1826TEST_SUITE_UNSORTED_1 = """\
1827{
1828 'basic_suites': {
1829 'suite_d': {
1830 'a': 'b',
1831 },
1832 'suite_c': {
1833 'a': 'b',
1834 },
1835 },
1836 'compound_suites': {
1837 'suite_a': [
1838 'suite_c',
1839 ],
1840 'suite_b': [
1841 'suite_d',
1842 ],
1843 },
1844}
1845"""
1846
1847TEST_SUITE_UNSORTED_2 = """\
1848{
1849 'basic_suites': {
1850 'suite_c': {
1851 'a': 'b',
1852 },
1853 'suite_d': {
1854 'a': 'b',
1855 },
1856 },
1857 'compound_suites': {
1858 'suite_b': [
1859 'suite_c',
1860 ],
1861 'suite_a': [
1862 'suite_d',
1863 ],
1864 },
1865}
1866"""
1867TEST_SUITE_UNSORTED_3 = """\
1868{
1869 'basic_suites': {
1870 'suite_d': {
1871 'a': 'b',
1872 },
1873 'suite_c': {
1874 'a': 'b',
1875 },
1876 },
1877 'compound_suites': {
1878 'suite_b': [
1879 'suite_c',
1880 ],
1881 'suite_a': [
1882 'suite_d',
1883 ],
1884 },
1885}
1886"""
1887
1888
1889TEST_SUITES_SYNTAX_ERROR = """\
1890{
1891 'basic_suites': {
1892 3: {
1893 'suite_c': {},
1894 },
1895 },
1896 'compound_suites': {},
1897}
1898"""
1899
Kenneth Russelleb60cbd22017-12-05 07:54:281900class UnitTest(unittest.TestCase):
1901 def test_base_generator(self):
1902 # Only needed for complete code coverage.
1903 self.assertRaises(NotImplementedError,
1904 generate_buildbot_json.BaseGenerator(None).generate,
1905 None, None, None, None)
1906 self.assertRaises(NotImplementedError,
1907 generate_buildbot_json.BaseGenerator(None).sort,
1908 None)
1909
1910 def test_good_test_suites_are_ok(self):
1911 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1912 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:321913 EMPTY_PYL_FILE,
1914 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521915 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501916 fbb.check_input_file_consistency(verbose=True)
1917 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281918
Shenghua Zhangaba8bad2018-02-07 02:12:091919 def test_good_multi_dimension_test_suites_are_ok(self):
1920 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
1921 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:321922 EMPTY_PYL_FILE,
1923 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521924 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501925 fbb.check_input_file_consistency(verbose=True)
1926 self.assertFalse(fbb.printed_lines)
Shenghua Zhangaba8bad2018-02-07 02:12:091927
Kenneth Russelleb60cbd22017-12-05 07:54:281928 def test_good_composition_test_suites_are_ok(self):
1929 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1930 GOOD_COMPOSITION_TEST_SUITES,
Stephen Martinisb6a50492018-09-12 23:59:321931 EMPTY_PYL_FILE,
1932 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521933 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501934 fbb.check_input_file_consistency(verbose=True)
1935 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281936
1937 def test_bad_composition_test_suites_are_caught(self):
1938 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1939 BAD_COMPOSITION_TEST_SUITES,
Stephen Martinisb6a50492018-09-12 23:59:321940 EMPTY_PYL_FILE,
1941 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521942 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501943 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1944 'Composition test suites may not refer to.*'):
1945 fbb.check_input_file_consistency(verbose=True)
1946 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281947
Stephen Martinis54d64ad2018-09-21 22:16:201948 def test_composition_test_suites_no_duplicate_names(self):
1949 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1950 DUPLICATES_COMPOSITION_TEST_SUITES,
1951 EMPTY_PYL_FILE,
1952 EMPTY_PYL_FILE,
1953 LUCI_MILO_CFG)
1954 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1955 '.*may not duplicate basic test suite.*'):
1956 fbb.check_input_file_consistency(verbose=True)
1957 self.assertFalse(fbb.printed_lines)
1958
Kenneth Russelleb60cbd22017-12-05 07:54:281959 def test_unknown_test_suites_are_caught(self):
1960 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_WATERFALL,
1961 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:321962 EMPTY_PYL_FILE,
1963 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521964 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501965 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1966 'Test suite baz_tests from machine.*'):
1967 fbb.check_input_file_consistency(verbose=True)
1968 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281969
1970 def test_unknown_test_suite_types_are_caught(self):
1971 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1972 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:321973 EMPTY_PYL_FILE,
1974 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521975 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501976 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1977 'Unknown test suite type foo_test_type.*'):
1978 fbb.check_input_file_consistency(verbose=True)
1979 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281980
1981 def test_unrefed_test_suite_caught(self):
1982 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1983 UNREFED_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:321984 EMPTY_PYL_FILE,
1985 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521986 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:501987 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1988 '.*unreferenced.*bar_tests.*'):
1989 fbb.check_input_file_consistency(verbose=True)
1990 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:281991
1992 def test_good_waterfall_output(self):
1993 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1994 GOOD_COMPOSITION_TEST_SUITES,
Stephen Martinisb6a50492018-09-12 23:59:321995 EMPTY_PYL_FILE,
1996 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:521997 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281998 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
1999 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502000 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282001
2002 def test_reusing_gtest_targets(self):
2003 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2004 REUSING_TEST_WITH_DIFFERENT_NAME,
Stephen Martinisb6a50492018-09-12 23:59:322005 EMPTY_PYL_FILE,
2006 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522007 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282008 fbb.files['chromium.test.json'] = VARIATION_GTEST_OUTPUT
2009 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502010 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282011
2012 def test_noop_exception_does_nothing(self):
2013 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2014 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522015 EMPTY_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322016 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522017 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282018 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
2019 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502020 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282021
Kenneth Russell8ceeabf2017-12-11 17:53:282022 def test_test_arg_merges(self):
2023 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2024 FOO_TEST_SUITE_WITH_ARGS,
Kenneth Russell78fd8702018-05-17 01:15:522025 FOO_TEST_MODIFICATIONS,
Stephen Martinisb6a50492018-09-12 23:59:322026 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522027 LUCI_MILO_CFG)
Kenneth Russell8ceeabf2017-12-11 17:53:282028 fbb.files['chromium.test.json'] = MERGED_ARGS_OUTPUT
2029 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502030 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:282031
Kenneth Russell650995a2018-05-03 21:17:012032 def test_enable_features_arg_merges(self):
2033 fbb = FakeBBGen(FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
2034 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Stephen Martinisb6a50492018-09-12 23:59:322035 EMPTY_PYL_FILE,
2036 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522037 LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:012038 fbb.files['chromium.test.json'] = MERGED_ENABLE_FEATURES_OUTPUT
2039 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502040 self.assertFalse(fbb.printed_lines)
Kenneth Russell650995a2018-05-03 21:17:012041
Kenneth Russell8a386d42018-06-02 09:48:012042 def test_linux_args(self):
2043 fbb = FakeBBGen(FOO_LINUX_GTESTS_WATERFALL,
2044 FOO_TEST_SUITE_WITH_LINUX_ARGS,
Stephen Martinisb6a50492018-09-12 23:59:322045 EMPTY_PYL_FILE,
2046 EMPTY_PYL_FILE,
Kenneth Russell8a386d42018-06-02 09:48:012047 LUCI_MILO_CFG)
2048 fbb.files['chromium.test.json'] = LINUX_ARGS_OUTPUT
2049 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502050 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012051
Kenneth Russelleb60cbd22017-12-05 07:54:282052 def test_test_filtering(self):
2053 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2054 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522055 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322056 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522057 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282058 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_FILTERED_OUTPUT
2059 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502060 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282061
2062 def test_test_modifications(self):
2063 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2064 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522065 FOO_TEST_MODIFICATIONS,
Stephen Martinisb6a50492018-09-12 23:59:322066 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522067 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282068 fbb.files['chromium.test.json'] = MODIFIED_OUTPUT
2069 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502070 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282071
2072 def test_isolated_script_tests(self):
2073 fbb = FakeBBGen(FOO_ISOLATED_SCRIPTS_WATERFALL,
2074 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522075 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322076 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522077 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282078 fbb.files['chromium.test.json'] = ISOLATED_SCRIPT_OUTPUT
2079 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502080 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282081
Dirk Pranke1b767092017-12-07 04:44:232082 def test_script_with_args(self):
2083 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
2084 SCRIPT_SUITE,
2085 SCRIPT_WITH_ARGS_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322086 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522087 LUCI_MILO_CFG)
Dirk Pranke1b767092017-12-07 04:44:232088 fbb.files['chromium.test.json'] = SCRIPT_WITH_ARGS_OUTPUT
2089 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502090 self.assertFalse(fbb.printed_lines)
Dirk Pranke1b767092017-12-07 04:44:232091
2092 def test_script(self):
Kenneth Russelleb60cbd22017-12-05 07:54:282093 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
2094 FOO_SCRIPT_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522095 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322096 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522097 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282098 fbb.files['chromium.test.json'] = SCRIPT_OUTPUT
2099 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502100 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282101
2102 def test_junit_tests(self):
2103 fbb = FakeBBGen(FOO_JUNIT_WATERFALL,
2104 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522105 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322106 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522107 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282108 fbb.files['chromium.test.json'] = JUNIT_OUTPUT
2109 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502110 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282111
2112 def test_cts_tests(self):
2113 fbb = FakeBBGen(FOO_CTS_WATERFALL,
2114 FOO_CTS_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:322115 EMPTY_PYL_FILE,
2116 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522117 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282118 fbb.files['chromium.test.json'] = CTS_OUTPUT
2119 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502120 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282121
2122 def test_instrumentation_tests(self):
2123 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
2124 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522125 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322126 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522127 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282128 fbb.files['chromium.test.json'] = INSTRUMENTATION_TEST_OUTPUT
2129 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502130 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282131
Kenneth Russell8a386d42018-06-02 09:48:012132 def test_gpu_telemetry_tests(self):
2133 fbb = FakeBBGen(FOO_GPU_TELEMETRY_TEST_WATERFALL,
2134 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
2135 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322136 EMPTY_PYL_FILE,
Kenneth Russell8a386d42018-06-02 09:48:012137 LUCI_MILO_CFG)
2138 fbb.files['chromium.test.json'] = GPU_TELEMETRY_TEST_OUTPUT
2139 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502140 self.assertFalse(fbb.printed_lines)
Kenneth Russell8a386d42018-06-02 09:48:012141
Kenneth Russell8ceeabf2017-12-11 17:53:282142 def test_instrumentation_tests_with_different_names(self):
2143 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
2144 INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES,
Stephen Martinisb6a50492018-09-12 23:59:322145 EMPTY_PYL_FILE,
2146 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522147 LUCI_MILO_CFG)
Kenneth Russell8ceeabf2017-12-11 17:53:282148 fbb.files['chromium.test.json'] = \
2149 INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT
2150 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502151 self.assertFalse(fbb.printed_lines)
Kenneth Russell8ceeabf2017-12-11 17:53:282152
Kenneth Russelleb60cbd22017-12-05 07:54:282153 def test_ungenerated_output_files_are_caught(self):
2154 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
2155 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:522156 NO_BAR_TEST_EXCEPTIONS,
Stephen Martinisb6a50492018-09-12 23:59:322157 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522158 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282159 fbb.files['chromium.test.json'] = (
2160 '\n' + COMPOSITION_WATERFALL_FILTERED_OUTPUT)
Stephen Martinis7eb8b612018-09-21 00:17:502161 with self.assertRaises(generate_buildbot_json.BBGenErr):
Kenneth Russell73c3bd8b2018-10-19 22:30:192162 fbb.check_output_file_consistency(verbose=True, dump=False)
Stephen Martinis7eb8b612018-09-21 00:17:502163 joined_lines = ' '.join(fbb.printed_lines)
2164 self.assertRegexpMatches(
2165 joined_lines, 'Waterfall chromium.test did not have the following'
2166 ' expected contents:.*')
2167 self.assertRegexpMatches(joined_lines, '.*--- expected.*')
2168 self.assertRegexpMatches(joined_lines, '.*\+\+\+ current.*')
2169 fbb.printed_lines = []
2170 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282171
2172 def test_android_output_options(self):
2173 fbb = FakeBBGen(ANDROID_WATERFALL,
2174 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:322175 EMPTY_PYL_FILE,
2176 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522177 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:282178 fbb.files['chromium.test.json'] = ANDROID_WATERFALL_OUTPUT
2179 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502180 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282181
2182 def test_nonexistent_removal_raises(self):
2183 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2184 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522185 NONEXISTENT_REMOVAL,
Stephen Martinisb6a50492018-09-12 23:59:322186 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522187 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502188 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2189 'The following nonexistent machines.*'):
2190 fbb.check_input_file_consistency(verbose=True)
2191 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282192
2193 def test_nonexistent_modification_raises(self):
2194 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2195 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:522196 NONEXISTENT_MODIFICATION,
Stephen Martinisb6a50492018-09-12 23:59:322197 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522198 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502199 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2200 'The following nonexistent machines.*'):
2201 fbb.check_input_file_consistency(verbose=True)
2202 self.assertFalse(fbb.printed_lines)
Kenneth Russelleb60cbd22017-12-05 07:54:282203
John Budorickedfe7f872018-01-23 15:27:222204 def test_waterfall_args(self):
2205 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
2206 GOOD_COMPOSITION_TEST_SUITES,
Stephen Martinisb6a50492018-09-12 23:59:322207 EMPTY_PYL_FILE,
2208 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522209 LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:222210 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT
2211 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502212 self.assertFalse(fbb.printed_lines)
John Budorickedfe7f872018-01-23 15:27:222213
Shenghua Zhangaba8bad2018-02-07 02:12:092214 def test_multi_dimension_output(self):
2215 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
2216 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:322217 EMPTY_PYL_FILE,
2218 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522219 LUCI_MILO_CFG)
Shenghua Zhangaba8bad2018-02-07 02:12:092220 fbb.files['chromium.test.json'] = MULTI_DIMENSION_OUTPUT
2221 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502222 self.assertFalse(fbb.printed_lines)
Shenghua Zhangaba8bad2018-02-07 02:12:092223
Zhiling Huangbe008172018-03-08 19:13:112224 def test_relative_pyl_file_dir(self):
2225 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2226 REUSING_TEST_WITH_DIFFERENT_NAME,
Stephen Martinisb6a50492018-09-12 23:59:322227 EMPTY_PYL_FILE,
2228 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522229 LUCI_MILO_CFG)
Zhiling Huangbe008172018-03-08 19:13:112230 fbb.args = argparse.Namespace(pyl_files_dir='relative/path/')
2231 for file_name in list(fbb.files):
Kenneth Russell78fd8702018-05-17 01:15:522232 if not 'luci-milo.cfg' in file_name:
2233 fbb.files[os.path.join('relative/path/', file_name)] = (
2234 fbb.files.pop(file_name))
Stephen Martinis7eb8b612018-09-21 00:17:502235 fbb.check_input_file_consistency(verbose=True)
Zhiling Huangbe008172018-03-08 19:13:112236 fbb.files['relative/path/chromium.test.json'] = VARIATION_GTEST_OUTPUT
2237 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502238 self.assertFalse(fbb.printed_lines)
Zhiling Huangbe008172018-03-08 19:13:112239
Nico Weberd18b8962018-05-16 19:39:382240 def test_nonexistent_bot_raises(self):
2241 fbb = FakeBBGen(UNKNOWN_BOT_GTESTS_WATERFALL,
2242 FOO_TEST_SUITE,
Stephen Martinisb6a50492018-09-12 23:59:322243 EMPTY_PYL_FILE,
2244 EMPTY_PYL_FILE,
Kenneth Russell78fd8702018-05-17 01:15:522245 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:382246 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502247 fbb.check_input_file_consistency(verbose=True)
2248 self.assertFalse(fbb.printed_lines)
Nico Weberd18b8962018-05-16 19:39:382249
Stephen Martinisb72f6d22018-10-04 23:29:012250 def test_mixins_waterfall(self):
Stephen Martinisb6a50492018-09-12 23:59:322251 fbb = FakeBBGen(FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2252 FOO_TEST_SUITE,
2253 EMPTY_PYL_FILE,
2254 SWARMING_MIXINS,
2255 LUCI_MILO_CFG)
2256 fbb.files['chromium.test.json'] = WATERFALL_MIXIN_WATERFALL_OUTPUT
2257 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502258 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322259
Stephen Martinisb72f6d22018-10-04 23:29:012260 def test_mixins_waterfall_exception_overrides(self):
Stephen Martinis0382bc12018-09-17 22:29:072261 fbb = FakeBBGen(FOO_GTESTS_WATERFALL_MIXIN_WATERFALL,
2262 FOO_TEST_SUITE,
2263 SCRIPT_WITH_ARGS_SWARMING_EXCEPTIONS,
2264 SWARMING_MIXINS,
2265 LUCI_MILO_CFG)
2266 fbb.files['chromium.test.json'] = WATERFALL_MIXIN_WATERFALL_EXCEPTION_OUTPUT
2267 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502268 self.assertFalse(fbb.printed_lines)
Stephen Martinis0382bc12018-09-17 22:29:072269
Stephen Martinisb72f6d22018-10-04 23:29:012270 def test_mixins_builder(self):
Stephen Martinisb6a50492018-09-12 23:59:322271 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2272 FOO_TEST_SUITE,
2273 EMPTY_PYL_FILE,
2274 SWARMING_MIXINS,
2275 LUCI_MILO_CFG)
2276 fbb.files['chromium.test.json'] = BUILDER_MIXIN_WATERFALL_OUTPUT
2277 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502278 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322279
Stephen Martinisb72f6d22018-10-04 23:29:012280 def test_mixins_builder_non_swarming(self):
2281 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_NON_SWARMING_WATERFALL,
2282 FOO_TEST_SUITE,
2283 EMPTY_PYL_FILE,
2284 SWARMING_MIXINS,
2285 LUCI_MILO_CFG)
2286 fbb.files['chromium.test.json'] = (
2287 BUILDER_MIXIN_NON_SWARMING_WATERFALL_OUTPUT)
2288 fbb.check_output_file_consistency(verbose=True)
2289 self.assertFalse(fbb.printed_lines)
2290
2291 def test_mixins_test(self):
Stephen Martinisb6a50492018-09-12 23:59:322292 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2293 FOO_TEST_SUITE_WITH_MIXIN,
2294 EMPTY_PYL_FILE,
2295 SWARMING_MIXINS,
2296 LUCI_MILO_CFG)
2297 fbb.files['chromium.test.json'] = TEST_MIXIN_WATERFALL_OUTPUT
2298 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502299 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322300
Stephen Martinisb72f6d22018-10-04 23:29:012301 def test_mixins_dimension(self):
Stephen Martinisb6a50492018-09-12 23:59:322302 fbb = FakeBBGen(FOO_GTESTS_DIMENSIONS_MIXIN_WATERFALL,
2303 FOO_TEST_SUITE_WITH_MIXIN,
2304 EMPTY_PYL_FILE,
2305 SWARMING_MIXINS,
2306 LUCI_MILO_CFG)
2307 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
2308 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502309 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322310
Stephen Martinisb72f6d22018-10-04 23:29:012311 def test_mixins_dimension_gpu(self):
Stephen Martinis2a0667022018-09-25 22:31:142312 fbb = FakeBBGen(FOO_GPU_TELEMETRY_TEST_DIMENSIONS_WATERFALL,
2313 FOO_TEST_SUITE_WITH_MIXIN,
2314 EMPTY_PYL_FILE,
2315 SWARMING_MIXINS,
2316 LUCI_MILO_CFG)
2317 fbb.files['chromium.test.json'] = GPU_DIMENSIONS_WATERFALL_OUTPUT
2318 fbb.check_output_file_consistency(verbose=True)
2319 self.assertFalse(fbb.printed_lines)
2320
Stephen Martinisb72f6d22018-10-04 23:29:012321 def test_mixins_unreferenced(self):
Stephen Martinis0382bc12018-09-17 22:29:072322 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2323 FOO_TEST_SUITE_WITH_MIXIN,
2324 EMPTY_PYL_FILE,
2325 SWARMING_MIXINS,
2326 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502327 with self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
2328 '.*mixins are unreferenced.*'):
2329 fbb.check_input_file_consistency(verbose=True)
2330 self.assertFalse(fbb.printed_lines)
Stephen Martinis0382bc12018-09-17 22:29:072331
Stephen Martinisb72f6d22018-10-04 23:29:012332 def test_mixins_cts(self):
Stephen Martinis7eb8b612018-09-21 00:17:502333 fbb = FakeBBGen(FOO_CTS_WATERFALL_MIXINS,
2334 FOO_CTS_SUITE ,
Stephen Martinis0382bc12018-09-17 22:29:072335 EMPTY_PYL_FILE,
Stephen Martinis7eb8b612018-09-21 00:17:502336 EMPTY_PYL_FILE,
Stephen Martinis0382bc12018-09-17 22:29:072337 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502338 fbb.files['chromium.test.json'] = CTS_OUTPUT
2339 fbb.check_input_file_consistency(verbose=True)
2340 fbb.check_output_file_consistency(verbose=True)
2341 self.assertFalse(fbb.printed_lines)
Stephen Martinis0382bc12018-09-17 22:29:072342
Stephen Martinisb72f6d22018-10-04 23:29:012343 def test_mixins_unused(self):
Stephen Martinisb6a50492018-09-12 23:59:322344 fbb = FakeBBGen(FOO_GTESTS_INVALID_NOTFOUND_MIXIN_WATERFALL,
2345 FOO_TEST_SUITE_WITH_MIXIN,
2346 EMPTY_PYL_FILE,
2347 SWARMING_MIXINS,
2348 LUCI_MILO_CFG)
2349 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
2350 with self.assertRaises(generate_buildbot_json.BBGenErr):
2351 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502352 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322353
Stephen Martinisb72f6d22018-10-04 23:29:012354 def test_mixins_list(self):
Stephen Martinisb6a50492018-09-12 23:59:322355 fbb = FakeBBGen(FOO_GTESTS_INVALID_LIST_MIXIN_WATERFALL,
2356 FOO_TEST_SUITE_WITH_MIXIN,
2357 EMPTY_PYL_FILE,
2358 SWARMING_MIXINS,
2359 LUCI_MILO_CFG)
2360 fbb.files['chromium.test.json'] = DIMENSIONS_MIXIN_WATERFALL_OUTPUT
2361 with self.assertRaises(generate_buildbot_json.BBGenErr):
2362 fbb.check_output_file_consistency(verbose=True)
Stephen Martinis7eb8b612018-09-21 00:17:502363 self.assertFalse(fbb.printed_lines)
Stephen Martinisb6a50492018-09-12 23:59:322364
Stephen Martinisb72f6d22018-10-04 23:29:012365 def test_mixins_must_be_sorted(self):
Stephen Martinisf83893722018-09-19 00:02:182366 fbb = FakeBBGen(FOO_GTESTS_SORTING_MIXINS_WATERFALL,
2367 FOO_TEST_SUITE,
2368 EMPTY_PYL_FILE,
Stephen Martinis54d64ad2018-09-21 22:16:202369 SWARMING_MIXINS_SORTED,
2370 LUCI_MILO_CFG)
2371 fbb.check_input_file_consistency(verbose=True)
2372 self.assertFalse(fbb.printed_lines)
2373
2374 fbb = FakeBBGen(FOO_GTESTS_SORTING_MIXINS_WATERFALL,
2375 FOO_TEST_SUITE,
2376 EMPTY_PYL_FILE,
Stephen Martinisf83893722018-09-19 00:02:182377 SWARMING_MIXINS_UNSORTED,
2378 LUCI_MILO_CFG)
2379 with self.assertRaises(generate_buildbot_json.BBGenErr):
Stephen Martinis7eb8b612018-09-21 00:17:502380 fbb.check_input_file_consistency(verbose=True)
2381 joined_lines = ' '.join(fbb.printed_lines)
2382 self.assertRegexpMatches(
2383 joined_lines, '.*\+._mixin.*')
2384 self.assertRegexpMatches(
2385 joined_lines, '.*\-._mixin.*')
2386 fbb.printed_lines = []
2387 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182388
Stephen Martinis54d64ad2018-09-21 22:16:202389 def test_waterfalls_must_be_sorted(self):
2390 fbb = FakeBBGen(TEST_SUITE_SORTED_WATERFALL,
2391 TEST_SUITE_SORTED,
Stephen Martinisf83893722018-09-19 00:02:182392 EMPTY_PYL_FILE,
Stephen Martinis54d64ad2018-09-21 22:16:202393 EMPTY_PYL_FILE,
2394 LUCI_MILO_CFG_WATERFALL_SORTING)
2395 fbb.check_input_file_consistency(verbose=True)
2396 self.assertFalse(fbb.printed_lines)
2397
2398 fbb = FakeBBGen(TEST_SUITE_UNSORTED_WATERFALL_1,
2399 TEST_SUITE_SORTED,
2400 EMPTY_PYL_FILE,
2401 EMPTY_PYL_FILE,
2402 LUCI_MILO_CFG_WATERFALL_SORTING)
2403 with self.assertRaisesRegexp(
2404 generate_buildbot_json.BBGenErr,
2405 'The following files have invalid keys: waterfalls.pyl'):
2406 fbb.check_input_file_consistency(verbose=True)
2407 joined_lines = '\n'.join(fbb.printed_lines)
2408 self.assertRegexpMatches(
2409 joined_lines, '.*\+chromium\..*test.*')
2410 self.assertRegexpMatches(
2411 joined_lines, '.*\-chromium\..*test.*')
2412 fbb.printed_lines = []
2413 self.assertFalse(fbb.printed_lines)
2414
2415 fbb = FakeBBGen(TEST_SUITE_UNSORTED_WATERFALL_2,
2416 TEST_SUITE_SORTED,
2417 EMPTY_PYL_FILE,
2418 EMPTY_PYL_FILE,
2419 LUCI_MILO_CFG_WATERFALL_SORTING)
2420 with self.assertRaisesRegexp(
2421 generate_buildbot_json.BBGenErr,
2422 'The following files have invalid keys: waterfalls.pyl'):
2423 fbb.check_input_file_consistency(verbose=True)
2424 joined_lines = ' '.join(fbb.printed_lines)
2425 self.assertRegexpMatches(
2426 joined_lines, '.*\+.*Fake Tester.*')
2427 self.assertRegexpMatches(
2428 joined_lines, '.*\-.*Fake Tester.*')
2429 fbb.printed_lines = []
2430 self.assertFalse(fbb.printed_lines)
2431
2432 def test_test_suite_exceptions_must_be_sorted(self):
2433 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2434 TEST_SUITE_SORTED,
2435 EXCEPTIONS_SORTED,
2436 EMPTY_PYL_FILE,
Stephen Martinisf83893722018-09-19 00:02:182437 LUCI_MILO_CFG)
Stephen Martinis7eb8b612018-09-21 00:17:502438 fbb.check_input_file_consistency(verbose=True)
2439 self.assertFalse(fbb.printed_lines)
Stephen Martinisf83893722018-09-19 00:02:182440
Stephen Martinis54d64ad2018-09-21 22:16:202441 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2442 TEST_SUITE_SORTED,
2443 EXCEPTIONS_UNSORTED,
2444 EMPTY_PYL_FILE,
2445 LUCI_MILO_CFG)
2446 with self.assertRaises(generate_buildbot_json.BBGenErr):
2447 fbb.check_input_file_consistency(verbose=True)
2448 joined_lines = ' '.join(fbb.printed_lines)
2449 self.assertRegexpMatches(
2450 joined_lines, '.*\+suite_.*')
2451 self.assertRegexpMatches(
2452 joined_lines, '.*\-suite_.*')
2453 fbb.printed_lines = []
2454 self.assertFalse(fbb.printed_lines)
2455
2456 def test_test_suites_must_be_sorted(self):
2457 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2458 TEST_SUITE_SORTED,
2459 EMPTY_PYL_FILE,
2460 EMPTY_PYL_FILE,
2461 LUCI_MILO_CFG)
2462 fbb.check_input_file_consistency(verbose=True)
2463 self.assertFalse(fbb.printed_lines)
2464
2465 for unsorted in (
2466 TEST_SUITE_UNSORTED_1,
2467 TEST_SUITE_UNSORTED_2,
2468 TEST_SUITE_UNSORTED_3,
2469 ):
2470 fbb = FakeBBGen(TEST_SUITE_SORTING_WATERFALL,
2471 unsorted,
2472 EMPTY_PYL_FILE,
2473 EMPTY_PYL_FILE,
2474 LUCI_MILO_CFG)
2475 with self.assertRaises(generate_buildbot_json.BBGenErr):
2476 fbb.check_input_file_consistency(verbose=True)
2477 joined_lines = ' '.join(fbb.printed_lines)
2478 self.assertRegexpMatches(
2479 joined_lines, '.*\+suite_.*')
2480 self.assertRegexpMatches(
2481 joined_lines, '.*\-suite_.*')
2482 fbb.printed_lines = []
2483 self.assertFalse(fbb.printed_lines)
2484
Stephen Martinisb72f6d22018-10-04 23:29:012485 def test_mixins_no_duplicate_keys(self):
Stephen Martinis54d64ad2018-09-21 22:16:202486 fbb = FakeBBGen(FOO_GTESTS_BUILDER_MIXIN_WATERFALL,
2487 FOO_TEST_SUITE,
2488 EMPTY_PYL_FILE,
2489 SWARMING_MIXINS_DUPLICATED,
2490 LUCI_MILO_CFG)
2491 with self.assertRaisesRegexp(
2492 generate_buildbot_json.BBGenErr,
Stephen Martinisb72f6d22018-10-04 23:29:012493 'The following files have invalid keys: mixins.pyl'):
Stephen Martinis54d64ad2018-09-21 22:16:202494 fbb.check_input_file_consistency(verbose=True)
2495 joined_lines = ' '.join(fbb.printed_lines)
2496 self.assertRegexpMatches(
2497 joined_lines, 'Key .* is duplicated')
2498 fbb.printed_lines = []
2499 self.assertFalse(fbb.printed_lines)
2500
2501 def test_type_assert_printing_help(self):
2502 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
2503 TEST_SUITES_SYNTAX_ERROR,
2504 EMPTY_PYL_FILE,
2505 EMPTY_PYL_FILE,
2506 LUCI_MILO_CFG)
2507 with self.assertRaisesRegexp(
2508 generate_buildbot_json.BBGenErr,
2509 'Invalid \.pyl file \'test_suites.pyl\'.*'):
2510 fbb.check_input_file_consistency(verbose=True)
2511 self.assertEquals(
2512 fbb.printed_lines, [
2513 '== test_suites.pyl ==',
2514 '<snip>',
2515 '1 {',
2516 "2 'basic_suites': {",
2517 '--------------------------------------------------------------------'
2518 '------------',
2519 '3 3: {',
2520 '-------^------------------------------------------------------------'
2521 '------------',
2522 "4 'suite_c': {},",
2523 '5 },',
2524 '<snip>',
2525 ])
2526
2527
Dirk Pranke1b767092017-12-07 04:44:232528
Kenneth Russelleb60cbd22017-12-05 07:54:282529if __name__ == '__main__':
2530 unittest.main()