| 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_install_script: |
| 72 dev.Install(self._test_instance.test_apk, | 73 local_device_test_run.IncrementalInstall(dev, |
| 73 permissions=self._test_instance.test_permissions) | 74 self._test_instance.apk_under_test, |
| 74 for apk in self._test_instance.additional_apks: | 75 self._test_instance.apk_under_test_install_script) |
| 75 dev.Install(apk) | 76 else: |
| 77 dev.Install(self._test_instance.apk_under_test, |
| 78 permissions=self._test_instance.apk_under_test.GetPermissions()) |
| 76 | 79 |
| 77 external_storage = dev.GetExternalStoragePath() | 80 if self._test_instance.test_apk_install_script: |
| 78 host_device_tuples = [ | 81 local_device_test_run.IncrementalInstall(dev, |
| 79 (h, substitute_external_storage(d, external_storage)) | 82 self._test_instance.test_apk, |
| 80 for h, d in host_device_tuples] | 83 self._test_instance.test_apk_install_script) |
| 81 logging.info('instrumentation data deps:') | |
| 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: | 84 else: |
| 91 self._CreateFlagChangerIfNeeded(dev) | 85 dev.Install(self._test_instance.test_apk, |
| 92 logging.debug('Attempting to set flags: %r', | 86 permissions=self._test_instance.test_apk.GetPermissions()) |
| 93 self._test_instance.flags) | |
| 94 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags) | |
| 95 | 87 |
| 96 valgrind_tools.SetChromeTimeoutScale( | 88 for apk in self._test_instance.additional_apks: |
| 97 dev, self._test_instance.timeout_scale) | 89 dev.Install(apk) |
| 90 |
| 91 def push_test_data(): |
| 92 external_storage = dev.GetExternalStoragePath() |
| 93 host_device_tuples_substituted = [ |
| 94 (h, substitute_external_storage(d, external_storage)) |
| 95 for h, d in host_device_tuples] |
| 96 logging.info('instrumentation data deps:') |
| 97 for h, d in host_device_tuples_substituted: |
| 98 logging.info('%r -> %r', h, d) |
| 99 dev.PushChangedFiles(host_device_tuples_substituted) |
| 100 |
| 101 def create_flag_changer(): |
| 102 if self._test_instance.flags: |
| 103 if not self._test_instance.package_info: |
| 104 logging.error("Couldn't set flags: no package info") |
| 105 elif not self._test_instance.package_info.cmdline_file: |
| 106 logging.error("Couldn't set flags: no cmdline_file") |
| 107 else: |
| 108 self._CreateFlagChangerIfNeeded(dev) |
| 109 logging.debug('Attempting to set flags: %r', |
| 110 self._test_instance.flags) |
| 111 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags) |
| 112 |
| 113 valgrind_tools.SetChromeTimeoutScale( |
| 114 dev, self._test_instance.timeout_scale) |
| 115 |
| 116 steps = (install_apk, push_test_data, create_flag_changer) |
| 117 if self._env.concurrent_adb: |
| 118 reraiser_thread.RunAsync(steps) |
| 119 else: |
| 120 for step in steps: |
| 121 step() |
| 98 | 122 |
| 99 self._env.parallel_devices.pMap( | 123 self._env.parallel_devices.pMap( |
| 100 individual_device_set_up, | 124 individual_device_set_up, |
| 101 self._test_instance.GetDataDependencies()) | 125 self._test_instance.GetDataDependencies()) |
| 102 | 126 |
| 103 def TearDown(self): | 127 def TearDown(self): |
| 104 def individual_device_tear_down(dev): | 128 def individual_device_tear_down(dev): |
| 105 if str(dev) in self._flag_changers: | 129 if str(dev) in self._flag_changers: |
| 106 self._flag_changers[str(dev)].Restore() | 130 self._flag_changers[str(dev)].Restore() |
| 107 | 131 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 timeout = v | 265 timeout = v |
| 242 break | 266 break |
| 243 else: | 267 else: |
| 244 logging.warning('Using default 1 minute timeout for %s', test_name) | 268 logging.warning('Using default 1 minute timeout for %s', test_name) |
| 245 timeout = 60 | 269 timeout = 60 |
| 246 | 270 |
| 247 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) | 271 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) |
| 248 | 272 |
| 249 return timeout | 273 return timeout |
| 250 | 274 |
| OLD | NEW |