From 593f2fdf6ee94c5f91761a669048da3598cbe3fa Mon Sep 17 00:00:00 2001 From: Aníbal Limón Date: Sat, 30 Jan 2016 11:05:15 -0600 Subject: testimage/testsdk: Modularize TestContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move anonymous duplicated class TestContext from testimage/testsdk to oeqa/oetest now we have two new classes ImageTestContext and SDKTestContext with common code in TestContext class. Signed-off-by: Aníbal Limón Signed-off-by: Ross Burton --- meta/classes/testimage.bbclass | 40 ++------------------------- meta/classes/testsdk.bbclass | 29 ++----------------- meta/lib/oeqa/oetest.py | 63 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 63 deletions(-) diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass index 6eea3f8a27..bdd6c9de6f 100644 --- a/meta/classes/testimage.bbclass +++ b/meta/classes/testimage.bbclass @@ -195,7 +195,8 @@ def testimage_main(d): import oeqa.runtime import time import signal - from oeqa.oetest import loadTests, runTests, get_test_suites, get_tests_list + from oeqa.oetest import loadTests, runTests, \ + get_test_suites, get_tests_list, ImageTestContext from oeqa.targetcontrol import get_target_controller from oeqa.utils.dump import get_host_dumper @@ -212,48 +213,14 @@ def testimage_main(d): testslist = get_tests_list(get_test_suites(d), d.getVar("BBPATH", True).split(':')) testsrequired = [t for t in d.getVar("TEST_SUITES", True).split() if t != "auto"] - tagexp = d.getVar("TEST_SUITES_TAGS", True) - # we need the host dumper in test context host_dumper = get_host_dumper(d) # the robot dance target = get_target_controller(d) - class TestContext(object): - def __init__(self): - self.d = d - self.testslist = testslist - self.tagexp = tagexp - self.testsrequired = testsrequired - self.filesdir = os.path.join(os.path.dirname(os.path.abspath(oeqa.runtime.__file__)),"files") - self.target = target - self.host_dumper = host_dumper - self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() - self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() - manifest = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("IMAGE_LINK_NAME", True) + ".manifest") - nomanifest = d.getVar("IMAGE_NO_MANIFEST", True) - - self.sigterm = False - self.origsigtermhandler = signal.getsignal(signal.SIGTERM) - signal.signal(signal.SIGTERM, self.sigterm_exception) - - if nomanifest is None or nomanifest != "1": - try: - with open(manifest) as f: - self.pkgmanifest = f.read() - except IOError as e: - bb.fatal("No package manifest file found. Did you build the image?\n%s" % e) - else: - self.pkgmanifest = "" - - def sigterm_exception(self, signum, stackframe): - bb.warn("TestImage received SIGTERM, shutting down...") - self.sigterm = True - self.target.stop() - # test context - tc = TestContext() + tc = ImageTestContext(d, testslist, testsrequired, target, host_dumper) # this is a dummy load of tests # we are doing that to find compile errors in the tests themselves @@ -264,7 +231,6 @@ def testimage_main(d): import traceback bb.fatal("Loading tests failed:\n%s" % traceback.format_exc()) - if export: signal.signal(signal.SIGTERM, tc.origsigtermhandler) tc.origsigtermhandler = None diff --git a/meta/classes/testsdk.bbclass b/meta/classes/testsdk.bbclass index 104c7a15f4..06e7a77398 100644 --- a/meta/classes/testsdk.bbclass +++ b/meta/classes/testsdk.bbclass @@ -13,7 +13,8 @@ def testsdk_main(d): import oeqa.sdk import time import subprocess - from oeqa.oetest import loadTests, runTests, get_test_suites, get_tests_list + from oeqa.oetest import loadTests, runTests, \ + get_test_suites, get_tests_list, SDKTestContext pn = d.getVar("PN", True) bb.utils.mkdirhier(d.getVar("TEST_LOG_DIR", True)) @@ -28,29 +29,6 @@ def testsdk_main(d): if not os.path.exists(tcname): bb.fatal("The toolchain is not built. Build it before running the tests: 'bitbake -c populate_sdk' .") - class TestContext(object): - def __init__(self): - self.d = d - self.testslist = testslist - self.testsrequired = testsrequired - self.filesdir = os.path.join(os.path.dirname(os.path.abspath(oeqa.runtime.__file__)),"files") - self.sdktestdir = sdktestdir - self.sdkenv = sdkenv - self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() - self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() - manifest = d.getVar("SDK_TARGET_MANIFEST", True) - try: - with open(manifest) as f: - self.pkgmanifest = f.read() - except IOError as e: - bb.fatal("No package manifest file found. Did you build the sdk image?\n%s" % e) - hostmanifest = d.getVar("SDK_HOST_MANIFEST", True) - try: - with open(hostmanifest) as f: - self.hostpkgmanifest = f.read() - except IOError as e: - bb.fatal("No host package manifest file found. Did you build the sdk image?\n%s" % e) - sdktestdir = d.expand("${WORKDIR}/testimage-sdk/") bb.utils.remove(sdktestdir, True) bb.utils.mkdirhier(sdktestdir) @@ -63,8 +41,7 @@ def testsdk_main(d): targets = glob.glob(d.expand(sdktestdir + "/tc/environment-setup-*")) for sdkenv in targets: bb.plain("Testing %s" % sdkenv) - # test context - tc = TestContext() + tc = SDKTestContext(d, testslist, testsrequired, sdktestdir, sdkenv) # this is a dummy load of tests # we are doing that to find compile errors in the tests themselves diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index 6470129180..9951a6f40e 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py @@ -11,11 +11,14 @@ import os, re, mmap import unittest import inspect import subprocess +import signal try: import bb except ImportError: pass import logging + +import oeqa.runtime from oeqa.utils.decorators import LogResults, gettag, getResults logger = logging.getLogger("BitBake") @@ -326,3 +329,63 @@ def get_tests_list(testsuites, bbpath, type="runtime"): add_auto_list(testpath) return testslist + +class TestContext(object): + def __init__(self, d, testslist, testsrequired): + self.d = d + self.testslist = testslist + self.testsrequired = testsrequired + + self.filesdir = os.path.join(os.path.dirname(os.path.abspath( + oeqa.runtime.__file__)), "files") + self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() + self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() + +class ImageTestContext(TestContext): + def __init__(self, d, testslist, testsrequired, target, host_dumper): + super(ImageTestContext, self).__init__(d, testslist, testsrequired) + + self.tagexp = d.getVar("TEST_SUITES_TAGS", True) + + self.target = target + self.host_dumper = host_dumper + + manifest = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), + d.getVar("IMAGE_LINK_NAME", True) + ".manifest") + nomanifest = d.getVar("IMAGE_NO_MANIFEST", True) + if nomanifest is None or nomanifest != "1": + try: + with open(manifest) as f: + self.pkgmanifest = f.read() + except IOError as e: + bb.fatal("No package manifest file found. Did you build the image?\n%s" % e) + else: + self.pkgmanifest = "" + + self.sigterm = False + self.origsigtermhandler = signal.getsignal(signal.SIGTERM) + signal.signal(signal.SIGTERM, self._sigterm_exception) + + def _sigterm_exception(self, signum, stackframe): + bb.warn("TestImage received SIGTERM, shutting down...") + self.sigterm = True + self.target.stop() + +class SDKTestContext(TestContext): + def __init__(self, d, testslist, testsrequired, sdktestdir, sdkenv): + super(SDKTestContext, self).__init__(d, testslist, testsrequired) + + self.sdktestdir = sdktestdir + self.sdkenv = sdkenv + + try: + with open(d.getVar("SDK_TARGET_MANIFEST", True)) as f: + self.pkgmanifest = f.read() + except IOError as e: + bb.fatal("No package manifest file found. Did you build the sdk image?\n%s" % e) + + try: + with open(d.getVar("SDK_HOST_MANIFEST", True)) as f: + self.hostpkgmanifest = f.read() + except IOError as e: + bb.fatal("No host package manifest file found. Did you build the sdk image?\n%s" % e) -- cgit 1.2.3-korg