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

Unified Diff: content/public/test/test_launcher.cc

Issue 17379024: GTTF: Extract a function to launch child gtest process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: bugfix Created 7 years, 6 months 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 | « base/test/test_launcher.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/test/test_launcher.cc
diff --git a/content/public/test/test_launcher.cc b/content/public/test/test_launcher.cc
index bd6756fe64e8bfd8811a3576437439845753d420..83b708e68e359e0a67e29035a22afd29f22748c3 100644
--- a/content/public/test/test_launcher.cc
+++ b/content/public/test/test_launcher.cc
@@ -63,7 +63,7 @@ namespace {
int DoRunTestInternal(const testing::TestCase* test_case,
const std::string& test_name,
- CommandLine* command_line,
+ const CommandLine& command_line,
base::TimeDelta default_timeout,
bool* was_timeout) {
if (test_case) {
@@ -87,7 +87,7 @@ int DoRunTestInternal(const testing::TestCase* test_case,
}
}
- CommandLine new_cmd_line(*command_line);
+ CommandLine new_cmd_line(command_line);
// Always enable disabled tests. This method is not called with disabled
// tests unless this flag was specified to the browser test executable.
@@ -95,58 +95,14 @@ int DoRunTestInternal(const testing::TestCase* test_case,
new_cmd_line.AppendSwitchASCII("gtest_filter", test_name);
new_cmd_line.AppendSwitch(kSingleProcessTestsFlag);
- const char* browser_wrapper = getenv("BROWSER_WRAPPER");
- if (browser_wrapper) {
-#if defined(OS_WIN)
- new_cmd_line.PrependWrapper(ASCIIToWide(browser_wrapper));
-#elif defined(OS_POSIX)
- new_cmd_line.PrependWrapper(browser_wrapper);
-#endif
- VLOG(1) << "BROWSER_WRAPPER was set, prefixing command_line with "
- << browser_wrapper;
- }
-
- base::ProcessHandle process_handle;
- base::LaunchOptions options;
-
-#if defined(OS_POSIX)
- // On POSIX, we launch the test in a new process group with pgid equal to
- // its pid. Any child processes that the test may create will inherit the
- // same pgid. This way, if the test is abruptly terminated, we can clean up
- // any orphaned child processes it may have left behind.
- options.new_process_group = true;
-#endif
-
- if (!base::LaunchProcess(new_cmd_line, options, &process_handle))
- return -1;
-
- int exit_code = 0;
- if (!base::WaitForExitCodeWithTimeout(process_handle,
- &exit_code,
- default_timeout)) {
+ int exit_code = base::LaunchChildGTestProcess(new_cmd_line,
+ default_timeout,
+ was_timeout);
+ if (*was_timeout) {
LOG(ERROR) << "Test timeout (" << default_timeout.InMilliseconds()
<< " ms) exceeded for " << test_name;
-
- if (was_timeout)
- *was_timeout = true;
- exit_code = -1; // Set a non-zero exit code to signal a failure.
-
- // Ensure that the process terminates.
- base::KillProcess(process_handle, -1, true);
}
-#if defined(OS_POSIX)
- if (exit_code != 0) {
- // On POSIX, in case the test does not exit cleanly, either due to a crash
- // or due to it timing out, we need to clean up any child processes that
- // it might have created. On Windows, child processes are automatically
- // cleaned up using JobObjects.
- base::KillProcessGroup(process_handle);
- }
-#endif
-
- base::CloseProcessHandle(process_handle);
-
return exit_code;
}
@@ -166,25 +122,6 @@ int DoRunTest(TestLauncherDelegate* launcher_delegate,
base::mac::ScopedNSAutoreleasePool pool;
#endif
- const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
- CommandLine new_cmd_line(cmd_line->GetProgram());
- CommandLine::SwitchMap switches = cmd_line->GetSwitches();
-
- // Strip out gtest_output flag because otherwise we would overwrite results
- // of the previous test. We will generate the final output file later
- // in RunTests().
- switches.erase(base::kGTestOutputFlag);
-
- // Strip out gtest_repeat flag because we can only run one test in the child
- // process (restarting the browser in the same process is illegal after it
- // has been shut down and will actually crash).
- switches.erase(base::kGTestRepeatFlag);
-
- for (CommandLine::SwitchMap::const_iterator iter = switches.begin();
- iter != switches.end(); ++iter) {
- new_cmd_line.AppendSwitchNative((*iter).first, (*iter).second);
- }
-
base::ScopedTempDir temp_dir;
// Create a new data dir and pass it to the child.
if (!temp_dir.CreateUniqueTempDir() || !temp_dir.IsValid()) {
@@ -192,13 +129,26 @@ int DoRunTest(TestLauncherDelegate* launcher_delegate,
return -1;
}
+ CommandLine new_cmd_line(*CommandLine::ForCurrentProcess());
+
+ const char* browser_wrapper = getenv("BROWSER_WRAPPER");
+ if (browser_wrapper) {
+#if defined(OS_WIN)
+ new_cmd_line.PrependWrapper(ASCIIToWide(browser_wrapper));
+#elif defined(OS_POSIX)
+ new_cmd_line.PrependWrapper(browser_wrapper);
+#endif
+ VLOG(1) << "BROWSER_WRAPPER was set, prefixing command_line with "
+ << browser_wrapper;
+ }
+
if (!launcher_delegate->AdjustChildProcessCommandLine(&new_cmd_line,
temp_dir.path())) {
return -1;
}
return DoRunTestInternal(
- test_case, test_name, &new_cmd_line, default_timeout, was_timeout);
+ test_case, test_name, new_cmd_line, default_timeout, was_timeout);
}
void PrintUsage() {
« no previous file with comments | « base/test/test_launcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698