Index: scripts/slave/recipe_modules/chromium_tests/steps.py |
diff --git a/scripts/slave/recipe_modules/chromium_tests/steps.py b/scripts/slave/recipe_modules/chromium_tests/steps.py |
index 6d669881508826bcef34948e0e5609377cc1c36b..6f57c92329acf4ffa325a92318fcea2f61f91822 100644 |
--- a/scripts/slave/recipe_modules/chromium_tests/steps.py |
+++ b/scripts/slave/recipe_modules/chromium_tests/steps.py |
@@ -434,6 +434,7 @@ def generate_gtest(api, chromium_tests_api, mastername, buildername, test_spec, |
swarming_expiration = None |
swarming_hard_timeout = None |
cipd_packages = None |
+ output_links = None |
if enable_swarming: |
swarming_spec = test.get('swarming', {}) |
if swarming_spec.get('can_use_on_swarming_builders'): |
@@ -444,6 +445,7 @@ def generate_gtest(api, chromium_tests_api, mastername, buildername, test_spec, |
swarming_expiration = swarming_spec.get('expiration') |
swarming_hard_timeout = swarming_spec.get('hard_timeout') |
packages = swarming_spec.get('cipd_packages') |
+ output_links = swarming_spec.get('output_links') |
if packages: |
cipd_packages = [(p['location'], |
p['cipd_package'], |
@@ -471,7 +473,8 @@ def generate_gtest(api, chromium_tests_api, mastername, buildername, test_spec, |
swarming_hard_timeout=swarming_hard_timeout, |
override_compile_targets=override_compile_targets, |
override_isolate_target=override_isolate_target, |
- use_xvfb=use_xvfb, cipd_packages=cipd_packages) |
+ use_xvfb=use_xvfb, cipd_packages=cipd_packages, |
+ output_links=output_links) |
else: |
yield GTestTest(name, args=args, target_name=target_name, |
flakiness_dash=True, |
@@ -483,7 +486,8 @@ def generate_gtest(api, chromium_tests_api, mastername, buildername, test_spec, |
swarming_hard_timeout=swarming_hard_timeout, |
override_compile_targets=override_compile_targets, |
override_isolate_target=override_isolate_target, |
- use_xvfb=use_xvfb, cipd_packages=cipd_packages) |
+ use_xvfb=use_xvfb, cipd_packages=cipd_packages, |
+ output_links=output_links) |
def generate_instrumentation_test(api, chromium_tests_api, mastername, |
@@ -829,7 +833,7 @@ class SwarmingGTestTest(SwarmingTest): |
dimensions=None, tags=None, extra_suffix=None, priority=None, |
expiration=None, hard_timeout=None, upload_test_results=True, |
override_compile_targets=None, override_isolate_target=None, |
- cipd_packages=None): |
+ cipd_packages=None, output_links=None): |
super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, |
extra_suffix, priority, expiration, |
hard_timeout) |
@@ -839,6 +843,7 @@ class SwarmingGTestTest(SwarmingTest): |
self._override_compile_targets = override_compile_targets |
self._override_isolate_target = override_isolate_target |
self._cipd_packages = cipd_packages |
+ self._output_links = output_links |
def compile_targets(self, api): |
# <X>_run target depends on <X>, and then isolates it invoking isolate.py. |
@@ -905,6 +910,27 @@ class SwarmingGTestTest(SwarmingTest): |
api, suffix,test_filter=test_filter) |
finally: |
step_result = api.step.active_result |
+ |
+ # Populate additional swarming links on buildbot page. |
+ if self._output_links: |
+ for task in self._tasks.values(): |
+ for test in task.trigger_output['tasks'].values(): |
+ # Replace task_id and shard_index placeholders |
+ # Adding 1 to task id to match what is populated in the |
+ # task environment |
+ task_id = format(int(test.get('task_id'), 16) + 1, 'x') |
+ shard_index = str(test.get('shard_index')) |
+ for output in self._output_links: |
+ name = output['name'] |
+ name = (name.replace('${SHARD_INDEX}', shard_index)).replace( |
+ '${TASK_ID}', task_id) |
+ link = output['link'] |
+ # Rejoin web links that are broken into a list in the JSON file. |
+ link = ''.join(link) |
+ link = (link.replace('${SHARD_INDEX}', shard_index)).replace( |
+ '${TASK_ID}', task_id) |
+ step_result.presentation.links[name] = link |
+ |
# Only upload test results if we have gtest results. |
if (self._upload_test_results and |
hasattr(step_result, 'test_utils') and |
@@ -1148,14 +1174,14 @@ class GTestTest(Test): |
swarming_shards=1, swarming_dimensions=None, swarming_tags=None, |
swarming_extra_suffix=None, swarming_priority=None, |
swarming_expiration=None, swarming_hard_timeout=None, |
- cipd_packages=None, **runtest_kwargs): |
+ cipd_packages=None, output_links=None, **runtest_kwargs): |
super(GTestTest, self).__init__() |
if enable_swarming: |
self._test = SwarmingGTestTest( |
name, args, target_name, swarming_shards, swarming_dimensions, |
swarming_tags, swarming_extra_suffix, swarming_priority, |
swarming_expiration, swarming_hard_timeout, |
- cipd_packages=cipd_packages, |
+ cipd_packages=cipd_packages, output_links=output_links, |
override_compile_targets=runtest_kwargs.get( |
'override_compile_targets'), |
override_isolate_target=runtest_kwargs.get( |