| Index: util/mach/mach_message_test.cc
|
| diff --git a/util/mach/mach_message_test.cc b/util/mach/mach_message_test.cc
|
| index 5e79b212d715768a75138096b68204e9db977e06..d77f0dd38fa51b4e62e8df1169cb2930aa7ed62b 100644
|
| --- a/util/mach/mach_message_test.cc
|
| +++ b/util/mach/mach_message_test.cc
|
| @@ -16,6 +16,7 @@
|
|
|
| #include <unistd.h>
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/mac/scoped_mach_port.h"
|
| #include "gtest/gtest.h"
|
| #include "test/mac/mach_errors.h"
|
| @@ -148,6 +149,55 @@ TEST(MachMessage, AuditPIDFromMachMessageTrailer) {
|
| EXPECT_EQ(getpid(), AuditPIDFromMachMessageTrailer(&receive.trailer));
|
| }
|
|
|
| +TEST(MachMessage, MachMessageDestroyReceivedPort) {
|
| + mach_port_t port = NewMachPort(MACH_PORT_RIGHT_RECEIVE);
|
| + ASSERT_NE(kMachPortNull, port);
|
| + EXPECT_TRUE(MachMessageDestroyReceivedPort(port, MACH_MSG_TYPE_PORT_RECEIVE));
|
| +
|
| + base::mac::ScopedMachReceiveRight receive(
|
| + NewMachPort(MACH_PORT_RIGHT_RECEIVE));
|
| + mach_msg_type_name_t right_type;
|
| + kern_return_t kr = mach_port_extract_right(mach_task_self(),
|
| + receive.get(),
|
| + MACH_MSG_TYPE_MAKE_SEND,
|
| + &port,
|
| + &right_type);
|
| + ASSERT_EQ(KERN_SUCCESS, kr)
|
| + << MachErrorMessage(kr, "mach_port_extract_right");
|
| + ASSERT_EQ(receive, port);
|
| + ASSERT_EQ(implicit_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND),
|
| + right_type);
|
| + EXPECT_TRUE(MachMessageDestroyReceivedPort(port, MACH_MSG_TYPE_PORT_SEND));
|
| +
|
| + kr = mach_port_extract_right(mach_task_self(),
|
| + receive.get(),
|
| + MACH_MSG_TYPE_MAKE_SEND_ONCE,
|
| + &port,
|
| + &right_type);
|
| + ASSERT_EQ(KERN_SUCCESS, kr)
|
| + << MachErrorMessage(kr, "mach_port_extract_right");
|
| + ASSERT_NE(kMachPortNull, port);
|
| + EXPECT_NE(receive, port);
|
| + ASSERT_EQ(implicit_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND_ONCE),
|
| + right_type);
|
| + EXPECT_TRUE(
|
| + MachMessageDestroyReceivedPort(port, MACH_MSG_TYPE_PORT_SEND_ONCE));
|
| +
|
| + kr = mach_port_extract_right(mach_task_self(),
|
| + receive.get(),
|
| + MACH_MSG_TYPE_MAKE_SEND,
|
| + &port,
|
| + &right_type);
|
| + ASSERT_EQ(KERN_SUCCESS, kr)
|
| + << MachErrorMessage(kr, "mach_port_extract_right");
|
| + ASSERT_EQ(receive, port);
|
| + ASSERT_EQ(implicit_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND),
|
| + right_type);
|
| + EXPECT_TRUE(MachMessageDestroyReceivedPort(port, MACH_MSG_TYPE_PORT_RECEIVE));
|
| + ignore_result(receive.release());
|
| + EXPECT_TRUE(MachMessageDestroyReceivedPort(port, MACH_MSG_TYPE_PORT_SEND));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace test
|
| } // namespace crashpad
|
|
|