| 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 re | 7 import re |
| 7 import time | 8 import time |
| 8 | 9 |
| 9 from devil.android import device_errors | 10 from devil.android import device_errors |
| 10 from devil.android import flag_changer | 11 from devil.android import flag_changer |
| 11 from devil.utils import reraiser_thread | 12 from devil.utils import reraiser_thread |
| 12 from pylib import valgrind_tools | 13 from pylib import valgrind_tools |
| 13 from pylib.base import base_test_result | 14 from pylib.base import base_test_result |
| 14 from pylib.local.device import local_device_test_run | 15 from pylib.local.device import local_device_test_run |
| 15 | 16 |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 if flags.remove: | 180 if flags.remove: |
| 180 display_name = '%s without {%s}' % (display_name, ' '.join(flags.remove)) | 181 display_name = '%s without {%s}' % (display_name, ' '.join(flags.remove)) |
| 181 return display_name | 182 return display_name |
| 182 | 183 |
| 183 #override | 184 #override |
| 184 def _RunTest(self, device, test): | 185 def _RunTest(self, device, test): |
| 185 extras = {} | 186 extras = {} |
| 186 | 187 |
| 187 flags = None | 188 flags = None |
| 188 test_timeout_scale = None | 189 test_timeout_scale = None |
| 190 if self._test_instance.coverage_directory: |
| 191 coverage_basename = '%s.ec' % ('%s_group' % test[0]['method'] |
| 192 if isinstance(test, list) else test['method']) |
| 193 extras['coverage'] = 'true' |
| 194 coverage_directory = os.path.join( |
| 195 device.GetExternalStoragePath(), 'chrome', 'test', 'coverage') |
| 196 coverage_device_file = os.path.join( |
| 197 coverage_directory, coverage_basename) |
| 198 extras['coverageFile'] = coverage_device_file |
| 199 |
| 189 if isinstance(test, list): | 200 if isinstance(test, list): |
| 190 if not self._test_instance.driver_apk: | 201 if not self._test_instance.driver_apk: |
| 191 raise Exception('driver_apk does not exist. ' | 202 raise Exception('driver_apk does not exist. ' |
| 192 'Please build it and try again.') | 203 'Please build it and try again.') |
| 193 | 204 |
| 194 def name_and_timeout(t): | 205 def name_and_timeout(t): |
| 195 n = self._GetTestName(t) | 206 n = self._GetTestName(t) |
| 196 i = self._GetTimeoutFromAnnotations(t['annotations'], n) | 207 i = self._GetTimeoutFromAnnotations(t['annotations'], n) |
| 197 return (n, i) | 208 return (n, i) |
| 198 | 209 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 self._test_instance.apk_under_test.GetPermissions() | 283 self._test_instance.apk_under_test.GetPermissions() |
| 273 if self._test_instance.apk_under_test | 284 if self._test_instance.apk_under_test |
| 274 else None) | 285 else None) |
| 275 device.ClearApplicationState(self._test_instance.package_info.package, | 286 device.ClearApplicationState(self._test_instance.package_info.package, |
| 276 permissions=permissions) | 287 permissions=permissions) |
| 277 | 288 |
| 278 else: | 289 else: |
| 279 logging.debug('raw output from %s:', test_display_name) | 290 logging.debug('raw output from %s:', test_display_name) |
| 280 for l in output: | 291 for l in output: |
| 281 logging.debug(' %s', l) | 292 logging.debug(' %s', l) |
| 282 | 293 if self._test_instance.coverage_directory: |
| 294 device.PullFile(coverage_directory, |
| 295 self._test_instance.coverage_directory) |
| 296 device.RunShellCommand('rm -f %s' % os.path.join(coverage_directory, |
| 297 '*')) |
| 283 return results | 298 return results |
| 284 | 299 |
| 285 #override | 300 #override |
| 286 def _ShouldShard(self): | 301 def _ShouldShard(self): |
| 287 return True | 302 return True |
| 288 | 303 |
| 289 @classmethod | 304 @classmethod |
| 290 def _GetTimeoutScaleFromAnnotations(cls, annotations): | 305 def _GetTimeoutScaleFromAnnotations(cls, annotations): |
| 291 try: | 306 try: |
| 292 return int(annotations.get('TimeoutScale', 1)) | 307 return int(annotations.get('TimeoutScale', 1)) |
| 293 except ValueError as e: | 308 except ValueError as e: |
| 294 logging.warning("Non-integer value of TimeoutScale ignored. (%s)", str(e)) | 309 logging.warning("Non-integer value of TimeoutScale ignored. (%s)", str(e)) |
| 295 return 1 | 310 return 1 |
| 296 | 311 |
| 297 @classmethod | 312 @classmethod |
| 298 def _GetTimeoutFromAnnotations(cls, annotations, test_name): | 313 def _GetTimeoutFromAnnotations(cls, annotations, test_name): |
| 299 for k, v in TIMEOUT_ANNOTATIONS: | 314 for k, v in TIMEOUT_ANNOTATIONS: |
| 300 if k in annotations: | 315 if k in annotations: |
| 301 timeout = v | 316 timeout = v |
| 302 break | 317 break |
| 303 else: | 318 else: |
| 304 logging.warning('Using default 1 minute timeout for %s', test_name) | 319 logging.warning('Using default 1 minute timeout for %s', test_name) |
| 305 timeout = 60 | 320 timeout = 60 |
| 306 | 321 |
| 307 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) | 322 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) |
| 308 | 323 |
| 309 return timeout | 324 return timeout |
| 310 | 325 |
| OLD | NEW |