| Index: util/test/mac/mach_multiprocess_test.cc
|
| diff --git a/util/test/mac/mach_multiprocess_test.cc b/util/test/mac/mach_multiprocess_test.cc
|
| index b0429cdbbc9eacb569a3dea2f942ed0b7da03aef..a8639978f764e7a6a93470862ffe0cdabdef0469 100644
|
| --- a/util/test/mac/mach_multiprocess_test.cc
|
| +++ b/util/test/mac/mach_multiprocess_test.cc
|
| @@ -14,6 +14,8 @@
|
|
|
| #include "util/test/mac/mach_multiprocess.h"
|
|
|
| +#include <unistd.h>
|
| +
|
| #include "base/basictypes.h"
|
| #include "gtest/gtest.h"
|
| #include "util/file/fd_io.h"
|
| @@ -32,27 +34,46 @@ class TestMachMultiprocess final : public MachMultiprocess {
|
|
|
| protected:
|
| // The base class will have already exercised the Mach ports for IPC and the
|
| - // child task port. Just make sure that the pipe is set up correctly.
|
| + // child task port. Just make sure that the pipe is set up correctly and that
|
| + // ChildPID() works as expected.
|
| virtual void Parent() override {
|
| - int fd = PipeFD();
|
| -
|
| + int read_fd = ReadPipeFD();
|
| char c;
|
| - ssize_t rv = ReadFD(fd, &c, 1);
|
| + ssize_t rv = ReadFD(read_fd, &c, 1);
|
| ASSERT_EQ(1, rv) << ErrnoMessage("read");
|
| EXPECT_EQ('M', c);
|
|
|
| + pid_t pid;
|
| + rv = ReadFD(read_fd, &pid, sizeof(pid));
|
| + ASSERT_EQ(static_cast<ssize_t>(sizeof(pid)), rv) << ErrnoMessage("read");
|
| + EXPECT_EQ(pid, ChildPID());
|
| +
|
| + int write_fd = WritePipeFD();
|
| + c = 'm';
|
| + rv = WriteFD(write_fd, &c, 1);
|
| + ASSERT_EQ(1, rv) << ErrnoMessage("write");
|
| +
|
| // The child will close its end of the pipe and exit. Make sure that the
|
| // parent sees EOF.
|
| - rv = ReadFD(fd, &c, 1);
|
| + rv = ReadFD(read_fd, &c, 1);
|
| ASSERT_EQ(0, rv) << ErrnoMessage("read");
|
| }
|
|
|
| virtual void Child() override {
|
| - int fd = PipeFD();
|
| + int write_fd = WritePipeFD();
|
|
|
| char c = 'M';
|
| - ssize_t rv = WriteFD(fd, &c, 1);
|
| + ssize_t rv = WriteFD(write_fd, &c, 1);
|
| ASSERT_EQ(1, rv) << ErrnoMessage("write");
|
| +
|
| + pid_t pid = getpid();
|
| + rv = WriteFD(write_fd, &pid, sizeof(pid));
|
| + ASSERT_EQ(static_cast<ssize_t>(sizeof(pid)), rv) << ErrnoMessage("write");
|
| +
|
| + int read_fd = ReadPipeFD();
|
| + rv = ReadFD(read_fd, &c, 1);
|
| + ASSERT_EQ(1, rv) << ErrnoMessage("read");
|
| + EXPECT_EQ('m', c);
|
| }
|
|
|
| private:
|
|
|