Index: base/test/launcher/unit_test_launcher.cc |
diff --git a/base/test/launcher/unit_test_launcher.cc b/base/test/launcher/unit_test_launcher.cc |
index 1ded4641996db34e3c218cffe1ed74738c0a9f9d..1b3a162c661ac25f419ed477764f5d935b467221 100644 |
--- a/base/test/launcher/unit_test_launcher.cc |
+++ b/base/test/launcher/unit_test_launcher.cc |
@@ -121,6 +121,18 @@ class DefaultUnitTestPlatformDelegate : public UnitTestPlatformDelegate { |
return std::string(); |
} |
+ void RelaunchTests(TestLauncher* test_launcher, |
+ const std::vector<std::string>& test_names, |
+ int launch_flags) override { |
+ // Relaunch requested tests in parallel, but only use single |
+ // test per batch for more precise results (crashes, etc). |
+ for (const std::string& test_name : test_names) { |
+ std::vector<std::string> batch; |
+ batch.push_back(test_name); |
+ RunUnitTestsBatch(test_launcher, this, batch, launch_flags); |
+ } |
+ } |
+ |
DISALLOW_COPY_AND_ASSIGN(DefaultUnitTestPlatformDelegate); |
}; |
@@ -302,24 +314,10 @@ bool ProcessTestResults( |
if (!has_non_success_test && exit_code != 0) { |
// This is a bit surprising case: all tests are marked as successful, |
// but the exit code was not zero. This can happen e.g. under memory |
- // tools that report leaks this way. |
- |
- if (final_results.size() == 1) { |
- // Easy case. One test only so we know the non-zero exit code |
- // was caused by that one test. |
- final_results[0].status = TestResult::TEST_FAILURE_ON_EXIT; |
- } else { |
- // Harder case. Discard the results and request relaunching all |
- // tests without batching. This will trigger above branch on |
- // relaunch leading to more precise results. |
- LOG(WARNING) << "Not sure which test caused non-zero exit code, " |
- << "relaunching all of them without batching."; |
- |
- for (size_t i = 0; i < final_results.size(); i++) |
- tests_to_relaunch->push_back(final_results[i].full_name); |
- |
- return false; |
- } |
+ // tools that report leaks this way. Mark all tests as a failure on exit, |
+ // and for more precise info they'd need to be retried serially. |
+ for (size_t i = 0; i < final_results.size(); i++) |
+ final_results[i].status = TestResult::TEST_FAILURE_ON_EXIT; |
} |
for (size_t i = 0; i < final_results.size(); i++) { |
@@ -373,16 +371,11 @@ void GTestCallback( |
callback_state.output_file, output, exit_code, was_timeout, |
&tests_to_relaunch); |
- // Relaunch requested tests in parallel, but only use single |
- // test per batch for more precise results (crashes, test passes |
- // but non-zero exit codes etc). |
- for (size_t i = 0; i < tests_to_relaunch.size(); i++) { |
- std::vector<std::string> batch; |
- batch.push_back(tests_to_relaunch[i]); |
- RunUnitTestsBatch(callback_state.test_launcher, |
- callback_state.platform_delegate, |
- batch, |
- callback_state.launch_flags); |
+ if (!tests_to_relaunch.empty()) { |
+ callback_state.platform_delegate->RelaunchTests( |
+ callback_state.test_launcher, |
+ tests_to_relaunch, |
+ callback_state.launch_flags); |
} |
// The temporary file's directory is also temporary. |