diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2016-10-31 17:24:25 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-01-23 12:05:19 +0000 |
commit | 8a37763ae9e5b8bfa4ed89c2ab8642b8f5bfc287 (patch) | |
tree | d4af06c2d2efd97b340aa657959a7abca1af4a1a /meta/lib/oeqa/sdk | |
parent | 9a23e0f703ec3ccb99b354102d804eda13543b23 (diff) | |
download | poky-8a37763ae9e5b8bfa4ed89c2ab8642b8f5bfc287.tar.gz |
oeqa/sdk: Add case and context modules for the SDK component
Adds case and context modules for SDK based on oetest.py old code.
Enables SDK Test component usage with oe-test, the SDK Test component
adds command line options for specify sdk installed dir, sdk environment
and target/hosts maniftest.
[YOCTO #10599]
(From OE-Core rev: 19e875dd81c42841666e6db5f6b665b4e1cddfe6)
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/sdk')
-rw-r--r-- | meta/lib/oeqa/sdk/__init__.py | 0 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/case.py | 12 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/context.py | 133 |
3 files changed, 145 insertions, 0 deletions
diff --git a/meta/lib/oeqa/sdk/__init__.py b/meta/lib/oeqa/sdk/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/meta/lib/oeqa/sdk/__init__.py | |||
diff --git a/meta/lib/oeqa/sdk/case.py b/meta/lib/oeqa/sdk/case.py new file mode 100644 index 0000000000..782db8b523 --- /dev/null +++ b/meta/lib/oeqa/sdk/case.py | |||
@@ -0,0 +1,12 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | import subprocess | ||
5 | |||
6 | from oeqa.core.case import OETestCase | ||
7 | |||
8 | class OESDKTestCase(OETestCase): | ||
9 | def _run(self, cmd): | ||
10 | return subprocess.check_output(". %s > /dev/null; %s;" % \ | ||
11 | (self.tc.sdk_env, cmd), shell=True, | ||
12 | stderr=subprocess.STDOUT).decode("utf-8") | ||
diff --git a/meta/lib/oeqa/sdk/context.py b/meta/lib/oeqa/sdk/context.py new file mode 100644 index 0000000000..0189ed851e --- /dev/null +++ b/meta/lib/oeqa/sdk/context.py | |||
@@ -0,0 +1,133 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | import os | ||
5 | import sys | ||
6 | import glob | ||
7 | import re | ||
8 | |||
9 | from oeqa.core.context import OETestContext, OETestContextExecutor | ||
10 | |||
11 | class OESDKTestContext(OETestContext): | ||
12 | sdk_files_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files") | ||
13 | |||
14 | def __init__(self, td=None, logger=None, sdk_dir=None, sdk_env=None, | ||
15 | target_pkg_manifest=None, host_pkg_manifest=None): | ||
16 | super(OESDKTestContext, self).__init__(td, logger) | ||
17 | |||
18 | self.sdk_dir = sdk_dir | ||
19 | self.sdk_env = sdk_env | ||
20 | self.target_pkg_manifest = target_pkg_manifest | ||
21 | self.host_pkg_manifest = host_pkg_manifest | ||
22 | |||
23 | def _hasPackage(self, manifest, pkg): | ||
24 | for host_pkg in manifest.keys(): | ||
25 | if re.search(pkg, host_pkg): | ||
26 | return True | ||
27 | return False | ||
28 | |||
29 | def hasHostPackage(self, pkg): | ||
30 | return self._hasPackage(self.host_pkg_manifest, pkg) | ||
31 | |||
32 | def hasTargetPackage(self, pkg): | ||
33 | return self._hasPackage(self.target_pkg_manifest, pkg) | ||
34 | |||
35 | class OESDKTestContextExecutor(OETestContextExecutor): | ||
36 | _context_class = OESDKTestContext | ||
37 | |||
38 | name = 'sdk' | ||
39 | help = 'sdk test component' | ||
40 | description = 'executes sdk tests' | ||
41 | |||
42 | default_cases = [os.path.join(os.path.abspath(os.path.dirname(__file__)), | ||
43 | 'cases')] | ||
44 | default_test_data = None | ||
45 | |||
46 | def register_commands(self, logger, subparsers): | ||
47 | import argparse_oe | ||
48 | |||
49 | super(OESDKTestContextExecutor, self).register_commands(logger, subparsers) | ||
50 | |||
51 | sdk_group = self.parser.add_argument_group('sdk options') | ||
52 | sdk_group.add_argument('--sdk-env', action='store', | ||
53 | help='sdk environment') | ||
54 | sdk_group.add_argument('--target-manifest', action='store', | ||
55 | help='sdk target manifest') | ||
56 | sdk_group.add_argument('--host-manifest', action='store', | ||
57 | help='sdk host manifest') | ||
58 | |||
59 | sdk_dgroup = self.parser.add_argument_group('sdk display options') | ||
60 | sdk_dgroup.add_argument('--list-sdk-env', action='store_true', | ||
61 | default=False, help='sdk list available environment') | ||
62 | |||
63 | # XXX this option is required but argparse_oe has a bug handling | ||
64 | # required options, seems that don't keep track of already parsed | ||
65 | # options | ||
66 | sdk_rgroup = self.parser.add_argument_group('sdk required options') | ||
67 | sdk_rgroup.add_argument('--sdk-dir', required=False, action='store', | ||
68 | help='sdk installed directory') | ||
69 | |||
70 | @staticmethod | ||
71 | def _load_manifest(manifest): | ||
72 | pkg_manifest = {} | ||
73 | if manifest: | ||
74 | with open(manifest) as f: | ||
75 | for line in f: | ||
76 | (pkg, arch, version) = line.strip().split() | ||
77 | pkg_manifest[pkg] = (version, arch) | ||
78 | |||
79 | return pkg_manifest | ||
80 | |||
81 | def _process_args(self, logger, args): | ||
82 | super(OESDKTestContextExecutor, self)._process_args(logger, args) | ||
83 | |||
84 | self.tc_kwargs['init']['sdk_dir'] = args.sdk_dir | ||
85 | self.tc_kwargs['init']['sdk_env'] = self.sdk_env | ||
86 | self.tc_kwargs['init']['target_pkg_manifest'] = \ | ||
87 | OESDKTestContextExecutor._load_manifest(args.target_manifest) | ||
88 | self.tc_kwargs['init']['host_pkg_manifest'] = \ | ||
89 | OESDKTestContextExecutor._load_manifest(args.host_manifest) | ||
90 | |||
91 | @staticmethod | ||
92 | def _get_sdk_environs(sdk_dir): | ||
93 | sdk_env = {} | ||
94 | |||
95 | environ_pattern = sdk_dir + '/environment-setup-*' | ||
96 | full_sdk_env = glob.glob(sdk_dir + '/environment-setup-*') | ||
97 | for env in full_sdk_env: | ||
98 | m = re.search('environment-setup-(.*)', env) | ||
99 | if m: | ||
100 | sdk_env[m.group(1)] = env | ||
101 | |||
102 | return sdk_env | ||
103 | |||
104 | def _display_sdk_envs(self, log, args, sdk_envs): | ||
105 | log("Available SDK environments at directory %s:" \ | ||
106 | % args.sdk_dir) | ||
107 | log("") | ||
108 | for env in sdk_envs: | ||
109 | log(env) | ||
110 | |||
111 | def run(self, logger, args): | ||
112 | if not args.sdk_dir: | ||
113 | raise argparse_oe.ArgumentUsageError("No SDK directory "\ | ||
114 | "specified please do, --sdk-dir SDK_DIR", self.name) | ||
115 | |||
116 | sdk_envs = OESDKTestContextExecutor._get_sdk_environs(args.sdk_dir) | ||
117 | if not sdk_envs: | ||
118 | raise argparse_oe.ArgumentUsageError("No available SDK "\ | ||
119 | "enviroments found at %s" % args.sdk_dir, self.name) | ||
120 | |||
121 | if args.list_sdk_env: | ||
122 | self._display_sdk_envs(logger.info, args, sdk_envs) | ||
123 | sys.exit(0) | ||
124 | |||
125 | if not args.sdk_env in sdk_envs: | ||
126 | self._display_sdk_envs(logger.error, args, sdk_envs) | ||
127 | raise argparse_oe.ArgumentUsageError("No valid SDK "\ | ||
128 | "environment (%s) specified" % args.sdk_env, self.name) | ||
129 | |||
130 | self.sdk_env = sdk_envs[args.sdk_env] | ||
131 | super(OESDKTestContextExecutor, self).run(logger, args) | ||
132 | |||
133 | _executor_class = OESDKTestContextExecutor | ||