summaryrefslogtreecommitdiff
path: root/libartbase/base/common_art_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'libartbase/base/common_art_test.h')
-rw-r--r--libartbase/base/common_art_test.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/libartbase/base/common_art_test.h b/libartbase/base/common_art_test.h
index 0ace09de1a..62834c7d35 100644
--- a/libartbase/base/common_art_test.h
+++ b/libartbase/base/common_art_test.h
@@ -19,8 +19,11 @@
#include <gtest/gtest.h>
+#include <functional>
#include <string>
+#include <sys/wait.h>
+
#include <android-base/logging.h>
#include "base/globals.h"
@@ -125,6 +128,29 @@ class CommonArtTestImpl {
return true;
}
+ struct ForkAndExecResult {
+ enum Stage {
+ kLink,
+ kFork,
+ kWaitpid,
+ kFinished,
+ };
+ Stage stage;
+ int status_code;
+
+ bool StandardSuccess() {
+ return stage == kFinished && WIFEXITED(status_code) && WEXITSTATUS(status_code) == 0;
+ }
+ };
+ using OutputHandlerFn = std::function<void(char*, size_t)>;
+ using PostForkFn = std::function<bool()>;
+ static ForkAndExecResult ForkAndExec(const std::vector<std::string>& argv,
+ const PostForkFn& post_fork,
+ const OutputHandlerFn& handler);
+ static ForkAndExecResult ForkAndExec(const std::vector<std::string>& argv,
+ const PostForkFn& post_fork,
+ std::string* output);
+
protected:
static bool IsHost() {
return !kIsTargetBuild;