def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, check_error=True, cpu_affinity=None): # pylint: disable=no-member try: status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity), timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime()) except OSError as e: if e.errno in (errno.ENOENT, errno.ENOEXEC): raise device_errors.NoAdbError(msg=str(e)) else: raise if status != 0: raise device_errors.AdbCommandFailedError(args, output, status, device_serial) # This catches some errors, including when the device drops offline; # unfortunately adb is very inconsistent with error reporting so many # command failures present differently. if check_error and output.startswith('error:'): raise device_errors.AdbCommandFailedError(args, output) return output
def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, check_error=True, cpu_affinity=None, ensure_logs_on_timeout=True): timeout = timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime() if ensure_logs_on_timeout and timeout: timeout = 0.95 * timeout try: status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity), timeout, env=cls._ADB_ENV) except OSError as e: if e.errno in (errno.ENOENT, errno.ENOEXEC): raise device_errors.NoAdbError(msg=str(e)) else: raise # Best effort to catch errors from adb; unfortunately adb is very # inconsistent with error reporting so many command failures present # differently. if status != 0 or (check_error and output.startswith('error:')): not_found_m = _DEVICE_NOT_FOUND_RE.match(output) device_waiting_m = _WAITING_FOR_DEVICE_RE.match(output) if (device_waiting_m is not None or (not_found_m is not None and not_found_m.group('serial') == device_serial)): raise device_errors.DeviceUnreachableError(device_serial) else: raise device_errors.AdbCommandFailedError( args, output, status, device_serial) return output
def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, check_error=True, cpu_affinity=None): # pylint: disable=no-member try: status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity), timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime()) except OSError as e: if e.errno in (errno.ENOENT, errno.ENOEXEC): raise device_errors.NoAdbError(msg=str(e)) else: raise # Best effort to catch errors from adb; unfortunately adb is very # inconsistent with error reporting so many command failures present # differently. if status != 0 or (check_error and output.startswith('error:')): m = _DEVICE_NOT_FOUND_RE.match(output) if m is not None and m.group('serial') == device_serial: raise device_errors.DeviceUnreachableError(device_serial) else: raise device_errors.AdbCommandFailedError( args, output, status, device_serial) return output
def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, check_error=True, cpu_affinity=None, additional_env=None): if timeout: remaining = timeout_retry.CurrentTimeoutThreadGroup( ).GetRemainingTime() if remaining: # Use a slightly smaller timeout than remaining time to ensure that we # have time to collect output from the command. timeout = 0.95 * remaining else: timeout = None env = cls._ADB_ENV.copy() if additional_env: env.update(additional_env) try: adb_cmd = cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity) status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( adb_cmd, timeout, env=env) except OSError as e: if e.errno in (errno.ENOENT, errno.ENOEXEC): raise device_errors.NoAdbError(msg=str(e)) else: raise except cmd_helper.TimeoutError: logger.error('Timeout on adb command: %r', adb_cmd) raise # Best effort to catch errors from adb; unfortunately adb is very # inconsistent with error reporting so many command failures present # differently. if status != 0 or (check_error and output.startswith('error:')): not_found_m = _DEVICE_NOT_FOUND_RE.search(output) device_waiting_m = _WAITING_FOR_DEVICE_RE.match(output) if (device_waiting_m is not None or (not_found_m is not None and not_found_m.group('serial') == device_serial)): raise device_errors.DeviceUnreachableError(device_serial) else: raise device_errors.AdbCommandFailedError( args, output, status, device_serial) return output
def _FindAdb(): try: return devil_env.config.LocalPath('adb') except dependency_manager.NoPathFoundError: pass try: return os.path.join(devil_env.config.LocalPath('android_sdk'), 'platform-tools', 'adb') except dependency_manager.NoPathFoundError: pass try: return devil_env.config.FetchPath('adb') except dependency_manager.NoPathFoundError: raise device_errors.NoAdbError()
def alwaysRaisesNoAdbError(timeout=None, retries=None): actual_tries[0] += 1 raise device_errors.NoAdbError()
def testPicklable_NoAdbError(self): original = device_errors.NoAdbError() self.assertIsPicklable(original)