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

Side by Side Diff: base/test/launcher/test_launcher.cc

Issue 324893004: Truncate huge output snippets in the test launcher before printing them (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 // Maximum time of no output after which we print list of processes still 69 // Maximum time of no output after which we print list of processes still
70 // running. This deliberately doesn't use TestTimeouts (which is otherwise 70 // running. This deliberately doesn't use TestTimeouts (which is otherwise
71 // a recommended solution), because they can be increased. This would defeat 71 // a recommended solution), because they can be increased. This would defeat
72 // the purpose of this timeout, which is 1) to avoid buildbot "no output for 72 // the purpose of this timeout, which is 1) to avoid buildbot "no output for
73 // X seconds" timeout killing the process 2) help communicate status of 73 // X seconds" timeout killing the process 2) help communicate status of
74 // the test launcher to people looking at the output (no output for a long 74 // the test launcher to people looking at the output (no output for a long
75 // time is mysterious and gives no info about what is happening) 3) help 75 // time is mysterious and gives no info about what is happening) 3) help
76 // debugging in case the process hangs anyway. 76 // debugging in case the process hangs anyway.
77 const int kOutputTimeoutSeconds = 15; 77 const int kOutputTimeoutSeconds = 15;
78 78
79 // Limit of output snippet lines when printing to stdout.
80 // Avoids flooding the logs with amount of output that gums up
81 // the infrastructure.
82 const size_t kOutputSnippetLinesLimit = 50;
83
79 // Set of live launch test processes with corresponding lock (it is allowed 84 // Set of live launch test processes with corresponding lock (it is allowed
80 // for callers to launch processes on different threads). 85 // for callers to launch processes on different threads).
81 LazyInstance<std::map<ProcessHandle, CommandLine> > g_live_processes 86 LazyInstance<std::map<ProcessHandle, CommandLine> > g_live_processes
82 = LAZY_INSTANCE_INITIALIZER; 87 = LAZY_INSTANCE_INITIALIZER;
83 LazyInstance<Lock> g_live_processes_lock = LAZY_INSTANCE_INITIALIZER; 88 LazyInstance<Lock> g_live_processes_lock = LAZY_INSTANCE_INITIALIZER;
84 89
85 #if defined(OS_POSIX) 90 #if defined(OS_POSIX)
86 // Self-pipe that makes it possible to do complex shutdown handling 91 // Self-pipe that makes it possible to do complex shutdown handling
87 // outside of the signal handler. 92 // outside of the signal handler.
88 int g_shutdown_pipe[2] = { -1, -1 }; 93 int g_shutdown_pipe[2] = { -1, -1 };
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 print_snippet = (result.status != TestResult::TEST_SUCCESS); 449 print_snippet = (result.status != TestResult::TEST_SUCCESS);
445 } else if (print_test_stdio == "always") { 450 } else if (print_test_stdio == "always") {
446 print_snippet = true; 451 print_snippet = true;
447 } else if (print_test_stdio == "never") { 452 } else if (print_test_stdio == "never") {
448 print_snippet = false; 453 print_snippet = false;
449 } else { 454 } else {
450 LOG(WARNING) << "Invalid value of " << switches::kTestLauncherPrintTestStdio 455 LOG(WARNING) << "Invalid value of " << switches::kTestLauncherPrintTestStdio
451 << ": " << print_test_stdio; 456 << ": " << print_test_stdio;
452 } 457 }
453 if (print_snippet) { 458 if (print_snippet) {
454 fprintf(stdout, "%s", result.output_snippet.c_str()); 459 std::vector<std::string> snippet_lines;
sky 2014/06/10 16:25:14 This initially confused me. I would have thought y
460 SplitString(result.output_snippet, '\n', &snippet_lines);
461 if (snippet_lines.size() > kOutputSnippetLinesLimit) {
462 size_t truncated_size = snippet_lines.size() - kOutputSnippetLinesLimit;
463 snippet_lines.erase(
464 snippet_lines.begin(),
465 snippet_lines.begin() + truncated_size);
466 snippet_lines.insert(snippet_lines.begin(), "<truncated>");
467 }
468 fprintf(stdout, "%s", JoinString(snippet_lines, "\n").c_str());
455 fflush(stdout); 469 fflush(stdout);
456 } 470 }
457 471
458 if (result.status == TestResult::TEST_SUCCESS) { 472 if (result.status == TestResult::TEST_SUCCESS) {
459 ++test_success_count_; 473 ++test_success_count_;
460 } else { 474 } else {
461 tests_to_retry_.insert(result.full_name); 475 tests_to_retry_.insert(result.full_name);
462 } 476 }
463 477
464 // TODO(phajdan.jr): Flag unreliable unknown results, unless passed on retry. 478 // TODO(phajdan.jr): Flag unreliable unknown results, unless passed on retry.
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 1087
1074 g_live_processes.Get().erase(process_handle); 1088 g_live_processes.Get().erase(process_handle);
1075 } 1089 }
1076 1090
1077 base::CloseProcessHandle(process_handle); 1091 base::CloseProcessHandle(process_handle);
1078 1092
1079 return exit_code; 1093 return exit_code;
1080 } 1094 }
1081 1095
1082 } // namespace base 1096 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698