xref: /OK3568_Linux_fs/yocto/poky/meta/lib/oeqa/selftest/cases/selftest.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#
2*4882a593Smuzhiyun# SPDX-License-Identifier: MIT
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun
5*4882a593Smuzhiyunimport importlib
6*4882a593Smuzhiyunimport oeqa.selftest
7*4882a593Smuzhiyunfrom oeqa.selftest.case import OESelftestTestCase
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunclass ExternalLayer(OESelftestTestCase):
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun    def test_list_imported(self):
12*4882a593Smuzhiyun        """
13*4882a593Smuzhiyun        Summary: Checks functionality to import tests from other layers.
14*4882a593Smuzhiyun        Expected: 1. File "external-layer.py" must be in
15*4882a593Smuzhiyun        oeqa.selftest.__path__
16*4882a593Smuzhiyun                  2. test_unconditional_pas method must exists
17*4882a593Smuzhiyun                     in ImportedTests class
18*4882a593Smuzhiyun        Product: oe-core
19*4882a593Smuzhiyun        Author: Mariano Lopez <mariano.lopez@intel.com>
20*4882a593Smuzhiyun        """
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun        test_file = "external-layer.py"
23*4882a593Smuzhiyun        test_module = "oeqa.selftest.cases.external-layer"
24*4882a593Smuzhiyun        method_name = "test_unconditional_pass"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun        # Check if "external-layer.py" is in oeqa path
27*4882a593Smuzhiyun        found_file = search_test_file(test_file)
28*4882a593Smuzhiyun        self.assertTrue(found_file, msg="Can't find %s in the oeqa path" % test_file)
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun        # Import oeqa.selftest.external-layer module and search for
31*4882a593Smuzhiyun        # test_unconditional_pass method of ImportedTests class
32*4882a593Smuzhiyun        found_method = search_method(test_module, method_name)
33*4882a593Smuzhiyun        self.assertTrue(method_name, msg="Can't find %s method" % method_name)
34*4882a593Smuzhiyun
35*4882a593Smuzhiyundef search_test_file(file_name):
36*4882a593Smuzhiyun    for layer_path in oeqa.selftest.__path__:
37*4882a593Smuzhiyun        for _, _, files in os.walk(layer_path):
38*4882a593Smuzhiyun            for f in files:
39*4882a593Smuzhiyun                if f == file_name:
40*4882a593Smuzhiyun                    return True
41*4882a593Smuzhiyun    return False
42*4882a593Smuzhiyun
43*4882a593Smuzhiyundef search_method(module, method):
44*4882a593Smuzhiyun    modlib = importlib.import_module(module)
45*4882a593Smuzhiyun    for var in vars(modlib):
46*4882a593Smuzhiyun        klass = vars(modlib)[var]
47*4882a593Smuzhiyun        if isinstance(klass, type(OESelftestTestCase)) and issubclass(klass, OESelftestTestCase):
48*4882a593Smuzhiyun            for m in dir(klass):
49*4882a593Smuzhiyun                if m == method:
50*4882a593Smuzhiyun                    return True
51*4882a593Smuzhiyun    return False
52*4882a593Smuzhiyun
53