| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 """Provides a variety of device interactions based on adb. | 5 """Provides a variety of device interactions based on adb. |
| 6 | 6 |
| 7 Eventually, this will be based on adb_wrapper. | 7 Eventually, this will be based on adb_wrapper. |
| 8 """ | 8 """ |
| 9 # pylint: disable=W0613 | 9 # pylint: disable=W0613 |
| 10 | 10 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 retries: number of retries | 208 retries: number of retries |
| 209 | 209 |
| 210 Returns: | 210 Returns: |
| 211 The device's path to its SD card. | 211 The device's path to its SD card. |
| 212 | 212 |
| 213 Raises: | 213 Raises: |
| 214 CommandFailedError if the external storage path could not be determined. | 214 CommandFailedError if the external storage path could not be determined. |
| 215 CommandTimeoutError on timeout. | 215 CommandTimeoutError on timeout. |
| 216 DeviceUnreachableError on missing device. | 216 DeviceUnreachableError on missing device. |
| 217 """ | 217 """ |
| 218 return self._GetExternalStoragePathImpl() | |
| 219 | |
| 220 def _GetExternalStoragePathImpl(self): | |
| 221 if 'external_storage' in self._cache: | 218 if 'external_storage' in self._cache: |
| 222 return self._cache['external_storage'] | 219 return self._cache['external_storage'] |
| 223 | 220 |
| 224 value = self.RunShellCommand('echo $EXTERNAL_STORAGE', | 221 value = self.RunShellCommand('echo $EXTERNAL_STORAGE', |
| 225 single_line=True, | 222 single_line=True, |
| 226 check_return=True) | 223 check_return=True) |
| 227 if not value: | 224 if not value: |
| 228 raise device_errors.CommandFailedError('$EXTERNAL_STORAGE is not set', | 225 raise device_errors.CommandFailedError('$EXTERNAL_STORAGE is not set', |
| 229 str(self)) | 226 str(self)) |
| 230 self._cache['external_storage'] = value | 227 self._cache['external_storage'] = value |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 def pm_ready(): | 275 def pm_ready(): |
| 279 try: | 276 try: |
| 280 return self.GetApplicationPath('android') | 277 return self.GetApplicationPath('android') |
| 281 except device_errors.CommandFailedError: | 278 except device_errors.CommandFailedError: |
| 282 return False | 279 return False |
| 283 | 280 |
| 284 def boot_completed(): | 281 def boot_completed(): |
| 285 return self.GetProp('sys.boot_completed') == '1' | 282 return self.GetProp('sys.boot_completed') == '1' |
| 286 | 283 |
| 287 def wifi_enabled(): | 284 def wifi_enabled(): |
| 288 return 'Wi-Fi is enabled' in self.RunShellCommand(['dumpsys', 'wifi']) | 285 return 'Wi-Fi is enabled' in self.RunShellCommand(['dumpsys', 'wifi'], |
| 286 check_return=False) |
| 289 | 287 |
| 290 self.adb.WaitForDevice() | 288 self.adb.WaitForDevice() |
| 291 timeout_retry.WaitFor(sd_card_ready) | 289 timeout_retry.WaitFor(sd_card_ready) |
| 292 timeout_retry.WaitFor(pm_ready) | 290 timeout_retry.WaitFor(pm_ready) |
| 293 timeout_retry.WaitFor(boot_completed) | 291 timeout_retry.WaitFor(boot_completed) |
| 294 if wifi: | 292 if wifi: |
| 295 timeout_retry.WaitFor(wifi_enabled) | 293 timeout_retry.WaitFor(wifi_enabled) |
| 296 | 294 |
| 297 REBOOT_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT | 295 REBOOT_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT |
| 298 REBOOT_DEFAULT_RETRIES = _DEFAULT_RETRIES | 296 REBOOT_DEFAULT_RETRIES = _DEFAULT_RETRIES |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 cmd = 'su -c %s' % cmd | 433 cmd = 'su -c %s' % cmd |
| 436 if env: | 434 if env: |
| 437 env = ' '.join(env_quote(k, v) for k, v in env.iteritems()) | 435 env = ' '.join(env_quote(k, v) for k, v in env.iteritems()) |
| 438 cmd = '%s %s' % (env, cmd) | 436 cmd = '%s %s' % (env, cmd) |
| 439 if cwd: | 437 if cwd: |
| 440 cmd = 'cd %s && %s' % (cmd_helper.SingleQuote(cwd), cmd) | 438 cmd = 'cd %s && %s' % (cmd_helper.SingleQuote(cwd), cmd) |
| 441 if timeout is None: | 439 if timeout is None: |
| 442 timeout = self._default_timeout | 440 timeout = self._default_timeout |
| 443 | 441 |
| 444 try: | 442 try: |
| 445 output = self.adb.Shell(cmd, expect_rc=0) | 443 output = self.adb.Shell(cmd) |
| 446 except device_errors.AdbShellCommandFailedError as e: | 444 except device_errors.AdbShellCommandFailedError as e: |
| 447 if check_return: | 445 if check_return: |
| 448 raise | 446 raise |
| 449 else: | 447 else: |
| 450 output = e.output | 448 output = e.output |
| 451 | 449 |
| 452 output = output.splitlines() | 450 output = output.splitlines() |
| 453 if single_line: | 451 if single_line: |
| 454 if not output: | 452 if not output: |
| 455 return '' | 453 return '' |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 output = self.old_interface.StartActivity( | 522 output = self.old_interface.StartActivity( |
| 525 intent.package, intent.activity, wait_for_completion=blocking, | 523 intent.package, intent.activity, wait_for_completion=blocking, |
| 526 action=intent.action, category=single_category, data=intent.data, | 524 action=intent.action, category=single_category, data=intent.data, |
| 527 extras=intent.extras, trace_file_name=trace_file_name, | 525 extras=intent.extras, trace_file_name=trace_file_name, |
| 528 force_stop=force_stop, flags=intent.flags) | 526 force_stop=force_stop, flags=intent.flags) |
| 529 for l in output: | 527 for l in output: |
| 530 if l.startswith('Error:'): | 528 if l.startswith('Error:'): |
| 531 raise device_errors.CommandFailedError(l, device=str(self)) | 529 raise device_errors.CommandFailedError(l, device=str(self)) |
| 532 | 530 |
| 533 @decorators.WithTimeoutAndRetriesFromInstance() | 531 @decorators.WithTimeoutAndRetriesFromInstance() |
| 532 def StartInstrumentation(self, component, finish=True, raw=False, |
| 533 extras=None, timeout=None, retries=None): |
| 534 if extras is None: |
| 535 extras = {} |
| 536 |
| 537 cmd = ['am', 'instrument'] |
| 538 if finish: |
| 539 cmd.append('-w') |
| 540 if raw: |
| 541 cmd.append('-r') |
| 542 for k, v in extras.iteritems(): |
| 543 cmd.extend(['-e', k, v]) |
| 544 cmd.append(component) |
| 545 return self.RunShellCommand(cmd, check_return=True) |
| 546 |
| 547 @decorators.WithTimeoutAndRetriesFromInstance() |
| 534 def BroadcastIntent(self, intent, timeout=None, retries=None): | 548 def BroadcastIntent(self, intent, timeout=None, retries=None): |
| 535 """Send a broadcast intent. | 549 """Send a broadcast intent. |
| 536 | 550 |
| 537 Args: | 551 Args: |
| 538 intent: An Intent to broadcast. | 552 intent: An Intent to broadcast. |
| 539 timeout: timeout in seconds | 553 timeout: timeout in seconds |
| 540 retries: number of retries | 554 retries: number of retries |
| 541 | 555 |
| 542 Raises: | 556 Raises: |
| 543 CommandTimeoutError on timeout. | 557 CommandTimeoutError on timeout. |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 if not files: | 775 if not files: |
| 762 return | 776 return |
| 763 | 777 |
| 764 with tempfile.NamedTemporaryFile(suffix='.zip') as zip_file: | 778 with tempfile.NamedTemporaryFile(suffix='.zip') as zip_file: |
| 765 zip_proc = multiprocessing.Process( | 779 zip_proc = multiprocessing.Process( |
| 766 target=DeviceUtils._CreateDeviceZip, | 780 target=DeviceUtils._CreateDeviceZip, |
| 767 args=(zip_file.name, files)) | 781 args=(zip_file.name, files)) |
| 768 zip_proc.start() | 782 zip_proc.start() |
| 769 zip_proc.join() | 783 zip_proc.join() |
| 770 | 784 |
| 771 zip_on_device = '%s/tmp.zip' % self._GetExternalStoragePathImpl() | 785 zip_on_device = '%s/tmp.zip' % self.GetExternalStoragePath() |
| 772 try: | 786 try: |
| 773 self.adb.Push(zip_file.name, zip_on_device) | 787 self.adb.Push(zip_file.name, zip_on_device) |
| 774 self.RunShellCommand( | 788 self.RunShellCommand( |
| 775 ['unzip', zip_on_device], | 789 ['unzip', zip_on_device], |
| 776 as_root=True, | 790 as_root=True, |
| 777 env={'PATH': '$PATH:%s' % install_commands.BIN_DIR}, | 791 env={'PATH': '$PATH:%s' % install_commands.BIN_DIR}, |
| 778 check_return=True) | 792 check_return=True) |
| 779 finally: | 793 finally: |
| 780 if zip_proc.is_alive(): | 794 if zip_proc.is_alive(): |
| 781 zip_proc.terminate() | 795 zip_proc.terminate() |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1152 Returns: | 1166 Returns: |
| 1153 A Parallelizer operating over |devices|. | 1167 A Parallelizer operating over |devices|. |
| 1154 """ | 1168 """ |
| 1155 if not devices or len(devices) == 0: | 1169 if not devices or len(devices) == 0: |
| 1156 devices = pylib.android_commands.GetAttachedDevices() | 1170 devices = pylib.android_commands.GetAttachedDevices() |
| 1157 parallelizer_type = (parallelizer.Parallelizer if async | 1171 parallelizer_type = (parallelizer.Parallelizer if async |
| 1158 else parallelizer.SyncParallelizer) | 1172 else parallelizer.SyncParallelizer) |
| 1159 return parallelizer_type([ | 1173 return parallelizer_type([ |
| 1160 d if isinstance(d, DeviceUtils) else DeviceUtils(d) | 1174 d if isinstance(d, DeviceUtils) else DeviceUtils(d) |
| 1161 for d in devices]) | 1175 for d in devices]) |
| OLD | NEW |