| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 an interface to communicate with the device via the adb command. | 5 """Provides an interface to communicate with the device via the adb command. |
| 6 | 6 |
| 7 Assumes adb binary is currently on system path. | 7 Assumes adb binary is currently on system path. |
| 8 """ | 8 """ |
| 9 # pylint: disable-all | 9 # pylint: disable-all |
| 10 | 10 |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 | 387 |
| 388 def GetExternalStorage(self): | 388 def GetExternalStorage(self): |
| 389 if not self._external_storage: | 389 if not self._external_storage: |
| 390 self._external_storage = self.RunShellCommand('echo $EXTERNAL_STORAGE')[0] | 390 self._external_storage = self.RunShellCommand('echo $EXTERNAL_STORAGE')[0] |
| 391 if not self._external_storage: | 391 if not self._external_storage: |
| 392 raise device_errors.CommandFailedError( | 392 raise device_errors.CommandFailedError( |
| 393 ['shell', "'echo $EXTERNAL_STORAGE'"], | 393 ['shell', "'echo $EXTERNAL_STORAGE'"], |
| 394 'Unable to find $EXTERNAL_STORAGE') | 394 'Unable to find $EXTERNAL_STORAGE') |
| 395 return self._external_storage | 395 return self._external_storage |
| 396 | 396 |
| 397 def WaitForDevicePm(self): | 397 def WaitForDevicePm(self, timeout=120): |
| 398 """Blocks until the device's package manager is available. | 398 """Blocks until the device's package manager is available. |
| 399 | 399 |
| 400 To workaround http://b/5201039, we restart the shell and retry if the | 400 To workaround http://b/5201039, we restart the shell and retry if the |
| 401 package manager isn't back after 120 seconds. | 401 package manager isn't back after 120 seconds. |
| 402 | 402 |
| 403 Raises: | 403 Raises: |
| 404 errors.WaitForResponseTimedOutError after max retries reached. | 404 errors.WaitForResponseTimedOutError after max retries reached. |
| 405 """ | 405 """ |
| 406 last_err = None | 406 last_err = None |
| 407 retries = 3 | 407 retries = 3 |
| 408 while retries: | 408 while retries: |
| 409 try: | 409 try: |
| 410 self._adb.WaitForDevicePm() | 410 self._adb.WaitForDevicePm(wait_time=timeout) |
| 411 return # Success | 411 return # Success |
| 412 except errors.WaitForResponseTimedOutError as e: | 412 except errors.WaitForResponseTimedOutError as e: |
| 413 last_err = e | 413 last_err = e |
| 414 logging.warning('Restarting and retrying after timeout: %s', e) | 414 logging.warning('Restarting and retrying after timeout: %s', e) |
| 415 retries -= 1 | 415 retries -= 1 |
| 416 self.RestartShell() | 416 self.RestartShell() |
| 417 raise last_err # Only reached after max retries, re-raise the last error. | 417 raise last_err # Only reached after max retries, re-raise the last error. |
| 418 | 418 |
| 419 def RestartShell(self): | 419 def RestartShell(self): |
| 420 """Restarts the shell on the device. Does not block for it to return.""" | 420 """Restarts the shell on the device. Does not block for it to return.""" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 439 retries = 1 | 439 retries = 1 |
| 440 # Wait for the device to disappear. | 440 # Wait for the device to disappear. |
| 441 while retries < 10 and self.IsOnline(): | 441 while retries < 10 and self.IsOnline(): |
| 442 time.sleep(1) | 442 time.sleep(1) |
| 443 retries += 1 | 443 retries += 1 |
| 444 else: | 444 else: |
| 445 self.RestartShell() | 445 self.RestartShell() |
| 446 timeout = 120 | 446 timeout = 120 |
| 447 # To run tests we need at least the package manager and the sd card (or | 447 # To run tests we need at least the package manager and the sd card (or |
| 448 # other external storage) to be ready. | 448 # other external storage) to be ready. |
| 449 self.WaitForDevicePm() | 449 self.WaitForDevicePm(timeout) |
| 450 self.WaitForSdCardReady(timeout) | 450 self.WaitForSdCardReady(timeout) |
| 451 | 451 |
| 452 def Shutdown(self): | 452 def Shutdown(self): |
| 453 """Shuts down the device.""" | 453 """Shuts down the device.""" |
| 454 self._adb.SendCommand('reboot -p') | 454 self._adb.SendCommand('reboot -p') |
| 455 self._system_properties = system_properties.SystemProperties(self.Adb()) | 455 self._system_properties = system_properties.SystemProperties(self.Adb()) |
| 456 | 456 |
| 457 def Uninstall(self, package): | 457 def Uninstall(self, package): |
| 458 """Uninstalls the specified package from the device. | 458 """Uninstalls the specified package from the device. |
| 459 | 459 |
| (...skipping 1508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1968 """ | 1968 """ |
| 1969 def __init__(self, output): | 1969 def __init__(self, output): |
| 1970 self._output = output | 1970 self._output = output |
| 1971 | 1971 |
| 1972 def write(self, data): | 1972 def write(self, data): |
| 1973 data = data.replace('\r\r\n', '\n') | 1973 data = data.replace('\r\r\n', '\n') |
| 1974 self._output.write(data) | 1974 self._output.write(data) |
| 1975 | 1975 |
| 1976 def flush(self): | 1976 def flush(self): |
| 1977 self._output.flush() | 1977 self._output.flush() |
| OLD | NEW |