OLD | NEW |
---|---|
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 datetime | 5 import datetime |
6 import re | 6 import re |
7 import string | 7 import string |
8 | 8 |
9 | |
10 class Test(object): | 9 class Test(object): |
11 """ | 10 """ |
12 Base class for tests that can be retried after deapplying a previously | 11 Base class for tests that can be retried after deapplying a previously |
13 applied patch. | 12 applied patch. |
14 """ | 13 """ |
15 | 14 |
16 def __init__(self): | 15 def __init__(self): |
17 super(Test, self).__init__() | 16 super(Test, self).__init__() |
18 self._test_runs = {} | 17 self._test_runs = {} |
19 | 18 |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
434 if test['shard_index'] != 0 or test['total_shards'] != 1: | 433 if test['shard_index'] != 0 or test['total_shards'] != 1: |
435 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'], | 434 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'], |
436 '--test-launcher-total-shards=%d' % test['total_shards']]) | 435 '--test-launcher-total-shards=%d' % test['total_shards']]) |
437 use_swarming = False | 436 use_swarming = False |
438 swarming_shards = 1 | 437 swarming_shards = 1 |
439 swarming_dimension_sets = None | 438 swarming_dimension_sets = None |
440 swarming_priority = None | 439 swarming_priority = None |
441 swarming_expiration = None | 440 swarming_expiration = None |
442 swarming_hard_timeout = None | 441 swarming_hard_timeout = None |
443 cipd_packages = None | 442 cipd_packages = None |
443 output_links = None | |
444 if enable_swarming: | 444 if enable_swarming: |
445 swarming_spec = test.get('swarming', {}) | 445 swarming_spec = test.get('swarming', {}) |
446 if swarming_spec.get('can_use_on_swarming_builders'): | 446 if swarming_spec.get('can_use_on_swarming_builders'): |
447 use_swarming = True | 447 use_swarming = True |
448 swarming_shards = swarming_spec.get('shards', 1) | 448 swarming_shards = swarming_spec.get('shards', 1) |
449 swarming_dimension_sets = swarming_spec.get('dimension_sets') | 449 swarming_dimension_sets = swarming_spec.get('dimension_sets') |
450 swarming_priority = swarming_spec.get('priority_adjustment') | 450 swarming_priority = swarming_spec.get('priority_adjustment') |
451 swarming_expiration = swarming_spec.get('expiration') | 451 swarming_expiration = swarming_spec.get('expiration') |
452 swarming_hard_timeout = swarming_spec.get('hard_timeout') | 452 swarming_hard_timeout = swarming_spec.get('hard_timeout') |
453 packages = swarming_spec.get('cipd_packages') | 453 packages = swarming_spec.get('cipd_packages') |
454 output_links = swarming_spec.get('output_links') | |
454 if packages: | 455 if packages: |
455 cipd_packages = [(p['location'], | 456 cipd_packages = [(p['location'], |
456 p['cipd_package'], | 457 p['cipd_package'], |
457 p['revision']) | 458 p['revision']) |
458 for p in packages] | 459 for p in packages] |
459 override_compile_targets = test.get('override_compile_targets', None) | 460 override_compile_targets = test.get('override_compile_targets', None) |
460 override_isolate_target = test.get('override_isolate_target', None) | 461 override_isolate_target = test.get('override_isolate_target', None) |
461 target_name = str(test['test']) | 462 target_name = str(test['test']) |
462 name = str(test.get('name', target_name)) | 463 name = str(test.get('name', target_name)) |
463 swarming_dimensions = swarming_dimensions or {} | 464 swarming_dimensions = swarming_dimensions or {} |
464 use_xvfb = test.get('use_xvfb', True) | 465 use_xvfb = test.get('use_xvfb', True) |
465 if use_swarming and swarming_dimension_sets: | 466 if use_swarming and swarming_dimension_sets: |
466 for dimensions in swarming_dimension_sets: | 467 for dimensions in swarming_dimension_sets: |
467 # Yield potentially multiple invocations of the same test, on | 468 # Yield potentially multiple invocations of the same test, on |
468 # different machine configurations. | 469 # different machine configurations. |
469 new_dimensions = dict(swarming_dimensions) | 470 new_dimensions = dict(swarming_dimensions) |
470 new_dimensions.update(dimensions) | 471 new_dimensions.update(dimensions) |
471 yield GTestTest(name, args=args, target_name=target_name, | 472 yield GTestTest(name, args=args, target_name=target_name, |
472 flakiness_dash=True, | 473 flakiness_dash=True, |
473 enable_swarming=True, | 474 enable_swarming=True, |
474 swarming_shards=swarming_shards, | 475 swarming_shards=swarming_shards, |
475 swarming_dimensions=new_dimensions, | 476 swarming_dimensions=new_dimensions, |
476 swarming_priority=swarming_priority, | 477 swarming_priority=swarming_priority, |
477 swarming_expiration=swarming_expiration, | 478 swarming_expiration=swarming_expiration, |
478 swarming_hard_timeout=swarming_hard_timeout, | 479 swarming_hard_timeout=swarming_hard_timeout, |
479 override_compile_targets=override_compile_targets, | 480 override_compile_targets=override_compile_targets, |
480 override_isolate_target=override_isolate_target, | 481 override_isolate_target=override_isolate_target, |
481 use_xvfb=use_xvfb, cipd_packages=cipd_packages) | 482 use_xvfb=use_xvfb, cipd_packages=cipd_packages, |
483 output_links=output_links) | |
482 else: | 484 else: |
483 yield GTestTest(name, args=args, target_name=target_name, | 485 yield GTestTest(name, args=args, target_name=target_name, |
484 flakiness_dash=True, | 486 flakiness_dash=True, |
485 enable_swarming=use_swarming, | 487 enable_swarming=use_swarming, |
486 swarming_dimensions=swarming_dimensions, | 488 swarming_dimensions=swarming_dimensions, |
487 swarming_shards=swarming_shards, | 489 swarming_shards=swarming_shards, |
488 swarming_priority=swarming_priority, | 490 swarming_priority=swarming_priority, |
489 swarming_expiration=swarming_expiration, | 491 swarming_expiration=swarming_expiration, |
490 swarming_hard_timeout=swarming_hard_timeout, | 492 swarming_hard_timeout=swarming_hard_timeout, |
491 override_compile_targets=override_compile_targets, | 493 override_compile_targets=override_compile_targets, |
492 override_isolate_target=override_isolate_target, | 494 override_isolate_target=override_isolate_target, |
493 use_xvfb=use_xvfb, cipd_packages=cipd_packages) | 495 use_xvfb=use_xvfb, cipd_packages=cipd_packages, |
496 output_links=output_links) | |
494 | 497 |
495 | 498 |
496 def generate_instrumentation_test(api, chromium_tests_api, mastername, | 499 def generate_instrumentation_test(api, chromium_tests_api, mastername, |
497 buildername, test_spec, bot_update_step, | 500 buildername, test_spec, bot_update_step, |
498 enable_swarming=False, | 501 enable_swarming=False, |
499 swarming_dimensions=None, | 502 swarming_dimensions=None, |
500 scripts_compile_targets=None): | 503 scripts_compile_targets=None): |
501 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []): | 504 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []): |
502 test_name = str(test.get('test')) | 505 test_name = str(test.get('test')) |
503 use_swarming = False | 506 use_swarming = False |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
829 @property | 832 @property |
830 def uses_swarming(self): | 833 def uses_swarming(self): |
831 return True | 834 return True |
832 | 835 |
833 | 836 |
834 class SwarmingGTestTest(SwarmingTest): | 837 class SwarmingGTestTest(SwarmingTest): |
835 def __init__(self, name, args=None, target_name=None, shards=1, | 838 def __init__(self, name, args=None, target_name=None, shards=1, |
836 dimensions=None, tags=None, extra_suffix=None, priority=None, | 839 dimensions=None, tags=None, extra_suffix=None, priority=None, |
837 expiration=None, hard_timeout=None, upload_test_results=True, | 840 expiration=None, hard_timeout=None, upload_test_results=True, |
838 override_compile_targets=None, override_isolate_target=None, | 841 override_compile_targets=None, override_isolate_target=None, |
839 cipd_packages=None): | 842 cipd_packages=None, output_links=None): |
840 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, | 843 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, |
841 extra_suffix, priority, expiration, | 844 extra_suffix, priority, expiration, |
842 hard_timeout) | 845 hard_timeout) |
843 self._args = args or [] | 846 self._args = args or [] |
844 self._shards = shards | 847 self._shards = shards |
845 self._upload_test_results = upload_test_results | 848 self._upload_test_results = upload_test_results |
846 self._override_compile_targets = override_compile_targets | 849 self._override_compile_targets = override_compile_targets |
847 self._override_isolate_target = override_isolate_target | 850 self._override_isolate_target = override_isolate_target |
848 self._cipd_packages = cipd_packages | 851 self._cipd_packages = cipd_packages |
852 self._output_links = output_links | |
849 | 853 |
850 def compile_targets(self, api): | 854 def compile_targets(self, api): |
851 # <X>_run target depends on <X>, and then isolates it invoking isolate.py. | 855 # <X>_run target depends on <X>, and then isolates it invoking isolate.py. |
852 # It is a convention, not a hard coded rule. | 856 # It is a convention, not a hard coded rule. |
853 # Also include name without the _run suffix to help recipes correctly | 857 # Also include name without the _run suffix to help recipes correctly |
854 # interpret results returned by "analyze". | 858 # interpret results returned by "analyze". |
855 if self._override_compile_targets: | 859 if self._override_compile_targets: |
856 return self._override_compile_targets | 860 return self._override_compile_targets |
857 | 861 |
858 if api.chromium.c.TARGET_PLATFORM == 'android': | 862 if api.chromium.c.TARGET_PLATFORM == 'android': |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
905 | 909 |
906 return True, gtest_results.failures | 910 return True, gtest_results.failures |
907 | 911 |
908 def post_run(self, api, suffix, test_filter=None): | 912 def post_run(self, api, suffix, test_filter=None): |
909 """Waits for launched test to finish and collects the results.""" | 913 """Waits for launched test to finish and collects the results.""" |
910 try: | 914 try: |
911 super(SwarmingGTestTest, self).post_run( | 915 super(SwarmingGTestTest, self).post_run( |
912 api, suffix,test_filter=test_filter) | 916 api, suffix,test_filter=test_filter) |
913 finally: | 917 finally: |
914 step_result = api.step.active_result | 918 step_result = api.step.active_result |
919 | |
920 # Populate additional swarming links on buildbot page | |
921 if self._output_links: | |
922 for task in self._tasks.values(): | |
923 for test in task.trigger_output['tasks'].values(): | |
924 task_id = test.get('task_id') | |
925 shard_index = str(test.get('shard_index')) | |
926 for output in self._output_links: | |
927 name = output['name'] | |
928 link = output['link'] | |
ghost stip (do not use)
2016/08/08 20:51:12
can you move this down so it's just above 931? tha
| |
929 name = (name.replace('${SHARD_INDEX}', shard_index)).replace( | |
930 '${TASK_ID}', task_id) | |
931 link = ''.join(link) | |
ghost stip (do not use)
2016/08/08 20:51:12
put a comment here on why we're doing this
| |
932 link = (link.replace('${SHARD_INDEX}', shard_index)).replace( | |
933 '${TASK_ID}', task_id) | |
934 step_result.presentation.links[name] = link | |
935 | |
915 # Only upload test results if we have gtest results. | 936 # Only upload test results if we have gtest results. |
916 if (self._upload_test_results and | 937 if (self._upload_test_results and |
917 hasattr(step_result, 'test_utils') and | 938 hasattr(step_result, 'test_utils') and |
918 hasattr(step_result.test_utils, 'gtest_results')): | 939 hasattr(step_result.test_utils, 'gtest_results')): |
919 gtest_results = getattr(step_result.test_utils, 'gtest_results', None) | 940 gtest_results = getattr(step_result.test_utils, 'gtest_results', None) |
920 if gtest_results and gtest_results.raw: | 941 if gtest_results and gtest_results.raw: |
921 parsed_gtest_data = gtest_results.raw | 942 parsed_gtest_data = gtest_results.raw |
922 chrome_revision_cp = api.bot_update.last_returned_properties.get( | 943 chrome_revision_cp = api.bot_update.last_returned_properties.get( |
923 'got_revision_cp', 'x@{#0}') | 944 'got_revision_cp', 'x@{#0}') |
924 chrome_revision = str(api.commit_position.parse_revision( | 945 chrome_revision = str(api.commit_position.parse_revision( |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1148 yield LocalIsolatedScriptTest( | 1169 yield LocalIsolatedScriptTest( |
1149 name=name, args=args, target_name=target_name, | 1170 name=name, args=args, target_name=target_name, |
1150 override_compile_targets=override_compile_targets) | 1171 override_compile_targets=override_compile_targets) |
1151 | 1172 |
1152 | 1173 |
1153 class GTestTest(Test): | 1174 class GTestTest(Test): |
1154 def __init__(self, name, args=None, target_name=None, enable_swarming=False, | 1175 def __init__(self, name, args=None, target_name=None, enable_swarming=False, |
1155 swarming_shards=1, swarming_dimensions=None, swarming_tags=None, | 1176 swarming_shards=1, swarming_dimensions=None, swarming_tags=None, |
1156 swarming_extra_suffix=None, swarming_priority=None, | 1177 swarming_extra_suffix=None, swarming_priority=None, |
1157 swarming_expiration=None, swarming_hard_timeout=None, | 1178 swarming_expiration=None, swarming_hard_timeout=None, |
1158 cipd_packages=None, **runtest_kwargs): | 1179 cipd_packages=None, output_links=None, **runtest_kwargs): |
1159 super(GTestTest, self).__init__() | 1180 super(GTestTest, self).__init__() |
1160 if enable_swarming: | 1181 if enable_swarming: |
1161 self._test = SwarmingGTestTest( | 1182 self._test = SwarmingGTestTest( |
1162 name, args, target_name, swarming_shards, swarming_dimensions, | 1183 name, args, target_name, swarming_shards, swarming_dimensions, |
1163 swarming_tags, swarming_extra_suffix, swarming_priority, | 1184 swarming_tags, swarming_extra_suffix, swarming_priority, |
1164 swarming_expiration, swarming_hard_timeout, | 1185 swarming_expiration, swarming_hard_timeout, |
1165 cipd_packages=cipd_packages, | 1186 cipd_packages=cipd_packages, output_links=output_links, |
1166 override_compile_targets=runtest_kwargs.get( | 1187 override_compile_targets=runtest_kwargs.get( |
1167 'override_compile_targets'), | 1188 'override_compile_targets'), |
1168 override_isolate_target=runtest_kwargs.get( | 1189 override_isolate_target=runtest_kwargs.get( |
1169 'override_isolate_target')) | 1190 'override_isolate_target')) |
1170 else: | 1191 else: |
1171 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs) | 1192 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs) |
1172 | 1193 |
1173 self.enable_swarming = enable_swarming | 1194 self.enable_swarming = enable_swarming |
1174 | 1195 |
1175 @property | 1196 @property |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1744 args=args) | 1765 args=args) |
1745 api.gsutil.upload( | 1766 api.gsutil.upload( |
1746 temp_output_dir.join( | 1767 temp_output_dir.join( |
1747 '%s-android-chrome.json' % timestamp_string), | 1768 '%s-android-chrome.json' % timestamp_string), |
1748 'chromium-annotated-tests', 'android') | 1769 'chromium-annotated-tests', 'android') |
1749 | 1770 |
1750 GOMA_TESTS = [ | 1771 GOMA_TESTS = [ |
1751 GTestTest('base_unittests'), | 1772 GTestTest('base_unittests'), |
1752 GTestTest('content_unittests'), | 1773 GTestTest('content_unittests'), |
1753 ] | 1774 ] |
OLD | NEW |