Index: build/android/run_tests.py |
diff --git a/build/android/run_tests.py b/build/android/run_tests.py |
index 6e3eccbc9990e775f41eb5b4fd52e4753161403f..d864a2ecc7ecfe686c472fbe5e3ee86a0a8598f6 100755 |
--- a/build/android/run_tests.py |
+++ b/build/android/run_tests.py |
@@ -132,7 +132,7 @@ class Xvfb(object): |
def RunTests(device, test_suite, gtest_filter, test_arguments, rebaseline, |
timeout, performance_test, cleanup_test_files, tool, |
- log_dump_name): |
+ log_dump_name, fast_and_loose=False): |
"""Runs the tests. |
Args: |
@@ -146,6 +146,8 @@ def RunTests(device, test_suite, gtest_filter, test_arguments, rebaseline, |
cleanup_test_files: Whether or not to cleanup test files on device. |
tool: Name of the Valgrind tool. |
log_dump_name: Name of log dump file. |
+ fast_and_loose: should we go extra-fast but sacrifice stability |
+ and/or correctness? Intended for quick cycle testing; not for bots! |
Returns: |
A TestResults object. |
@@ -172,7 +174,8 @@ def RunTests(device, test_suite, gtest_filter, test_arguments, rebaseline, |
for t in _TEST_SUITES: |
test = SingleTestRunner(device, t, gtest_filter, test_arguments, |
timeout, rebaseline, performance_test, |
- cleanup_test_files, tool, not not log_dump_name) |
+ cleanup_test_files, tool, not not log_dump_name, |
+ fast_and_loose=fast_and_loose) |
test.RunTests() |
results += [test.test_results] |
# Collect debug info. |
@@ -190,6 +193,7 @@ def RunTests(device, test_suite, gtest_filter, test_arguments, rebaseline, |
log_dump_name, [d for d in debug_info_list if d]) |
return TestResults.FromTestResults(results) |
+ |
def Dispatch(options): |
"""Dispatches the tests, sharding if possible. |
@@ -214,7 +218,7 @@ def Dispatch(options): |
if options.use_emulator: |
t = TimeProfile('Emulator launch') |
- buildbot_emulator = emulator.Emulator() |
+ buildbot_emulator = emulator.Emulator(options.fast_and_loose) |
buildbot_emulator.Launch() |
t.Stop() |
attached_devices.append(buildbot_emulator.device) |
@@ -230,13 +234,25 @@ def Dispatch(options): |
options.rebaseline, options.timeout, |
options.performance_test, |
options.cleanup_test_files, options.tool, |
- options.log_dump) |
+ options.log_dump, |
+ fast_and_loose=options.fast_and_loose) |
if buildbot_emulator: |
buildbot_emulator.Shutdown() |
if options.use_xvfb: |
xvfb.Stop() |
- return len(test_results.failed) |
+ # Another chance if we timed out? At this point It is safe(r) to |
+ # run fast and loose since we just uploaded all the test data and |
+ # binary. |
+ if test_results.timed_out and options.repeat: |
+ logging.critical('Timed out; repeating in fast_and_loose mode.') |
+ options.fast_and_loose = True |
+ options.repeat = options.repeat - 1 |
+ logging.critical('Repeats left: ' + str(options.repeat)) |
+ return Dispatch(options) |
+ else: |
+ return len(test_results.failed) |
+ |
def ListTestSuites(): |
"""Display a list of available test suites |
@@ -256,7 +272,7 @@ def main(argv): |
help='Rebaseline and update *testsuite_disabled', |
action='store_true', |
default=False) |
- option_parser.add_option('-f', dest='gtest_filter', |
+ option_parser.add_option('-f', '--gtest_filter', dest='gtest_filter', |
help='gtest filter') |
option_parser.add_option('-a', '--test_arguments', dest='test_arguments', |
help='Additional arguments to pass to the test') |
@@ -275,6 +291,17 @@ def main(argv): |
option_parser.add_option('-x', '--xvfb', dest='use_xvfb', |
action='store_true', default=False, |
help='Use Xvfb around tests (ignored if not Linux)') |
+ option_parser.add_option('--fast', '--fast_and_loose', dest='fast_and_loose', |
+ action='store_true', default=False, |
+ help='Go faster (but be less stable), ' |
+ 'for quick testing. Example: when tracking down ' |
+ 'tests that hang to add to the disabled list, ' |
+ 'there is no need to redeploy the test binary ' |
+ 'or data to the device again. ' |
+ 'Don\'t use on bots by default!') |
+ option_parser.add_option('--repeat', dest='repeat', type='int', |
+ default=2, |
+ help='Repeat count on test timeout') |
options, args = option_parser.parse_args(argv) |
if len(args) > 1: |
print 'Unknown argument:', args[1:] |