OLD | NEW |
---|---|
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import re | 5 import re |
6 | 6 |
7 DEPS = [ | 7 DEPS = [ |
8 'bot_update', | 8 'bot_update', |
9 'chromium', | 9 'chromium', |
10 'filter', | 10 'filter', |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
417 """Returns true if the builder |name| should be filtered. |regexs| is a list | 417 """Returns true if the builder |name| should be filtered. |regexs| is a list |
418 of the regular expressions specifying the builders that should *not* be | 418 of the regular expressions specifying the builders that should *not* be |
419 filtered. If |name| completely matches one of the regular expressions than | 419 filtered. If |name| completely matches one of the regular expressions than |
420 false is returned, otherwise true.""" | 420 false is returned, otherwise true.""" |
421 for regex in regexs: | 421 for regex in regexs: |
422 match = re.match(regex, name) | 422 match = re.match(regex, name) |
423 if match and match.end() == len(name): | 423 if match and match.end() == len(name): |
424 return False | 424 return False |
425 return True | 425 return True |
426 | 426 |
427 def get_test_names(gtest_tests, swarming_tests): | |
428 """Returns the names of each of the tests in |gtest_tests| and | |
429 |swarming_tests|. These are lists of GTestTest and SwarmingGTestTest.""" | |
430 return [test.name for test in gtest_tests + swarming_tests] | |
431 | |
432 def filter_tests(possible_tests, needed_tests): | |
iannucci
2014/07/30 01:20:37
nit: 2 spaces between module-level definitions
sky
2014/07/30 21:14:16
I assume you mean 2 newlines.
| |
433 """Returns a list of all the tests in |possible_tests| whose name is in | |
434 |needed_tests|.""" | |
435 result = [] | |
436 for test in possible_tests: | |
437 if test.name in needed_tests: | |
438 result.append(test) | |
439 return result | |
440 | |
427 add_swarming_builder('linux_chromium_rel', 'linux_chromium_rel_swarming', | 441 add_swarming_builder('linux_chromium_rel', 'linux_chromium_rel_swarming', |
428 'tryserver.chromium.linux') | 442 'tryserver.chromium.linux') |
429 add_swarming_builder('linux_chromium_chromeos_rel', | 443 add_swarming_builder('linux_chromium_chromeos_rel', |
430 'linux_chromium_chromeos_rel_swarming', | 444 'linux_chromium_chromeos_rel_swarming', |
431 'tryserver.chromium.linux') | 445 'tryserver.chromium.linux') |
432 add_swarming_builder('win_chromium_rel', 'win_chromium_rel_swarming', | 446 add_swarming_builder('win_chromium_rel', 'win_chromium_rel_swarming', |
433 'tryserver.chromium.win') | 447 'tryserver.chromium.win') |
434 add_swarming_builder('mac_chromium_rel', 'mac_chromium_rel_swarming', | 448 add_swarming_builder('mac_chromium_rel', 'mac_chromium_rel_swarming', |
435 'tryserver.chromium.mac') | 449 'tryserver.chromium.mac') |
436 | 450 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
545 }, | 559 }, |
546 { | 560 { |
547 'test': 'browser_tests', | 561 'test': 'browser_tests', |
548 'exclude_builders': ['tryserver.chromium.win:win_chromium_x64_rel'], | 562 'exclude_builders': ['tryserver.chromium.win:win_chromium_x64_rel'], |
549 }, | 563 }, |
550 ]), | 564 ]), |
551 ) | 565 ) |
552 step_result.presentation.step_text = 'path: %s' % test_spec_path | 566 step_result.presentation.step_text = 'path: %s' % test_spec_path |
553 test_spec = step_result.json.output | 567 test_spec = step_result.json.output |
554 | 568 |
555 # See if the patch needs to compile on the current platform. | |
556 if isinstance(test_spec, dict) and should_filter_builder( | |
557 buildername, test_spec.get('non_filter_builders', [])): | |
558 api.filter.does_patch_require_compile( | |
559 exclusions=test_spec.get('gtest_tests_filter_exclusions', [])) | |
560 if not api.filter.result: | |
561 return | |
562 | |
563 def should_use_test(test): | 569 def should_use_test(test): |
564 """Given a test dict from test spec returns True or False.""" | 570 """Given a test dict from test spec returns True or False.""" |
565 if 'platforms' in test: | 571 if 'platforms' in test: |
566 if api.platform.name not in test['platforms']: | 572 if api.platform.name not in test['platforms']: |
567 return False | 573 return False |
568 if 'chromium_configs' in test: | 574 if 'chromium_configs' in test: |
569 if bot_config['chromium_config'] not in test['chromium_configs']: | 575 if bot_config['chromium_config'] not in test['chromium_configs']: |
570 return False | 576 return False |
571 if 'exclude_builders' in test: | 577 if 'exclude_builders' in test: |
572 if '%s:%s' % (mastername, buildername) in test['exclude_builders']: | 578 if '%s:%s' % (mastername, buildername) in test['exclude_builders']: |
573 return False | 579 return False |
574 return True | 580 return True |
575 | 581 |
576 # Parse test spec file into list of Test instances. | 582 # Parse test spec file into list of Test instances. |
577 compile_targets, gtest_tests, swarming_tests = parse_test_spec( | 583 compile_targets, gtest_tests, swarming_tests = parse_test_spec( |
578 test_spec, | 584 test_spec, |
579 bot_config.get('enable_swarming'), | 585 bot_config.get('enable_swarming'), |
580 should_use_test) | 586 should_use_test) |
581 | 587 |
588 # See if the patch needs to compile on the current platform. | |
589 if isinstance(test_spec, dict) and should_filter_builder( | |
590 buildername, test_spec.get('non_filter_builders', [])): | |
591 api.filter.does_patch_require_compile( | |
592 exclusions=test_spec.get('gtest_tests_filter_exclusions', []), | |
593 exes=get_test_names(gtest_tests, swarming_tests)) | |
594 if not api.filter.result: | |
595 return | |
596 # Patch needs compile. Filter the list of test targets. | |
597 if buildername in test_spec.get('filter_tests_builders', []): | |
598 gtest_tests = filter_tests(gtest_tests, api.filter.matching_exes) | |
599 swarming_tests = filter_tests(swarming_tests, api.filter.matching_exes) | |
600 | |
582 # Swarming uses Isolate to transfer files to swarming bots. | 601 # Swarming uses Isolate to transfer files to swarming bots. |
583 # set_isolate_environment modifies GYP_DEFINES to enable test isolation. | 602 # set_isolate_environment modifies GYP_DEFINES to enable test isolation. |
584 if bot_config.get('use_isolate') or swarming_tests: | 603 if bot_config.get('use_isolate') or swarming_tests: |
585 api.isolate.set_isolate_environment(api.chromium.c) | 604 api.isolate.set_isolate_environment(api.chromium.c) |
586 | 605 |
587 # If going to use swarming_client (pinned in src/DEPS), ensure it is | 606 # If going to use swarming_client (pinned in src/DEPS), ensure it is |
588 # compatible with what recipes expect. | 607 # compatible with what recipes expect. |
589 if swarming_tests: | 608 if swarming_tests: |
590 api.swarming.check_client_version() | 609 api.swarming.check_client_version() |
591 | 610 |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
919 api.isolate.output_json(['base_unittests'])) | 938 api.isolate.output_json(['base_unittests'])) |
920 ) | 939 ) |
921 | 940 |
922 # Tests analyze module by not specifying a non_filter_builders. | 941 # Tests analyze module by not specifying a non_filter_builders. |
923 yield ( | 942 yield ( |
924 api.test('no_compile_because_of_analyze') + | 943 api.test('no_compile_because_of_analyze') + |
925 props(buildername='linux_chromium_rel') + | 944 props(buildername='linux_chromium_rel') + |
926 api.platform.name('linux') + | 945 api.platform.name('linux') + |
927 api.override_step_data('read test spec', api.json.output({ | 946 api.override_step_data('read test spec', api.json.output({ |
928 }) | 947 }) |
929 ) | 948 ) + |
949 api.override_step_data( | |
950 'analyze', | |
951 stdout=api.json.output({'status': 'No dependency', | |
952 'targets': []})) | |
930 ) | 953 ) |
931 | 954 |
932 # Tests analyze module by way of not specifying non_filter_builders and file | 955 # Tests analyze module by way of not specifying non_filter_builders and file |
933 # matching exclusion list. This should result in a compile. | 956 # matching exclusion list. This should result in a compile. |
934 yield ( | 957 yield ( |
935 api.test('compile_because_of_analyze_matching_exclusion') + | 958 api.test('compile_because_of_analyze_matching_exclusion') + |
936 props(buildername='linux_chromium_rel') + | 959 props(buildername='linux_chromium_rel') + |
937 api.platform.name('linux') + | 960 api.platform.name('linux') + |
938 api.override_step_data('read test spec', api.json.output({ | 961 api.override_step_data('read test spec', api.json.output({ |
939 'gtest_tests_filter_exclusions': ['f.*'], | 962 'gtest_tests_filter_exclusions': ['f.*'], |
940 }) | 963 }) |
941 ) | 964 ) |
942 ) | 965 ) |
943 | 966 |
944 # Tests analyze module by way of not specifying non_filter_builders and | 967 # Tests analyze module by way of not specifying non_filter_builders and |
945 # analyze result returning true. This should result in a compile. | 968 # analyze result returning true. This should result in a compile. |
946 yield ( | 969 yield ( |
947 api.test('compile_because_of_analyze') + | 970 api.test('compile_because_of_analyze') + |
948 props(buildername='linux_chromium_rel') + | 971 props(buildername='linux_chromium_rel') + |
949 api.platform.name('linux') + | 972 api.platform.name('linux') + |
950 api.override_step_data('read test spec', api.json.output({ | 973 api.override_step_data('read test spec', api.json.output({ |
951 }) | 974 }) |
952 ) + | 975 ) + |
953 api.override_step_data( | 976 api.override_step_data( |
954 'analyze', | 977 'analyze', |
955 api.raw_io.stream_output('Found dependency')) | 978 stdout=api.json.output({'status': 'Found dependency', |
979 'targets': []})) | |
956 ) | 980 ) |
981 | |
982 # Tests analyze module by way of not specifying non_filter_builders and | |
983 # analyze result returning true along with a smaller set of tests. | |
984 yield ( | |
985 api.test('compile_because_of_analyze_with_filtered_tests_no_builder') + | |
986 props(buildername='linux_chromium_rel') + | |
987 api.platform.name('linux') + | |
988 api.override_step_data('read test spec', api.json.output({ | |
989 'gtest_tests': [ | |
990 { | |
991 'test': 'base_unittests', | |
992 'swarming': {'can_use_on_swarming_builders': True}, | |
993 }, | |
994 { | |
995 'test': 'browser_tests', | |
996 }, | |
997 { | |
998 'test': 'unittests', | |
999 }, | |
1000 ], | |
1001 }) | |
1002 ) + | |
1003 api.override_step_data( | |
1004 'analyze', | |
1005 stdout=api.json.output({'status': 'Found dependency', | |
1006 'targets': ['browser_tests', 'base_unittests']})) | |
1007 ) | |
1008 | |
1009 # Tests analyze module by way of not specifying non_filter_builders and | |
1010 # analyze result returning true along with a smaller set of tests. This | |
1011 # specifices a 'filter_test_builder', so that this bot uses the filtered set. | |
1012 yield ( | |
1013 api.test('compile_because_of_analyze_with_filtered_tests') + | |
1014 props(buildername='linux_chromium_rel') + | |
1015 api.platform.name('linux') + | |
1016 api.override_step_data('read test spec', api.json.output({ | |
1017 'filter_tests_builders': 'linux_chromium_rel', | |
1018 'gtest_tests': [ | |
1019 { | |
1020 'test': 'base_unittests', | |
1021 'swarming': {'can_use_on_swarming_builders': True}, | |
1022 }, | |
1023 { | |
1024 'test': 'browser_tests', | |
1025 }, | |
1026 { | |
1027 'test': 'unittests', | |
1028 }, | |
1029 ], | |
1030 }) | |
1031 ) + | |
1032 api.override_step_data( | |
1033 'analyze', | |
1034 stdout=api.json.output({'status': 'Found dependency', | |
1035 'targets': ['browser_tests', 'base_unittests']})) | |
1036 ) | |
OLD | NEW |