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: |