1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-04-20 09:40:50 +01:00

APK workloads: added an option to skip host-side APK check entirely.

This commit is contained in:
Sergei Trofimov 2015-07-27 09:55:23 +01:00
parent 507efaec48
commit b5d879a90b

View File

@ -21,7 +21,7 @@ from wlauto.core.extension import Parameter
from wlauto.core.workload import Workload from wlauto.core.workload import Workload
from wlauto.core.resource import NO_ONE from wlauto.core.resource import NO_ONE
from wlauto.common.resources import ExtensionAsset, Executable from wlauto.common.resources import ExtensionAsset, Executable
from wlauto.exceptions import WorkloadError, ResourceError from wlauto.exceptions import WorkloadError, ResourceError, ConfigError
from wlauto.utils.android import ApkInfo from wlauto.utils.android import ApkInfo
from wlauto.utils.types import boolean from wlauto.utils.types import boolean
import wlauto.common.android.resources import wlauto.common.android.resources
@ -147,6 +147,16 @@ class ApkWorkload(Workload):
parameters = [ parameters = [
Parameter('install_timeout', kind=int, default=300, Parameter('install_timeout', kind=int, default=300,
description='Timeout for the installation of the apk.'), description='Timeout for the installation of the apk.'),
Parameter('check_apk', kind=boolean, default=True,
description='''
Discover the APK for this workload on the host, and check that
the version matches the one on device (if already installed).
'''),
Parameter('force_install', kind=boolean, default=False,
description='''
Always re-install the APK, even if matching version is found
on already installed on the device.
'''),
Parameter('uninstall_apk', kind=boolean, default=False, Parameter('uninstall_apk', kind=boolean, default=False,
description='If ``True``, will uninstall workload\'s APK as part of teardown.'), description='If ``True``, will uninstall workload\'s APK as part of teardown.'),
] ]
@ -157,10 +167,19 @@ class ApkWorkload(Workload):
self.apk_file = None self.apk_file = None
self.apk_version = None self.apk_version = None
self.logcat_log = None self.logcat_log = None
self.force_reinstall = kwargs.get('force_reinstall', False)
def init_resources(self, context): def init_resources(self, context):
self.apk_file = context.resolver.get(wlauto.common.android.resources.ApkFile(self), version=getattr(self, 'version', None)) self.apk_file = context.resolver.get(wlauto.common.android.resources.ApkFile(self),
version=getattr(self, 'version', None),
strict=self.check_apk)
def validate(self):
if self.check_apk:
if not self.apk_file:
raise WorkloadError('No APK file found for workload {}.'.format(self.name))
else:
if self.force_install:
raise ConfigError('force_install cannot be "True" when check_apk is set to "False".')
def setup(self, context): def setup(self, context):
self.initialize_package(context) self.initialize_package(context)
@ -170,19 +189,35 @@ class ApkWorkload(Workload):
def initialize_package(self, context): def initialize_package(self, context):
installed_version = self.device.get_installed_package_version(self.package) installed_version = self.device.get_installed_package_version(self.package)
if self.check_apk:
self.initialize_with_host_apk(context, installed_version)
else:
if not installed_version:
message = '''{} not found found on the device and check_apk is set to "False"
so host version was not checked.'''
raise WorkloadError(message.format(self.package))
message = 'Version {} installed on device; skipping host APK check.'
self.logger.debug(message.format(installed_version))
self.reset(context)
self.apk_version = installed_version
def initialize_with_host_apk(self, context, installed_version):
host_version = ApkInfo(self.apk_file).version_name host_version = ApkInfo(self.apk_file).version_name
if installed_version != host_version: if installed_version != host_version:
if installed_version: if installed_version:
message = '{} host version: {}, device version: {}; re-installing...' message = '{} host version: {}, device version: {}; re-installing...'
self.logger.debug(message.format(os.path.basename(self.apk_file), host_version, installed_version)) self.logger.debug(message.format(os.path.basename(self.apk_file),
host_version, installed_version))
else: else:
message = '{} host version: {}, not found on device; installing...' message = '{} host version: {}, not found on device; installing...'
self.logger.debug(message.format(os.path.basename(self.apk_file), host_version)) self.logger.debug(message.format(os.path.basename(self.apk_file),
self.force_reinstall = True host_version))
self.force_install = True # pylint: disable=attribute-defined-outside-init
else: else:
message = '{} version {} found on both device and host.' message = '{} version {} found on both device and host.'
self.logger.debug(message.format(os.path.basename(self.apk_file), host_version)) self.logger.debug(message.format(os.path.basename(self.apk_file),
if self.force_reinstall: host_version))
if self.force_install:
if installed_version: if installed_version:
self.device.uninstall(self.package) self.device.uninstall(self.package)
self.install_apk(context) self.install_apk(context)
@ -232,10 +267,6 @@ class ApkWorkload(Workload):
if self.uninstall_apk: if self.uninstall_apk:
self.device.uninstall(self.package) self.device.uninstall(self.package)
def validate(self):
if not self.apk_file:
raise WorkloadError('No APK file found for workload {}.'.format(self.name))
AndroidBenchmark = ApkWorkload # backward compatibility AndroidBenchmark = ApkWorkload # backward compatibility