OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/test/launcher/test_launcher.h" | 5 #include "base/test/launcher/test_launcher.h" |
6 | 6 |
7 #if defined(OS_POSIX) | 7 #if defined(OS_POSIX) |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 #endif | 9 #endif |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "base/strings/string_number_conversions.h" | 26 #include "base/strings/string_number_conversions.h" |
27 #include "base/strings/string_split.h" | 27 #include "base/strings/string_split.h" |
28 #include "base/strings/string_util.h" | 28 #include "base/strings/string_util.h" |
29 #include "base/strings/stringize_macros.h" | 29 #include "base/strings/stringize_macros.h" |
30 #include "base/strings/stringprintf.h" | 30 #include "base/strings/stringprintf.h" |
31 #include "base/strings/utf_string_conversions.h" | 31 #include "base/strings/utf_string_conversions.h" |
32 #include "base/test/launcher/test_results_tracker.h" | 32 #include "base/test/launcher/test_results_tracker.h" |
33 #include "base/test/sequenced_worker_pool_owner.h" | 33 #include "base/test/sequenced_worker_pool_owner.h" |
34 #include "base/test/test_switches.h" | 34 #include "base/test/test_switches.h" |
35 #include "base/test/test_timeouts.h" | 35 #include "base/test/test_timeouts.h" |
| 36 #include "base/thread_task_runner_handle.h" |
36 #include "base/threading/thread_checker.h" | 37 #include "base/threading/thread_checker.h" |
37 #include "base/time/time.h" | 38 #include "base/time/time.h" |
38 #include "testing/gtest/include/gtest/gtest.h" | 39 #include "testing/gtest/include/gtest/gtest.h" |
39 | 40 |
40 #if defined(OS_MACOSX) | 41 #if defined(OS_MACOSX) |
41 #include "base/mac/scoped_nsautorelease_pool.h" | 42 #include "base/mac/scoped_nsautorelease_pool.h" |
42 #endif | 43 #endif |
43 | 44 |
44 namespace base { | 45 namespace base { |
45 | 46 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 bool was_timeout, | 219 bool was_timeout, |
219 const std::string& output) { | 220 const std::string& output) { |
220 callback.Run(exit_code, elapsed_time, was_timeout, output); | 221 callback.Run(exit_code, elapsed_time, was_timeout, output); |
221 } | 222 } |
222 | 223 |
223 void DoLaunchChildTestProcess( | 224 void DoLaunchChildTestProcess( |
224 const CommandLine& command_line, | 225 const CommandLine& command_line, |
225 base::TimeDelta timeout, | 226 base::TimeDelta timeout, |
226 bool use_job_objects, | 227 bool use_job_objects, |
227 bool redirect_stdio, | 228 bool redirect_stdio, |
228 scoped_refptr<MessageLoopProxy> message_loop_proxy, | 229 scoped_refptr<SequencedTaskRunner> task_runner, |
229 const TestLauncher::LaunchChildGTestProcessCallback& callback) { | 230 const TestLauncher::LaunchChildGTestProcessCallback& callback) { |
230 TimeTicks start_time = TimeTicks::Now(); | 231 TimeTicks start_time = TimeTicks::Now(); |
231 | 232 |
232 // Redirect child process output to a file. | 233 // Redirect child process output to a file. |
233 base::FilePath output_file; | 234 base::FilePath output_file; |
234 CHECK(base::CreateTemporaryFile(&output_file)); | 235 CHECK(base::CreateTemporaryFile(&output_file)); |
235 | 236 |
236 LaunchOptions options; | 237 LaunchOptions options; |
237 #if defined(OS_WIN) | 238 #if defined(OS_WIN) |
238 win::ScopedHandle handle; | 239 win::ScopedHandle handle; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 std::string output_file_contents; | 290 std::string output_file_contents; |
290 CHECK(base::ReadFileToString(output_file, &output_file_contents)); | 291 CHECK(base::ReadFileToString(output_file, &output_file_contents)); |
291 | 292 |
292 if (!base::DeleteFile(output_file, false)) { | 293 if (!base::DeleteFile(output_file, false)) { |
293 // This needs to be non-fatal at least for Windows. | 294 // This needs to be non-fatal at least for Windows. |
294 LOG(WARNING) << "Failed to delete " << output_file.AsUTF8Unsafe(); | 295 LOG(WARNING) << "Failed to delete " << output_file.AsUTF8Unsafe(); |
295 } | 296 } |
296 | 297 |
297 // Run target callback on the thread it was originating from, not on | 298 // Run target callback on the thread it was originating from, not on |
298 // a worker pool thread. | 299 // a worker pool thread. |
299 message_loop_proxy->PostTask( | 300 task_runner->PostTask(FROM_HERE, |
300 FROM_HERE, | 301 Bind(&RunCallback, |
301 Bind(&RunCallback, | 302 callback, |
302 callback, | 303 exit_code, |
303 exit_code, | 304 TimeTicks::Now() - start_time, |
304 TimeTicks::Now() - start_time, | 305 was_timeout, |
305 was_timeout, | 306 output_file_contents)); |
306 output_file_contents)); | |
307 } | 307 } |
308 | 308 |
309 } // namespace | 309 } // namespace |
310 | 310 |
311 const char kGTestFilterFlag[] = "gtest_filter"; | 311 const char kGTestFilterFlag[] = "gtest_filter"; |
312 const char kGTestHelpFlag[] = "gtest_help"; | 312 const char kGTestHelpFlag[] = "gtest_help"; |
313 const char kGTestListTestsFlag[] = "gtest_list_tests"; | 313 const char kGTestListTestsFlag[] = "gtest_list_tests"; |
314 const char kGTestRepeatFlag[] = "gtest_repeat"; | 314 const char kGTestRepeatFlag[] = "gtest_repeat"; |
315 const char kGTestRunDisabledTestsFlag[] = "gtest_also_run_disabled_tests"; | 315 const char kGTestRunDisabledTestsFlag[] = "gtest_also_run_disabled_tests"; |
316 const char kGTestOutputFlag[] = "gtest_output"; | 316 const char kGTestOutputFlag[] = "gtest_output"; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 // JSON summary. | 422 // JSON summary. |
423 bool redirect_stdio = (parallel_jobs_ > 1) || BotModeEnabled(); | 423 bool redirect_stdio = (parallel_jobs_ > 1) || BotModeEnabled(); |
424 | 424 |
425 worker_pool_owner_->pool()->PostWorkerTask( | 425 worker_pool_owner_->pool()->PostWorkerTask( |
426 FROM_HERE, | 426 FROM_HERE, |
427 Bind(&DoLaunchChildTestProcess, | 427 Bind(&DoLaunchChildTestProcess, |
428 new_command_line, | 428 new_command_line, |
429 timeout, | 429 timeout, |
430 use_job_objects, | 430 use_job_objects, |
431 redirect_stdio, | 431 redirect_stdio, |
432 MessageLoopProxy::current(), | 432 ThreadTaskRunnerHandle::Get(), |
433 Bind(&TestLauncher::OnLaunchTestProcessFinished, | 433 Bind(&TestLauncher::OnLaunchTestProcessFinished, |
434 Unretained(this), | 434 Unretained(this), |
435 callback))); | 435 callback))); |
436 } | 436 } |
437 | 437 |
438 void TestLauncher::OnTestFinished(const TestResult& result) { | 438 void TestLauncher::OnTestFinished(const TestResult& result) { |
439 ++test_finished_count_; | 439 ++test_finished_count_; |
440 | 440 |
441 bool print_snippet = false; | 441 bool print_snippet = false; |
442 std::string print_test_stdio("auto"); | 442 std::string print_test_stdio("auto"); |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 | 1089 |
1090 g_live_processes.Get().erase(process_handle); | 1090 g_live_processes.Get().erase(process_handle); |
1091 } | 1091 } |
1092 | 1092 |
1093 base::CloseProcessHandle(process_handle); | 1093 base::CloseProcessHandle(process_handle); |
1094 | 1094 |
1095 return exit_code; | 1095 return exit_code; |
1096 } | 1096 } |
1097 | 1097 |
1098 } // namespace base | 1098 } // namespace base |
OLD | NEW |