示例#1
0
    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
示例#2
0
  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
示例#3
0
    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
示例#4
0
    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
示例#5
0
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()
示例#6
0
 def alwaysRaisesNoAdbError(timeout=None, retries=None):
     actual_tries[0] += 1
     raise device_errors.NoAdbError()
示例#7
0
 def testPicklable_NoAdbError(self):
     original = device_errors.NoAdbError()
     self.assertIsPicklable(original)