diff options
-rw-r--r-- | meta/classes/testsdk.bbclass | 75 |
1 files changed, 60 insertions, 15 deletions
diff --git a/meta/classes/testsdk.bbclass b/meta/classes/testsdk.bbclass index 063b9080a5..7304129b49 100644 --- a/meta/classes/testsdk.bbclass +++ b/meta/classes/testsdk.bbclass | |||
@@ -50,30 +50,75 @@ def run_test_context(CTestContext, d, testdir, tcname, pn, *args): | |||
50 | 50 | ||
51 | def testsdk_main(d): | 51 | def testsdk_main(d): |
52 | import os | 52 | import os |
53 | import oeqa.sdk | ||
54 | import subprocess | 53 | import subprocess |
55 | from oeqa.oetest import SDKTestContext | 54 | import json |
55 | import logging | ||
56 | 56 | ||
57 | pn = d.getVar("PN") | 57 | from bb.utils import export_proxies |
58 | bb.utils.mkdirhier(d.getVar("TEST_LOG_DIR")) | 58 | from oeqa.core.runner import OEStreamLogger |
59 | from oeqa.sdk.context import OESDKTestContext, OESDKTestContextExecutor | ||
60 | from oeqa.utils import make_logger_bitbake_compatible | ||
61 | |||
62 | pn = d.getVar("PN", True) | ||
63 | logger = make_logger_bitbake_compatible(logging.getLogger("BitBake")) | ||
64 | |||
65 | # sdk use network for download projects for build | ||
66 | export_proxies(d) | ||
67 | |||
68 | test_log_dir = d.getVar("TEST_LOG_DIR", True) | ||
69 | |||
70 | bb.utils.mkdirhier(test_log_dir) | ||
59 | 71 | ||
60 | tcname = d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh") | 72 | tcname = d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh") |
61 | if not os.path.exists(tcname): | 73 | if not os.path.exists(tcname): |
62 | bb.fatal("The toolchain %s is not built. Build it before running the tests: 'bitbake <image> -c populate_sdk' ." % tcname) | 74 | bb.fatal("The toolchain %s is not built. Build it before running the tests: 'bitbake <image> -c populate_sdk' ." % tcname) |
63 | 75 | ||
64 | sdktestdir = d.expand("${WORKDIR}/testimage-sdk/") | 76 | tdname = d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.testdata.json") |
65 | bb.utils.remove(sdktestdir, True) | 77 | test_data = json.load(open(tdname, "r")) |
66 | bb.utils.mkdirhier(sdktestdir) | 78 | test_data['TEST_LOG_DIR'] = test_log_dir |
79 | |||
80 | target_pkg_manifest = OESDKTestContextExecutor._load_manifest( | ||
81 | d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.target.manifest")) | ||
82 | host_pkg_manifest = OESDKTestContextExecutor._load_manifest( | ||
83 | d.expand("${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.host.manifest")) | ||
84 | |||
85 | sdk_dir = d.expand("${WORKDIR}/testimage-sdk/") | ||
86 | bb.utils.remove(sdk_dir, True) | ||
87 | bb.utils.mkdirhier(sdk_dir) | ||
67 | try: | 88 | try: |
68 | subprocess.check_output("cd %s; %s <<EOF\n./tc\nY\nEOF" % (sdktestdir, tcname), shell=True) | 89 | subprocess.check_output("cd %s; %s <<EOF\n./\nY\nEOF" % (sdk_dir, tcname), shell=True) |
69 | except subprocess.CalledProcessError as e: | 90 | except subprocess.CalledProcessError as e: |
70 | bb.fatal("Couldn't install the SDK:\n%s" % e.output.decode("utf-8")) | 91 | bb.fatal("Couldn't install the SDK:\n%s" % e.output.decode("utf-8")) |
71 | 92 | ||
72 | try: | 93 | fail = False |
73 | run_test_context(SDKTestContext, d, sdktestdir, tcname, pn) | 94 | sdk_envs = OESDKTestContextExecutor._get_sdk_environs(sdk_dir) |
74 | finally: | 95 | for s in sdk_envs: |
75 | bb.utils.remove(sdktestdir, True) | 96 | sdk_env = sdk_envs[s] |
97 | bb.plain("SDK testing environment: %s" % s) | ||
98 | tc = OESDKTestContext(td=test_data, logger=logger, sdk_dir=sdk_dir, | ||
99 | sdk_env=sdk_env, target_pkg_manifest=target_pkg_manifest, | ||
100 | host_pkg_manifest=host_pkg_manifest) | ||
76 | 101 | ||
102 | try: | ||
103 | tc.loadTests(OESDKTestContextExecutor.default_cases) | ||
104 | except Exception as e: | ||
105 | import traceback | ||
106 | bb.fatal("Loading tests failed:\n%s" % traceback.format_exc()) | ||
107 | |||
108 | result = tc.runTests() | ||
109 | |||
110 | component = "%s %s" % (pn, OESDKTestContextExecutor.name) | ||
111 | context_msg = "%s:%s" % (os.path.basename(tcname), os.path.basename(sdk_env)) | ||
112 | |||
113 | tc.logSummary(result, component, context_msg) | ||
114 | tc.logDetails() | ||
115 | |||
116 | if not result.wasSuccessful(): | ||
117 | fail = True | ||
118 | |||
119 | if fail: | ||
120 | bb.fatal("%s - FAILED - check the task log and the commands log" % pn) | ||
121 | |||
77 | testsdk_main[vardepsexclude] =+ "BB_ORIGENV" | 122 | testsdk_main[vardepsexclude] =+ "BB_ORIGENV" |
78 | 123 | ||
79 | python do_testsdk() { | 124 | python do_testsdk() { |
@@ -88,13 +133,13 @@ TESTSDKEXTLOCK = "${TMPDIR}/testsdkext.lock" | |||
88 | 133 | ||
89 | def testsdkext_main(d): | 134 | def testsdkext_main(d): |
90 | import os | 135 | import os |
91 | import oeqa.sdkext | 136 | import json |
92 | import subprocess | 137 | import subprocess |
138 | import logging | ||
139 | |||
93 | from bb.utils import export_proxies | 140 | from bb.utils import export_proxies |
94 | from oeqa.oetest import SDKTestContext, SDKExtTestContext | ||
95 | from oeqa.utils import avoid_paths_in_environ | 141 | from oeqa.utils import avoid_paths_in_environ |
96 | 142 | ||
97 | |||
98 | # extensible sdk use network | 143 | # extensible sdk use network |
99 | export_proxies(d) | 144 | export_proxies(d) |
100 | 145 | ||