TEST(spawn, posix_spawn) { ExecTestHelper eth; eth.SetArgs({BIN_DIR "true", nullptr}); pid_t pid; ASSERT_EQ(0, posix_spawn(&pid, eth.GetArg0(), nullptr, nullptr, eth.GetArgs(), nullptr)); AssertChildExited(pid, 0); }
TEST(spawn, posix_spawn_environment) { ExecTestHelper eth; eth.SetArgs({"sh", "-c", "exit $posix_spawn_environment_test", nullptr}); eth.SetEnv({"posix_spawn_environment_test=66", nullptr}); pid_t pid; ASSERT_EQ(0, posix_spawnp(&pid, eth.GetArg0(), nullptr, nullptr, eth.GetArgs(), eth.GetEnv())); AssertChildExited(pid, 66); }
static void CatFileToString(posix_spawnattr_t* sa, const char* path, std::string* content) { int fds[2]; ASSERT_NE(-1, pipe(fds)); posix_spawn_file_actions_t fa; ASSERT_EQ(0, posix_spawn_file_actions_init(&fa)); ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[0])); ASSERT_EQ(0, posix_spawn_file_actions_adddup2(&fa, fds[1], 1)); ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[1])); ExecTestHelper eth; eth.SetArgs({"cat", path, nullptr}); pid_t pid; ASSERT_EQ(0, posix_spawnp(&pid, eth.GetArg0(), &fa, sa, eth.GetArgs(), nullptr)); ASSERT_EQ(0, posix_spawn_file_actions_destroy(&fa)); ASSERT_EQ(0, close(fds[1])); ASSERT_TRUE(android::base::ReadFdToString(fds[0], content)); ASSERT_EQ(0, close(fds[0])); AssertChildExited(pid, 0); }