summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/oetest.py
diff options
context:
space:
mode:
authorAníbal Limón <limon.anibal@gmail.com>2016-01-30 11:55:39 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-10 16:06:22 +0000
commit8009418d55721171bb2632b7af72b0b0eaa1933d (patch)
tree2de2c8a898439fce818a9b18b296d1af9a61011f /meta/lib/oeqa/oetest.py
parentb588b80d667052f2864d529793bf7db155b29f90 (diff)
downloadpoky-8009418d55721171bb2632b7af72b0b0eaa1933d.tar.gz
testimage/testsdk: Move get test suites routine inside TestContext.
In order to provide better abstraction move functions to get the test suite inside the TestContext. (From OE-Core rev: 552285688441330440bd1bc138aeaea87549024a) Signed-off-by: Aníbal Limón <limon.anibal@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/oetest.py')
-rw-r--r--meta/lib/oeqa/oetest.py192
1 files changed, 108 insertions, 84 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index 9951a6f40e..7f07037a1f 100644
--- a/meta/lib/oeqa/oetest.py
+++ b/meta/lib/oeqa/oetest.py
@@ -33,7 +33,6 @@ def getVar(obj):
33def checkTags(tc, tagexp): 33def checkTags(tc, tagexp):
34 return eval(tagexp, None, getVar(tc)) 34 return eval(tagexp, None, getVar(tc))
35 35
36
37def filterByTagExp(testsuite, tagexp): 36def filterByTagExp(testsuite, tagexp):
38 if not tagexp: 37 if not tagexp:
39 return testsuite 38 return testsuite
@@ -254,96 +253,80 @@ def skipModuleUnless(cond, reason):
254 if not cond: 253 if not cond:
255 skipModule(reason, 3) 254 skipModule(reason, 3)
256 255
257# get testcase list from specified file
258# if path is a relative path, then relative to build/conf/
259def read_testlist(fpath, builddir):
260 if not os.path.isabs(fpath):
261 fpath = os.path.join(builddir, "conf", fpath)
262 if not os.path.exists(fpath):
263 bb.fatal("No such manifest file: ", fpath)
264 tcs = []
265 for line in open(fpath).readlines():
266 line = line.strip()
267 if line and not line.startswith("#"):
268 tcs.append(line)
269 return " ".join(tcs)
270
271# get test suites, returns test suites based on d variables
272def get_test_suites(d, type='runtime'):
273 testsuites = []
274
275 if type == "sdk":
276 testsuites = (d.getVar("TEST_SUITES_SDK", True) or "auto").split()
277 elif type == "sdkext":
278 testsuites = (d.getVar("TEST_SUITES_SDKEXT", True) or "auto").split()
279 else:
280 manifests = (d.getVar("TEST_SUITES_MANIFEST", True) or '').split()
281 if manifests:
282 for manifest in manifests:
283 testsuites.extend(read_testlist(manifest,
284 d.getVar("TOPDIR", True)).split())
285
286 else:
287 testsuites = d.getVar("TEST_SUITES", True).split()
288
289 return testsuites
290
291# return test list by type also filter if TEST_SUITES is specified
292def get_tests_list(testsuites, bbpath, type="runtime"):
293 testslist = []
294
295 # This relies on lib/ under each directory in BBPATH being added to sys.path
296 # (as done by default in base.bbclass)
297 for testname in testsuites:
298 if testname != "auto":
299 if testname.startswith("oeqa."):
300 testslist.append(testname)
301 continue
302 found = False
303 for p in bbpath:
304 if os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname + '.py')):
305 testslist.append("oeqa." + type + "." + testname)
306 found = True
307 break
308 elif os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname.split(".")[0] + '.py')):
309 testslist.append("oeqa." + type + "." + testname)
310 found = True
311 break
312 if not found:
313 bb.fatal('Test %s specified in TEST_SUITES could not be found in lib/oeqa/runtime under BBPATH' % testname)
314
315 if "auto" in testsuites:
316 def add_auto_list(path):
317 if not os.path.exists(os.path.join(path, '__init__.py')):
318 bb.fatal('Tests directory %s exists but is missing __init__.py' % path)
319 files = sorted([f for f in os.listdir(path) if f.endswith('.py') and not f.startswith('_')])
320 for f in files:
321 module = 'oeqa.' + type + '.' + f[:-3]
322 if module not in testslist:
323 testslist.append(module)
324
325 for p in bbpath:
326 testpath = os.path.join(p, 'lib', 'oeqa', type)
327 bb.debug(2, 'Searching for tests in %s' % testpath)
328 if os.path.exists(testpath):
329 add_auto_list(testpath)
330
331 return testslist
332
333class TestContext(object): 256class TestContext(object):
334 def __init__(self, d, testslist, testsrequired): 257 def __init__(self, d):
335 self.d = d 258 self.d = d
336 self.testslist = testslist 259
337 self.testsrequired = testsrequired 260 self.testsuites = self._get_test_suites()
261 self.testslist = self._get_tests_list(d.getVar("BBPATH", True).split(':'))
262 self.testsrequired = self._get_test_suites_required()
338 263
339 self.filesdir = os.path.join(os.path.dirname(os.path.abspath( 264 self.filesdir = os.path.join(os.path.dirname(os.path.abspath(
340 oeqa.runtime.__file__)), "files") 265 oeqa.runtime.__file__)), "files")
341 self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() 266 self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split()
342 self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() 267 self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split()
343 268
269 # get testcase list from specified file
270 # if path is a relative path, then relative to build/conf/
271 def _read_testlist(self, fpath, builddir):
272 if not os.path.isabs(fpath):
273 fpath = os.path.join(builddir, "conf", fpath)
274 if not os.path.exists(fpath):
275 bb.fatal("No such manifest file: ", fpath)
276 tcs = []
277 for line in open(fpath).readlines():
278 line = line.strip()
279 if line and not line.startswith("#"):
280 tcs.append(line)
281 return " ".join(tcs)
282
283 # return test list by type also filter if TEST_SUITES is specified
284 def _get_tests_list(self, bbpath):
285 testslist = []
286
287 type = self._get_test_namespace()
288
289 # This relies on lib/ under each directory in BBPATH being added to sys.path
290 # (as done by default in base.bbclass)
291 for testname in self.testsuites:
292 if testname != "auto":
293 if testname.startswith("oeqa."):
294 testslist.append(testname)
295 continue
296 found = False
297 for p in bbpath:
298 if os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname + '.py')):
299 testslist.append("oeqa." + type + "." + testname)
300 found = True
301 break
302 elif os.path.exists(os.path.join(p, 'lib', 'oeqa', type, testname.split(".")[0] + '.py')):
303 testslist.append("oeqa." + type + "." + testname)
304 found = True
305 break
306 if not found:
307 bb.fatal('Test %s specified in TEST_SUITES could not be found in lib/oeqa/runtime under BBPATH' % testname)
308
309 if "auto" in self.testsuites:
310 def add_auto_list(path):
311 if not os.path.exists(os.path.join(path, '__init__.py')):
312 bb.fatal('Tests directory %s exists but is missing __init__.py' % path)
313 files = sorted([f for f in os.listdir(path) if f.endswith('.py') and not f.startswith('_')])
314 for f in files:
315 module = 'oeqa.' + type + '.' + f[:-3]
316 if module not in testslist:
317 testslist.append(module)
318
319 for p in bbpath:
320 testpath = os.path.join(p, 'lib', 'oeqa', type)
321 bb.debug(2, 'Searching for tests in %s' % testpath)
322 if os.path.exists(testpath):
323 add_auto_list(testpath)
324
325 return testslist
326
344class ImageTestContext(TestContext): 327class ImageTestContext(TestContext):
345 def __init__(self, d, testslist, testsrequired, target, host_dumper): 328 def __init__(self, d, target, host_dumper):
346 super(ImageTestContext, self).__init__(d, testslist, testsrequired) 329 super(ImageTestContext, self).__init__(d)
347 330
348 self.tagexp = d.getVar("TEST_SUITES_TAGS", True) 331 self.tagexp = d.getVar("TEST_SUITES_TAGS", True)
349 332
@@ -371,9 +354,29 @@ class ImageTestContext(TestContext):
371 self.sigterm = True 354 self.sigterm = True
372 self.target.stop() 355 self.target.stop()
373 356
357 def _get_test_namespace(self):
358 return "runtime"
359
360 def _get_test_suites(self):
361 testsuites = []
362
363 manifests = (self.d.getVar("TEST_SUITES_MANIFEST", True) or '').split()
364 if manifests:
365 for manifest in manifests:
366 testsuites.extend(self._read_testlist(manifest,
367 self.d.getVar("TOPDIR", True)).split())
368
369 else:
370 testsuites = self.d.getVar("TEST_SUITES", True).split()
371
372 return testsuites
373
374 def _get_test_suites_required(self):
375 return [t for t in self.d.getVar("TEST_SUITES", True).split() if t != "auto"]
376
374class SDKTestContext(TestContext): 377class SDKTestContext(TestContext):
375 def __init__(self, d, testslist, testsrequired, sdktestdir, sdkenv): 378 def __init__(self, d, sdktestdir, sdkenv):
376 super(SDKTestContext, self).__init__(d, testslist, testsrequired) 379 super(SDKTestContext, self).__init__(d)
377 380
378 self.sdktestdir = sdktestdir 381 self.sdktestdir = sdktestdir
379 self.sdkenv = sdkenv 382 self.sdkenv = sdkenv
@@ -389,3 +392,24 @@ class SDKTestContext(TestContext):
389 self.hostpkgmanifest = f.read() 392 self.hostpkgmanifest = f.read()
390 except IOError as e: 393 except IOError as e:
391 bb.fatal("No host package manifest file found. Did you build the sdk image?\n%s" % e) 394 bb.fatal("No host package manifest file found. Did you build the sdk image?\n%s" % e)
395
396 def _get_test_namespace(self):
397 return "sdk"
398
399 def _get_test_suites(self):
400 return (self.d.getVar("TEST_SUITES_SDK", True) or "auto").split()
401
402 def _get_test_suites_required(self):
403 return [t for t in (self.d.getVar("TEST_SUITES_SDK", True) or \
404 "auto").split() if t != "auto"]
405
406class SDKExtTestContext(TestContext):
407 def _get_test_namespace(self):
408 return "sdkext"
409
410 def _get_test_suites(self):
411 return (self.d.getVar("TEST_SUITES_SDK_EXT", True) or "auto").split()
412
413 def _get_test_suites_required(self):
414 return [t for t in (self.d.getVar("TEST_SUITES_SDK_EXT", True) or \
415 "auto").split() if t != "auto"]