diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oeqa/core/context.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/meta/lib/oeqa/core/context.py b/meta/lib/oeqa/core/context.py index cbab2f8f5f..ba6ccf8e79 100644 --- a/meta/lib/oeqa/core/context.py +++ b/meta/lib/oeqa/core/context.py | |||
@@ -146,3 +146,88 @@ class OETestContext(object): | |||
146 | else: | 146 | else: |
147 | self.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(), | 147 | self.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(), |
148 | oeid, 'PASSED')) | 148 | oeid, 'PASSED')) |
149 | |||
150 | class OETestContextExecutor(object): | ||
151 | _context_class = OETestContext | ||
152 | |||
153 | name = 'core' | ||
154 | help = 'core test component example' | ||
155 | description = 'executes core test suite example' | ||
156 | |||
157 | default_cases = [os.path.join(os.path.abspath(os.path.dirname(__file__)), | ||
158 | 'cases/example')] | ||
159 | default_test_data = os.path.join(default_cases[0], 'data.json') | ||
160 | |||
161 | def register_commands(self, logger, subparsers): | ||
162 | self.parser = subparsers.add_parser(self.name, help=self.help, | ||
163 | description=self.description, group='components') | ||
164 | |||
165 | self.default_output_log = '%s-results-%s.log' % (self.name, | ||
166 | time.strftime("%Y%m%d%H%M%S")) | ||
167 | self.parser.add_argument('--output-log', action='store', | ||
168 | default=self.default_output_log, | ||
169 | help="results output log, default: %s" % self.default_output_log) | ||
170 | |||
171 | if self.default_test_data: | ||
172 | self.parser.add_argument('--test-data-file', action='store', | ||
173 | default=self.default_test_data, | ||
174 | help="data file to load, default: %s" % self.default_test_data) | ||
175 | else: | ||
176 | self.parser.add_argument('--test-data-file', action='store', | ||
177 | help="data file to load") | ||
178 | |||
179 | if self.default_cases: | ||
180 | self.parser.add_argument('CASES_PATHS', action='store', | ||
181 | default=self.default_cases, nargs='*', | ||
182 | help="paths to directories with test cases, default: %s"\ | ||
183 | % self.default_cases) | ||
184 | else: | ||
185 | self.parser.add_argument('CASES_PATHS', action='store', | ||
186 | nargs='+', help="paths to directories with test cases") | ||
187 | |||
188 | self.parser.set_defaults(func=self.run) | ||
189 | |||
190 | def _setup_logger(self, logger, args): | ||
191 | formatter = logging.Formatter('%(asctime)s - ' + self.name + \ | ||
192 | ' - %(levelname)s - %(message)s') | ||
193 | sh = logger.handlers[0] | ||
194 | sh.setFormatter(formatter) | ||
195 | fh = logging.FileHandler(args.output_log) | ||
196 | fh.setFormatter(formatter) | ||
197 | logger.addHandler(fh) | ||
198 | |||
199 | return logger | ||
200 | |||
201 | def _process_args(self, logger, args): | ||
202 | self.tc_kwargs = {} | ||
203 | self.tc_kwargs['init'] = {} | ||
204 | self.tc_kwargs['load'] = {} | ||
205 | self.tc_kwargs['run'] = {} | ||
206 | |||
207 | self.tc_kwargs['init']['logger'] = self._setup_logger(logger, args) | ||
208 | if args.test_data_file: | ||
209 | self.tc_kwargs['init']['td'] = json.load( | ||
210 | open(args.test_data_file, "r")) | ||
211 | else: | ||
212 | self.tc_kwargs['init']['td'] = {} | ||
213 | |||
214 | self.module_paths = args.CASES_PATHS | ||
215 | |||
216 | def run(self, logger, args): | ||
217 | self._process_args(logger, args) | ||
218 | |||
219 | self.tc = self._context_class(**self.tc_kwargs['init']) | ||
220 | self.tc.loadTests(self.module_paths, **self.tc_kwargs['load']) | ||
221 | rc = self.tc.runTests(**self.tc_kwargs['run']) | ||
222 | self.tc.logSummary(rc, self.name) | ||
223 | self.tc.logDetails() | ||
224 | |||
225 | output_link = os.path.join(os.path.dirname(args.output_log), | ||
226 | "%s-results.log" % self.name) | ||
227 | if os.path.exists(output_link): | ||
228 | os.remove(output_link) | ||
229 | os.symlink(args.output_log, output_link) | ||
230 | |||
231 | return rc | ||
232 | |||
233 | _executor_class = OETestContextExecutor | ||