diff options
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oeqa/oetest.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index 6f9edec58d..18b2209656 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py | |||
@@ -250,3 +250,77 @@ def skipModuleUnless(cond, reason): | |||
250 | 250 | ||
251 | if not cond: | 251 | if not cond: |
252 | skipModule(reason, 3) | 252 | skipModule(reason, 3) |
253 | |||
254 | # get testcase list from specified file | ||
255 | # if path is a relative path, then relative to build/conf/ | ||
256 | def read_testlist(fpath, builddir): | ||
257 | if not os.path.isabs(fpath): | ||
258 | fpath = os.path.join(builddir, "conf", fpath) | ||
259 | if not os.path.exists(fpath): | ||
260 | bb.fatal("No such manifest file: ", fpath) | ||
261 | tcs = [] | ||
262 | for line in open(fpath).readlines(): | ||
263 | line = line.strip() | ||
264 | if line and not line.startswith("#"): | ||
265 | tcs.append(line) | ||
266 | return " ".join(tcs) | ||
267 | |||
268 | # get test suites, returns test suites based on d variables | ||
269 | def get_test_suites(d, type='runtime'): | ||
270 | testsuites = [] | ||
271 | |||
272 | if type == "sdk": | ||
273 | testsuites = (d.getVar("TEST_SUITES_SDK", True) or "auto").split() | ||
274 | else: | ||
275 | manifests = (d.getVar("TEST_SUITES_MANIFEST", True) or '').split() | ||
276 | if manifests: | ||
277 | for manifest in manifests: | ||
278 | testsuites.extend(read_testlist(manifest, | ||
279 | d.getVar("TOPDIR", True)).split()) | ||
280 | |||
281 | else: | ||
282 | testsuites = d.getVar("TEST_SUITES", True).split() | ||
283 | |||
284 | return testsuites | ||
285 | |||
286 | # return test list by type also filter if TEST_SUITES is specified | ||
287 | def get_tests_list(testsuites, bbpath, type="runtime"): | ||
288 | testslist = [] | ||
289 | |||
290 | # This relies on lib/ under each directory in BBPATH being added to sys.path | ||
291 | # (as done by default in base.bbclass) | ||
292 | for testname in testsuites: | ||
293 | if testname != "auto": | ||
294 | if testname.startswith("oeqa."): | ||
295 | testslist.append(testname) | ||
296 | continue | ||
297 | found = False | ||
298 | for p in bbpath: | ||
299 | if os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname + '.py')): | ||
300 | testslist.append("oeqa." + type + "." + testname) | ||
301 | found = True | ||
302 | break | ||
303 | elif os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname.split(".")[0] + '.py')): | ||
304 | testslist.append("oeqa." + type + "." + testname) | ||
305 | found = True | ||
306 | break | ||
307 | if not found: | ||
308 | bb.fatal('Test %s specified in TEST_SUITES could not be found in lib/oeqa/runtime under BBPATH' % testname) | ||
309 | |||
310 | if "auto" in testsuites: | ||
311 | def add_auto_list(path): | ||
312 | if not os.path.exists(os.path.join(path, '__init__.py')): | ||
313 | bb.fatal('Tests directory %s exists but is missing __init__.py' % path) | ||
314 | files = sorted([f for f in os.listdir(path) if f.endswith('.py') and not f.startswith('_')]) | ||
315 | for f in files: | ||
316 | module = 'oeqa.' + type + '.' + f[:-3] | ||
317 | if module not in testslist: | ||
318 | testslist.append(module) | ||
319 | |||
320 | for p in bbpath: | ||
321 | testpath = os.path.join(p, 'lib', 'oeqa', type) | ||
322 | bb.debug(2, 'Searching for tests in %s' % testpath) | ||
323 | if os.path.exists(testpath): | ||
324 | add_auto_list(testpath) | ||
325 | |||
326 | return testslist | ||