All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/9] selftest: Moved method from oe-selftest to oeqa/runner.py
@ 2016-02-26 14:40 Daniel Istrate
  2016-02-26 14:40 ` [PATCH 2/9] selftest: Moved coverage functionality " Daniel Istrate
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Daniel Istrate @ 2016-02-26 14:40 UTC (permalink / raw)
  To: openembedded-core

Moved methods to runner and added parameters to them in
order for them to be used by other runners.

Signed-off-by: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
---
 meta/lib/oeqa/runner.py | 344 ++++++++++++++++++++++++++++++++++++++++++++++++
 scripts/oe-selftest     | 325 +++------------------------------------------
 2 files changed, 359 insertions(+), 310 deletions(-)
 create mode 100644 meta/lib/oeqa/runner.py

diff --git a/meta/lib/oeqa/runner.py b/meta/lib/oeqa/runner.py
new file mode 100644
index 0000000..ccb1e3b
--- /dev/null
+++ b/meta/lib/oeqa/runner.py
@@ -0,0 +1,344 @@
+import os
+import logging
+import sys
+import time
+import oeqa.utils.ftools as ftools
+from oeqa.utils.commands import bitbake, get_bb_var, get_test_layer
+
+
+class Tc:
+    """ Holds information about test cases """
+
+    def __init__(self, tcname, tcclass, tcmodule, tcid=None, tctag=None):
+        self.tcname = tcname
+        self.tcclass = tcclass
+        self.fullpath = '.'.join([tcmodule, tcclass, tcname])
+        # Trim prefix from tcmodule
+        self.tcmodule = tcmodule.split('.')[-1]
+        self.tcid = tcid
+        # A test case can have multiple tags (as tuples) otherwise str will suffice
+        self.tctag = tctag
+
+
+class Runner:
+
+    def __init__(self, caller, base_class, test_mod_dir):
+        """
+        :param caller: eg. selftest, test-recipe (log files will use this name)
+        :param base_class: eg. oeSelfTest, RecipeTests
+        :param test_mod_dir: eg oeqa.selftest, oeqa.recipetests
+        """
+
+        self.caller = caller
+        self.base_class = base_class
+        self.test_mod_dir = test_mod_dir
+        self.log = self.logger_create(self.caller)
+        self.builddir = os.environ.get("BUILDDIR")
+
+    def logger_create(self, log_name):
+        """ Create logger obj with logging file as <log_name-date.log> and symlink to it as <log_name.log> """
+
+        log_link = '%s.log' % log_name
+        log_file = '%s-%s.log' % (log_name, time.strftime("%Y-%m-%d_%H:%M:%S"))
+
+        if os.path.exists(log_link):
+            os.remove(log_link)
+        os.symlink(log_file, log_link)
+
+        log = logging.getLogger(log_name)
+        log.setLevel(logging.DEBUG)
+
+        fh = logging.FileHandler(filename=log_file, mode='w')
+        fh.setLevel(logging.DEBUG)
+
+        ch = logging.StreamHandler(sys.stdout)
+        ch.setLevel(logging.INFO)
+
+        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', "%Y-%m-%d %H:%M:%S")
+        fh.setFormatter(formatter)
+        ch.setFormatter(formatter)
+
+        log.addHandler(fh)
+        log.addHandler(ch)
+
+        return log
+
+    def preflight_check(self):
+        """ Check that the environment is sourced, meta-selftest included in bblayers and current dir is BUILDDIR """
+
+        self.log.info("Checking that everything is in order before running the tests")
+
+        if not self.builddir:
+            self.log.error("BUILDDIR isn't set. Did you forget to source your build environment setup script?")
+            return False
+
+        if os.getcwd() != self.builddir:
+            self.log.info("Changing cwd to %s" % self.builddir)
+            os.chdir(self.builddir)
+
+        if "meta-selftest" not in get_bb_var("BBLAYERS"):
+            self.log.error("You don't seem to have the meta-selftest layer in BBLAYERS")
+            return False
+
+        self.log.info("Running bitbake -p")
+        bitbake("-p")
+
+        return True
+
+    def add_include(self, include_files, include_to):
+        """ Include in include_to (local.conf, bblayers.conf) the specified files """
+
+        include_msg_header = "# include added by %s\n" % self.caller
+        include_msg = include_msg_header
+        if isinstance(include_files, (list, tuple)):
+            for f in include_files:
+                include_msg += 'include %s\n' % f
+        else:
+            include_msg += 'include %s\n' % include_files
+
+        if include_msg_header not in ftools.read_file(os.path.join(self.builddir, 'conf', include_to)):
+            self.log.info("Adding: %s in %s" % (include_files, include_to))
+            ftools.append_file(os.path.join(self.builddir, 'conf', include_to), include_msg)
+
+    def remove_include(self, remove_files, remove_from):
+        """ Remove from remove_from (local.conf, bblayers.conf) the specified files """
+
+        if self.builddir is None:
+            return
+
+        remove_msg_header = "# include added by %s\n" % self.caller
+        remove_msg = remove_msg_header
+        if isinstance(remove_files, (list, tuple)):
+            for f in remove_files:
+                remove_msg += 'include %s\n' % f
+        else:
+            remove_msg += 'include %s\n' % remove_files
+
+        if remove_msg_header in ftools.read_file(os.path.join(self.builddir, 'conf', remove_from)):
+            self.log.info("Removing the include from %s" % remove_from)
+            ftools.remove_from_file(os.path.join(self.builddir, 'conf', remove_from), remove_msg)
+
+    def remove_inc_files(self, remove_inc_list):
+        """ Remove remove_inc_list from BUILDDIR/conf/ """
+
+        # Also remove the test_recipe.inc if available
+        try:
+            for root, _, files in os.walk(get_test_layer()):
+                pass
+            for f in files:
+                if f == 'test_recipe.inc':
+                    os.remove(os.path.join(root, f))
+        except (AttributeError, OSError,) as e:    # AttributeError may happen if BUILDDIR is not set
+            pass
+
+        # log.info('Removing: %s' % remove_inc_list)
+        for incl_file in remove_inc_list:
+            try:
+                os.remove(os.path.join(self.builddir, 'conf', incl_file))
+            except:
+                pass
+
+    # FIXME: this method duplicates some of the code. Keep it here for now
+    def get_tests(self, exclusive_modules=[], include_hidden=False):
+        testslist = []
+        prefix = self.test_mod_dir.__name__
+        for x in exclusive_modules:
+            testslist.append('.'.join([prefix, x]))
+        if not testslist:
+            for testpath in self.test_mod_dir.__path__:
+                files = sorted([f for f in os.listdir(testpath) if f.endswith('.py') and not (f.startswith('_') and not
+                                include_hidden) and not f.startswith('__') and f != 'base.py'])
+                for f in files:
+                    module = '.'.join([prefix, os.path.splitext(f)[0]])
+                    if module not in testslist:
+                        testslist.append(module)
+
+        return testslist
+
+    def get_tests_from_module(self, tmod):
+        """ Get a list of Tcs from module extending the base_class """
+
+        tlist = []
+
+        try:
+            import importlib
+            modlib = importlib.import_module(tmod)
+            for mod in vars(modlib).values():
+                if isinstance(mod, type(self.base_class)) and issubclass(mod, self.base_class) and mod is not self.base_class:
+                    for test in dir(mod):
+                        if test.startswith('test_') and hasattr(vars(mod)[test], '__call__'):
+                            # Get test case id and feature tag
+                            # NOTE: if testcase decorator or feature tag are not set it will throw an error
+                            try:
+                                tid = vars(mod)[test].test_case
+                            except:
+                                print 'DEBUG: tc id missing for ' + str(test)
+                                tid = None
+                            try:
+                                ttag = vars(mod)[test].tag__feature
+                            except:
+                                # print 'DEBUG: feature tag missing for ' + str(test)
+                                ttag = None
+
+                            tlist.append(Tc(test, mod.__name__, mod.__module__, tid, ttag))
+        except:
+            pass
+
+        return tlist
+
+    def get_all_tests(self):
+        """ Get all test from test_mod_dir (eg. oeqa.selftest) that extends base_class (eg. oeSelfTest)"""
+
+        tmodules = set()
+        testlist = []
+        prefix = self.test_mod_dir.__name__
+
+        # Get all the test modules (except the hidden ones)
+        for tpath in self.test_mod_dir.__path__:
+            files = sorted([f for f in os.listdir(tpath) if f.endswith('.py') and not
+                            f.startswith(('_', '__')) and f != 'base.py'])
+            for f in files:
+                tmodules.add('.'.join([prefix, os.path.splitext(f)[0]]))
+
+        # Get all the tests from modules
+        tmodules = sorted(list(tmodules))
+
+        for tmod in tmodules:
+            testlist += self.get_tests_from_module(tmod)
+
+        return testlist
+
+    def list_tests(self):
+        """ List all available tests """
+
+        ts = self.get_all_tests()
+
+        print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % ('id', 'tag', 'name', 'class', 'module')
+        print '_' * 150
+        for t in ts:
+            if isinstance(t.tctag, (tuple, list)):
+                print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t.tcid, ', '.join(t.tctag), t.tcname, t.tcclass, t.tcmodule)
+            else:
+                print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t.tcid, t.tctag, t.tcname, t.tcclass, t.tcmodule)
+        print '_' * 150
+        print 'Total found:\t %s' % len(ts)
+
+    def list_tags(self):
+        """
+        Get all tags set to test cases
+        Note: This is useful when setting tags to test cases
+        Note: The list of tags should be kept as minimal as possible
+        """
+
+        tags = set()
+        all_tests = self.get_all_tests()
+
+        for tc in all_tests:
+            if isinstance(tc.tctag, (tuple, list)):
+                tags.update(set(tc.tctag))
+            else:
+                tags.add(tc.tctag)
+
+        print 'Tags:\t%s' % ', '.join(str(x) for x in tags)
+
+    def get_testsuite_by(self, criteria, keyword):
+        """
+        Get a testsuite based on 'keyword'
+        :param criteria: name, class, module, id, tag
+        :param keyword: a list of tests, classes, modules, ids, tags
+        """
+        ts = set()
+        all_tests = self.get_all_tests()
+
+        if criteria == 'name':
+            for tc in all_tests:
+                if tc.tcname in keyword:
+                    ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+
+        elif criteria == 'class':
+            for tc in all_tests:
+                if tc.tcclass in keyword:
+                    ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+
+        elif criteria == 'module':
+            for tc in all_tests:
+                if tc.tcmodule in keyword:
+                    ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+        elif criteria == 'id':
+            for tc in all_tests:
+                if str(tc.tcid) in keyword:
+                    ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+        elif criteria == 'tag':
+            for tc in all_tests:
+                # tc can have multiple tags (as list or tuple) otherwise as str
+                if isinstance(tc.tctag, (list, tuple)):
+                    for tag in tc.tctag:
+                        if str(tag) in keyword:
+                            ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+                elif str(tc.tctag) in keyword:
+                    ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
+
+        return sorted(list(ts))
+
+    # NOTE: I would probably merge create_testsuite_by and get_testsuite_by into one method
+    def create_testsuite_by(self, criteria, keyword):
+        """
+        Create a testsuite based on 'keyword'
+        :param criteria: name, class, module, id, tag
+        :param keyword: a list of tests, classes, modules, ids, tags
+        """
+
+        ts = set()
+        all_tests = self.get_all_tests()
+
+        if criteria == 'name':
+            for tc in all_tests:
+                if tc.tcname in keyword:
+                    ts.add(tc.fullpath)
+
+        elif criteria == 'class':
+            for tc in all_tests:
+                if tc.tcclass in keyword:
+                    ts.add(tc.fullpath)
+
+        elif criteria == 'module':
+            for tc in all_tests:
+                if tc.tcmodule in keyword:
+                    ts.add(tc.fullpath)
+        elif criteria == 'id':
+            for tc in all_tests:
+                if str(tc.tcid) in keyword:
+                    ts.add(tc.fullpath)
+        elif criteria == 'tag':
+            for tc in all_tests:
+                # tc can have multiple tags (as list or tuple) otherwise as str
+                if isinstance(tc.tctag, (list, tuple)):
+                    for tag in tc.tctag:
+                        if str(tag) in keyword:
+                            ts.add(tc.fullpath)
+                elif tc.tctag in keyword:
+                    ts.add(tc.fullpath)
+
+        return sorted(list(ts))
+
+    def list_testsuite_by(self, criteria, keyword):
+        """
+        List a testsuite based on 'keyword'
+        :param criteria: name, class, module, id, tag
+        :param keyword: a list of tests, classes, modules, ids, tags
+        """
+
+        ts = self.get_testsuite_by(criteria, keyword)
+
+        print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % ('id', 'tag', 'name', 'class', 'module')
+        print '_' * 150
+        for t in ts:
+            if isinstance(t[1], (tuple, list)):
+                print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t[0], ', '.join(t[1]), t[2], t[3], t[4])
+            else:
+                print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % t
+        print '_' * 150
+        print 'Filtering by:\t %s' % criteria
+        print 'Looking for:\t %s' % ', '.join(str(x) for x in keyword)
+        print 'Total found:\t %s' % len(ts)
+
diff --git a/scripts/oe-selftest b/scripts/oe-selftest
index 4eb404b..b592511 100755
--- a/scripts/oe-selftest
+++ b/scripts/oe-selftest
@@ -44,30 +44,11 @@ import oeqa.utils.ftools as ftools
 from oeqa.utils.commands import runCmd, get_bb_var, get_test_layer
 from oeqa.selftest.base import oeSelfTest, get_available_machines
 
-def logger_create():
-    log_file = "oe-selftest-" + t.strftime("%Y-%m-%d_%H:%M:%S") + ".log"
-    if os.path.exists("oe-selftest.log"): os.remove("oe-selftest.log")
-    os.symlink(log_file, "oe-selftest.log")
+from oeqa.runner import Runner
 
-    log = logging.getLogger("selftest")
-    log.setLevel(logging.DEBUG)
+test_runner = Runner('selftest', oeSelfTest, oeqa.selftest)
+log = test_runner.log
 
-    fh = logging.FileHandler(filename=log_file, mode='w')
-    fh.setLevel(logging.DEBUG)
-
-    ch = logging.StreamHandler(sys.stdout)
-    ch.setLevel(logging.INFO)
-
-    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-    fh.setFormatter(formatter)
-    ch.setFormatter(formatter)
-
-    log.addHandler(fh)
-    log.addHandler(ch)
-
-    return log
-
-log = logger_create()
 
 def get_args_parser():
     description = "Script that runs unit tests agains bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information."
@@ -91,284 +72,6 @@ def get_args_parser():
     return parser
 
 
-def preflight_check():
-
-    log.info("Checking that everything is in order before running the tests")
-
-    if not os.environ.get("BUILDDIR"):
-        log.error("BUILDDIR isn't set. Did you forget to source your build environment setup script?")
-        return False
-
-    builddir = os.environ.get("BUILDDIR")
-    if os.getcwd() != builddir:
-        log.info("Changing cwd to %s" % builddir)
-        os.chdir(builddir)
-
-    if not "meta-selftest" in get_bb_var("BBLAYERS"):
-        log.error("You don't seem to have the meta-selftest layer in BBLAYERS")
-        return False
-
-    log.info("Running bitbake -p")
-    runCmd("bitbake -p")
-
-    return True
-
-def add_include():
-    builddir = os.environ.get("BUILDDIR")
-    if "#include added by oe-selftest.py" \
-        not in ftools.read_file(os.path.join(builddir, "conf/local.conf")):
-            log.info("Adding: \"include selftest.inc\" in local.conf")
-            ftools.append_file(os.path.join(builddir, "conf/local.conf"), \
-                    "\n#include added by oe-selftest.py\ninclude machine.inc\ninclude selftest.inc")
-
-    if "#include added by oe-selftest.py" \
-        not in ftools.read_file(os.path.join(builddir, "conf/bblayers.conf")):
-            log.info("Adding: \"include bblayers.inc\" in bblayers.conf")
-            ftools.append_file(os.path.join(builddir, "conf/bblayers.conf"), \
-                    "\n#include added by oe-selftest.py\ninclude bblayers.inc")
-
-def remove_include():
-    builddir = os.environ.get("BUILDDIR")
-    if builddir is None:
-        return
-    if "#include added by oe-selftest.py" \
-        in ftools.read_file(os.path.join(builddir, "conf/local.conf")):
-            log.info("Removing the include from local.conf")
-            ftools.remove_from_file(os.path.join(builddir, "conf/local.conf"), \
-                    "\n#include added by oe-selftest.py\ninclude machine.inc\ninclude selftest.inc")
-
-    if "#include added by oe-selftest.py" \
-        in ftools.read_file(os.path.join(builddir, "conf/bblayers.conf")):
-            log.info("Removing the include from bblayers.conf")
-            ftools.remove_from_file(os.path.join(builddir, "conf/bblayers.conf"), \
-                    "\n#include added by oe-selftest.py\ninclude bblayers.inc")
-
-def remove_inc_files():
-    try:
-        os.remove(os.path.join(os.environ.get("BUILDDIR"), "conf/selftest.inc"))
-        for root, _, files in os.walk(get_test_layer()):
-            for f in files:
-                if f == 'test_recipe.inc':
-                    os.remove(os.path.join(root, f))
-    except (AttributeError, OSError,) as e:    # AttributeError may happen if BUILDDIR is not set
-        pass
-
-    for incl_file in ['conf/bblayers.inc', 'conf/machine.inc']:
-        try:
-            os.remove(os.path.join(os.environ.get("BUILDDIR"), incl_file))
-        except:
-            pass
-
-def get_tests(exclusive_modules=[], include_hidden=False):
-    testslist = []
-    for x in exclusive_modules:
-        testslist.append('oeqa.selftest.' + x)
-    if not testslist:
-        for testpath in oeqa.selftest.__path__:
-            files = sorted([f for f in os.listdir(testpath) if f.endswith('.py') and not (f.startswith('_') and not include_hidden) and not f.startswith('__') and f != 'base.py'])
-            for f in files:
-                module = 'oeqa.selftest.' + f[:-3]
-                if module not in testslist:
-                    testslist.append(module)
-
-    return testslist
-
-
-class Tc:
-    def __init__(self, tcname, tcclass, tcmodule, tcid=None, tctag=None):
-        self.tcname = tcname
-        self.tcclass = tcclass
-        self.tcmodule = tcmodule
-        self.tcid = tcid
-        # A test case can have multiple tags (as list or as tuples) otherwise str suffice
-        self.tctag = tctag
-        self.fullpath = '.'.join(['oeqa', 'selftest', tcmodule, tcclass, tcname])
-
-
-def get_tests_from_module(tmod):
-    tlist = []
-    prefix = 'oeqa.selftest.'
-
-    try:
-        import importlib
-        modlib = importlib.import_module(tmod)
-        for mod in vars(modlib).values():
-            if isinstance(mod, type(oeSelfTest)) and issubclass(mod, oeSelfTest) and mod is not oeSelfTest:
-                for test in dir(mod):
-                    if test.startswith('test_') and hasattr(vars(mod)[test], '__call__'):
-                        # Get test case id and feature tag
-                        # NOTE: if testcase decorator or feature tag not set will throw error
-                        try:
-                            tid = vars(mod)[test].test_case
-                        except:
-                            print 'DEBUG: tc id missing for ' + str(test)
-                            tid = None
-                        try:
-                            ttag = vars(mod)[test].tag__feature
-                        except:
-                            # print 'DEBUG: feature tag missing for ' + str(test)
-                            ttag = None
-
-                        # NOTE: for some reason lstrip() doesn't work for mod.__module__
-                        tlist.append(Tc(test, mod.__name__, mod.__module__.replace(prefix, ''), tid, ttag))
-    except:
-        pass
-
-    return tlist
-
-
-def get_all_tests():
-    tmodules = set()
-    testlist = []
-    prefix = 'oeqa.selftest.'
-
-    # Get all the test modules (except the hidden ones)
-    for tpath in oeqa.selftest.__path__:
-        files = sorted([f for f in os.listdir(tpath) if f.endswith('.py') and not
-                        f.startswith(('_', '__')) and f != 'base.py'])
-        for f in files:
-            tmodules.add(prefix + f.rstrip('.py'))
-
-    # Get all the tests from modules
-    tmodules = sorted(list(tmodules))
-
-    for tmod in tmodules:
-        testlist += get_tests_from_module(tmod)
-
-    return testlist
-
-
-def create_testsuite_by(criteria, keyword):
-    # Create a testsuite based on 'keyword'
-    # criteria: name, class, module, id, tag
-    # keyword: a list of tests, classes, modules, ids, tags
-    # NOTE: globing would be nice?
-
-    ts = set()
-    all_tests = get_all_tests()
-
-    if criteria == 'name':
-        for tc in all_tests:
-            if tc.tcname in keyword:
-                ts.add(tc.fullpath)
-
-    elif criteria == 'class':
-        for tc in all_tests:
-            if tc.tcclass in keyword:
-                ts.add(tc.fullpath)
-
-    elif criteria == 'module':
-        for tc in all_tests:
-            if tc.tcmodule in keyword:
-                ts.add(tc.fullpath)
-    elif criteria == 'id':
-        for tc in all_tests:
-            if str(tc.tcid) in keyword:
-                ts.add(tc.fullpath)
-    elif criteria == 'tag':
-        for tc in all_tests:
-            # tc can have multiple tags (as list or tuple) otherwise as str
-            if isinstance(tc.tctag, (list, tuple)):
-                for tag in tc.tctag:
-                    if str(tag) in keyword:
-                        ts.add(tc.fullpath)
-            elif tc.tctag in keyword:
-                ts.add(tc.fullpath)
-
-    return sorted(list(ts))
-
-
-def get_testsuite_by(criteria, keyword):
-    # Get a testsuite based on 'keyword'
-    # criteria: name, class, module, id, tag
-    # keyword: a list of tests, classes, modules, ids, tags
-    # NOTE: globing would be nice?
-    ts = set()
-    all_tests = get_all_tests()
-
-    if criteria == 'name':
-        for tc in all_tests:
-            if tc.tcname in keyword:
-                ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-
-    elif criteria == 'class':
-        for tc in all_tests:
-            if tc.tcclass in keyword:
-                ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-
-    elif criteria == 'module':
-        for tc in all_tests:
-            if tc.tcmodule in keyword:
-                ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-    elif criteria == 'id':
-        for tc in all_tests:
-            if str(tc.tcid) in keyword:
-                ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-    elif criteria == 'tag':
-        for tc in all_tests:
-            # tc can have multiple tags (as list or tuple) otherwise as str
-            if isinstance(tc.tctag, (list, tuple)):
-                for tag in tc.tctag:
-                    if str(tag) in keyword:
-                        ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-            elif str(tc.tctag) in keyword:
-                ts.add((tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule))
-
-    return sorted(list(ts))
-
-
-def list_testsuite_by(criteria, keyword):
-    # Get a testsuite based on 'keyword'
-    # criteria: name, class, module, id, tag
-    # keyword: a list of tests, classes, modules, ids, tags
-    # NOTE: globing would be nice?
-
-    ts = get_testsuite_by(criteria, keyword)
-
-    print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % ('id', 'tag', 'name', 'class', 'module')
-    print '_' * 150
-    for t in ts:
-        if isinstance(t[1], (tuple, list)):
-            print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t[0], ', '.join(t[1]), t[2], t[3], t[4])
-        else:
-            print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % t
-    print '_' * 150
-    print 'Filtering by:\t %s' % criteria
-    print 'Looking for:\t %s' % ', '.join(str(x) for x in keyword)
-    print 'Total found:\t %s' % len(ts)
-
-
-def list_tests():
-    # List all available oe-selftest tests
-
-    ts = get_all_tests()
-
-    print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % ('id', 'tag', 'name', 'class', 'module')
-    print '_' * 150
-    for t in ts:
-        if isinstance(t.tctag, (tuple, list)):
-            print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t.tcid, ', '.join(t.tctag), t.tcname, t.tcclass, t.tcmodule)
-        else:
-            print '%-4s\t%-20s\t%-60s\t%-25s\t%-20s' % (t.tcid, t.tctag, t.tcname, t.tcclass, t.tcmodule)
-    print '_' * 150
-    print 'Total found:\t %s' % len(ts)
-
-
-def list_tags():
-    # Get all tags set to test cases
-    # This is useful when setting tags to test cases
-    # The list of tags should be kept as minimal as possible
-    tags = set()
-    all_tests = get_all_tests()
-
-    for tc in all_tests:
-        if isinstance(tc.tctag, (tuple, list)):
-            tags.update(set(tc.tctag))
-        else:
-            tags.add(tc.tctag)
-
-    print 'Tags:\t%s' % ', '.join(str(x) for x in tags)
-
 def coverage_setup(run_tests, run_all_tests):
     """ Set up the coverage measurement for the testcases to be run """
     builddir = os.environ.get("BUILDDIR")
@@ -438,7 +141,7 @@ def main():
         else:
             criteria = args.run_tests_by[0]
             keyword = args.run_tests_by[1:]
-            ts = create_testsuite_by(criteria, keyword)
+            ts = test_runner.create_testsuite_by(criteria, keyword)
 
     if args.list_tests_by and len(args.list_tests_by) >= 2:
         valid_options = ['name', 'class', 'module', 'id', 'tag']
@@ -448,20 +151,20 @@ def main():
         else:
             criteria = args.list_tests_by[0]
             keyword = args.list_tests_by[1:]
-            list_testsuite_by(criteria, keyword)
+            test_runner.list_testsuite_by(criteria, keyword)
 
     if args.list_tests:
-        list_tests()
+        test_runner.list_tests()
 
     if args.list_tags:
-        list_tags()
+        test_runner.list_tags()
 
     if args.list_allclasses:
         args.list_modules = True
 
     if args.list_modules:
         log.info('Listing all available test modules:')
-        testslist = get_tests(include_hidden=True)
+        testslist = test_runner.get_tests(include_hidden=True)
         for test in testslist:
             module = test.split('.')[-1]
             info = ''
@@ -485,13 +188,13 @@ def main():
                     pass
 
     if args.run_tests or args.run_all_tests or args.run_tests_by:
-        if not preflight_check():
+        if not test_runner.preflight_check():
             return 1
 
         if args.run_tests_by:
             testslist = ts
         else:
-            testslist = get_tests(exclusive_modules=(args.run_tests or []), include_hidden=False)
+            testslist = test_runner.get_tests(exclusive_modules=(args.run_tests or []), include_hidden=False)
 
         suite = unittest.TestSuite()
         loader = unittest.TestLoader()
@@ -508,7 +211,8 @@ def main():
                 log.error("Failed to import %s" % test)
                 log.error(e)
                 return 1
-        add_include()
+        test_runner.add_include(['machine.inc', 'selftest.inc'], 'local.conf')
+        test_runner.add_include('bblayers.inc', 'bblayers.conf')
 
         if args.machine:
             # Custom machine sets only weak default values (??=) for MACHINE in machine.inc
@@ -595,6 +299,7 @@ if __name__ == "__main__":
         import traceback
         traceback.print_exc(5)
     finally:
-        remove_include()
-        remove_inc_files()
+        test_runner.remove_include(['machine.inc', 'selftest.inc'], 'local.conf')
+        test_runner.remove_include('bblayers.inc', 'bblayers.conf')
+        test_runner.remove_inc_files(['selftest.inc', 'machine.inc', 'bblayers.inc'])
     sys.exit(ret)
-- 
2.1.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-02-26 14:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-26 14:40 [PATCH 1/9] selftest: Moved method from oe-selftest to oeqa/runner.py Daniel Istrate
2016-02-26 14:40 ` [PATCH 2/9] selftest: Moved coverage functionality " Daniel Istrate
2016-02-26 14:40 ` [PATCH 3/9] selftest: Moved list_classes, list_modules, run methods to runner.py Daniel Istrate
2016-02-26 14:40 ` [PATCH 4/9] oeqa/utils/commands: Added 3 new methods for recipes Daniel Istrate
2016-02-26 14:40 ` [PATCH 5/9] scripts: test-recipe Tool for running tests on recipes Daniel Istrate
2016-02-26 14:40 ` [PATCH 6/9] recipetests: base - Base Class for Test Recipes Daniel Istrate
2016-02-26 14:40 ` [PATCH 7/9] recipetests: buildrecipe: Test suite for recipe tests Daniel Istrate
2016-02-26 14:40 ` [PATCH 8/9] oeqa/utils/commands: Added method - get_all_bbappends Daniel Istrate
2016-02-26 14:40 ` [PATCH 9/9] recipetests: buildrecipe: Test combinations of bbappend Daniel Istrate

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.