oeqa/{core,selftest}: Add support to validate if a specified test case isn't found

If some test module/case is specified to run and isn't found the OEQA
framework didn't notice it, so complete the implementation using
modules_required and validate for the test case prescense.

Raise an exception when the test module/case required isn't found.

[YOCTO #11645]

(From OE-Core rev: e50b415aaaa1581473f85f0a8afa278b5f95129b)

Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Aníbal Limón
2017-07-26 10:04:09 -05:00
committed by Richard Purdie
parent 4c09b7a745
commit 2d50f153b5
4 changed files with 42 additions and 4 deletions

View File

@@ -10,7 +10,7 @@ import collections
from oeqa.core.loader import OETestLoader from oeqa.core.loader import OETestLoader
from oeqa.core.runner import OETestRunner from oeqa.core.runner import OETestRunner
from oeqa.core.exception import OEQAMissingManifest from oeqa.core.exception import OEQAMissingManifest, OEQATestNotFound
class OETestContext(object): class OETestContext(object):
loaderClass = OETestLoader loaderClass = OETestLoader
@@ -139,6 +139,7 @@ class OETestContextExecutor(object):
if args.run_tests: if args.run_tests:
self.tc_kwargs['load']['modules'] = args.run_tests self.tc_kwargs['load']['modules'] = args.run_tests
self.tc_kwargs['load']['modules_required'] = args.run_tests
else: else:
self.tc_kwargs['load']['modules'] = [] self.tc_kwargs['load']['modules'] = []
@@ -151,7 +152,11 @@ class OETestContextExecutor(object):
self._process_args(logger, args) self._process_args(logger, args)
self.tc = self._context_class(**self.tc_kwargs['init']) self.tc = self._context_class(**self.tc_kwargs['init'])
self.tc.loadTests(self.module_paths, **self.tc_kwargs['load']) try:
self.tc.loadTests(self.module_paths, **self.tc_kwargs['load'])
except OEQATestNotFound as ex:
logger.error(ex)
sys.exit(1)
if args.list_tests: if args.list_tests:
rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run']) rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run'])

View File

@@ -18,3 +18,6 @@ class OEQAMissingManifest(OEQAException):
class OEQAPreRun(OEQAException): class OEQAPreRun(OEQAException):
pass pass
class OEQATestNotFound(OEQAException):
pass

View File

@@ -9,6 +9,7 @@ import inspect
from oeqa.core.utils.path import findFile from oeqa.core.utils.path import findFile
from oeqa.core.utils.test import getSuiteModules, getCaseID from oeqa.core.utils.test import getSuiteModules, getCaseID
from oeqa.core.exception import OEQATestNotFound
from oeqa.core.case import OETestCase from oeqa.core.case import OETestCase
from oeqa.core.decorator import decoratorClasses, OETestDecorator, \ from oeqa.core.decorator import decoratorClasses, OETestDecorator, \
OETestFilter, OETestDiscover OETestFilter, OETestDiscover
@@ -277,6 +278,28 @@ class OETestLoader(unittest.TestLoader):
return self.suiteClass(suite) return self.suiteClass(suite)
def _required_modules_validation(self):
"""
Search in Test context registry if a required
test is found, raise an exception when not found.
"""
for module in self.modules_required:
found = False
# The module name is splitted to only compare the
# first part of a test case id.
comp_len = len(module.split('.'))
for case in self.tc._registry['cases']:
case_comp = '.'.join(case.split('.')[0:comp_len])
if module == case_comp:
found = True
break
if not found:
raise OEQATestNotFound("Not found %s in loaded test cases" % \
module)
def discover(self): def discover(self):
big_suite = self.suiteClass() big_suite = self.suiteClass()
for path in self.module_paths: for path in self.module_paths:
@@ -291,6 +314,9 @@ class OETestLoader(unittest.TestLoader):
for clss in discover_classes: for clss in discover_classes:
cases = clss.discover(self.tc._registry) cases = clss.discover(self.tc._registry)
if self.modules_required:
self._required_modules_validation()
return self.suiteClass(cases) if cases else big_suite return self.suiteClass(cases) if cases else big_suite
def _filterModule(self, module): def _filterModule(self, module):

View File

@@ -13,7 +13,7 @@ from random import choice
import oeqa import oeqa
from oeqa.core.context import OETestContext, OETestContextExecutor from oeqa.core.context import OETestContext, OETestContextExecutor
from oeqa.core.exception import OEQAPreRun from oeqa.core.exception import OEQAPreRun, OEQATestNotFound
from oeqa.utils.commands import runCmd, get_bb_vars, get_test_layer from oeqa.utils.commands import runCmd, get_bb_vars, get_test_layer
@@ -196,7 +196,11 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
self.tc_kwargs['init']['td']['BBPATH'].split(':')) self.tc_kwargs['init']['td']['BBPATH'].split(':'))
self.tc = self._context_class(**self.tc_kwargs['init']) self.tc = self._context_class(**self.tc_kwargs['init'])
self.tc.loadTests(self.module_paths, **self.tc_kwargs['load']) try:
self.tc.loadTests(self.module_paths, **self.tc_kwargs['load'])
except OEQATestNotFound as ex:
logger.error(ex)
sys.exit(1)
if args.list_tests: if args.list_tests:
rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run']) rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run'])