diff options
author | Mariano Lopez <mariano.lopez@linux.intel.com> | 2016-10-31 13:15:02 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-01-23 12:03:55 +0000 |
commit | f995f178de79d6d11422cd879d06371811f50651 (patch) | |
tree | 0d844befb24590df492f5e6f0c829b0496b63b53 /meta/lib | |
parent | 3bc13548df4adb85f09467d200530a9c9f60da04 (diff) | |
download | openembedded-core-f995f178de79d6d11422cd879d06371811f50651.tar.gz openembedded-core-f995f178de79d6d11422cd879d06371811f50651.tar.bz2 openembedded-core-f995f178de79d6d11422cd879d06371811f50651.zip |
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]
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oeqa/runtime/case.py | 8 | ||||
-rw-r--r-- | meta/lib/oeqa/runtime/context.py | 69 | ||||
-rw-r--r-- | meta/lib/oeqa/runtime/loader.py | 16 |
3 files changed, 93 insertions, 0 deletions
diff --git a/meta/lib/oeqa/runtime/case.py b/meta/lib/oeqa/runtime/case.py new file mode 100644 index 0000000000..43f1b2f425 --- /dev/null +++ b/meta/lib/oeqa/runtime/case.py @@ -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 diff --git a/meta/lib/oeqa/runtime/context.py b/meta/lib/oeqa/runtime/context.py new file mode 100644 index 0000000000..496730ddbe --- /dev/null +++ b/meta/lib/oeqa/runtime/context.py @@ -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 diff --git a/meta/lib/oeqa/runtime/loader.py b/meta/lib/oeqa/runtime/loader.py new file mode 100644 index 0000000000..041ef976eb --- /dev/null +++ b/meta/lib/oeqa/runtime/loader.py @@ -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 |