| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 logging | 5 import logging |
| 6 import os | 6 import os |
| 7 import posixpath | 7 import posixpath |
| 8 import re | 8 import re |
| 9 import time | 9 import time |
| 10 | 10 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 device, self._test_instance.package_info.cmdline_file) | 167 device, self._test_instance.package_info.cmdline_file) |
| 168 | 168 |
| 169 #override | 169 #override |
| 170 def _CreateShards(self, tests): | 170 def _CreateShards(self, tests): |
| 171 return tests | 171 return tests |
| 172 | 172 |
| 173 #override | 173 #override |
| 174 def _GetTests(self): | 174 def _GetTests(self): |
| 175 return self._test_instance.GetTests() | 175 return self._test_instance.GetTests() |
| 176 | 176 |
| 177 #override | |
| 178 def _GetTestName(self, test): | 177 def _GetTestName(self, test): |
| 178 # pylint: disable=no-self-use |
| 179 return '%s#%s' % (test['class'], test['method']) | 179 return '%s#%s' % (test['class'], test['method']) |
| 180 | 180 |
| 181 def _GetTestNameForDisplay(self, test): | 181 #override |
| 182 def _GetUniqueTestName(self, test): |
| 182 display_name = self._GetTestName(test) | 183 display_name = self._GetTestName(test) |
| 183 flags = test['flags'] | 184 if 'flags' in test: |
| 184 if flags.add: | 185 flags = test['flags'] |
| 185 display_name = '%s with {%s}' % (display_name, ' '.join(flags.add)) | 186 if flags.add: |
| 186 if flags.remove: | 187 display_name = '%s with {%s}' % (display_name, ' '.join(flags.add)) |
| 187 display_name = '%s without {%s}' % (display_name, ' '.join(flags.remove)) | 188 if flags.remove: |
| 189 display_name = '%s without {%s}' % ( |
| 190 display_name, ' '.join(flags.remove)) |
| 188 return display_name | 191 return display_name |
| 189 | 192 |
| 190 #override | 193 #override |
| 191 def _RunTest(self, device, test): | 194 def _RunTest(self, device, test): |
| 192 extras = {} | 195 extras = {} |
| 193 | 196 |
| 194 flags = None | 197 flags = None |
| 195 test_timeout_scale = None | 198 test_timeout_scale = None |
| 196 if self._test_instance.coverage_directory: | 199 if self._test_instance.coverage_directory: |
| 197 coverage_basename = '%s.ec' % ('%s_group' % test[0]['method'] | 200 coverage_basename = '%s.ec' % ('%s_group' % test[0]['method'] |
| (...skipping 21 matching lines...) Expand all Loading... |
| 219 test_display_name = test_name | 222 test_display_name = test_name |
| 220 target = '%s/%s' % ( | 223 target = '%s/%s' % ( |
| 221 self._test_instance.driver_package, | 224 self._test_instance.driver_package, |
| 222 self._test_instance.driver_name) | 225 self._test_instance.driver_name) |
| 223 extras.update( | 226 extras.update( |
| 224 self._test_instance.GetDriverEnvironmentVars( | 227 self._test_instance.GetDriverEnvironmentVars( |
| 225 test_list=test_names)) | 228 test_list=test_names)) |
| 226 timeout = sum(timeouts) | 229 timeout = sum(timeouts) |
| 227 else: | 230 else: |
| 228 test_name = self._GetTestName(test) | 231 test_name = self._GetTestName(test) |
| 229 test_display_name = test_name | 232 test_display_name = self._GetUniqueTestName(test) |
| 230 target = '%s/%s' % ( | 233 target = '%s/%s' % ( |
| 231 self._test_instance.test_package, self._test_instance.test_runner) | 234 self._test_instance.test_package, self._test_instance.test_runner) |
| 232 extras['class'] = test_name | 235 extras['class'] = test_name |
| 233 if 'flags' in test: | 236 if 'flags' in test: |
| 234 flags = test['flags'] | 237 flags = test['flags'] |
| 235 test_display_name = self._GetTestNameForDisplay(test) | |
| 236 timeout = self._GetTimeoutFromAnnotations( | 238 timeout = self._GetTimeoutFromAnnotations( |
| 237 test['annotations'], test_display_name) | 239 test['annotations'], test_display_name) |
| 238 | 240 |
| 239 test_timeout_scale = self._GetTimeoutScaleFromAnnotations( | 241 test_timeout_scale = self._GetTimeoutScaleFromAnnotations( |
| 240 test['annotations']) | 242 test['annotations']) |
| 241 if test_timeout_scale and test_timeout_scale != 1: | 243 if test_timeout_scale and test_timeout_scale != 1: |
| 242 valgrind_tools.SetChromeTimeoutScale( | 244 valgrind_tools.SetChromeTimeoutScale( |
| 243 device, test_timeout_scale * self._test_instance.timeout_scale) | 245 device, test_timeout_scale * self._test_instance.timeout_scale) |
| 244 | 246 |
| 245 logging.info('preparing to run %s: %s', test_display_name, test) | 247 logging.info('preparing to run %s: %s', test_display_name, test) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 262 valgrind_tools.SetChromeTimeoutScale( | 264 valgrind_tools.SetChromeTimeoutScale( |
| 263 device, self._test_instance.timeout_scale) | 265 device, self._test_instance.timeout_scale) |
| 264 | 266 |
| 265 # TODO(jbudorick): Make instrumentation tests output a JSON so this | 267 # TODO(jbudorick): Make instrumentation tests output a JSON so this |
| 266 # doesn't have to parse the output. | 268 # doesn't have to parse the output. |
| 267 result_code, result_bundle, statuses = ( | 269 result_code, result_bundle, statuses = ( |
| 268 self._test_instance.ParseAmInstrumentRawOutput(output)) | 270 self._test_instance.ParseAmInstrumentRawOutput(output)) |
| 269 results = self._test_instance.GenerateTestResults( | 271 results = self._test_instance.GenerateTestResults( |
| 270 result_code, result_bundle, statuses, start_ms, duration_ms) | 272 result_code, result_bundle, statuses, start_ms, duration_ms) |
| 271 | 273 |
| 272 # Add UNKNOWN results for any missing tests. | |
| 273 iterable_test = test if isinstance(test, list) else [test] | |
| 274 test_names = set(self._GetTestName(t) for t in iterable_test) | |
| 275 results_names = set(r.GetName() for r in results) | |
| 276 results.extend( | |
| 277 base_test_result.BaseTestResult(u, base_test_result.ResultType.UNKNOWN) | |
| 278 for u in test_names.difference(results_names)) | |
| 279 | |
| 280 # Update the result name if the test used flags. | 274 # Update the result name if the test used flags. |
| 281 if flags: | 275 if flags: |
| 282 for r in results: | 276 for r in results: |
| 283 if r.GetName() == test_name: | 277 if r.GetName() == test_name: |
| 284 r.SetName(test_display_name) | 278 r.SetName(test_display_name) |
| 285 | 279 |
| 280 # Add UNKNOWN results for any missing tests. |
| 281 iterable_test = test if isinstance(test, list) else [test] |
| 282 test_names = set(self._GetUniqueTestName(t) for t in iterable_test) |
| 283 results_names = set(r.GetName() for r in results) |
| 284 results.extend( |
| 285 base_test_result.BaseTestResult(u, base_test_result.ResultType.UNKNOWN) |
| 286 for u in test_names.difference(results_names)) |
| 287 |
| 286 # Update the result type if we detect a crash. | 288 # Update the result type if we detect a crash. |
| 287 if DidPackageCrashOnDevice(self._test_instance.test_package, device): | 289 if DidPackageCrashOnDevice(self._test_instance.test_package, device): |
| 288 for r in results: | 290 for r in results: |
| 289 if r.GetType() == base_test_result.ResultType.UNKNOWN: | 291 if r.GetType() == base_test_result.ResultType.UNKNOWN: |
| 290 r.SetType(base_test_result.ResultType.CRASH) | 292 r.SetType(base_test_result.ResultType.CRASH) |
| 291 | 293 |
| 292 # Handle failures by: | 294 # Handle failures by: |
| 293 # - optionally taking a screenshot | 295 # - optionally taking a screenshot |
| 294 # - logging the raw output at INFO level | 296 # - logging the raw output at INFO level |
| 295 # - clearing the application state while persisting permissions | 297 # - clearing the application state while persisting permissions |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 timeout = v | 349 timeout = v |
| 348 break | 350 break |
| 349 else: | 351 else: |
| 350 logging.warning('Using default 1 minute timeout for %s', test_name) | 352 logging.warning('Using default 1 minute timeout for %s', test_name) |
| 351 timeout = 60 | 353 timeout = 60 |
| 352 | 354 |
| 353 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) | 355 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) |
| 354 | 356 |
| 355 return timeout | 357 return timeout |
| 356 | 358 |
| OLD | NEW |