testexport.bbclass: Add support for testexport-tarball

Add support to export the SDK tarball needed when a test
system doesn't have the required software to perform runtime
tests.

The support is when exporting the test and when running
the test on a remote system. The user of this feature just
need to set TEST_EXPORT_SDK_ENABLED to "1" and declare
the sdk packages in TEST_EXPORT_SDK_PACKAGES.

[YOCTO #7850]

(From OE-Core rev: a6041f81b81baa7564e4c712fc88de2b997e52e4)

(From OE-Core rev: 05e6c89f0f71311f8bd32cdb86a2deb789c58035)

Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mariano Lopez 2016-06-06 07:15:44 +00:00 committed by Richard Purdie
parent 7d18d9f9c5
commit 120f7067c8
2 changed files with 50 additions and 1 deletions

View File

@ -23,8 +23,14 @@ TEST_TARGET ?= "simpleremote"
TEST_TARGET_IP ?= ""
TEST_SERVER_IP ?= ""
TEST_EXPORT_SDK_PACKAGES ?= ""
TEST_EXPORT_SDK_ENABLED ?= "0"
TEST_EXPORT_SDK_NAME ?= "testexport-tools-nativesdk"
TEST_EXPORT_SDK_DIR ?= "sdk"
TEST_EXPORT_DEPENDS = ""
TEST_EXPORT_DEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'cpio-native:do_populate_sysroot', '', d)}"
TEST_EXPORT_DEPENDS += "${@bb.utils.contains('TEST_EXPORT_SDK_ENABLED', '1', 'testexport-tarball:do_populate_sdk', '', d)}"
TEST_EXPORT_LOCK = "${TMPDIR}/testimage.lock"
python do_testexport() {
@ -136,6 +142,16 @@ def exportTests(d,tc):
dst_f = os.path.join(export_pkg_dir, root.replace(test_pkg_dir, "").lstrip("/"), f)
shutil.copy2(src_f, dst_f)
# Copy SDK
if d.getVar("TEST_EXPORT_SDK_ENABLED", True) == "1":
sdk_deploy = d.getVar("SDK_DEPLOY", True)
tarball_name = "%s.sh" % d.getVar("TEST_EXPORT_SDK_NAME", True)
tarball_path = os.path.join(sdk_deploy, tarball_name)
export_sdk_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True),
d.getVar("TEST_EXPORT_SDK_DIR", True))
bb.utils.mkdirhier(export_sdk_dir)
shutil.copy2(tarball_path, export_sdk_dir)
bb.plain("Exported tests to: %s" % exportpath)
def testexport_main(d):

View File

@ -31,8 +31,8 @@ except ImportError:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "oeqa")))
from oeqa.oetest import ExportTestContext
from oeqa.utils.commands import runCmd
from oeqa.utils.sshcontrol import SSHControl
from oeqa.utils.dump import get_host_dumper
# this isn't pretty but we need a fake target object
# for running the tests externally as we don't care
@ -107,6 +107,8 @@ def main():
if not os.path.isdir(d["DEPLOY_DIR"]):
print("WARNING: The path to DEPLOY_DIR does not exist: %s" % d["DEPLOY_DIR"])
extract_sdk(d)
target = FakeTarget(d)
for key in loaded["target"].keys():
setattr(target, key, loaded["target"][key])
@ -118,6 +120,37 @@ def main():
return 0
def extract_sdk(d):
"""
Extract SDK if needed
"""
export_dir = os.path.dirname(os.path.realpath(__file__))
tools_dir = d.getVar("TEST_EXPORT_SDK_DIR", True)
tarball_name = "%s.sh" % d.getVar("TEST_EXPORT_SDK_NAME", True)
tarball_path = os.path.join(export_dir, tools_dir, tarball_name)
extract_path = os.path.join(export_dir, "sysroot")
if os.path.isfile(tarball_path):
print ("Found SDK tarball %s. Extracting..." % tarball_path)
result = runCmd("%s -y -d %s" % (tarball_path, extract_path))
for f in os.listdir(extract_path):
if f.startswith("environment-setup"):
print("Setting up SDK environment...")
env_file = os.path.join(extract_path, f)
update_env(env_file)
def update_env(env_file):
"""
Source a file and update environment
"""
cmd = ". %s; env -0" % env_file
result = runCmd(cmd)
for line in result.output.split("\0"):
(key, _, value) = line.partition("=")
os.environ[key] = value
if __name__ == "__main__":
try:
ret = main()