Commit c2d62b64 authored by John Budorick's avatar John Budorick Committed by Commit Bot

Revert "android: switch test runner to standalone Avd management module."

This reverts commit 9c3e8d81.

Reason for revert: unblocking v8

Original change's description:
> android: switch test runner to standalone Avd management module.
> 
> Requires crrev.com/c/1809653
> 
> Bug: 922145
> Change-Id: I3f2f134cd91f4c1ca50cb08348860c058d8dd1ee
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1797004
> Commit-Queue: John Budorick <jbudorick@chromium.org>
> Reviewed-by: Andrew Luo <aluo@chromium.org>
> Reviewed-by: Ben Pastene <bpastene@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#699902}

TBR=bpastene@chromium.org,jbudorick@chromium.org,aluo@chromium.org,hypan@google.com

Change-Id: Icb74eef3ba973461c193c80c1326522d26d62332
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 922145
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1827590Reviewed-by: default avatarJohn Budorick <jbudorick@chromium.org>
Commit-Queue: John Budorick <jbudorick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700241}
parent 938dd44d
...@@ -32,12 +32,10 @@ ...@@ -32,12 +32,10 @@
!Android.mk !Android.mk
.*.sw? .*.sw?
.DS_Store .DS_Store
.android
.cipd .cipd
.classpath .classpath
.code-coverage .code-coverage
.cproject .cproject
.emulator_sdk
.gdb_history .gdb_history
.gdbinit .gdbinit
.landmines .landmines
......
...@@ -93,10 +93,8 @@ python_library("test_runner_py") { ...@@ -93,10 +93,8 @@ python_library("test_runner_py") {
data += [ data += [
"//third_party/android_build_tools/bundletool/bundletool-all-0.10.3.jar", "//third_party/android_build_tools/bundletool/bundletool-all-0.10.3.jar",
] ]
data_deps += [ data_deps +=
"//third_party/android_platform/development/scripts:stack_py", [ "//third_party/android_platform/development/scripts:stack_py" ]
"//tools/android/avd:avd_py",
]
} }
if (is_asan) { if (is_asan) {
data_deps += [ "//tools/android/asan/third_party:asan_device_setup" ] data_deps += [ "//tools/android/asan/third_party:asan_device_setup" ]
......
...@@ -4,24 +4,14 @@ ...@@ -4,24 +4,14 @@
from pylib import constants from pylib import constants
from pylib.local.device import local_device_environment from pylib.local.device import local_device_environment
from pylib.local.emulator import local_emulator_environment
from pylib.local.machine import local_machine_environment from pylib.local.machine import local_machine_environment
try:
# local_emulator_environment depends on //tools.
# If a client pulls in the //build subtree but not the //tools
# one, fail at emulator environment creation time.
from pylib.local.emulator import local_emulator_environment
except ImportError:
local_emulator_environment = None
def CreateEnvironment(args, output_manager, error_func): def CreateEnvironment(args, output_manager, error_func):
if args.environment == 'local': if args.environment == 'local':
if args.command not in constants.LOCAL_MACHINE_TESTS: if args.command not in constants.LOCAL_MACHINE_TESTS:
if args.avd_config: if args.avd_name:
if not local_emulator_environment:
error_func('emulator environment requested but not available.')
return local_emulator_environment.LocalEmulatorEnvironment( return local_emulator_environment.LocalEmulatorEnvironment(
args, output_manager, error_func) args, output_manager, error_func)
return local_device_environment.LocalDeviceEnvironment( return local_device_environment.LocalDeviceEnvironment(
......
...@@ -2,15 +2,20 @@ ...@@ -2,15 +2,20 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
import contextlib
import logging
import os import os
import socket
import stat
from pylib.constants import host_paths from py_utils import tempfile_ext
from pylib.local.device import local_device_environment
from devil.android.sdk import adb_wrapper
from devil.utils import cmd_helper
from devil.utils import timeout_retry
AVD_DIR_PATH = os.path.join(host_paths.DIR_SOURCE_ROOT, 'tools', 'android', from pylib import constants
'avd') from pylib.local.device import local_device_environment
with host_paths.SysPath(AVD_DIR_PATH):
import avd # pylint: disable=import-error
class LocalEmulatorEnvironment(local_device_environment.LocalDeviceEnvironment): class LocalEmulatorEnvironment(local_device_environment.LocalDeviceEnvironment):
...@@ -18,20 +23,99 @@ class LocalEmulatorEnvironment(local_device_environment.LocalDeviceEnvironment): ...@@ -18,20 +23,99 @@ class LocalEmulatorEnvironment(local_device_environment.LocalDeviceEnvironment):
def __init__(self, args, output_manager, error_func): def __init__(self, args, output_manager, error_func):
super(LocalEmulatorEnvironment, self).__init__(args, output_manager, super(LocalEmulatorEnvironment, self).__init__(args, output_manager,
error_func) error_func)
self._avd_config = avd.AvdConfig(args.avd_config) self._avd_name = args.avd_name
self._emulator_instance = None self._emulator_home = (args.emulator_home
or os.path.expanduser(os.path.join('~', '.android')))
root_ini = os.path.join(self._emulator_home, 'avd',
'%s.ini' % self._avd_name)
if not os.path.exists(root_ini):
error_func('Unable to find configuration for AVD %s at %s' %
(self._avd_name, root_ini))
self._emulator_path = os.path.join(constants.ANDROID_SDK_ROOT, 'emulator',
'emulator')
if not os.path.exists(self._emulator_path):
error_func('%s does not exist.' % self._emulator_path)
self._emulator_proc = None
self._emulator_serial = None
#override #override
def SetUp(self): def SetUp(self):
self._avd_config.Install() # Emulator start-up looks for the adb daemon. Make sure it's running.
self._emulator_instance = self._avd_config.StartInstance() adb_wrapper.AdbWrapper.StartServer()
self._device_serials = [self._emulator_instance.serial]
# Emulator start-up tries to check for the SDK root by looking for
# platforms/ and platform-tools/. Ensure they exist.
# See http://bit.ly/2YAkyFE for context.
required_dirs = [
os.path.join(constants.ANDROID_SDK_ROOT, 'platforms'),
os.path.join(constants.ANDROID_SDK_ROOT, 'platform-tools'),
]
for d in required_dirs:
if not os.path.exists(d):
os.makedirs(d)
# The emulator requires that some files are writable.
for dirname, _, filenames in os.walk(self._emulator_home):
for f in filenames:
path = os.path.join(dirname, f)
if (os.lstat(path).st_mode &
(stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) == stat.S_IRUSR):
os.chmod(path, stat.S_IRUSR | stat.S_IWUSR)
self._emulator_proc, self._emulator_serial = self._StartInstance()
logging.info('Emulator serial: %s', self._emulator_serial)
self._device_serials = [self._emulator_serial]
super(LocalEmulatorEnvironment, self).SetUp() super(LocalEmulatorEnvironment, self).SetUp()
def _StartInstance(self):
"""Starts an AVD instance.
Returns:
A (Popen, str) 2-tuple that includes the process and serial.
"""
# Start up the AVD.
with tempfile_ext.TemporaryFileName() as socket_path, (contextlib.closing(
socket.socket(socket.AF_UNIX))) as sock:
sock.bind(socket_path)
emulator_cmd = [
self._emulator_path,
'-avd',
self._avd_name,
'-report-console',
'unix:%s' % socket_path,
'-read-only',
'-no-window',
]
emulator_env = {}
if self._emulator_home:
emulator_env['ANDROID_EMULATOR_HOME'] = self._emulator_home
sock.listen(1)
emulator_proc = cmd_helper.Popen(emulator_cmd, env=emulator_env)
def listen_for_serial(s):
logging.info('Waiting for connection from emulator.')
with contextlib.closing(s.accept()[0]) as conn:
val = conn.recv(1024)
return 'emulator-%d' % int(val)
try:
emulator_serial = timeout_retry.Run(
listen_for_serial, timeout=30, retries=0, args=[sock])
except Exception:
emulator_proc.terminate()
raise
return (emulator_proc, emulator_serial)
#override #override
def TearDown(self): def TearDown(self):
try: try:
super(LocalEmulatorEnvironment, self).TearDown() super(LocalEmulatorEnvironment, self).TearDown()
finally: finally:
if self._emulator_instance: if self._emulator_proc:
self._emulator_instance.Stop() self._emulator_proc.terminate()
self._emulator_proc.wait()
...@@ -310,11 +310,13 @@ def AddEmulatorOptions(parser): ...@@ -310,11 +310,13 @@ def AddEmulatorOptions(parser):
parser = parser.add_argument_group('emulator arguments') parser = parser.add_argument_group('emulator arguments')
parser.add_argument( parser.add_argument(
'--avd-config', '--avd-name',
help='Run and manage the lifetime of an AVD with the given name.')
parser.add_argument(
'--emulator-home',
type=os.path.realpath, type=os.path.realpath,
help='Path to the avd config textpb. ' help='Emulator home directory '
'(See //tools/android/avd/proto/ for message definition' '(see ANDROID_EMULATOR_HOME: http://bit.ly/2K32oEy)')
' and existing textpb files.)')
def AddGTestOptions(parser): def AddGTestOptions(parser):
......
...@@ -118,9 +118,6 @@ ...@@ -118,9 +118,6 @@
../../third_party/markupsafe/__init__.py ../../third_party/markupsafe/__init__.py
../../third_party/markupsafe/_compat.py ../../third_party/markupsafe/_compat.py
../../third_party/markupsafe/_native.py ../../third_party/markupsafe/_native.py
../../tools/android/avd/avd.py
../../tools/android/avd/proto/__init__.py
../../tools/android/avd/proto/avd_pb2.py
../../tools/swarming_client/libs/__init__.py ../../tools/swarming_client/libs/__init__.py
../../tools/swarming_client/libs/logdog/__init__.py ../../tools/swarming_client/libs/logdog/__init__.py
../../tools/swarming_client/libs/logdog/bootstrap.py ../../tools/swarming_client/libs/logdog/bootstrap.py
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -548,24 +548,32 @@ ...@@ -548,24 +548,32 @@
'pie-x86-emulator': { 'pie-x86-emulator': {
'$mixin_append': { '$mixin_append': {
'args': [ 'args': [
'--avd-config=../../tools/android/avd/proto/generic_android28.textpb', '--avd-name=20190716T160000Z_android_28_google_apis_x86',
'--emulator-home=../../.android',
], ],
}, },
'swarming': { 'swarming': {
'dimensions': { 'cipd_packages': [
'device_os': None,
'device_type': None,
},
'named_caches': [
{ {
'name': 'avd_generic_android28', 'cipd_package': 'chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86',
'path': '.android', 'location': '.android',
'revision': 'J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC',
}, },
{ {
'name': 'system_images_android_28_google_apis_x86', 'cipd_package': 'chromium/third_party/android_sdk/public/emulator',
'path': '.emulator_sdk', 'location': 'third_party/android_sdk/public',
'revision': 'xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC',
}, },
] {
'cipd_package': 'chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86',
'location': 'third_party/android_sdk/public',
'revision': 'LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C',
},
],
'dimensions': {
'device_os': None,
'device_type': None,
},
}, },
}, },
'pie_fleet': { 'pie_fleet': {
......
...@@ -19,7 +19,7 @@ system_image_name: "system-images;android-28;google_apis;x86" ...@@ -19,7 +19,7 @@ system_image_name: "system-images;android-28;google_apis;x86"
avd_package { avd_package {
package_name: "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86" package_name: "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86"
version: "r24w7V_DNG3qnGtDROnS4wKxeD1HLyWocCicTBIJqj8C" version: "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
dest_path: ".android" dest_path: ".android"
} }
avd_name: "20190716T160000Z_android_28_google_apis_x86" avd_name: "20190716T160000Z_android_28_google_apis_x86"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment