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