summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/selftest/cases/selftest.py
blob: 4b3cb144638a582878457818f35f7cb3189b4c56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import importlib
from oeqa.utils.commands import runCmd
import oeqa.selftest
from oeqa.selftest.case import OESelftestTestCase
from oeqa.core.decorator.oeid import OETestID

class ExternalLayer(OESelftestTestCase):

    @OETestID(1885)
    def test_list_imported(self):
        """
        Summary: Checks functionality to import tests from other layers.
        Expected: 1. File "external-layer.py" must be in
        oeqa.selftest.__path__
                  2. test_unconditional_pas method must exists
                     in ImportedTests class
        Product: oe-core
        Author: Mariano Lopez <mariano.lopez@intel.com>
        """

        test_file = "external-layer.py"
        test_module = "oeqa.selftest.cases.external-layer"
        method_name = "test_unconditional_pass"

        # Check if "external-layer.py" is in oeqa path
        found_file = search_test_file(test_file)
        self.assertTrue(found_file, msg="Can't find %s in the oeqa path" % test_file)

        # Import oeqa.selftest.external-layer module and search for
        # test_unconditional_pass method of ImportedTests class
        found_method = search_method(test_module, method_name)
        self.assertTrue(method_name, msg="Can't find %s method" % method_name)

def search_test_file(file_name):
    for layer_path in oeqa.selftest.__path__:
        for _, _, files in os.walk(layer_path):
            for f in files:
                if f == file_name:
                    return True
    return False

def search_method(module, method):
    modlib = importlib.import_module(module)
    for var in vars(modlib):
        klass = vars(modlib)[var]
        if isinstance(klass, type(OESelftestTestCase)) and issubclass(klass, OESelftestTestCase):
            for m in dir(klass):
                if m == method:
                    return True
    return False