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 re |
7 import time | 7 import time |
8 | 8 |
9 from devil.android import device_errors | 9 from devil.android import device_errors |
| 10 from devil.utils import reraiser_thread |
10 from pylib import flag_changer | 11 from pylib import flag_changer |
11 from pylib import valgrind_tools | 12 from pylib import valgrind_tools |
12 from pylib.base import base_test_result | 13 from pylib.base import base_test_result |
13 from pylib.local.device import local_device_test_run | 14 from pylib.local.device import local_device_test_run |
14 | 15 |
15 | 16 |
16 TIMEOUT_ANNOTATIONS = [ | 17 TIMEOUT_ANNOTATIONS = [ |
17 ('Manual', 10 * 60 * 60), | 18 ('Manual', 10 * 60 * 60), |
18 ('IntegrationTest', 30 * 60), | 19 ('IntegrationTest', 30 * 60), |
19 ('External', 10 * 60), | 20 ('External', 10 * 60), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 if not d: | 61 if not d: |
61 return external_storage | 62 return external_storage |
62 elif isinstance(d, list): | 63 elif isinstance(d, list): |
63 return '/'.join(p if p else external_storage for p in d) | 64 return '/'.join(p if p else external_storage for p in d) |
64 else: | 65 else: |
65 return d | 66 return d |
66 | 67 |
67 @local_device_test_run.handle_shard_failures_with( | 68 @local_device_test_run.handle_shard_failures_with( |
68 self._env.BlacklistDevice) | 69 self._env.BlacklistDevice) |
69 def individual_device_set_up(dev, host_device_tuples): | 70 def individual_device_set_up(dev, host_device_tuples): |
70 dev.Install(self._test_instance.apk_under_test, | 71 def install_apk(): |
71 permissions=self._test_instance.apk_under_test_permissions) | 72 if self._test_instance.apk_under_test_incremental_install_script: |
72 dev.Install(self._test_instance.test_apk, | 73 local_device_test_run.IncrementalInstall( |
73 permissions=self._test_instance.test_permissions) | 74 dev, |
74 for apk in self._test_instance.additional_apks: | 75 self._test_instance.apk_under_test, |
75 dev.Install(apk) | 76 self._test_instance.apk_under_test_incremental_install_script) |
| 77 else: |
| 78 permissions = self._test_instance.apk_under_test.GetPermissions() |
| 79 dev.Install(self._test_instance.apk_under_test, |
| 80 permissions=permissions) |
76 | 81 |
77 external_storage = dev.GetExternalStoragePath() | 82 if self._test_instance.test_apk_incremental_install_script: |
78 host_device_tuples = [ | 83 local_device_test_run.IncrementalInstall( |
79 (h, substitute_external_storage(d, external_storage)) | 84 dev, |
80 for h, d in host_device_tuples] | 85 self._test_instance.test_apk, |
81 logging.info('instrumentation data deps:') | 86 self._test_instance.test_apk_incremental_install_script) |
82 for h, d in host_device_tuples: | |
83 logging.info('%r -> %r', h, d) | |
84 dev.PushChangedFiles(host_device_tuples) | |
85 if self._test_instance.flags: | |
86 if not self._test_instance.package_info: | |
87 logging.error("Couldn't set flags: no package info") | |
88 elif not self._test_instance.package_info.cmdline_file: | |
89 logging.error("Couldn't set flags: no cmdline_file") | |
90 else: | 87 else: |
91 self._CreateFlagChangerIfNeeded(dev) | 88 permissions = self._test_instance.test_apk.GetPermissions() |
92 logging.debug('Attempting to set flags: %r', | 89 dev.Install(self._test_instance.test_apk, permissions=permissions) |
93 self._test_instance.flags) | |
94 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags) | |
95 | 90 |
96 valgrind_tools.SetChromeTimeoutScale( | 91 for apk in self._test_instance.additional_apks: |
97 dev, self._test_instance.timeout_scale) | 92 dev.Install(apk) |
| 93 |
| 94 def push_test_data(): |
| 95 external_storage = dev.GetExternalStoragePath() |
| 96 host_device_tuples_substituted = [ |
| 97 (h, substitute_external_storage(d, external_storage)) |
| 98 for h, d in host_device_tuples] |
| 99 logging.info('instrumentation data deps:') |
| 100 for h, d in host_device_tuples_substituted: |
| 101 logging.info('%r -> %r', h, d) |
| 102 dev.PushChangedFiles(host_device_tuples_substituted) |
| 103 |
| 104 def create_flag_changer(): |
| 105 if self._test_instance.flags: |
| 106 if not self._test_instance.package_info: |
| 107 logging.error("Couldn't set flags: no package info") |
| 108 elif not self._test_instance.package_info.cmdline_file: |
| 109 logging.error("Couldn't set flags: no cmdline_file") |
| 110 else: |
| 111 self._CreateFlagChangerIfNeeded(dev) |
| 112 logging.debug('Attempting to set flags: %r', |
| 113 self._test_instance.flags) |
| 114 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags) |
| 115 |
| 116 valgrind_tools.SetChromeTimeoutScale( |
| 117 dev, self._test_instance.timeout_scale) |
| 118 |
| 119 steps = (install_apk, push_test_data, create_flag_changer) |
| 120 if self._env.concurrent_adb: |
| 121 reraiser_thread.RunAsync(steps) |
| 122 else: |
| 123 for step in steps: |
| 124 step() |
98 | 125 |
99 self._env.parallel_devices.pMap( | 126 self._env.parallel_devices.pMap( |
100 individual_device_set_up, | 127 individual_device_set_up, |
101 self._test_instance.GetDataDependencies()) | 128 self._test_instance.GetDataDependencies()) |
102 | 129 |
103 def TearDown(self): | 130 def TearDown(self): |
104 def individual_device_tear_down(dev): | 131 def individual_device_tear_down(dev): |
105 if str(dev) in self._flag_changers: | 132 if str(dev) in self._flag_changers: |
106 self._flag_changers[str(dev)].Restore() | 133 self._flag_changers[str(dev)].Restore() |
107 | 134 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 timeout = v | 268 timeout = v |
242 break | 269 break |
243 else: | 270 else: |
244 logging.warning('Using default 1 minute timeout for %s', test_name) | 271 logging.warning('Using default 1 minute timeout for %s', test_name) |
245 timeout = 60 | 272 timeout = 60 |
246 | 273 |
247 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) | 274 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) |
248 | 275 |
249 return timeout | 276 return timeout |
250 | 277 |
OLD | NEW |