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 re |
6 import time | 7 import time |
7 | 8 |
8 from pylib import flag_changer | 9 from pylib import flag_changer |
9 from pylib.base import base_test_result | 10 from pylib.base import base_test_result |
10 from pylib.base import test_run | 11 from pylib.base import test_run |
| 12 from pylib.constants import keyevent |
| 13 from pylib.device import device_errors |
11 from pylib.local.device import local_device_test_run | 14 from pylib.local.device import local_device_test_run |
12 | 15 |
13 | 16 |
14 TIMEOUT_ANNOTATIONS = [ | 17 TIMEOUT_ANNOTATIONS = [ |
15 ('Manual', 10 * 60 * 60), | 18 ('Manual', 10 * 60 * 60), |
16 ('IntegrationTest', 30 * 60), | 19 ('IntegrationTest', 30 * 60), |
17 ('External', 10 * 60), | 20 ('External', 10 * 60), |
18 ('EnormousTest', 10 * 60), | 21 ('EnormousTest', 10 * 60), |
19 ('LargeTest', 5 * 60), | 22 ('LargeTest', 5 * 60), |
20 ('MediumTest', 3 * 60), | 23 ('MediumTest', 3 * 60), |
21 ('SmallTest', 1 * 60), | 24 ('SmallTest', 1 * 60), |
22 ] | 25 ] |
23 | 26 |
24 | 27 |
25 # TODO(jbudorick): Make this private once the instrumentation test_runner is | 28 # TODO(jbudorick): Make this private once the instrumentation test_runner is |
26 # deprecated. | 29 # deprecated. |
27 def DidPackageCrashOnDevice(package_name, device): | 30 def DidPackageCrashOnDevice(package_name, device): |
28 # Dismiss any error dialogs. Limit the number in case we have an error | 31 # Dismiss any error dialogs. Limit the number in case we have an error |
29 # loop or we are failing to dismiss. | 32 # loop or we are failing to dismiss. |
30 for _ in xrange(10): | 33 try: |
31 package = device.old_interface.DismissCrashDialogIfNeeded() | 34 for _ in xrange(10): |
32 if not package: | 35 package = _DismissCrashDialog(device) |
33 return False | 36 if not package: |
34 # Assume test package convention of ".test" suffix | 37 return False |
35 if package in package_name: | 38 # Assume test package convention of ".test" suffix |
36 return True | 39 if package in package_name: |
| 40 return True |
| 41 except device_errors.CommandFailedError: |
| 42 logging.exception('Error while attempting to dismiss crash dialog.') |
37 return False | 43 return False |
38 | 44 |
39 | 45 |
| 46 _CURRENT_FOCUS_CRASH_RE = re.compile( |
| 47 r'\s*mCurrentFocus.*Application (Error|Not Responding): (\S+)}') |
| 48 |
| 49 |
| 50 def _DismissCrashDialog(device): |
| 51 for l in device.RunShellCommand( |
| 52 ['dumpsys', 'window', 'windows'], check_return=True): |
| 53 m = re.match(_CURRENT_FOCUS_CRASH_RE, l) |
| 54 if m: |
| 55 device.SendKeyEvent(keyevent.KEYCODE_DPAD_RIGHT) |
| 56 device.SendKeyEvent(keyevent.KEYCODE_DPAD_RIGHT) |
| 57 device.SendKeyEvent(keyevent.KEYCODE_ENTER) |
| 58 return m.group(2) |
| 59 |
| 60 return None |
| 61 |
| 62 |
40 class LocalDeviceInstrumentationTestRun( | 63 class LocalDeviceInstrumentationTestRun( |
41 local_device_test_run.LocalDeviceTestRun): | 64 local_device_test_run.LocalDeviceTestRun): |
42 def __init__(self, env, test_instance): | 65 def __init__(self, env, test_instance): |
43 super(LocalDeviceInstrumentationTestRun, self).__init__(env, test_instance) | 66 super(LocalDeviceInstrumentationTestRun, self).__init__(env, test_instance) |
44 self._flag_changers = {} | 67 self._flag_changers = {} |
45 | 68 |
46 def TestPackage(self): | 69 def TestPackage(self): |
47 return None | 70 return None |
48 | 71 |
49 def SetUp(self): | 72 def SetUp(self): |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 | 176 |
154 try: | 177 try: |
155 scale = int(annotations.get('TimeoutScale', 1)) | 178 scale = int(annotations.get('TimeoutScale', 1)) |
156 except ValueError as e: | 179 except ValueError as e: |
157 logging.warning("Non-integer value of TimeoutScale ignored. (%s)", str(e)) | 180 logging.warning("Non-integer value of TimeoutScale ignored. (%s)", str(e)) |
158 scale = 1 | 181 scale = 1 |
159 timeout *= scale | 182 timeout *= scale |
160 | 183 |
161 return timeout | 184 return timeout |
162 | 185 |
OLD | NEW |