From 6504b9152cfd2d78ee3d773a0a32eec1900f955c Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Thu, 22 Dec 2016 10:08:21 -0300 Subject: [PATCH] validate:launcher: Allow specifying several testsuite dirs --- validate/launcher/baseclasses.py | 32 +++++++++++++++++++++++--------- validate/launcher/main.py | 16 +++++++++------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/validate/launcher/baseclasses.py b/validate/launcher/baseclasses.py index 2b2ee6905d..670557f731 100644 --- a/validate/launcher/baseclasses.py +++ b/validate/launcher/baseclasses.py @@ -1348,22 +1348,36 @@ class _TestsLauncher(Loggable): for tester in self.testers: tester.add_options(parser) - def _load_testsuites(self): - testsuites = [] - for testsuite in self.options.testsuites: - if not os.path.isabs(testsuite): - testsuite = os.path.join(self.options.testsuites_dir, testsuite + ".py") - + def _load_testsuite(self, testsuites): + exceptions = [] + for testsuite in testsuites: try: sys.path.insert(0, os.path.dirname(testsuite)) - module = __import__(os.path.basename(testsuite).replace(".py", "")) + return (__import__(os.path.basename(testsuite).replace(".py", "")), None) except Exception as e: - printc("Could not load testsuite: %s, reason: %s" - % (testsuite, e), Colors.FAIL) + exceptions.append("Could not load %s: %s" % (testsuite, e)) continue finally: sys.path.remove(os.path.dirname(testsuite)) + return (None, exceptions) + + def _load_testsuites(self): + testsuites = [] + for testsuite in self.options.testsuites: + if os.path.isabs(testsuite): + loaded_module = self._load_testsuite([testsuite]) + else: + possible_testsuites_paths = [os.path.join(d, testsuite + ".py") + for d in self.options.testsuites_dirs] + loaded_module = self._load_testsuite(possible_testsuites_paths) + + module = loaded_module[0] + if not loaded_module[0]: + printc("Could not load testsuite: %s, reasons: %s" % ( + testsuite, loaded_module[1]), Colors.FAIL) + continue + testsuites.append(module) if not hasattr(module, "TEST_MANAGER"): module.TEST_MANAGER = [tester.name for tester in self.testers] diff --git a/validate/launcher/main.py b/validate/launcher/main.py index e3eda9270b..a5ae42e4e6 100644 --- a/validate/launcher/main.py +++ b/validate/launcher/main.py @@ -140,7 +140,7 @@ QA_ASSETS = "gst-integration-testsuites" MEDIAS_FOLDER = "medias" DEFAULT_GST_QA_ASSETS_REPO = "git://anongit.freedesktop.org/gstreamer/gst-integration-testsuites" OLD_DEFAULT_GST_QA_ASSETS_REPO = "https://gitlab.com/thiblahute/gst-integration-testsuites.git" -DEFAULT_TESTSUITES_DIR = os.path.join(DEFAULT_MAIN_DIR, QA_ASSETS, "testsuites") +DEFAULT_TESTSUITES_DIRS = [os.path.join(DEFAULT_MAIN_DIR, QA_ASSETS, "testsuites")] def download_assets(options): @@ -206,7 +206,7 @@ class LauncherConfig(Loggable): # paths passed with --media-path, and not defined by a testsuite self.user_paths = [] self.paths = [] - self.testsuites_dir = DEFAULT_TESTSUITES_DIR + self.testsuites_dirs = DEFAULT_TESTSUITES_DIRS self.clone_dir = None @@ -296,9 +296,9 @@ class LauncherConfig(Loggable): if (self.main_dir != DEFAULT_MAIN_DIR or self.clone_dir != QA_ASSETS) and \ - self.testsuites_dir == DEFAULT_TESTSUITES_DIR: - self.testsuites_dir = os.path.join(self.main_dir, self.clone_dir, - "testsuites") + self.testsuites_dirs in DEFAULT_TESTSUITES_DIRS: + self.testsuites_dirs.insert(0, os.path.join(self.main_dir, self.clone_dir, + "testsuites")) if self.valgrind: try: subprocess.check_output("valgrind --help", shell=True) @@ -338,6 +338,8 @@ def main(libsdir): else: _help_message = "Use --help for the full help" + DEFAULT_TESTSUITES_DIRS.append(os.path.join(libsdir, "testsuites")) + parser = argparse.ArgumentParser( formatter_class=argparse.RawTextHelpFormatter, prog='gst-validate-launcher', description=_help_message) @@ -458,9 +460,9 @@ Note that all testsuite should be inside python modules, so the directory should help=("Path to xml file to store the xunit report in.")) dir_group.add_argument("-M", "--main-dir", dest="main_dir", help="Main directory where to put files. Default is %s" % DEFAULT_MAIN_DIR) - dir_group.add_argument("--testsuites-dir", dest="testsuites_dir", + dir_group.add_argument("--testsuites-dir", dest="testsuites_dirs", action='append', help="Directory where to look for testsuites. Default is %s" - % DEFAULT_TESTSUITES_DIR) + % DEFAULT_TESTSUITES_DIRS) dir_group.add_argument("-o", "--output-dir", dest="output_dir", help="Directory where to store logs and rendered files. Default is MAIN_DIR") dir_group.add_argument("-l", "--logs-dir", dest="logsdir",