From bcd93dc46a3e01d43768561fda7fa3744e57b146 Mon Sep 17 00:00:00 2001 From: Nicolas Catania Date: Thu, 14 May 2009 12:25:23 -0700 Subject: [PATCH] Made valgrind optional. Capture the target output. Don't fail if valgrind (system version not the google3 one) is missing. If the test fail, print the output of the test. Added .pyc to the gitignore file. --- testrunner/.gitignore | 1 + testrunner/run_command.py | 13 +++++++++++++ testrunner/runtest.py | 19 ++++++++++++++----- 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 testrunner/.gitignore diff --git a/testrunner/.gitignore b/testrunner/.gitignore new file mode 100644 index 000000000..0d20b6487 --- /dev/null +++ b/testrunner/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/testrunner/run_command.py b/testrunner/run_command.py index a98a943a2..ead80f1bd 100755 --- a/testrunner/run_command.py +++ b/testrunner/run_command.py @@ -145,7 +145,20 @@ def RunHostCommand(binary, valgrind=False): print subproc.communicate()[0] return subproc.returncode else: + # Need the full path to valgrind to avoid other versions on the system. subproc = subprocess.Popen(["/usr/bin/valgrind", "-q", full_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) subproc.wait() return subproc.returncode + + +def HasValgrind(): + """Check that /usr/bin/valgrind exists. + + We look for the fullpath to avoid picking up 'alternative' valgrind + on the system. + + Returns: + True if a system valgrind was found. + """ + return os.path.exists("/usr/bin/valgrind") diff --git a/testrunner/runtest.py b/testrunner/runtest.py index a87f9b5b6..05d29ec34 100755 --- a/testrunner/runtest.py +++ b/testrunner/runtest.py @@ -369,10 +369,13 @@ class TestRunner(object): if run_command.RunHostCommand(f) != 0: logger.Log("%s... failed" % f) else: - if run_command.RunHostCommand(f, valgrind=True) == 0: - logger.Log("%s... ok\t\t[valgrind: ok]" % f) + if run_command.HasValgrind(): + if run_command.RunHostCommand(f, valgrind=True) == 0: + logger.Log("%s... ok\t\t[valgrind: ok]" % f) + else: + logger.Log("%s... ok\t\t[valgrind: failed]" % f) else: - logger.Log("%s... ok\t\t[valgrind: failed]" % f) + logger.Log("%s... ok\t\t[valgrind: missing]" % f) # Run on the device logger.Log("\nRunning on target") @@ -380,9 +383,15 @@ class TestRunner(object): full_path = os.path.join(os.sep, "system", "bin", f) # Single quotes are needed to prevent the shell splitting it. - status = self._adb.SendShellCommand("'%s >/dev/null 2>&1;echo -n $?'" % + output = self._adb.SendShellCommand("'%s 2>&1;echo -n exit code:$?'" % full_path) - logger.Log("%s... %s" % (f, status == "0" and "ok" or "failed")) + success = output.endswith("exit code:0") + logger.Log("%s... %s" % (f, success and "ok" or "failed")) + # Print the captured output when the test failed. + if not success or self._options.verbose: + pos = output.rfind("exit code") + output = output[0:pos] + logger.Log(output) # Cleanup self._adb.SendShellCommand("rm %s" % full_path)