Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: build/android/pylib/remote/device/remote_device_environment.py

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: build/android/pylib/remote/device/remote_device_environment.py
diff --git a/build/android/pylib/remote/device/remote_device_environment.py b/build/android/pylib/remote/device/remote_device_environment.py
index cc39112e4ff49b3b8d202c9d6ddb7b591a30ec9f..256118098f409c1f622a76300e51be53817f4095 100644
--- a/build/android/pylib/remote/device/remote_device_environment.py
+++ b/build/android/pylib/remote/device/remote_device_environment.py
@@ -15,12 +15,15 @@ from pylib import constants
from pylib.base import environment
from pylib.remote.device import appurify_sanitized
from pylib.remote.device import remote_device_helper
+from pylib.utils import timeout_retry
+from pylib.utils import reraiser_thread
class RemoteDeviceEnvironment(environment.Environment):
"""An environment for running on remote devices."""
_ENV_KEY = 'env'
_DEVICE_KEY = 'device'
+ _DEFAULT_RETRIES = 0
def __init__(self, args, error_func):
"""Constructor.
@@ -74,6 +77,7 @@ class RemoteDeviceEnvironment(environment.Environment):
self._remote_device_minimum_os = device_json.get(
'remote_device_minimum_os', None)
self._remote_device_os = device_json.get('remote_device_os', None)
+ self._remote_device_timeout = device_json.get('remote_device_timeout', None)
self._results_path = device_json.get('results_path', None)
self._runner_package = device_json.get('runner_package', None)
self._runner_type = device_json.get('runner_type', None)
@@ -110,6 +114,9 @@ class RemoteDeviceEnvironment(environment.Environment):
'remote_device_minimum_os')
self._remote_device_os = command_line_override(
self._remote_device_os, args.remote_device_os, 'remote_device_os')
+ self._remote_device_timeout = command_line_override(
+ self._remote_device_timeout, args.remote_device_timeout,
+ 'remote_device_timeout')
self._results_path = command_line_override(
self._results_path, args.results_path, 'results_path')
self._runner_package = command_line_override(
@@ -158,6 +165,7 @@ class RemoteDeviceEnvironment(environment.Environment):
logging.info('Remote device OS: %s', self._remote_device_os)
logging.info('Remote device OEM: %s', self._device_oem)
logging.info('Remote device type: %s', self._device_type)
+ logging.info('Remote device timout: %s', self._remote_device_timeout)
logging.info('Results Path: %s', self._results_path)
logging.info('Runner package: %s', self._runner_package)
logging.info('Runner type: %s', self._runner_type)
@@ -177,7 +185,7 @@ class RemoteDeviceEnvironment(environment.Environment):
os.environ['APPURIFY_API_PORT'] = self._api_port
self._GetAccessToken()
if self._trigger:
- self._device = self._SelectDevice()
+ self._SelectDevice()
def TearDown(self):
"""Teardown the test environment."""
@@ -228,14 +236,20 @@ class RemoteDeviceEnvironment(environment.Environment):
'Unable to revoke access token.')
def _SelectDevice(self):
- """Select which device to use."""
+ if self._remote_device_timeout:
+ try:
+ timeout_retry.Run(self._FindDeviceWithTimeout,
+ self._remote_device_timeout, self._DEFAULT_RETRIES)
+ except reraiser_thread.TimeoutError:
+ self._NoDeviceFound()
+ else:
+ if not self._FindDevice():
+ self._NoDeviceFound()
+
+ def _FindDevice(self):
+ """Find which device to use."""
logging.info('Finding device to run tests on.')
- with appurify_sanitized.SanitizeLogging(self._verbose_count,
- logging.WARNING):
- dev_list_res = appurify_sanitized.api.devices_list(self._access_token)
- remote_device_helper.TestHttpResponse(dev_list_res,
- 'Unable to generate access token.')
- device_list = dev_list_res.json()['response']
+ device_list = self._GetDeviceList()
random.shuffle(device_list)
for device in device_list:
if device['os_name'] != self._device_type:
@@ -251,12 +265,16 @@ class RemoteDeviceEnvironment(environment.Environment):
and distutils.version.LooseVersion(device['os_version'])
< distutils.version.LooseVersion(self._remote_device_minimum_os)):
continue
- if ((self._remote_device and self._remote_device_os)
- or device['available_devices_count']):
+ if device['has_available_device']:
logging.info('Found device: %s %s',
device['name'], device['os_version'])
- return device
- self._NoDeviceFound(device_list)
+ self._device = device
+ return True
+ return False
+
+ def _FindDeviceWithTimeout(self):
+ """Find which device to use with timeout."""
+ timeout_retry.WaitFor(self._FindDevice, wait_period=1)
def _PrintAvailableDevices(self, device_list):
def compare_devices(a,b):
@@ -267,12 +285,23 @@ class RemoteDeviceEnvironment(environment.Environment):
return 0
logging.critical('Available %s Devices:', self._device_type)
+ logging.critical(' %s %s %s', 'OS'.ljust(7),
+ 'Device Name'.ljust(20), '# Available')
devices = (d for d in device_list if d['os_name'] == self._device_type)
for d in sorted(devices, compare_devices):
- logging.critical(' %s %s', d['os_version'].ljust(7), d['name'])
+ logging.critical(' %s %s %s', d['os_version'].ljust(7),
+ d['name'].ljust(20), d['available_devices_count'])
+
+ def _GetDeviceList(self):
+ with appurify_sanitized.SanitizeLogging(self._verbose_count,
+ logging.WARNING):
+ dev_list_res = appurify_sanitized.api.devices_list(self._access_token)
+ remote_device_helper.TestHttpResponse(dev_list_res,
+ 'Unable to generate access token.')
+ return dev_list_res.json()['response']
- def _NoDeviceFound(self, device_list):
- self._PrintAvailableDevices(device_list)
+ def _NoDeviceFound(self):
+ self._PrintAvailableDevices(self._GetDeviceList())
raise remote_device_helper.RemoteDeviceError('No device found.')
@property
« no previous file with comments | « build/android/pylib/perf/test_runner.py ('k') | build/android/pylib/remote/device/remote_device_test_run.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698