| Index: build/android/devil/android/sdk/gce_adb_wrapper.py
|
| diff --git a/build/android/devil/android/sdk/gce_adb_wrapper.py b/build/android/devil/android/sdk/gce_adb_wrapper.py
|
| deleted file mode 100644
|
| index 60ec364405106b03596b32260b1d2221ce8242a7..0000000000000000000000000000000000000000
|
| --- a/build/android/devil/android/sdk/gce_adb_wrapper.py
|
| +++ /dev/null
|
| @@ -1,145 +0,0 @@
|
| -# Copyright 2015 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Provides a work around for various adb commands on android gce instances.
|
| -
|
| -Some adb commands don't work well when the device is a cloud vm, namely
|
| -'push' and 'pull'. With gce instances, moving files through adb can be
|
| -painfully slow and hit timeouts, so the methods here just use scp instead.
|
| -"""
|
| -# pylint: disable=unused-argument
|
| -
|
| -import logging
|
| -import os
|
| -import subprocess
|
| -
|
| -from devil.android import device_errors
|
| -from devil.android.sdk import adb_wrapper
|
| -from devil.utils import cmd_helper
|
| -
|
| -
|
| -# SSH key file for accessing the instances. The keys are created at
|
| -# startup and removed & revoked at teardown.
|
| -_SSH_KEY_FILE = '/tmp/ssh_android_gce_instance'
|
| -
|
| -
|
| -class GceAdbWrapper(adb_wrapper.AdbWrapper):
|
| - def __init__(self, device_serial):
|
| - super(GceAdbWrapper, self).__init__(device_serial)
|
| - self._instance_ip = self.Shell('getprop net.gce.ip_address').strip()
|
| -
|
| - #override
|
| - def Push(self, local, remote, **kwargs):
|
| - """Pushes an object from the host to the gce instance.
|
| -
|
| - Args:
|
| - local: Path on the host filesystem.
|
| - remote: Path on the instance filesystem.
|
| - """
|
| - adb_wrapper.VerifyLocalFileExists(_SSH_KEY_FILE)
|
| - adb_wrapper.VerifyLocalFileExists(local)
|
| - if os.path.isdir(local):
|
| - self.Shell('mkdir -p %s' % cmd_helper.SingleQuote(remote))
|
| -
|
| - # When the object to be pushed is a directory, adb merges the source dir
|
| - # with the destination dir. So if local is a dir, just scp its contents.
|
| - for f in os.listdir(local):
|
| - self._PushObject(os.path.join(local, f), os.path.join(remote, f))
|
| - self.Shell('chmod 777 %s' %
|
| - cmd_helper.SingleQuote(os.path.join(remote, f)))
|
| - else:
|
| - parent_dir = remote[0:remote.rfind('/')]
|
| - if parent_dir:
|
| - self.Shell('mkdir -p %s' % cmd_helper.SingleQuote(parent_dir))
|
| - self._PushObject(local, remote)
|
| - self.Shell('chmod 777 %s' % cmd_helper.SingleQuote(remote))
|
| -
|
| - def _PushObject(self, local, remote):
|
| - """Copies an object from the host to the gce instance using scp.
|
| -
|
| - Args:
|
| - local: Path on the host filesystem.
|
| - remote: Path on the instance filesystem.
|
| - """
|
| - cmd = [
|
| - 'scp',
|
| - '-r',
|
| - '-i', _SSH_KEY_FILE,
|
| - '-o', 'UserKnownHostsFile=/dev/null',
|
| - '-o', 'StrictHostKeyChecking=no',
|
| - local,
|
| - 'root@%s:%s' % (self._instance_ip, remote)
|
| - ]
|
| - status, _ = cmd_helper.GetCmdStatusAndOutput(cmd)
|
| - if status:
|
| - raise device_errors.AdbCommandFailedError(
|
| - cmd, 'File not reachable on host: %s' % local,
|
| - device_serial=str(self))
|
| -
|
| - #override
|
| - def Pull(self, remote, local, **kwargs):
|
| - """Pulls a file from the gce instance to the host.
|
| -
|
| - Args:
|
| - remote: Path on the instance filesystem.
|
| - local: Path on the host filesystem.
|
| - """
|
| - adb_wrapper.VerifyLocalFileExists(_SSH_KEY_FILE)
|
| - cmd = [
|
| - 'scp',
|
| - '-p',
|
| - '-r',
|
| - '-i', _SSH_KEY_FILE,
|
| - '-o', 'UserKnownHostsFile=/dev/null',
|
| - '-o', 'StrictHostKeyChecking=no',
|
| - 'root@%s:%s' % (self._instance_ip, remote),
|
| - local,
|
| - ]
|
| - status, _ = cmd_helper.GetCmdStatusAndOutput(cmd)
|
| - if status:
|
| - raise device_errors.AdbCommandFailedError(
|
| - cmd, 'File not reachable on host: %s' % local,
|
| - device_serial=str(self))
|
| -
|
| - try:
|
| - adb_wrapper.VerifyLocalFileExists(local)
|
| - except (subprocess.CalledProcessError, IOError):
|
| - logging.exception('Error when pulling files from android instance.')
|
| - raise device_errors.AdbCommandFailedError(
|
| - cmd, 'File not reachable on host: %s' % local,
|
| - device_serial=str(self))
|
| -
|
| - #override
|
| - def Install(self, apk_path, forward_lock=False, reinstall=False,
|
| - sd_card=False, **kwargs):
|
| - """Installs an apk on the gce instance
|
| -
|
| - Args:
|
| - apk_path: Host path to the APK file.
|
| - forward_lock: (optional) If set forward-locks the app.
|
| - reinstall: (optional) If set reinstalls the app, keeping its data.
|
| - sd_card: (optional) If set installs on the SD card.
|
| - """
|
| - adb_wrapper.VerifyLocalFileExists(_SSH_KEY_FILE)
|
| - adb_wrapper.VerifyLocalFileExists(apk_path)
|
| - cmd = ['install']
|
| - if forward_lock:
|
| - cmd.append('-l')
|
| - if reinstall:
|
| - cmd.append('-r')
|
| - if sd_card:
|
| - cmd.append('-s')
|
| - self.Push(apk_path, '/data/local/tmp/tmp.apk')
|
| - cmd = ['pm'] + cmd
|
| - cmd.append('/data/local/tmp/tmp.apk')
|
| - output = self.Shell(' '.join(cmd))
|
| - self.Shell('rm /data/local/tmp/tmp.apk')
|
| - if 'Success' not in output:
|
| - raise device_errors.AdbCommandFailedError(
|
| - cmd, output, device_serial=self._device_serial)
|
| -
|
| - #override
|
| - @property
|
| - def is_emulator(self):
|
| - return True
|
|
|