summaryrefslogtreecommitdiffstats
path: root/meta/classes/testsdk.bbclass
diff options
context:
space:
mode:
authorAníbal Limón <anibal.limon@linux.intel.com>2016-01-28 10:09:02 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-10 16:06:22 +0000
commit24326a983bd5822860906d6ee8d5792a1b69685a (patch)
tree58c9895cb97a9eeb5b66885efc0720d5049d4167 /meta/classes/testsdk.bbclass
parent3d1d30b0a38b338aa9e17566c2d8a0298e031edb (diff)
downloadpoky-24326a983bd5822860906d6ee8d5792a1b69685a.tar.gz
classes/testsdk: Add new class testsdk.
Moves all the testsdk code from testimage in order to have it's own class because new tests will be added for extensible SDK. The old paths for store logs "${WORKDIR}/testimage" and sdk "${WORKDIR}/testimage-sdk" was maintained for compatibility may be change to point testsdk after review the codebase. The dependency of QEMU was removed because isn't needed. (From OE-Core rev: b30edc18866865ec757b3fd86eb84de530720acf) Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/testsdk.bbclass')
-rw-r--r--meta/classes/testsdk.bbclass100
1 files changed, 100 insertions, 0 deletions
diff --git a/meta/classes/testsdk.bbclass b/meta/classes/testsdk.bbclass
new file mode 100644
index 0000000000..42c49134c8
--- /dev/null
+++ b/meta/classes/testsdk.bbclass
@@ -0,0 +1,100 @@
1# Copyright (C) 2013 - 2016 Intel Corporation
2#
3# Released under the MIT license (see COPYING.MIT)
4
5TEST_LOG_DIR ?= "${WORKDIR}/testimage"
6TESTSDKLOCK = "${TMPDIR}/testsdk.lock"
7
8def testsdk_main(d):
9 import unittest
10 import os
11 import glob
12 import oeqa.runtime
13 import oeqa.sdk
14 import time
15 import subprocess
16 from oeqa.oetest import loadTests, runTests, get_test_suites, get_tests_list
17
18 pn = d.getVar("PN", True)
19 bb.utils.mkdirhier(d.getVar("TEST_LOG_DIR", True))
20
21 # tests in TEST_SUITES become required tests
22 # they won't be skipped even if they aren't suitable.
23 # testslist is what we'll actually pass to the unittest loader
24 testslist = get_tests_list(get_test_suites(d, "sdk"), d.getVar("BBPATH", True).split(':'), "sdk")
25 testsrequired = [t for t in (d.getVar("TEST_SUITES_SDK", True) or "auto").split() if t != "auto"]
26
27 tcname = d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh")
28 if not os.path.exists(tcname):
29 bb.fatal("The toolchain is not built. Build it before running the tests: 'bitbake <image> -c populate_sdk' .")
30
31 class TestContext(object):
32 def __init__(self):
33 self.d = d
34 self.testslist = testslist
35 self.testsrequired = testsrequired
36 self.filesdir = os.path.join(os.path.dirname(os.path.abspath(oeqa.runtime.__file__)),"files")
37 self.sdktestdir = sdktestdir
38 self.sdkenv = sdkenv
39 self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split()
40 self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split()
41 manifest = d.getVar("SDK_TARGET_MANIFEST", True)
42 try:
43 with open(manifest) as f:
44 self.pkgmanifest = f.read()
45 except IOError as e:
46 bb.fatal("No package manifest file found. Did you build the sdk image?\n%s" % e)
47 hostmanifest = d.getVar("SDK_HOST_MANIFEST", True)
48 try:
49 with open(hostmanifest) as f:
50 self.hostpkgmanifest = f.read()
51 except IOError as e:
52 bb.fatal("No host package manifest file found. Did you build the sdk image?\n%s" % e)
53
54 sdktestdir = d.expand("${WORKDIR}/testimage-sdk/")
55 bb.utils.remove(sdktestdir, True)
56 bb.utils.mkdirhier(sdktestdir)
57 try:
58 subprocess.check_output("cd %s; %s <<EOF\n./tc\nY\nEOF" % (sdktestdir, tcname), shell=True)
59 except subprocess.CalledProcessError as e:
60 bb.fatal("Couldn't install the SDK:\n%s" % e.output)
61
62 try:
63 targets = glob.glob(d.expand(sdktestdir + "/tc/environment-setup-*"))
64 for sdkenv in targets:
65 bb.plain("Testing %s" % sdkenv)
66 # test context
67 tc = TestContext()
68
69 # this is a dummy load of tests
70 # we are doing that to find compile errors in the tests themselves
71 # before booting the image
72 try:
73 loadTests(tc, "sdk")
74 except Exception as e:
75 import traceback
76 bb.fatal("Loading tests failed:\n%s" % traceback.format_exc())
77
78 starttime = time.time()
79 result = runTests(tc, "sdk")
80 stoptime = time.time()
81 if result.wasSuccessful():
82 bb.plain("%s SDK(%s):%s - Ran %d test%s in %.3fs" % (pn, os.path.basename(tcname), os.path.basename(sdkenv),result.testsRun, result.testsRun != 1 and "s" or "", stoptime - starttime))
83 msg = "%s - OK - All required tests passed" % pn
84 skipped = len(result.skipped)
85 if skipped:
86 msg += " (skipped=%d)" % skipped
87 bb.plain(msg)
88 else:
89 raise bb.build.FuncFailed("%s - FAILED - check the task log and the commands log" % pn )
90 finally:
91 bb.utils.remove(sdktestdir, True)
92
93testsdk_main[vardepsexclude] =+ "BB_ORIGENV"
94
95python do_testsdk() {
96 testsdk_main(d)
97}
98addtask testsdk
99do_testsdk[nostamp] = "1"
100do_testsdk[lockfiles] += "${TESTSDKLOCK}"