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

Unified Diff: testing/android/native_test_launcher.cc

Issue 16599008: Move CreateFIFO() and RedirectStream() from testing/android/ to base/android/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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
Index: testing/android/native_test_launcher.cc
diff --git a/testing/android/native_test_launcher.cc b/testing/android/native_test_launcher.cc
index 61d6c5faefa626631fd029df6790d7a27b3a89b8..e39eb2bdccbb881fa9ed76747c042a7f76a9a691 100644
--- a/testing/android/native_test_launcher.cc
+++ b/testing/android/native_test_launcher.cc
@@ -13,12 +13,14 @@
#include <signal.h>
#include "base/android/base_jni_registrar.h"
+#include "base/android/fifo_utils.h"
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/at_exit.h"
#include "base/base_switches.h"
#include "base/command_line.h"
+#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/strings/stringprintf.h"
@@ -27,9 +29,7 @@
#include "testing/jni/ChromeNativeTestActivity_jni.h"
using testing::native_test_util::ArgsToArgv;
-using testing::native_test_util::CreateFIFO;
using testing::native_test_util::ParseArgsFromCommandLineFile;
-using testing::native_test_util::RedirectStream;
using testing::native_test_util::ScopedMainEntryLogger;
// The main function of the program to be wrapped as a test apk.
@@ -78,6 +78,41 @@ void InstallHandlers() {
}
}
+// Writes printf() style string to Android's logger where |priority| is one of
+// the levels defined in <android/log.h>.
+void AndroidLog(int priority, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ __android_log_vprint(priority, kLogTag, format, args);
+ va_end(args);
+}
+
+// Ensures that the fifo at |path| is created by deleting whatever is at |path|
+// prior to (re)creating the fifo, otherwise logs the error and terminates the
+// program.
+void EnsureCreateFIFO(const base::FilePath& path) {
+ unlink(path.value().c_str());
+ if (base::android::CreateFIFO(path, 0666))
+ return;
+
+ AndroidLog(ANDROID_LOG_ERROR, "Failed to create fifo %s: %s\n",
+ path.value().c_str(), strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+// Ensures that |stream| is redirected to |path|, otherwise logs the error and
+// terminates the program.
+void EnsureRedirectStream(FILE* stream,
+ const base::FilePath& path,
+ const char* mode) {
+ if (base::android::RedirectStream(stream, path, mode))
+ return;
+
+ AndroidLog(ANDROID_LOG_ERROR, "Failed to redirect stream to file: %s: %s\n",
+ path.value().c_str(), strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
} // namespace
// This method is called on a separate java thread so that we won't trigger
@@ -115,7 +150,7 @@ static void RunTests(JNIEnv* env,
// A few options, such "--gtest_list_tests", will just use printf directly
// Always redirect stdout to a known file.
base::FilePath fifo_path(files_dir.Append(base::FilePath("test.fifo")));
- CreateFIFO(fifo_path.value().c_str());
+ EnsureCreateFIFO(fifo_path);
base::FilePath stderr_fifo_path, stdin_fifo_path;
@@ -123,29 +158,28 @@ static void RunTests(JNIEnv* env,
// other tests, insert stderr content to the same fifo we use for stdout.
if (command_line.HasSwitch(kSeparateStderrFifo)) {
stderr_fifo_path = files_dir.Append(base::FilePath("stderr.fifo"));
- CreateFIFO(stderr_fifo_path.value().c_str());
+ EnsureCreateFIFO(stderr_fifo_path);
}
// DumpRenderTree uses stdin to receive input about which test to run.
if (command_line.HasSwitch(kCreateStdinFifo)) {
stdin_fifo_path = files_dir.Append(base::FilePath("stdin.fifo"));
- CreateFIFO(stdin_fifo_path.value().c_str());
+ EnsureCreateFIFO(stdin_fifo_path);
}
// Only redirect the streams after all fifos have been created.
- RedirectStream(stdout, fifo_path.value().c_str(), "w");
+ EnsureRedirectStream(stdout, fifo_path, "w");
if (!stdin_fifo_path.empty())
- RedirectStream(stdin, stdin_fifo_path.value().c_str(), "r");
+ EnsureRedirectStream(stdin, stdin_fifo_path, "r");
if (!stderr_fifo_path.empty())
- RedirectStream(stderr, stderr_fifo_path.value().c_str(), "w");
+ EnsureRedirectStream(stderr, stderr_fifo_path, "w");
else
dup2(STDOUT_FILENO, STDERR_FILENO);
if (command_line.HasSwitch(switches::kWaitForDebugger)) {
- std::string msg = base::StringPrintf("Native test waiting for GDB because "
- "flag %s was supplied",
- switches::kWaitForDebugger);
- __android_log_write(ANDROID_LOG_VERBOSE, kLogTag, msg.c_str());
+ AndroidLog(ANDROID_LOG_VERBOSE,
+ "Native test waiting for GDB because flag %s was supplied",
+ switches::kWaitForDebugger);
base::debug::WaitForDebugger(24 * 60 * 60, false);
}
« no previous file with comments | « content/shell/android/browsertests_apk/content_browser_tests_android.cc ('k') | testing/android/native_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698