From c0cefecd23f678184707b04fee9975d8b3a142e8 Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Fri, 16 Jan 2015 21:29:55 +0100 Subject: [PATCH] validate: launcher: Add option to run tests in parallel Patch 4/4 to implement parallel test execution. https://bugzilla.gnome.org/show_bug.cgi?id=743063 --- validate/launcher/baseclasses.py | 14 +++++++++++++- validate/launcher/main.py | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/validate/launcher/baseclasses.py b/validate/launcher/baseclasses.py index 49e8a2e446..7fc7ac37bd 100644 --- a/validate/launcher/baseclasses.py +++ b/validate/launcher/baseclasses.py @@ -197,6 +197,11 @@ class Test(Loggable): """ Returns True when process has finished running or has timed out. """ + + if self.process is None: + # Process has not started running yet + return False + self.process.poll() if self.process.returncode is not None: return True @@ -819,19 +824,26 @@ class TestsManager(Loggable): self.total_num_tests = total_num_tests self.starting_test_num = starting_test_num + num_jobs = min(self.options.num_jobs, len(self.tests)) tests_left = list(self.tests) + jobs_running = 0 - while True: + for i in range(num_jobs): if not self.start_new_job(tests_left): break + jobs_running += 1 + while jobs_running != 0: test = self.tests_wait() + jobs_running -= 1 self.print_test_num(test) res = test.test_end() self.reporter.after_test(test) if res != Result.PASSED and (self.options.forever or self.options.fatal_error): return test.result + if self.start_new_job(tests_left): + jobs_running += 1 return Result.PASSED diff --git a/validate/launcher/main.py b/validate/launcher/main.py index c35e061104..3217d5cbe8 100644 --- a/validate/launcher/main.py +++ b/validate/launcher/main.py @@ -209,6 +209,7 @@ class LauncherConfig(Loggable): self.output_dir = None self.logsdir = None self.redirect_logs = False + self.num_jobs = 1 self.dest = None self._using_default_paths = False self.paths = [] @@ -421,6 +422,9 @@ Note that all testsuite should be inside python modules, so the directory should " default is MAIN_DIR/gst-integration-testsuites") dir_group.add_argument("-rl", "--redirect-logs", dest="redirect_logs", help="Redirect logs to 'stdout' or 'sdterr'.") + dir_group.add_argument("-j", "--jobs", dest="num_jobs", + help="Number of tests to execute simultaneously", + type=int) http_server_group = parser.add_argument_group( "Handle the HTTP server to be created")