summaryrefslogtreecommitdiffstats
path: root/testing/android
diff options
context:
space:
mode:
Diffstat (limited to 'testing/android')
-rw-r--r--testing/android/native_test_launcher.cc58
-rw-r--r--testing/android/native_test_util.cc36
-rw-r--r--testing/android/native_test_util.h4
3 files changed, 46 insertions, 52 deletions
diff --git a/testing/android/native_test_launcher.cc b/testing/android/native_test_launcher.cc
index 61d6c5f..e39eb2b 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);
}
diff --git a/testing/android/native_test_util.cc b/testing/android/native_test_util.cc
index 084908b..c0ea7b0 100644
--- a/testing/android/native_test_util.cc
+++ b/testing/android/native_test_util.cc
@@ -4,14 +4,6 @@
#include "testing/android/native_test_util.h"
-#include <android/log.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "base/command_line.h"
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/strings/string_tokenizer.h"
@@ -19,15 +11,6 @@
namespace {
-const char kLogTag[] = "chromium";
-
-void AndroidLogError(const char* format, ...) {
- va_list args;
- va_start(args, format);
- __android_log_vprint(ANDROID_LOG_ERROR, kLogTag, format, args);
- va_end(args);
-}
-
void ParseArgsFromString(const std::string& command_line,
std::vector<std::string>* args) {
base::StringTokenizer tokenizer(command_line, kWhitespaceASCII);
@@ -44,25 +27,6 @@ void ParseArgsFromString(const std::string& command_line,
namespace testing {
namespace native_test_util {
-void CreateFIFO(const char* fifo_path) {
- unlink(fifo_path);
- // Default permissions for mkfifo is ignored, chmod is required.
- if (mkfifo(fifo_path, 0666) || chmod(fifo_path, 0666)) {
- AndroidLogError("Failed to create fifo %s: %s\n",
- fifo_path, strerror(errno));
- exit(EXIT_FAILURE);
- }
-}
-
-void RedirectStream(
- FILE* stream, const char* path, const char* mode) {
- if (!freopen(path, mode, stream)) {
- AndroidLogError("Failed to redirect stream to file: %s: %s\n",
- path, strerror(errno));
- exit(EXIT_FAILURE);
- }
-}
-
void ParseArgsFromCommandLineFile(
const char* path, std::vector<std::string>* args) {
base::FilePath command_line(path);
diff --git a/testing/android/native_test_util.h b/testing/android/native_test_util.h
index 4e40222..a756739 100644
--- a/testing/android/native_test_util.h
+++ b/testing/android/native_test_util.h
@@ -27,10 +27,6 @@ class ScopedMainEntryLogger {
}
};
-// Creates a fifo at the given |fifo_path|.
-void CreateFIFO(const char* fifo_path);
-// Redirects the |stream| to the file provided by |path|.
-void RedirectStream(FILE* stream, const char* path, const char* mode);
void ParseArgsFromCommandLineFile(
const char* path, std::vector<std::string>* args);
int ArgsToArgv(const std::vector<std::string>& args, std::vector<char*>* argv);