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:05:20 +0000 |
| commit | 4cd982566b10375925e616b176e988219d65b170 (patch) | |
| tree | 5301e66b2d48ff232533ab4c4485c0aeed85d530 | |
| parent | 6ad52a82ea9129716f6fb0d2c50f51fc24ed171a (diff) | |
| download | poky-4cd982566b10375925e616b176e988219d65b170.tar.gz | |
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>
| -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 @@ | |||
| 1 | # Copyright (C) 2016 Intel Corporation | ||
| 2 | # Released under the MIT license (see COPYING.MIT) | ||
| 3 | |||
| 4 | from oeqa.core.case import OETestCase | ||
| 5 | |||
| 6 | class OERuntimeTestCase(OETestCase): | ||
| 7 | # target instance set by OERuntimeTestLoader. | ||
| 8 | 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 @@ | |||
| 1 | # Copyright (C) 2016 Intel Corporation | ||
| 2 | # Released under the MIT license (see COPYING.MIT) | ||
| 3 | |||
| 4 | import os | ||
| 5 | |||
| 6 | from oeqa.core.context import OETestContext, OETestContextExecutor | ||
| 7 | from oeqa.core.target.ssh import OESSHTarget | ||
| 8 | from oeqa.runtime.loader import OERuntimeTestLoader | ||
| 9 | |||
| 10 | class OERuntimeTestContext(OETestContext): | ||
| 11 | loaderClass = OERuntimeTestLoader | ||
| 12 | |||
| 13 | def __init__(self, td, logger, target, packages_manifest): | ||
| 14 | super(OERuntimeTestContext, self).__init__(td, logger) | ||
| 15 | self.target = target | ||
| 16 | self.image_packages = self.readPackagesManifest(packages_manifest) | ||
| 17 | self._set_target_cmds() | ||
| 18 | |||
| 19 | def _set_target_cmds(self): | ||
| 20 | self.target_cmds = {} | ||
| 21 | |||
| 22 | self.target_cmds['ps'] = 'ps' | ||
| 23 | if 'procps' in self.image_packages: | ||
| 24 | self.target_cmds['ps'] = self.target_cmds['ps'] + ' -ef' | ||
| 25 | |||
| 26 | def readPackagesManifest(self, manifest): | ||
| 27 | if not os.path.exists(manifest): | ||
| 28 | raise OSError("Couldn't find manifest file: %s" % manifest) | ||
| 29 | |||
| 30 | image_packages = set() | ||
| 31 | with open(manifest, 'r') as f: | ||
| 32 | for line in f.readlines(): | ||
| 33 | line = line.strip() | ||
| 34 | if line and not line.startswith("#"): | ||
| 35 | image_packages.add(line.split()[0]) | ||
| 36 | |||
| 37 | return image_packages | ||
| 38 | |||
| 39 | class OERuntimeTestContextExecutor(OETestContextExecutor): | ||
| 40 | _context_class = OERuntimeTestContext | ||
| 41 | |||
| 42 | name = 'runtime' | ||
| 43 | help = 'runtime test component' | ||
| 44 | description = 'executes runtime tests over targets' | ||
| 45 | default_cases = os.path.join(os.path.abspath(os.path.dirname(__file__)), | ||
| 46 | 'cases') | ||
| 47 | default_target_ip = '192.168.7.2' | ||
| 48 | |||
| 49 | def register_commands(self, logger, subparsers): | ||
| 50 | super(OERuntimeTestContextExecutor, self).register_commands(logger, subparsers) | ||
| 51 | self.parser.add_argument('--target-ip', action='store', | ||
| 52 | default=self.default_target_ip, | ||
| 53 | help="IP address of device under test, default: %s" \ | ||
| 54 | % self.default_target_ip) | ||
| 55 | self.parser.add_argument('--packages-manifest', action='store', | ||
| 56 | help="Package manifest of the image under test") | ||
| 57 | |||
| 58 | def _process_args(self, logger, args): | ||
| 59 | if not args.packages_manifest: | ||
| 60 | raise TypeError('Manifest file not provided') | ||
| 61 | |||
| 62 | super(OERuntimeTestContextExecutor, self)._process_args(logger, args) | ||
| 63 | target = OESSHTarget(args.target_ip) | ||
| 64 | self.tc_kwargs['init']['target'] = target | ||
| 65 | |||
| 66 | packages_manifest = os.path.join(os.getcwd(), args.packages_manifest) | ||
| 67 | self.tc_kwargs['init']['packages_manifest'] = packages_manifest | ||
| 68 | |||
| 69 | _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 @@ | |||
| 1 | # Copyright (C) 2016 Intel Corporation | ||
| 2 | # Released under the MIT license (see COPYING.MIT) | ||
| 3 | |||
| 4 | from oeqa.core.loader import OETestLoader | ||
| 5 | from oeqa.runtime.case import OERuntimeTestCase | ||
| 6 | |||
| 7 | class OERuntimeTestLoader(OETestLoader): | ||
| 8 | caseClass = OERuntimeTestCase | ||
| 9 | |||
| 10 | def _getTestCase(self, testCaseClass, tcName): | ||
| 11 | case = super(OERuntimeTestLoader, self)._getTestCase(testCaseClass, tcName) | ||
| 12 | |||
| 13 | # Adds custom attributes to the OERuntimeTestCase | ||
| 14 | setattr(case, 'target', self.tc.target) | ||
| 15 | |||
| 16 | return case | ||
