diff options
Diffstat (limited to 'libartbase/base/common_art_test.h')
| -rw-r--r-- | libartbase/base/common_art_test.h | 26 |
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; |