mirror of
https://git.yoctoproject.org/poky
synced 2026-05-01 06:32:11 +02:00
oeqa/runtime: Add case, context and loader classes for runtime testing
This adds OERuntimeTestCase, OERuntimeTestContext, and OERuntimeTestLoader to be used for runtime testing. As expected there are some changes in runtime context: - Adds the target to be used for runtime testing, the default is a SSH connection to the device under test running a OE image. - Runtime context requires image manifest because several tests are skipped if a package is missing or installed. - Several tests require the output of the ps command and it changes its output and arguments if busybox o procps is installed, so the case must use the correct ps command. [YOCTO #10234] (From OE-Core rev: f995f178de79d6d11422cd879d06371811f50651) Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
6ad52a82ea
commit
4cd982566b
8
meta/lib/oeqa/runtime/case.py
Normal file
8
meta/lib/oeqa/runtime/case.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
# Released under the MIT license (see COPYING.MIT)
|
||||
|
||||
from oeqa.core.case import OETestCase
|
||||
|
||||
class OERuntimeTestCase(OETestCase):
|
||||
# target instance set by OERuntimeTestLoader.
|
||||
target = None
|
||||
69
meta/lib/oeqa/runtime/context.py
Normal file
69
meta/lib/oeqa/runtime/context.py
Normal file
@@ -0,0 +1,69 @@
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
# Released under the MIT license (see COPYING.MIT)
|
||||
|
||||
import os
|
||||
|
||||
from oeqa.core.context import OETestContext, OETestContextExecutor
|
||||
from oeqa.core.target.ssh import OESSHTarget
|
||||
from oeqa.runtime.loader import OERuntimeTestLoader
|
||||
|
||||
class OERuntimeTestContext(OETestContext):
|
||||
loaderClass = OERuntimeTestLoader
|
||||
|
||||
def __init__(self, td, logger, target, packages_manifest):
|
||||
super(OERuntimeTestContext, self).__init__(td, logger)
|
||||
self.target = target
|
||||
self.image_packages = self.readPackagesManifest(packages_manifest)
|
||||
self._set_target_cmds()
|
||||
|
||||
def _set_target_cmds(self):
|
||||
self.target_cmds = {}
|
||||
|
||||
self.target_cmds['ps'] = 'ps'
|
||||
if 'procps' in self.image_packages:
|
||||
self.target_cmds['ps'] = self.target_cmds['ps'] + ' -ef'
|
||||
|
||||
def readPackagesManifest(self, manifest):
|
||||
if not os.path.exists(manifest):
|
||||
raise OSError("Couldn't find manifest file: %s" % manifest)
|
||||
|
||||
image_packages = set()
|
||||
with open(manifest, 'r') as f:
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if line and not line.startswith("#"):
|
||||
image_packages.add(line.split()[0])
|
||||
|
||||
return image_packages
|
||||
|
||||
class OERuntimeTestContextExecutor(OETestContextExecutor):
|
||||
_context_class = OERuntimeTestContext
|
||||
|
||||
name = 'runtime'
|
||||
help = 'runtime test component'
|
||||
description = 'executes runtime tests over targets'
|
||||
default_cases = os.path.join(os.path.abspath(os.path.dirname(__file__)),
|
||||
'cases')
|
||||
default_target_ip = '192.168.7.2'
|
||||
|
||||
def register_commands(self, logger, subparsers):
|
||||
super(OERuntimeTestContextExecutor, self).register_commands(logger, subparsers)
|
||||
self.parser.add_argument('--target-ip', action='store',
|
||||
default=self.default_target_ip,
|
||||
help="IP address of device under test, default: %s" \
|
||||
% self.default_target_ip)
|
||||
self.parser.add_argument('--packages-manifest', action='store',
|
||||
help="Package manifest of the image under test")
|
||||
|
||||
def _process_args(self, logger, args):
|
||||
if not args.packages_manifest:
|
||||
raise TypeError('Manifest file not provided')
|
||||
|
||||
super(OERuntimeTestContextExecutor, self)._process_args(logger, args)
|
||||
target = OESSHTarget(args.target_ip)
|
||||
self.tc_kwargs['init']['target'] = target
|
||||
|
||||
packages_manifest = os.path.join(os.getcwd(), args.packages_manifest)
|
||||
self.tc_kwargs['init']['packages_manifest'] = packages_manifest
|
||||
|
||||
_executor_class = OERuntimeTestContextExecutor
|
||||
16
meta/lib/oeqa/runtime/loader.py
Normal file
16
meta/lib/oeqa/runtime/loader.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
# Released under the MIT license (see COPYING.MIT)
|
||||
|
||||
from oeqa.core.loader import OETestLoader
|
||||
from oeqa.runtime.case import OERuntimeTestCase
|
||||
|
||||
class OERuntimeTestLoader(OETestLoader):
|
||||
caseClass = OERuntimeTestCase
|
||||
|
||||
def _getTestCase(self, testCaseClass, tcName):
|
||||
case = super(OERuntimeTestLoader, self)._getTestCase(testCaseClass, tcName)
|
||||
|
||||
# Adds custom attributes to the OERuntimeTestCase
|
||||
setattr(case, 'target', self.tc.target)
|
||||
|
||||
return case
|
||||
Reference in New Issue
Block a user