Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: mojo/tools/apptest_runner.py

Issue 741323002: Handle and surface application test failures. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Address comments. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/tools/mopy/gtest_list_tests.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/tools/apptest_runner.py
diff --git a/mojo/tools/apptest_runner.py b/mojo/tools/apptest_runner.py
index a0b524570a84c16b2fa714aa692160cc112a991e..428d1e5308fb85b0ac474824c399f1cd0fddf09b 100755
--- a/mojo/tools/apptest_runner.py
+++ b/mojo/tools/apptest_runner.py
@@ -15,6 +15,55 @@ _logging = logging.getLogger()
from mopy.gtest_list_tests import gtest_list_tests
+
+def print_output(command_line, output):
+ print command_line
+ print 72 * '-'
+ print output
+ print 72 * '-'
+
+
+def try_command_line(command_line):
+ """Returns the output of a command line or an empty string on error."""
+ _logging.debug("Running command line: %s" % command_line)
+ try:
+ output = subprocess.check_output(command_line, stderr=subprocess.STDOUT)
+ return output
+ except subprocess.CalledProcessError as e:
+ print "Failed with exit code %d, command line, and output:" % e.returncode
+ print_output(command_line, e.output)
+ except Exception as e:
+ print "Failed with command line and exception:"
+ print_output(command_line, e)
+ return None
+
+
+def get_fixtures(command_line):
+ """Returns the "Test.Fixture" list from a --gtest_list_tests commandline."""
+ list_output = try_command_line(command_line)
+ _logging.debug("Tests listed:\n%s" % list_output)
+ try:
+ return gtest_list_tests(list_output)
+ except Exception as e:
+ print "Failed to get test fixtures with command line and exception:"
+ print_output(command_line, e)
+ return []
+
+
+def run_test(command_line):
+ """Runs a command line and checks the output for signs of gtest failure."""
+ output = try_command_line(command_line)
+ # Fail on output with gtest's "[ FAILED ]" or a lack of "[ PASSED ]".
+ # The latter condition ensures failure on broken command lines or output.
+ # Check output instead of exit codes because mojo_shell always exits with 0.
+ if output.find("[ FAILED ]") != -1 or output.find("[ PASSED ]") == -1:
+ print "Failed test with command line and output:"
+ print_output(command_line, output)
+ return False
+ _logging.debug("Succeeded with output:\n%s" % output)
+ return True
+
+
def main(argv):
logging.basicConfig()
# Uncomment to debug:
@@ -40,54 +89,37 @@ def main(argv):
if platform.system() == 'Windows':
mojo_shell += ".exe"
+ exit_code = 0
for apptest in apptest_list:
print "Running " + apptest + "...",
sys.stdout.flush()
# List the apptest fixtures so they can be run independently for isolation.
# TODO(msw): Run some apptests without fixture isolation?
- list_command_line = [mojo_shell, apptest + " --gtest_list_tests"]
- _logging.debug("Listing tests: %s" % list_command_line)
- try:
- # TODO(msw): Need to fail on errors! mojo_shell always exits with 0!
- list_output = subprocess.check_output(list_command_line)
- _logging.debug("Tests listed:\n%s" % list_output)
- except subprocess.CalledProcessError as e:
- print "Failed with exit code %d and output:" % e.returncode
- print 72 * '-'
- print e.output
- print 72 * '-'
- return 1
- except OSError as e:
- print " Failed to start test"
- return 1
-
- test_list = gtest_list_tests(list_output)
- for test in test_list:
- # TODO(msw): enable passing arguments to tests down from the test harness.
- command_line = [
- mojo_shell,
+ command = [mojo_shell,
+ "--args-for={0} --gtest_list_tests".format(apptest),
+ apptest]
+ fixtures = get_fixtures(command)
+
+ if not fixtures:
+ print "Failed with no tests found."
+ exit_code = 1
+ continue
+
+ apptest_result = "Succeeded"
+ for fixture in fixtures:
+ # ExampleApplicationTest.CheckCommandLineArg checks --example_apptest_arg.
+ # TODO(msw): Enable passing arguments to tests down from the test harness.
+ command = [mojo_shell,
"--args-for={0} --example_apptest_arg --gtest_filter={1}".format(
- apptest, test),
+ apptest, fixture),
apptest]
+ if not run_test(command):
+ apptest_result = "Failed test(s) in " + apptest
+ exit_code = 1
+ print apptest_result
- _logging.debug("Running %s..." % command_line)
- try:
- # TODO(msw): Need to fail on errors! mojo_shell always exits with 0!
- subprocess.check_output(command_line, stderr=subprocess.STDOUT)
- _logging.debug("Succeeded")
- except subprocess.CalledProcessError as e:
- print "Failed with exit code %d and output:" % e.returncode
- print 72 * '-'
- print e.output
- print 72 * '-'
- return 1
- except OSError as e:
- print " Failed to start test"
- return 1
- print "Succeeded"
-
- return 0
+ return exit_code
if __name__ == '__main__':
sys.exit(main(sys.argv))
« no previous file with comments | « no previous file | mojo/tools/mopy/gtest_list_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698