From: Christian Babeux Date: Tue, 18 Dec 2012 21:31:17 +0000 (-0500) Subject: run-report: Allow tests to spawn and control their own sessiond X-Git-Tag: v2.1.0~19 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=8c8d73abe2470dddc66ebb1549f20b1e31a38813;p=lttng-tools.git run-report: Allow tests to spawn and control their own sessiond The run-report script can spawn a sessiond if the 'daemon' key value is set to 'True' in the test description dictionary. If the 'daemon' key is set to 'False', the TEST_NO_SESSIOND environment variable is set so no sessiond can be spawned in the tests. This variable is also set when the run-report spawn its own sessiond. This behavior has the unfortunate side-effect of restricting any kind of spawning and control of the sessiond via the tests. Fix this issue by allowing the tests to spawn their own sessiond. We need to pass an additional env dictionary to the TestWorker in order to spawn the test with the proper environment variables set. To indicate that a test will spawn and manage its own sessiond, the 'daemon' key value should be set to the "test" string. Signed-off-by: Christian Babeux Signed-off-by: David Goulet --- diff --git a/tests/run-report.py b/tests/run-report.py index 5e8a0cfab..acee18181 100755 --- a/tests/run-report.py +++ b/tests/run-report.py @@ -173,18 +173,16 @@ class SamplingWorker(threading.Thread): mem_ret_q.put((count, mem_stat)) class TestWorker(threading.Thread): - def __init__(self, path, name): + def __init__(self, path, name, env): threading.Thread.__init__(self) self.path = path self.name = name + self.env = env def run(self): bin_path_name = os.path.join(self.path, self.name) - env = os.environ - env['TEST_NO_SESSIOND'] = '1' - - test = subprocess.Popen([bin_path_name], env=env, preexec_fn = lambda: signal(SIGPIPE, SIG_DFL)) + test = subprocess.Popen([bin_path_name], env=self.env, preexec_fn = lambda: signal(SIGPIPE, SIG_DFL)) test.wait() # Send ret value to main thread @@ -303,10 +301,23 @@ def run_test(test): print "Unable to find test file '%s'. Skipping" % (test['bin']) return 0 - # No session daemon needed - if not test['daemon']: + # Session daemon is controlled by the test + if test['daemon'] == "test": + print PRINT_ARROW + " Session daemon is controlled by the test" + env = os.environ + env['TEST_NO_SESSIOND'] = '0' + tw = TestWorker(".", test['bin'], env) + tw.start() + ret = test_ret_q.get(True) + print_test_success(ret, test['success']) + return 0 + elif test['daemon'] == False: print PRINT_ARROW + " No session daemon needed" - ret = start_test(test['bin']) + env = os.environ + env['TEST_NO_SESSIOND'] = '1' + tw = TestWorker(".", test['bin'], env) + tw.start() + ret = test_ret_q.get(True) print_test_success(ret, test['success']) return 0 else: @@ -327,7 +338,12 @@ def run_test(test): cpu_count, cpu_stats = get_cpu_usage(pid = dem_pid) print_cpu_stats(cpu_stats, cpu_count) - tw = TestWorker(".", test['bin']) + # Sessiond was already spawned, do not let the test spawn + # an additional sessiond + env = os.environ + env['TEST_NO_SESSIOND'] = '1' + + tw = TestWorker(".", test['bin'], env) tw.start() if not no_stats: