Chromium Code Reviews| 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 contextlib | 5 import contextlib |
| 6 import datetime | 6 import datetime |
| 7 import json | 7 import json |
| 8 import os | 8 import os |
| 9 import pipes | 9 import pipes |
| 10 import re | 10 import re |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 891 apk_package=None, | 891 apk_package=None, |
| 892 official_build=False, | 892 official_build=False, |
| 893 json_results_file=None, | 893 json_results_file=None, |
| 894 timeout_scale=None, strict_mode=None, | 894 timeout_scale=None, strict_mode=None, |
| 895 suffix=None, num_retries=None, | 895 suffix=None, num_retries=None, |
| 896 device_flags=None, | 896 device_flags=None, |
| 897 wrapper_script_suite_name=None, | 897 wrapper_script_suite_name=None, |
| 898 result_details=False, | 898 result_details=False, |
| 899 cs_base_url=None, | 899 cs_base_url=None, |
| 900 store_tombstones=False, | 900 store_tombstones=False, |
| 901 render_results_dir=None, | |
| 901 **kwargs): | 902 **kwargs): |
| 902 args = [ | 903 args = [ |
| 903 '--blacklist-file', self.blacklist_file, | 904 '--blacklist-file', self.blacklist_file, |
| 904 ] | 905 ] |
| 905 if tool: | 906 if tool: |
| 906 args.append('--tool=%s' % tool) | 907 args.append('--tool=%s' % tool) |
| 907 if flakiness_dashboard: | 908 if flakiness_dashboard: |
| 908 args.extend(['--flakiness-dashboard-server', flakiness_dashboard]) | 909 args.extend(['--flakiness-dashboard-server', flakiness_dashboard]) |
| 909 if annotation: | 910 if annotation: |
| 910 args.extend(['-A', annotation]) | 911 args.extend(['-A', annotation]) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 950 annotation or name, ' (%s)' % suffix if suffix else '') | 951 annotation or name, ' (%s)' % suffix if suffix else '') |
| 951 | 952 |
| 952 try: | 953 try: |
| 953 step_result = self.test_runner( | 954 step_result = self.test_runner( |
| 954 step_name, | 955 step_name, |
| 955 args=args, | 956 args=args, |
| 956 wrapper_script_suite_name=wrapper_script_suite_name, | 957 wrapper_script_suite_name=wrapper_script_suite_name, |
| 957 **kwargs) | 958 **kwargs) |
| 958 finally: | 959 finally: |
| 959 result_step = self.m.step.active_result | 960 result_step = self.m.step.active_result |
| 961 if render_results_dir: | |
| 962 self._upload_render_test_failures(render_results_dir) | |
| 960 if result_details: | 963 if result_details: |
| 961 if (hasattr(result_step, 'test_utils') and | 964 if (hasattr(result_step, 'test_utils') and |
| 962 hasattr(result_step.test_utils, 'gtest_results')): | 965 hasattr(result_step.test_utils, 'gtest_results')): |
| 963 json_results = self.m.json.input( | 966 json_results = self.m.json.input( |
| 964 result_step.test_utils.gtest_results.raw) | 967 result_step.test_utils.gtest_results.raw) |
| 965 details = self.create_result_details(step_name, | 968 details = self.create_result_details(step_name, |
| 966 json_results, | 969 json_results, |
| 967 cs_base_url) | 970 cs_base_url) |
| 968 self.m.step.active_result.presentation.logs[ | 971 self.m.step.active_result.presentation.logs['result_details'] = ( |
| 969 'result_details'] = details | 972 details) |
| 970 self.copy_gtest_results(result_step, | |
|
jbudorick
2016/11/03 18:34:36
This worries me.
mikecase (-- gone --)
2016/11/03 18:41:37
I think this should be fine. As long as nothing tr
jbudorick
2016/11/07 21:58:56
I'm particularly worried if something tries to use
mikecase (-- gone --)
2016/11/07 23:38:29
Gaahhhhhhh. Looking around I can't actually tell i
| |
| 971 self.m.step.active_result) | |
| 972 return step_result | 973 return step_result |
| 973 | 974 |
| 974 def copy_gtest_results(self, result_step, active_step): | 975 def copy_gtest_results(self, result_step, active_step): |
| 975 if (hasattr(result_step, 'test_utils') and | 976 if (hasattr(result_step, 'test_utils') and |
| 976 hasattr(result_step.test_utils, 'gtest_results')): | 977 hasattr(result_step.test_utils, 'gtest_results')): |
| 977 active_step.test_utils = result_step.test_utils | 978 active_step.test_utils = result_step.test_utils |
| 978 | 979 |
| 979 def create_result_details(self, step_name, json_results_file, cs_base_url): | 980 def create_result_details(self, step_name, json_results_file, cs_base_url): |
| 980 presentation_args = ['--json-file', | 981 presentation_args = ['--json-file', |
| 981 json_results_file, | 982 json_results_file, |
| 982 '--master-name', | 983 '--master-name', |
| 983 self.m.properties.get('mastername')] | 984 self.m.properties.get('mastername')] |
| 984 if cs_base_url: | 985 if cs_base_url: |
| 985 presentation_args.extend(['--cs-base-url', cs_base_url]) | 986 presentation_args.extend(['--cs-base-url', cs_base_url]) |
| 986 result_details = self.m.python( | 987 result_details = self.m.python( |
| 987 '%s: generate result details' % step_name, | 988 '%s: generate result details' % step_name, |
| 988 self.resource('test_results_presentation.py'), | 989 self.resource('test_results_presentation.py'), |
| 989 args=presentation_args, | 990 args=presentation_args, |
| 990 stdout=self.m.raw_io.output(), | 991 stdout=self.m.raw_io.output(), |
| 991 step_test_data=( | 992 step_test_data=( |
| 992 lambda: self.m.raw_io.test_api.stream_output( | 993 lambda: self.m.raw_io.test_api.stream_output( |
| 993 '<!DOCTYPE html><html></html>'))) | 994 '<!DOCTYPE html><html></html>'))) |
| 994 return result_details.stdout.splitlines() | 995 return result_details.stdout.splitlines() |
| 995 | 996 |
| 997 def _upload_render_test_failures(self, render_results_dir): | |
| 998 """Uploads render test results. Generates HTML file displaying results.""" | |
| 999 args = ['--output-html-file', self.m.raw_io.output(), | |
| 1000 '--buildername', self.m.properties['buildername'], | |
| 1001 '--build-number', self.m.properties['buildnumber'], | |
| 1002 '--render-results-dir', render_results_dir] | |
| 1003 step_result = self.m.python( | |
| 1004 name='[Render Tests] Upload Results', | |
| 1005 script=self.m.path['checkout'].join( | |
| 1006 'build', 'android', 'render_tests', | |
| 1007 'process_render_test_results.py'), | |
| 1008 args=args, | |
| 1009 step_test_data=lambda: self.m.raw_io.test_api.output( | |
| 1010 '<!DOCTYPE html><html></html>')) | |
| 1011 step_result.presentation.logs['render results'] = ( | |
| 1012 step_result.raw_io.output.splitlines()) | |
| 1013 | |
| 996 def logcat_dump(self, gs_bucket=None): | 1014 def logcat_dump(self, gs_bucket=None): |
| 997 if gs_bucket: | 1015 if gs_bucket: |
| 998 log_path = self.m.chromium.output_dir.join('full_log') | 1016 log_path = self.m.chromium.output_dir.join('full_log') |
| 999 self.m.python( | 1017 self.m.python( |
| 1000 'logcat_dump', | 1018 'logcat_dump', |
| 1001 self.m.path['checkout'].join('build', 'android', | 1019 self.m.path['checkout'].join('build', 'android', |
| 1002 'adb_logcat_printer.py'), | 1020 'adb_logcat_printer.py'), |
| 1003 [ '--output-path', log_path, | 1021 [ '--output-path', log_path, |
| 1004 self.m.path['checkout'].join('out', 'logcat') ], | 1022 self.m.path['checkout'].join('out', 'logcat') ], |
| 1005 infra_step=True) | 1023 infra_step=True) |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1192 def run_java_unit_test_suite(self, suite, verbose=True, | 1210 def run_java_unit_test_suite(self, suite, verbose=True, |
| 1193 json_results_file=None, suffix=None, **kwargs): | 1211 json_results_file=None, suffix=None, **kwargs): |
| 1194 args = [] | 1212 args = [] |
| 1195 if verbose: | 1213 if verbose: |
| 1196 args.append('--verbose') | 1214 args.append('--verbose') |
| 1197 if self.c.BUILD_CONFIG == 'Release': | 1215 if self.c.BUILD_CONFIG == 'Release': |
| 1198 args.append('--release') | 1216 args.append('--release') |
| 1199 if json_results_file: | 1217 if json_results_file: |
| 1200 args.extend(['--json-results-file', json_results_file]) | 1218 args.extend(['--json-results-file', json_results_file]) |
| 1201 | 1219 |
| 1202 self.test_runner( | 1220 return self.test_runner( |
| 1203 '%s%s' % (str(suite), ' (%s)' % suffix if suffix else ''), | 1221 '%s%s' % (str(suite), ' (%s)' % suffix if suffix else ''), |
| 1204 ['junit', '-s', suite] + args, | 1222 ['junit', '-s', suite] + args, |
| 1205 env=self.m.chromium.get_env(), | 1223 env=self.m.chromium.get_env(), |
| 1206 **kwargs) | 1224 **kwargs) |
| 1207 | 1225 |
| 1208 def _set_webview_command_line(self, command_line_args): | 1226 def _set_webview_command_line(self, command_line_args): |
| 1209 """Set the Android WebView command line. | 1227 """Set the Android WebView command line. |
| 1210 | 1228 |
| 1211 Args: | 1229 Args: |
| 1212 command_line_args: A list of command line arguments you want set for | 1230 command_line_args: A list of command line arguments you want set for |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1566 script = self.c.test_runner | 1584 script = self.c.test_runner |
| 1567 if wrapper_script_suite_name: | 1585 if wrapper_script_suite_name: |
| 1568 script = self.m.chromium.output_dir.join('bin', 'run_%s' % | 1586 script = self.m.chromium.output_dir.join('bin', 'run_%s' % |
| 1569 wrapper_script_suite_name) | 1587 wrapper_script_suite_name) |
| 1570 else: | 1588 else: |
| 1571 env = kwargs.get('env', {}) | 1589 env = kwargs.get('env', {}) |
| 1572 env['CHROMIUM_OUTPUT_DIR'] = env.get('CHROMIUM_OUTPUT_DIR', | 1590 env['CHROMIUM_OUTPUT_DIR'] = env.get('CHROMIUM_OUTPUT_DIR', |
| 1573 self.m.chromium.output_dir) | 1591 self.m.chromium.output_dir) |
| 1574 kwargs['env'] = env | 1592 kwargs['env'] = env |
| 1575 return self.m.python(step_name, script, args, **kwargs) | 1593 return self.m.python(step_name, script, args, **kwargs) |
| OLD | NEW |