Index: build/android/pylib/gtest/dispatch.py |
diff --git a/build/android/pylib/gtest/dispatch.py b/build/android/pylib/gtest/dispatch.py |
index 3c11c00f3b3d358cd7c9bef326708e7989ca733a..cf30ffa69d13f3e74352d9aaccf1d6580eaf19cf 100644 |
--- a/build/android/pylib/gtest/dispatch.py |
+++ b/build/android/pylib/gtest/dispatch.py |
@@ -13,6 +13,7 @@ from pylib import android_commands |
from pylib import cmd_helper |
from pylib import constants |
from pylib import ports |
+from pylib.base import base_test_result |
from pylib.base import shard |
from pylib.utils import emulator |
from pylib.utils import report_results |
@@ -35,6 +36,9 @@ def _FullyQualifiedTestSuites(exe, option_test_suite, build_type): |
Ex. ('content_unittests', |
'/tmp/chrome/src/out/Debug/content_unittests_apk/' |
'content_unittests-debug.apk') |
+ |
+ Raises: |
+ Exception: If test suite not found. |
""" |
def GetQualifiedSuite(suite): |
if suite.is_suite_exe: |
@@ -93,7 +97,8 @@ def GetAllEnabledTests(runner_factory, devices): |
Returns: |
List of all enabled tests. |
- Raises Exception if all devices failed. |
+ Raises: |
+ Exception: If no devices available. |
""" |
for device in devices: |
try: |
@@ -118,9 +123,12 @@ def _RunATestSuite(options, suite_name): |
suite_name: name of the test suite being run. |
Returns: |
- 0 if successful, number of failing tests otherwise. |
+ A tuple of (base_test_result.TestRunResult object, exit code). |
+ |
+ Raises: |
+ Exception: For various reasons including device failure or failing to reset |
+ the test server port. |
""" |
- step_name = os.path.basename(options.test_suite).replace('-debug.apk', '') |
attached_devices = [] |
buildbot_emulators = [] |
@@ -168,9 +176,9 @@ def _RunATestSuite(options, suite_name): |
tests = [t for t in tests if t] |
# Run tests. |
- test_results = shard.ShardAndRunTests(RunnerFactory, attached_devices, tests, |
- options.build_type, test_timeout=None, |
- num_retries=options.num_retries) |
+ test_results, exit_code = shard.ShardAndRunTests( |
+ RunnerFactory, attached_devices, tests, options.build_type, |
+ test_timeout=None, num_retries=options.num_retries) |
report_results.LogFull( |
results=test_results, |
@@ -178,12 +186,11 @@ def _RunATestSuite(options, suite_name): |
test_package=suite_name, |
build_type=options.build_type, |
flakiness_server=options.flakiness_dashboard_server) |
- report_results.PrintAnnotation(test_results) |
for buildbot_emulator in buildbot_emulators: |
buildbot_emulator.Shutdown() |
- return len(test_results.GetNotPass()) |
+ return (test_results, exit_code) |
def _ListTestSuites(): |
@@ -203,7 +210,7 @@ def Dispatch(options): |
options: options for running the tests. |
Returns: |
- 0 if successful, number of failing tests otherwise. |
+ base_test_result.TestRunResults object with the results of running the tests |
""" |
if options.test_suite == 'help': |
_ListTestSuites() |
@@ -215,13 +222,18 @@ def Dispatch(options): |
all_test_suites = _FullyQualifiedTestSuites(options.exe, options.test_suite, |
options.build_type) |
- failures = 0 |
+ results = base_test_result.TestRunResults() |
+ exit_code = 0 |
for suite_name, suite_path in all_test_suites: |
# Give each test suite its own copy of options. |
test_options = copy.deepcopy(options) |
test_options.test_suite = suite_path |
- failures += _RunATestSuite(test_options, suite_name) |
+ test_results, test_exit_code = _RunATestSuite(test_options, suite_name) |
+ results.AddTestRunResults(test_results) |
+ if test_exit_code and exit_code != constants.ERROR_EXIT_CODE: |
+ exit_code = test_exit_code |
if options.use_xvfb: |
framebuffer.Stop() |
- return failures |
+ |
+ return (results, exit_code) |