Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(853)

Side by Side Diff: scripts/slave/recipe_modules/chromium_tests/steps.py

Issue 2207263002: Add logcats link in builbot page for android swarming tasks (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Fix mismatch links on task_id Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | scripts/slave/recipes/chromium.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 9
10 class Test(object): 10 class Test(object):
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 if test['shard_index'] != 0 or test['total_shards'] != 1: 427 if test['shard_index'] != 0 or test['total_shards'] != 1:
428 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'], 428 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'],
429 '--test-launcher-total-shards=%d' % test['total_shards']]) 429 '--test-launcher-total-shards=%d' % test['total_shards']])
430 use_swarming = False 430 use_swarming = False
431 swarming_shards = 1 431 swarming_shards = 1
432 swarming_dimension_sets = None 432 swarming_dimension_sets = None
433 swarming_priority = None 433 swarming_priority = None
434 swarming_expiration = None 434 swarming_expiration = None
435 swarming_hard_timeout = None 435 swarming_hard_timeout = None
436 cipd_packages = None 436 cipd_packages = None
437 output_links = None
437 if enable_swarming: 438 if enable_swarming:
438 swarming_spec = test.get('swarming', {}) 439 swarming_spec = test.get('swarming', {})
439 if swarming_spec.get('can_use_on_swarming_builders'): 440 if swarming_spec.get('can_use_on_swarming_builders'):
440 use_swarming = True 441 use_swarming = True
441 swarming_shards = swarming_spec.get('shards', 1) 442 swarming_shards = swarming_spec.get('shards', 1)
442 swarming_dimension_sets = swarming_spec.get('dimension_sets') 443 swarming_dimension_sets = swarming_spec.get('dimension_sets')
443 swarming_priority = swarming_spec.get('priority_adjustment') 444 swarming_priority = swarming_spec.get('priority_adjustment')
444 swarming_expiration = swarming_spec.get('expiration') 445 swarming_expiration = swarming_spec.get('expiration')
445 swarming_hard_timeout = swarming_spec.get('hard_timeout') 446 swarming_hard_timeout = swarming_spec.get('hard_timeout')
446 packages = swarming_spec.get('cipd_packages') 447 packages = swarming_spec.get('cipd_packages')
448 output_links = swarming_spec.get('output_links')
447 if packages: 449 if packages:
448 cipd_packages = [(p['location'], 450 cipd_packages = [(p['location'],
449 p['cipd_package'], 451 p['cipd_package'],
450 p['revision']) 452 p['revision'])
451 for p in packages] 453 for p in packages]
452 override_compile_targets = test.get('override_compile_targets', None) 454 override_compile_targets = test.get('override_compile_targets', None)
453 override_isolate_target = test.get('override_isolate_target', None) 455 override_isolate_target = test.get('override_isolate_target', None)
454 target_name = str(test['test']) 456 target_name = str(test['test'])
455 name = str(test.get('name', target_name)) 457 name = str(test.get('name', target_name))
456 swarming_dimensions = swarming_dimensions or {} 458 swarming_dimensions = swarming_dimensions or {}
457 use_xvfb = test.get('use_xvfb', True) 459 use_xvfb = test.get('use_xvfb', True)
458 if use_swarming and swarming_dimension_sets: 460 if use_swarming and swarming_dimension_sets:
459 for dimensions in swarming_dimension_sets: 461 for dimensions in swarming_dimension_sets:
460 # Yield potentially multiple invocations of the same test, on 462 # Yield potentially multiple invocations of the same test, on
461 # different machine configurations. 463 # different machine configurations.
462 new_dimensions = dict(swarming_dimensions) 464 new_dimensions = dict(swarming_dimensions)
463 new_dimensions.update(dimensions) 465 new_dimensions.update(dimensions)
464 yield GTestTest(name, args=args, target_name=target_name, 466 yield GTestTest(name, args=args, target_name=target_name,
465 flakiness_dash=True, 467 flakiness_dash=True,
466 enable_swarming=True, 468 enable_swarming=True,
467 swarming_shards=swarming_shards, 469 swarming_shards=swarming_shards,
468 swarming_dimensions=new_dimensions, 470 swarming_dimensions=new_dimensions,
469 swarming_priority=swarming_priority, 471 swarming_priority=swarming_priority,
470 swarming_expiration=swarming_expiration, 472 swarming_expiration=swarming_expiration,
471 swarming_hard_timeout=swarming_hard_timeout, 473 swarming_hard_timeout=swarming_hard_timeout,
472 override_compile_targets=override_compile_targets, 474 override_compile_targets=override_compile_targets,
473 override_isolate_target=override_isolate_target, 475 override_isolate_target=override_isolate_target,
474 use_xvfb=use_xvfb, cipd_packages=cipd_packages) 476 use_xvfb=use_xvfb, cipd_packages=cipd_packages,
477 output_links=output_links)
475 else: 478 else:
476 yield GTestTest(name, args=args, target_name=target_name, 479 yield GTestTest(name, args=args, target_name=target_name,
477 flakiness_dash=True, 480 flakiness_dash=True,
478 enable_swarming=use_swarming, 481 enable_swarming=use_swarming,
479 swarming_dimensions=swarming_dimensions, 482 swarming_dimensions=swarming_dimensions,
480 swarming_shards=swarming_shards, 483 swarming_shards=swarming_shards,
481 swarming_priority=swarming_priority, 484 swarming_priority=swarming_priority,
482 swarming_expiration=swarming_expiration, 485 swarming_expiration=swarming_expiration,
483 swarming_hard_timeout=swarming_hard_timeout, 486 swarming_hard_timeout=swarming_hard_timeout,
484 override_compile_targets=override_compile_targets, 487 override_compile_targets=override_compile_targets,
485 override_isolate_target=override_isolate_target, 488 override_isolate_target=override_isolate_target,
486 use_xvfb=use_xvfb, cipd_packages=cipd_packages) 489 use_xvfb=use_xvfb, cipd_packages=cipd_packages,
490 output_links=output_links)
487 491
488 492
489 def generate_instrumentation_test(api, chromium_tests_api, mastername, 493 def generate_instrumentation_test(api, chromium_tests_api, mastername,
490 buildername, test_spec, bot_update_step, 494 buildername, test_spec, bot_update_step,
491 enable_swarming=False, 495 enable_swarming=False,
492 swarming_dimensions=None, 496 swarming_dimensions=None,
493 scripts_compile_targets=None): 497 scripts_compile_targets=None):
494 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []): 498 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []):
495 test_name = str(test.get('test')) 499 test_name = str(test.get('test'))
496 use_swarming = False 500 use_swarming = False
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 @property 826 @property
823 def uses_swarming(self): 827 def uses_swarming(self):
824 return True 828 return True
825 829
826 830
827 class SwarmingGTestTest(SwarmingTest): 831 class SwarmingGTestTest(SwarmingTest):
828 def __init__(self, name, args=None, target_name=None, shards=1, 832 def __init__(self, name, args=None, target_name=None, shards=1,
829 dimensions=None, tags=None, extra_suffix=None, priority=None, 833 dimensions=None, tags=None, extra_suffix=None, priority=None,
830 expiration=None, hard_timeout=None, upload_test_results=True, 834 expiration=None, hard_timeout=None, upload_test_results=True,
831 override_compile_targets=None, override_isolate_target=None, 835 override_compile_targets=None, override_isolate_target=None,
832 cipd_packages=None): 836 cipd_packages=None, output_links=None):
833 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, 837 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name,
834 extra_suffix, priority, expiration, 838 extra_suffix, priority, expiration,
835 hard_timeout) 839 hard_timeout)
836 self._args = args or [] 840 self._args = args or []
837 self._shards = shards 841 self._shards = shards
838 self._upload_test_results = upload_test_results 842 self._upload_test_results = upload_test_results
839 self._override_compile_targets = override_compile_targets 843 self._override_compile_targets = override_compile_targets
840 self._override_isolate_target = override_isolate_target 844 self._override_isolate_target = override_isolate_target
841 self._cipd_packages = cipd_packages 845 self._cipd_packages = cipd_packages
846 self._output_links = output_links
842 847
843 def compile_targets(self, api): 848 def compile_targets(self, api):
844 # <X>_run target depends on <X>, and then isolates it invoking isolate.py. 849 # <X>_run target depends on <X>, and then isolates it invoking isolate.py.
845 # It is a convention, not a hard coded rule. 850 # It is a convention, not a hard coded rule.
846 # Also include name without the _run suffix to help recipes correctly 851 # Also include name without the _run suffix to help recipes correctly
847 # interpret results returned by "analyze". 852 # interpret results returned by "analyze".
848 if self._override_compile_targets: 853 if self._override_compile_targets:
849 return self._override_compile_targets 854 return self._override_compile_targets
850 855
851 if api.chromium.c.TARGET_PLATFORM == 'android': 856 if api.chromium.c.TARGET_PLATFORM == 'android':
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 903
899 return True, gtest_results.failures 904 return True, gtest_results.failures
900 905
901 def post_run(self, api, suffix, test_filter=None): 906 def post_run(self, api, suffix, test_filter=None):
902 """Waits for launched test to finish and collects the results.""" 907 """Waits for launched test to finish and collects the results."""
903 try: 908 try:
904 super(SwarmingGTestTest, self).post_run( 909 super(SwarmingGTestTest, self).post_run(
905 api, suffix,test_filter=test_filter) 910 api, suffix,test_filter=test_filter)
906 finally: 911 finally:
907 step_result = api.step.active_result 912 step_result = api.step.active_result
913
914 # Populate additional swarming links on buildbot page.
915 if self._output_links:
916 for task in self._tasks.values():
917 for test in task.trigger_output['tasks'].values():
918 # Replace task_id and shard_index placeholders
919 # Adding 1 to task id to match what is populated in the
920 # task environment
921 task_id = format(int(test.get('task_id'), 16) + 1, 'x')
922 shard_index = str(test.get('shard_index'))
923 for output in self._output_links:
924 name = output['name']
925 name = (name.replace('${SHARD_INDEX}', shard_index)).replace(
926 '${TASK_ID}', task_id)
927 link = output['link']
928 # Rejoin web links that are broken into a list in the JSON file.
929 link = ''.join(link)
930 link = (link.replace('${SHARD_INDEX}', shard_index)).replace(
931 '${TASK_ID}', task_id)
932 step_result.presentation.links[name] = link
933
908 # Only upload test results if we have gtest results. 934 # Only upload test results if we have gtest results.
909 if (self._upload_test_results and 935 if (self._upload_test_results and
910 hasattr(step_result, 'test_utils') and 936 hasattr(step_result, 'test_utils') and
911 hasattr(step_result.test_utils, 'gtest_results')): 937 hasattr(step_result.test_utils, 'gtest_results')):
912 gtest_results = getattr(step_result.test_utils, 'gtest_results', None) 938 gtest_results = getattr(step_result.test_utils, 'gtest_results', None)
913 if gtest_results and gtest_results.raw: 939 if gtest_results and gtest_results.raw:
914 parsed_gtest_data = gtest_results.raw 940 parsed_gtest_data = gtest_results.raw
915 chrome_revision_cp = api.bot_update.last_returned_properties.get( 941 chrome_revision_cp = api.bot_update.last_returned_properties.get(
916 'got_revision_cp', 'x@{#0}') 942 'got_revision_cp', 'x@{#0}')
917 chrome_revision = str(api.commit_position.parse_revision( 943 chrome_revision = str(api.commit_position.parse_revision(
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 yield LocalIsolatedScriptTest( 1167 yield LocalIsolatedScriptTest(
1142 name=name, args=args, target_name=target_name, 1168 name=name, args=args, target_name=target_name,
1143 override_compile_targets=override_compile_targets) 1169 override_compile_targets=override_compile_targets)
1144 1170
1145 1171
1146 class GTestTest(Test): 1172 class GTestTest(Test):
1147 def __init__(self, name, args=None, target_name=None, enable_swarming=False, 1173 def __init__(self, name, args=None, target_name=None, enable_swarming=False,
1148 swarming_shards=1, swarming_dimensions=None, swarming_tags=None, 1174 swarming_shards=1, swarming_dimensions=None, swarming_tags=None,
1149 swarming_extra_suffix=None, swarming_priority=None, 1175 swarming_extra_suffix=None, swarming_priority=None,
1150 swarming_expiration=None, swarming_hard_timeout=None, 1176 swarming_expiration=None, swarming_hard_timeout=None,
1151 cipd_packages=None, **runtest_kwargs): 1177 cipd_packages=None, output_links=None, **runtest_kwargs):
1152 super(GTestTest, self).__init__() 1178 super(GTestTest, self).__init__()
1153 if enable_swarming: 1179 if enable_swarming:
1154 self._test = SwarmingGTestTest( 1180 self._test = SwarmingGTestTest(
1155 name, args, target_name, swarming_shards, swarming_dimensions, 1181 name, args, target_name, swarming_shards, swarming_dimensions,
1156 swarming_tags, swarming_extra_suffix, swarming_priority, 1182 swarming_tags, swarming_extra_suffix, swarming_priority,
1157 swarming_expiration, swarming_hard_timeout, 1183 swarming_expiration, swarming_hard_timeout,
1158 cipd_packages=cipd_packages, 1184 cipd_packages=cipd_packages, output_links=output_links,
1159 override_compile_targets=runtest_kwargs.get( 1185 override_compile_targets=runtest_kwargs.get(
1160 'override_compile_targets'), 1186 'override_compile_targets'),
1161 override_isolate_target=runtest_kwargs.get( 1187 override_isolate_target=runtest_kwargs.get(
1162 'override_isolate_target')) 1188 'override_isolate_target'))
1163 else: 1189 else:
1164 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs) 1190 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs)
1165 1191
1166 self.enable_swarming = enable_swarming 1192 self.enable_swarming = enable_swarming
1167 1193
1168 @property 1194 @property
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 args=args) 1763 args=args)
1738 api.gsutil.upload( 1764 api.gsutil.upload(
1739 temp_output_dir.join( 1765 temp_output_dir.join(
1740 '%s-android-chrome.json' % timestamp_string), 1766 '%s-android-chrome.json' % timestamp_string),
1741 'chromium-annotated-tests', 'android') 1767 'chromium-annotated-tests', 'android')
1742 1768
1743 GOMA_TESTS = [ 1769 GOMA_TESTS = [
1744 GTestTest('base_unittests'), 1770 GTestTest('base_unittests'),
1745 GTestTest('content_unittests'), 1771 GTestTest('content_unittests'),
1746 ] 1772 ]
OLDNEW
« no previous file with comments | « no previous file | scripts/slave/recipes/chromium.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698