blob: 8ffc29a3938ee2f317893ad2bf0f138a776129e7 [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):
Kenneth Russell78fd8702018-05-17 01:15:5216 def __init__(self, waterfalls, test_suites, exceptions, luci_milo_cfg):
Kenneth Russelleb60cbd22017-12-05 07:54:2817 super(FakeBBGen, self).__init__()
18 self.files = {
19 'waterfalls.pyl': waterfalls,
20 'test_suites.pyl': test_suites,
21 'test_suite_exceptions.pyl': exceptions,
S. Ganesh808efbb2018-05-18 01:29:3322 os.path.join( '..', '..', 'infra', 'config', 'global', 'luci-milo.cfg'):
23 luci_milo_cfg,
Kenneth Russelleb60cbd22017-12-05 07:54:2824 }
25
26 def read_file(self, relative_path):
27 return self.files[relative_path]
28
29 def write_file(self, relative_path, contents):
30 self.files[relative_path] = contents
31
32
33FOO_GTESTS_WATERFALL = """\
34[
35 {
36 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:4337 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:2838 'Fake Tester': {
39 'swarming': {
40 'dimension_sets': [
41 {
42 'kvm': '1',
43 },
44 ],
45 },
46 'test_suites': {
47 'gtest_tests': 'foo_tests',
48 },
49 },
50 },
51 },
52]
53"""
54
Kenneth Russell650995a2018-05-03 21:17:0155FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL = """\
56[
57 {
58 'name': 'chromium.test',
59 'machines': {
60 'Fake Tester': {
61 'test_suites': {
62 'gtest_tests': 'foo_tests',
63 },
64 'args': [
65 '--enable-features=Baz',
66 ],
67 },
68 },
69 },
70]
71"""
72
Shenghua Zhangaba8bad2018-02-07 02:12:0973FOO_GTESTS_MULTI_DIMENSION_WATERFALL = """\
74[
75 {
76 'name': 'chromium.test',
77 'machines': {
78 'Fake Tester': {
79 'swarming': {
80 'dimension_sets': [
81 {
82 "gpu": "none",
83 "os": "1",
84 },
85 ],
86 },
87 'use_multi_dimension_trigger_script': True,
88 'alternate_swarming_dimensions': [
89 {
90 "gpu": "none",
91 "os": "2",
92 },
93 ],
94 'test_suites': {
95 'gtest_tests': 'foo_tests',
96 },
97 },
98 },
99 },
100]
101"""
102
Kenneth Russell8a386d42018-06-02 09:48:01103FOO_LINUX_GTESTS_WATERFALL = """\
104[
105 {
106 'name': 'chromium.test',
107 'machines': {
108 'Fake Tester': {
109 'os_type': 'linux',
110 'test_suites': {
111 'gtest_tests': 'foo_tests',
112 },
113 },
114 },
115 },
116]
117"""
118
Kenneth Russelleb60cbd22017-12-05 07:54:28119COMPOSITION_GTEST_SUITE_WATERFALL = """\
120[
121 {
122 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43123 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28124 'Fake Tester': {
125 'test_suites': {
126 'gtest_tests': 'composition_tests',
127 },
128 },
129 },
130 },
131]
132"""
133
John Budorickedfe7f872018-01-23 15:27:22134COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL = """\
135[
136 {
137 'name': 'chromium.test',
138 'machines': {
139 'Fake Tester': {
140 'test_suites': {
141 'gtest_tests': 'composition_tests',
142 },
143 'args': [
144 '--this-is-an-argument',
145 ],
146 },
147 },
148 },
149]
150"""
151
Kenneth Russelleb60cbd22017-12-05 07:54:28152FOO_ISOLATED_SCRIPTS_WATERFALL = """\
153[
154 {
155 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43156 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28157 'Fake Tester': {
158 'test_suites': {
159 'isolated_scripts': 'composition_tests',
160 },
161 },
162 },
163 },
164]
165"""
166
167FOO_SCRIPT_WATERFALL = """\
168[
169 {
170 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43171 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28172 'Fake Tester': {
173 'test_suites': {
174 'scripts': 'foo_scripts',
175 },
176 },
177 },
178 },
179]
180"""
181
182FOO_JUNIT_WATERFALL = """\
183[
184 {
185 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43186 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28187 'Fake Tester': {
188 'test_suites': {
189 'junit_tests': 'composition_tests',
190 },
191 },
192 },
193 },
194]
195"""
196
197FOO_CTS_WATERFALL = """\
198[
199 {
200 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43201 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28202 'Fake Tester': {
203 'test_suites': {
204 'cts_tests': 'foo_cts_tests',
205 },
206 },
207 },
208 },
209]
210"""
211
212FOO_INSTRUMENTATION_TEST_WATERFALL = """\
213[
214 {
215 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43216 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28217 'Fake Tester': {
218 'test_suites': {
219 'instrumentation_tests': 'composition_tests',
220 },
221 },
222 },
223 },
224]
225"""
226
Kenneth Russell8a386d42018-06-02 09:48:01227FOO_GPU_TELEMETRY_TEST_WATERFALL = """\
228[
229 {
230 'name': 'chromium.test',
231 'machines': {
232 'Fake Tester': {
233 'os_type': 'win',
234 'browser_config': 'release',
235 'swarming': {
236 'dimension_sets': [
237 {
238 'gpu': '10de:1cb3',
239 },
240 ],
241 },
242 'test_suites': {
243 'gpu_telemetry_tests': 'composition_tests',
244 },
245 },
246 },
247 },
248]
249"""
250
Kenneth Russelleb60cbd22017-12-05 07:54:28251UNKNOWN_TEST_SUITE_WATERFALL = """\
252[
253 {
254 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43255 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28256 'Fake Tester': {
257 'test_suites': {
258 'gtest_tests': 'baz_tests',
259 },
260 },
261 },
262 },
263]
264"""
265
266UNKNOWN_TEST_SUITE_TYPE_WATERFALL = """\
267[
268 {
269 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43270 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28271 'Fake Tester': {
272 'test_suites': {
273 'gtest_tests': 'foo_tests',
274 'foo_test_type': 'foo_tests',
275 },
276 },
277 },
278 },
279]
280"""
281
282ANDROID_WATERFALL = """\
283[
284 {
285 'name': 'chromium.test',
Kenneth Russell139f8642017-12-05 08:51:43286 'machines': {
Kenneth Russelleb60cbd22017-12-05 07:54:28287 'Android Builder': {
288 'additional_compile_targets': [
289 'bar_test',
290 ],
291 },
Kenneth Russelleb60cbd22017-12-05 07:54:28292 'Fake Android K Tester': {
293 'additional_compile_targets': [
294 'bar_test',
295 ],
296 'swarming': {
297 'dimension_sets': [
298 {
299 'device_os': 'KTU84P',
300 'device_type': 'hammerhead',
301 },
302 ],
303 },
304 'os_type': 'android',
Nico Weber79dc5f6852018-07-13 19:38:49305 'skip_merge_script': True,
Kenneth Russelleb60cbd22017-12-05 07:54:28306 'test_suites': {
307 'gtest_tests': 'foo_tests',
308 },
309 },
310 'Fake Android L Tester': {
311 'swarming': {
312 'dimension_sets': [
313 {
314 'device_os': 'KTU84P',
315 'device_type': 'hammerhead',
316 },
317 ],
318 },
319 'os_type': 'android',
320 'skip_merge_script': True,
321 'skip_output_links': True,
322 'test_suites': {
323 'gtest_tests': 'foo_tests',
324 },
325 },
326 'Fake Android M Tester': {
327 'swarming': {
328 'dimension_sets': [
329 {
330 'device_os': 'MMB29Q',
331 'device_type': 'bullhead',
332 },
333 ],
334 },
335 'os_type': 'android',
336 'use_swarming': False,
337 'test_suites': {
338 'gtest_tests': 'foo_tests',
339 },
340 },
341 },
342 },
343]
344"""
345
Nico Weberd18b8962018-05-16 19:39:38346UNKNOWN_BOT_GTESTS_WATERFALL = """\
347[
348 {
349 'name': 'chromium.test',
350 'machines': {
351 'Unknown Bot': {
352 'test_suites': {
353 'gtest_tests': 'foo_tests',
354 },
355 },
356 },
357 },
358]
359"""
360
Kenneth Russelleb60cbd22017-12-05 07:54:28361FOO_TEST_SUITE = """\
362{
363 'foo_tests': {
364 'foo_test': {
365 'swarming': {
366 'dimension_sets': [
367 {
368 'integrity': 'high',
369 }
370 ],
371 'expiration': 120,
372 },
373 },
374 },
375}
376"""
377
Kenneth Russell8ceeabf2017-12-11 17:53:28378FOO_TEST_SUITE_WITH_ARGS = """\
379{
380 'foo_tests': {
381 'foo_test': {
382 'args': [
383 '--c_arg',
384 ],
385 },
386 },
387}
388"""
389
Kenneth Russell8a386d42018-06-02 09:48:01390FOO_TEST_SUITE_WITH_LINUX_ARGS = """\
391{
392 'foo_tests': {
393 'foo_test': {
394 'linux_args': [
395 '--no-xvfb',
396 ],
397 },
398 },
399}
400"""
401
Kenneth Russell650995a2018-05-03 21:17:01402FOO_TEST_SUITE_WITH_ENABLE_FEATURES = """\
403{
404 'foo_tests': {
405 'foo_test': {
406 'args': [
407 '--enable-features=Foo,Bar',
408 ],
409 },
410 },
411}
412"""
413
Kenneth Russelleb60cbd22017-12-05 07:54:28414FOO_SCRIPT_SUITE = """\
415{
416 'foo_scripts': {
417 'foo_test': {
418 'script': 'foo.py',
419 },
420 'bar_test': {
421 'script': 'bar.py',
422 },
423 },
424}
425"""
426
427FOO_CTS_SUITE = """\
428{
429 'foo_cts_tests': {
430 'arch': 'arm64',
431 'platform': 'L',
432 },
433}
434"""
435
436GOOD_COMPOSITION_TEST_SUITES = """\
437{
438 'foo_tests': {
439 'foo_test': {},
440 },
441 'bar_tests': {
442 'bar_test': {},
443 },
444 'composition_tests': [
445 'foo_tests',
446 'bar_tests',
447 ],
448}
449"""
450
451BAD_COMPOSITION_TEST_SUITES = """\
452{
453 'foo_tests': {},
454 'bar_tests': {},
455 'buggy_composition_tests': [
456 'bar_tests',
457 ],
458 'composition_tests': [
459 'foo_tests',
460 'buggy_composition_tests',
461 ],
462}
463"""
464
Kenneth Russell8ceeabf2017-12-11 17:53:28465INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES = """\
466{
467 'composition_tests': {
468 'foo_tests': {
469 'test': 'foo_test',
470 },
471 'bar_tests': {
472 'test': 'foo_test',
473 },
474 },
475}
476"""
477
Dirk Pranke1b767092017-12-07 04:44:23478SCRIPT_SUITE = """\
479{
480 'foo_scripts': {
481 'foo_test': {
482 'script': 'foo.py',
483 },
484 },
485}
486"""
487
Kenneth Russelleb60cbd22017-12-05 07:54:28488UNREFED_TEST_SUITE = """\
489{
490 'foo_tests': {},
491 'bar_tests': {},
492}
493"""
494
495REUSING_TEST_WITH_DIFFERENT_NAME = """\
496{
497 'foo_tests': {
498 'foo_test': {},
499 'variation_test': {
500 'args': [
501 '--variation',
502 ],
503 'test': 'foo_test',
504 },
505 },
506}
507"""
508
Kenneth Russell8a386d42018-06-02 09:48:01509COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST = """\
510{
511 'foo_tests': {
512 'foo': {},
513 },
514 'bar_tests': {
515 'bar_test': {},
516 },
517 'composition_tests': [
518 'foo_tests',
519 'bar_tests',
520 ],
521}
522"""
523
Kenneth Russelleb60cbd22017-12-05 07:54:28524EMPTY_EXCEPTIONS = """\
525{
526}
527"""
528
Dirk Pranke1b767092017-12-07 04:44:23529SCRIPT_WITH_ARGS_EXCEPTIONS = """\
530{
531 'foo_test': {
532 'modifications': {
533 'Fake Tester': {
534 'args': ['--fake-arg'],
535 },
536 },
537 },
538}
539"""
540
Kenneth Russelleb60cbd22017-12-05 07:54:28541NO_BAR_TEST_EXCEPTIONS = """\
542{
543 'bar_test': {
544 'remove_from': [
545 'Fake Tester',
546 ]
547 }
548}
549"""
550
551EMPTY_BAR_TEST_EXCEPTIONS = """\
552{
553 'bar_test': {
554 }
555}
556"""
557
558FOO_TEST_MODIFICATIONS = """\
559{
560 'foo_test': {
561 'modifications': {
562 'Fake Tester': {
563 'args': [
564 '--bar',
565 ],
566 'swarming': {
567 'hard_timeout': 600,
568 },
569 },
570 },
571 }
572}
573"""
574
Kenneth Russelleb60cbd22017-12-05 07:54:28575NONEXISTENT_REMOVAL = """\
576{
577 'foo_test': {
578 'remove_from': [
579 'Nonexistent Tester',
580 ]
581 }
582}
583"""
584
585NONEXISTENT_MODIFICATION = """\
586{
587 'foo_test': {
588 'modifications': {
589 'Nonexistent Tester': {
590 'args': [],
591 },
592 },
593 }
594}
595"""
596
597COMPOSITION_WATERFALL_OUTPUT = """\
598{
599 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
600 "AAAAA2 See generate_buildbot_json.py to make changes": {},
601 "Fake Tester": {
602 "gtest_tests": [
603 {
604 "swarming": {
605 "can_use_on_swarming_builders": true
606 },
607 "test": "bar_test"
608 },
609 {
610 "swarming": {
611 "can_use_on_swarming_builders": true
612 },
613 "test": "foo_test"
614 }
615 ]
616 }
617}
618"""
619
John Budorickedfe7f872018-01-23 15:27:22620COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT = """\
621{
622 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
623 "AAAAA2 See generate_buildbot_json.py to make changes": {},
624 "Fake Tester": {
625 "gtest_tests": [
626 {
627 "args": [
628 "--this-is-an-argument"
629 ],
630 "swarming": {
631 "can_use_on_swarming_builders": true
632 },
633 "test": "bar_test"
634 },
635 {
636 "args": [
637 "--this-is-an-argument"
638 ],
639 "swarming": {
640 "can_use_on_swarming_builders": true
641 },
642 "test": "foo_test"
643 }
644 ]
645 }
646}
647"""
648
Kenneth Russelleb60cbd22017-12-05 07:54:28649VARIATION_GTEST_OUTPUT = """\
650{
651 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
652 "AAAAA2 See generate_buildbot_json.py to make changes": {},
653 "Fake Tester": {
654 "gtest_tests": [
655 {
656 "swarming": {
657 "can_use_on_swarming_builders": true,
658 "dimension_sets": [
659 {
660 "kvm": "1"
661 }
662 ]
663 },
664 "test": "foo_test"
665 },
666 {
667 "args": [
668 "--variation"
669 ],
670 "name": "variation_test",
671 "swarming": {
672 "can_use_on_swarming_builders": true,
673 "dimension_sets": [
674 {
675 "kvm": "1"
676 }
677 ]
678 },
679 "test": "foo_test"
680 }
681 ]
682 }
683}
684"""
685
686COMPOSITION_WATERFALL_FILTERED_OUTPUT = """\
687{
688 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
689 "AAAAA2 See generate_buildbot_json.py to make changes": {},
690 "Fake Tester": {
691 "gtest_tests": [
692 {
693 "swarming": {
694 "can_use_on_swarming_builders": true
695 },
696 "test": "foo_test"
697 }
698 ]
699 }
700}
701"""
702
Kenneth Russell8ceeabf2017-12-11 17:53:28703MERGED_ARGS_OUTPUT = """\
704{
705 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
706 "AAAAA2 See generate_buildbot_json.py to make changes": {},
707 "Fake Tester": {
708 "gtest_tests": [
709 {
710 "args": [
Stephen Martinis3bed2ab2018-04-23 19:42:06711 "--c_arg",
712 "--bar"
Kenneth Russell8ceeabf2017-12-11 17:53:28713 ],
714 "swarming": {
715 "can_use_on_swarming_builders": true,
716 "dimension_sets": [
717 {
718 "kvm": "1"
719 }
720 ],
721 "hard_timeout": 600
722 },
723 "test": "foo_test"
724 }
725 ]
726 }
727}
728"""
729
Kenneth Russell8a386d42018-06-02 09:48:01730LINUX_ARGS_OUTPUT = """\
731{
732 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
733 "AAAAA2 See generate_buildbot_json.py to make changes": {},
734 "Fake Tester": {
735 "gtest_tests": [
736 {
737 "args": [
738 "--no-xvfb"
739 ],
740 "swarming": {
741 "can_use_on_swarming_builders": true
742 },
743 "test": "foo_test"
744 }
745 ]
746 }
747}
748"""
749
Kenneth Russell650995a2018-05-03 21:17:01750MERGED_ENABLE_FEATURES_OUTPUT = """\
751{
752 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
753 "AAAAA2 See generate_buildbot_json.py to make changes": {},
754 "Fake Tester": {
755 "gtest_tests": [
756 {
757 "args": [
758 "--enable-features=Foo,Bar,Baz"
759 ],
760 "swarming": {
761 "can_use_on_swarming_builders": true
762 },
763 "test": "foo_test"
764 }
765 ]
766 }
767}
768"""
769
Kenneth Russelleb60cbd22017-12-05 07:54:28770MODIFIED_OUTPUT = """\
771{
772 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
773 "AAAAA2 See generate_buildbot_json.py to make changes": {},
774 "Fake Tester": {
775 "gtest_tests": [
776 {
777 "args": [
778 "--bar"
779 ],
780 "swarming": {
781 "can_use_on_swarming_builders": true,
782 "dimension_sets": [
783 {
784 "integrity": "high",
785 "kvm": "1"
786 }
787 ],
788 "expiration": 120,
789 "hard_timeout": 600
790 },
791 "test": "foo_test"
792 }
793 ]
794 }
795}
796"""
797
798ISOLATED_SCRIPT_OUTPUT = """\
799{
800 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
801 "AAAAA2 See generate_buildbot_json.py to make changes": {},
802 "Fake Tester": {
803 "isolated_scripts": [
804 {
805 "isolate_name": "foo_test",
806 "name": "foo_test",
807 "swarming": {
808 "can_use_on_swarming_builders": true
809 }
810 }
811 ]
812 }
813}
814"""
815
816SCRIPT_OUTPUT = """\
817{
818 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
819 "AAAAA2 See generate_buildbot_json.py to make changes": {},
820 "Fake Tester": {
821 "scripts": [
822 {
823 "name": "foo_test",
824 "script": "foo.py"
825 }
826 ]
827 }
828}
829"""
830
Dirk Pranke1b767092017-12-07 04:44:23831SCRIPT_WITH_ARGS_OUTPUT = """\
832{
833 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
834 "AAAAA2 See generate_buildbot_json.py to make changes": {},
835 "Fake Tester": {
836 "scripts": [
837 {
838 "args": [
839 "--fake-arg"
840 ],
841 "name": "foo_test",
842 "script": "foo.py"
843 }
844 ]
845 }
846}
847"""
848
Kenneth Russelleb60cbd22017-12-05 07:54:28849JUNIT_OUTPUT = """\
850{
851 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
852 "AAAAA2 See generate_buildbot_json.py to make changes": {},
853 "Fake Tester": {
854 "junit_tests": [
855 {
856 "test": "foo_test"
857 }
858 ]
859 }
860}
861"""
862
863CTS_OUTPUT = """\
864{
865 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
866 "AAAAA2 See generate_buildbot_json.py to make changes": {},
867 "Fake Tester": {
868 "cts_tests": [
869 {
870 "arch": "arm64",
871 "platform": "L"
872 }
873 ]
874 }
875}
876"""
877
878INSTRUMENTATION_TEST_OUTPUT = """\
879{
880 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
881 "AAAAA2 See generate_buildbot_json.py to make changes": {},
882 "Fake Tester": {
883 "instrumentation_tests": [
884 {
885 "test": "foo_test"
886 }
887 ]
888 }
889}
890"""
891
Kenneth Russell8ceeabf2017-12-11 17:53:28892INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT = """\
893{
894 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
895 "AAAAA2 See generate_buildbot_json.py to make changes": {},
896 "Fake Tester": {
897 "instrumentation_tests": [
898 {
899 "name": "bar_tests",
900 "test": "foo_test"
901 },
902 {
903 "name": "foo_tests",
904 "test": "foo_test"
905 }
906 ]
907 }
908}
909"""
910
Kenneth Russell8a386d42018-06-02 09:48:01911GPU_TELEMETRY_TEST_OUTPUT = """\
912{
913 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
914 "AAAAA2 See generate_buildbot_json.py to make changes": {},
915 "Fake Tester": {
916 "isolated_scripts": [
917 {
918 "args": [
919 "foo",
920 "--show-stdout",
921 "--browser=release",
922 "--passthrough",
923 "-v",
924 "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
925 ],
926 "isolate_name": "telemetry_gpu_integration_test",
927 "name": "foo_tests",
928 "swarming": {
929 "can_use_on_swarming_builders": true,
930 "dimension_sets": [
931 {
932 "gpu": "10de:1cb3"
933 }
934 ]
935 }
936 }
937 ]
938 }
939}
940"""
941
Kenneth Russelleb60cbd22017-12-05 07:54:28942ANDROID_WATERFALL_OUTPUT = """\
943{
944 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
945 "AAAAA2 See generate_buildbot_json.py to make changes": {},
946 "Android Builder": {
947 "additional_compile_targets": [
948 "bar_test"
949 ]
950 },
951 "Fake Android K Tester": {
952 "additional_compile_targets": [
953 "bar_test"
954 ],
955 "gtest_tests": [
956 {
John Budorick826d5ed2017-12-28 19:27:32957 "args": [
Kenneth Russell5612d64a2018-06-02 21:12:30958 "--gs-results-bucket=chromium-result-details",
959 "--recover-devices"
John Budorick826d5ed2017-12-28 19:27:32960 ],
Kenneth Russelleb60cbd22017-12-05 07:54:28961 "swarming": {
962 "can_use_on_swarming_builders": true,
963 "cipd_packages": [
964 {
965 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
966 "location": "bin",
967 "revision": \
968"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
969 }
970 ],
971 "dimension_sets": [
972 {
973 "device_os": "KTU84P",
974 "device_type": "hammerhead",
975 "integrity": "high"
976 }
977 ],
978 "expiration": 120,
979 "output_links": [
980 {
981 "link": [
982 "https://luci-logdog.appspot.com/v/?s",
983 "=android%2Fswarming%2Flogcats%2F",
984 "${TASK_ID}%2F%2B%2Funified_logcats"
985 ],
986 "name": "shard #${SHARD_INDEX} logcats"
987 }
988 ]
989 },
990 "test": "foo_test"
991 }
992 ]
993 },
994 "Fake Android L Tester": {
995 "gtest_tests": [
996 {
Benjamin Pastene766d48f52017-12-18 21:47:42997 "args": [
John Budorick826d5ed2017-12-28 19:27:32998 "--gs-results-bucket=chromium-result-details",
Benjamin Pastene766d48f52017-12-18 21:47:42999 "--recover-devices"
1000 ],
Kenneth Russelleb60cbd22017-12-05 07:54:281001 "swarming": {
1002 "can_use_on_swarming_builders": true,
1003 "cipd_packages": [
1004 {
1005 "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
1006 "location": "bin",
1007 "revision": \
1008"git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
1009 }
1010 ],
1011 "dimension_sets": [
1012 {
1013 "device_os": "KTU84P",
1014 "device_type": "hammerhead",
1015 "integrity": "high"
1016 }
1017 ],
1018 "expiration": 120
1019 },
1020 "test": "foo_test"
1021 }
1022 ]
1023 },
1024 "Fake Android M Tester": {
1025 "gtest_tests": [
1026 {
1027 "swarming": {
1028 "can_use_on_swarming_builders": false
1029 },
1030 "test": "foo_test"
1031 }
1032 ]
1033 }
1034}
1035"""
1036
Shenghua Zhangaba8bad2018-02-07 02:12:091037MULTI_DIMENSION_OUTPUT = """\
1038{
1039 "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
1040 "AAAAA2 See generate_buildbot_json.py to make changes": {},
1041 "Fake Tester": {
1042 "gtest_tests": [
1043 {
1044 "swarming": {
1045 "can_use_on_swarming_builders": true,
1046 "dimension_sets": [
1047 {
1048 "gpu": "none",
1049 "integrity": "high",
1050 "os": "1"
1051 }
1052 ],
1053 "expiration": 120
1054 },
1055 "test": "foo_test",
1056 "trigger_script": {
1057 "args": [
1058 "--multiple-trigger-configs",
1059 "[{\\"gpu\\": \\"none\\", \\"os\\": \\"1\\"}, \
1060{\\"gpu\\": \\"none\\", \\"os\\": \\"2\\"}]",
1061 "--multiple-dimension-script-verbose",
1062 "True"
1063 ],
1064 "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
1065 }
1066 }
1067 ]
1068 }
1069}
1070"""
1071
Kenneth Russell78fd8702018-05-17 01:15:521072LUCI_MILO_CFG = """\
1073consoles {
1074 builders {
1075 name: "buildbucket/luci.chromium.ci/Fake Tester"
1076 }
1077}
1078"""
1079
Kenneth Russelleb60cbd22017-12-05 07:54:281080class UnitTest(unittest.TestCase):
1081 def test_base_generator(self):
1082 # Only needed for complete code coverage.
1083 self.assertRaises(NotImplementedError,
1084 generate_buildbot_json.BaseGenerator(None).generate,
1085 None, None, None, None)
1086 self.assertRaises(NotImplementedError,
1087 generate_buildbot_json.BaseGenerator(None).sort,
1088 None)
1089
1090 def test_good_test_suites_are_ok(self):
1091 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1092 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521093 EMPTY_EXCEPTIONS,
1094 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281095 fbb.check_input_file_consistency()
1096
Shenghua Zhangaba8bad2018-02-07 02:12:091097 def test_good_multi_dimension_test_suites_are_ok(self):
1098 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
1099 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521100 EMPTY_EXCEPTIONS,
1101 LUCI_MILO_CFG)
Shenghua Zhangaba8bad2018-02-07 02:12:091102 fbb.check_input_file_consistency()
1103
Kenneth Russelleb60cbd22017-12-05 07:54:281104 def test_good_composition_test_suites_are_ok(self):
1105 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1106 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521107 EMPTY_EXCEPTIONS,
1108 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281109 fbb.check_input_file_consistency()
1110
1111 def test_bad_composition_test_suites_are_caught(self):
1112 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1113 BAD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521114 EMPTY_EXCEPTIONS,
1115 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281116 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1117 'Composition test suites may not refer to.*',
1118 fbb.check_input_file_consistency)
1119
1120 def test_unknown_test_suites_are_caught(self):
1121 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_WATERFALL,
1122 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521123 EMPTY_EXCEPTIONS,
1124 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281125 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1126 'Test suite baz_tests from machine.*',
1127 fbb.check_input_file_consistency)
1128
1129 def test_unknown_test_suite_types_are_caught(self):
1130 fbb = FakeBBGen(UNKNOWN_TEST_SUITE_TYPE_WATERFALL,
1131 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521132 EMPTY_EXCEPTIONS,
1133 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281134 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1135 'Unknown test suite type foo_test_type.*',
1136 fbb.check_input_file_consistency)
1137
1138 def test_unrefed_test_suite_caught(self):
1139 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1140 UNREFED_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521141 EMPTY_EXCEPTIONS,
1142 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281143 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1144 '.*unreferenced.*bar_tests.*',
1145 fbb.check_input_file_consistency)
1146
1147 def test_good_waterfall_output(self):
1148 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1149 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521150 EMPTY_EXCEPTIONS,
1151 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281152 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
1153 fbb.check_output_file_consistency(verbose=True)
1154
1155 def test_reusing_gtest_targets(self):
1156 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1157 REUSING_TEST_WITH_DIFFERENT_NAME,
Kenneth Russell78fd8702018-05-17 01:15:521158 EMPTY_EXCEPTIONS,
1159 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281160 fbb.files['chromium.test.json'] = VARIATION_GTEST_OUTPUT
1161 fbb.check_output_file_consistency(verbose=True)
1162
1163 def test_noop_exception_does_nothing(self):
1164 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1165 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521166 EMPTY_BAR_TEST_EXCEPTIONS,
1167 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281168 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_OUTPUT
1169 fbb.check_output_file_consistency(verbose=True)
1170
Kenneth Russell8ceeabf2017-12-11 17:53:281171 def test_test_arg_merges(self):
1172 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1173 FOO_TEST_SUITE_WITH_ARGS,
Kenneth Russell78fd8702018-05-17 01:15:521174 FOO_TEST_MODIFICATIONS,
1175 LUCI_MILO_CFG)
Kenneth Russell8ceeabf2017-12-11 17:53:281176 fbb.files['chromium.test.json'] = MERGED_ARGS_OUTPUT
1177 fbb.check_output_file_consistency(verbose=True)
1178
Kenneth Russell650995a2018-05-03 21:17:011179 def test_enable_features_arg_merges(self):
1180 fbb = FakeBBGen(FOO_GTESTS_WITH_ENABLE_FEATURES_WATERFALL,
1181 FOO_TEST_SUITE_WITH_ENABLE_FEATURES,
Kenneth Russell78fd8702018-05-17 01:15:521182 EMPTY_EXCEPTIONS,
1183 LUCI_MILO_CFG)
Kenneth Russell650995a2018-05-03 21:17:011184 fbb.files['chromium.test.json'] = MERGED_ENABLE_FEATURES_OUTPUT
1185 fbb.check_output_file_consistency(verbose=True)
1186
Kenneth Russell8a386d42018-06-02 09:48:011187 def test_linux_args(self):
1188 fbb = FakeBBGen(FOO_LINUX_GTESTS_WATERFALL,
1189 FOO_TEST_SUITE_WITH_LINUX_ARGS,
1190 EMPTY_EXCEPTIONS,
1191 LUCI_MILO_CFG)
1192 fbb.files['chromium.test.json'] = LINUX_ARGS_OUTPUT
1193 fbb.check_output_file_consistency(verbose=True)
1194
Kenneth Russelleb60cbd22017-12-05 07:54:281195 def test_test_filtering(self):
1196 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1197 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521198 NO_BAR_TEST_EXCEPTIONS,
1199 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281200 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_FILTERED_OUTPUT
1201 fbb.check_output_file_consistency(verbose=True)
1202
1203 def test_test_modifications(self):
1204 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1205 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521206 FOO_TEST_MODIFICATIONS,
1207 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281208 fbb.files['chromium.test.json'] = MODIFIED_OUTPUT
1209 fbb.check_output_file_consistency(verbose=True)
1210
1211 def test_isolated_script_tests(self):
1212 fbb = FakeBBGen(FOO_ISOLATED_SCRIPTS_WATERFALL,
1213 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521214 NO_BAR_TEST_EXCEPTIONS,
1215 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281216 fbb.files['chromium.test.json'] = ISOLATED_SCRIPT_OUTPUT
1217 fbb.check_output_file_consistency(verbose=True)
1218
Dirk Pranke1b767092017-12-07 04:44:231219 def test_script_with_args(self):
1220 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
1221 SCRIPT_SUITE,
1222 SCRIPT_WITH_ARGS_EXCEPTIONS,
Kenneth Russell78fd8702018-05-17 01:15:521223 LUCI_MILO_CFG)
Dirk Pranke1b767092017-12-07 04:44:231224 fbb.files['chromium.test.json'] = SCRIPT_WITH_ARGS_OUTPUT
1225 fbb.check_output_file_consistency(verbose=True)
1226
1227 def test_script(self):
Kenneth Russelleb60cbd22017-12-05 07:54:281228 fbb = FakeBBGen(FOO_SCRIPT_WATERFALL,
1229 FOO_SCRIPT_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521230 NO_BAR_TEST_EXCEPTIONS,
1231 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281232 fbb.files['chromium.test.json'] = SCRIPT_OUTPUT
1233 fbb.check_output_file_consistency(verbose=True)
1234
1235 def test_junit_tests(self):
1236 fbb = FakeBBGen(FOO_JUNIT_WATERFALL,
1237 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521238 NO_BAR_TEST_EXCEPTIONS,
1239 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281240 fbb.files['chromium.test.json'] = JUNIT_OUTPUT
1241 fbb.check_output_file_consistency(verbose=True)
1242
1243 def test_cts_tests(self):
1244 fbb = FakeBBGen(FOO_CTS_WATERFALL,
1245 FOO_CTS_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521246 EMPTY_EXCEPTIONS,
1247 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281248 fbb.files['chromium.test.json'] = CTS_OUTPUT
1249 fbb.check_output_file_consistency(verbose=True)
1250
1251 def test_instrumentation_tests(self):
1252 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
1253 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521254 NO_BAR_TEST_EXCEPTIONS,
1255 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281256 fbb.files['chromium.test.json'] = INSTRUMENTATION_TEST_OUTPUT
1257 fbb.check_output_file_consistency(verbose=True)
1258
Kenneth Russell8a386d42018-06-02 09:48:011259 def test_gpu_telemetry_tests(self):
1260 fbb = FakeBBGen(FOO_GPU_TELEMETRY_TEST_WATERFALL,
1261 COMPOSITION_SUITE_WITH_NAME_NOT_ENDING_IN_TEST,
1262 NO_BAR_TEST_EXCEPTIONS,
1263 LUCI_MILO_CFG)
1264 fbb.files['chromium.test.json'] = GPU_TELEMETRY_TEST_OUTPUT
1265 fbb.check_output_file_consistency(verbose=True)
1266
Kenneth Russell8ceeabf2017-12-11 17:53:281267 def test_instrumentation_tests_with_different_names(self):
1268 fbb = FakeBBGen(FOO_INSTRUMENTATION_TEST_WATERFALL,
1269 INSTRUMENTATION_TESTS_WITH_DIFFERENT_NAMES,
Kenneth Russell78fd8702018-05-17 01:15:521270 EMPTY_EXCEPTIONS,
1271 LUCI_MILO_CFG)
Kenneth Russell8ceeabf2017-12-11 17:53:281272 fbb.files['chromium.test.json'] = \
1273 INSTRUMENTATION_TEST_DIFFERENT_NAMES_OUTPUT
1274 fbb.check_output_file_consistency(verbose=True)
1275
Kenneth Russelleb60cbd22017-12-05 07:54:281276 def test_ungenerated_output_files_are_caught(self):
1277 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WATERFALL,
1278 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521279 NO_BAR_TEST_EXCEPTIONS,
1280 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281281 fbb.files['chromium.test.json'] = (
1282 '\n' + COMPOSITION_WATERFALL_FILTERED_OUTPUT)
1283 self.assertRaises(generate_buildbot_json.BBGenErr,
1284 fbb.check_output_file_consistency)
1285
1286 def test_android_output_options(self):
1287 fbb = FakeBBGen(ANDROID_WATERFALL,
1288 FOO_TEST_SUITE,
Nico Weber79dc5f6852018-07-13 19:38:491289 EMPTY_EXCEPTIONS,
Kenneth Russell78fd8702018-05-17 01:15:521290 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281291 fbb.files['chromium.test.json'] = ANDROID_WATERFALL_OUTPUT
1292 fbb.check_output_file_consistency(verbose=True)
1293
1294 def test_nonexistent_removal_raises(self):
1295 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1296 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521297 NONEXISTENT_REMOVAL,
1298 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281299 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1300 'The following nonexistent machines.*',
1301 fbb.check_input_file_consistency)
1302
1303 def test_nonexistent_modification_raises(self):
1304 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1305 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521306 NONEXISTENT_MODIFICATION,
1307 LUCI_MILO_CFG)
Kenneth Russelleb60cbd22017-12-05 07:54:281308 self.assertRaisesRegexp(generate_buildbot_json.BBGenErr,
1309 'The following nonexistent machines.*',
1310 fbb.check_input_file_consistency)
1311
John Budorickedfe7f872018-01-23 15:27:221312 def test_waterfall_args(self):
1313 fbb = FakeBBGen(COMPOSITION_GTEST_SUITE_WITH_ARGS_WATERFALL,
1314 GOOD_COMPOSITION_TEST_SUITES,
Kenneth Russell78fd8702018-05-17 01:15:521315 EMPTY_EXCEPTIONS,
1316 LUCI_MILO_CFG)
John Budorickedfe7f872018-01-23 15:27:221317 fbb.files['chromium.test.json'] = COMPOSITION_WATERFALL_WITH_ARGS_OUTPUT
1318 fbb.check_output_file_consistency(verbose=True)
1319
Shenghua Zhangaba8bad2018-02-07 02:12:091320 def test_multi_dimension_output(self):
1321 fbb = FakeBBGen(FOO_GTESTS_MULTI_DIMENSION_WATERFALL,
1322 FOO_TEST_SUITE,
Kenneth Russell78fd8702018-05-17 01:15:521323 EMPTY_EXCEPTIONS,
1324 LUCI_MILO_CFG)
Shenghua Zhangaba8bad2018-02-07 02:12:091325 fbb.files['chromium.test.json'] = MULTI_DIMENSION_OUTPUT
1326 fbb.check_output_file_consistency(verbose=True)
1327
Zhiling Huangbe008172018-03-08 19:13:111328 def test_relative_pyl_file_dir(self):
1329 fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
1330 REUSING_TEST_WITH_DIFFERENT_NAME,
Kenneth Russell78fd8702018-05-17 01:15:521331 EMPTY_EXCEPTIONS,
1332 LUCI_MILO_CFG)
Zhiling Huangbe008172018-03-08 19:13:111333 fbb.args = argparse.Namespace(pyl_files_dir='relative/path/')
1334 for file_name in list(fbb.files):
Kenneth Russell78fd8702018-05-17 01:15:521335 if not 'luci-milo.cfg' in file_name:
1336 fbb.files[os.path.join('relative/path/', file_name)] = (
1337 fbb.files.pop(file_name))
Zhiling Huangbe008172018-03-08 19:13:111338 fbb.check_input_file_consistency()
1339 fbb.files['relative/path/chromium.test.json'] = VARIATION_GTEST_OUTPUT
1340 fbb.check_output_file_consistency(verbose=True)
1341
Nico Weberd18b8962018-05-16 19:39:381342 def test_nonexistent_bot_raises(self):
1343 fbb = FakeBBGen(UNKNOWN_BOT_GTESTS_WATERFALL,
1344 FOO_TEST_SUITE,
Nico Weber79dc5f6852018-07-13 19:38:491345 EMPTY_EXCEPTIONS,
Kenneth Russell78fd8702018-05-17 01:15:521346 LUCI_MILO_CFG)
Nico Weberd18b8962018-05-16 19:39:381347 with self.assertRaises(generate_buildbot_json.BBGenErr):
1348 fbb.check_input_file_consistency()
1349
Dirk Pranke1b767092017-12-07 04:44:231350
Kenneth Russelleb60cbd22017-12-05 07:54:281351if __name__ == '__main__':
1352 unittest.main()