| Index: mojo/edk/system/message_pipe_unittest.cc
|
| diff --git a/mojo/edk/system/message_pipe_unittest.cc b/mojo/edk/system/message_pipe_unittest.cc
|
| index bfafbb740d1b97a15171e88e1bf704e24efc80c4..f490b23e760522ecccd957cc1cff9f833d4d0646 100644
|
| --- a/mojo/edk/system/message_pipe_unittest.cc
|
| +++ b/mojo/edk/system/message_pipe_unittest.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include <stdint.h>
|
| +#include <string.h>
|
|
|
| #include "base/memory/ref_counted.h"
|
| #include "mojo/edk/system/test_utils.h"
|
| @@ -409,6 +410,75 @@ TEST_F(MessagePipeTest, BasicWaiting) {
|
| ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
|
| }
|
|
|
| +TEST_F(MessagePipeTest, InvalidMessageObjects) {
|
| + // null message
|
| + ASSERT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + MojoDestroyMessage(nullptr));
|
| +
|
| + // null message
|
| + ASSERT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + MojoGetMessageBuffer(nullptr, nullptr));
|
| +
|
| + // Non-zero num_handles with null handles array.
|
| + ASSERT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + MojoCreateMessage(0, nullptr, 1, MOJO_CREATE_MESSAGE_FLAG_NONE,
|
| + nullptr));
|
| +}
|
| +
|
| +TEST_F(MessagePipeTest, CreateAndDestroyMessage) {
|
| + const std::string kMessage = "Hello, world.";
|
| + void* message = nullptr;
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + MojoCreateMessage(static_cast<uint32_t>(kMessage.size()),
|
| + nullptr, 0, MOJO_CREATE_MESSAGE_FLAG_NONE,
|
| + &message));
|
| + ASSERT_TRUE(message);
|
| +
|
| + ASSERT_EQ(MOJO_RESULT_OK, MojoDestroyMessage(message));
|
| +}
|
| +
|
| +TEST_F(MessagePipeTest, WriteAndReadMessageObject) {
|
| + const std::string kMessage = "Hello, world.";
|
| + void* message = nullptr;
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + MojoCreateMessage(static_cast<uint32_t>(kMessage.size()),
|
| + nullptr, 0, MOJO_CREATE_MESSAGE_FLAG_NONE,
|
| + &message));
|
| + ASSERT_TRUE(message);
|
| +
|
| + void* buffer = nullptr;
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoGetMessageBuffer(message, &buffer));
|
| + ASSERT_TRUE(buffer);
|
| + memcpy(buffer, kMessage.data(), kMessage.size());
|
| +
|
| + MojoHandle a, b;
|
| + CreateMessagePipe(&a, &b);
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + MojoWriteMessageNew(a, message, MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + MojoWait(b, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
|
| + nullptr));
|
| + uint32_t num_bytes = 0;
|
| + uint32_t num_handles = 0;
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + MojoReadMessageNew(b, &message, &num_bytes, nullptr, &num_handles,
|
| + MOJO_READ_MESSAGE_FLAG_NONE));
|
| + ASSERT_TRUE(message);
|
| + EXPECT_EQ(static_cast<uint32_t>(kMessage.size()), num_bytes);
|
| + EXPECT_EQ(0u, num_handles);
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoGetMessageBuffer(message, &buffer));
|
| + ASSERT_TRUE(buffer);
|
| +
|
| + EXPECT_EQ(0, strncmp(static_cast<const char*>(buffer), kMessage.data(),
|
| + num_bytes));
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoDestroyMessage(message));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b));
|
| +}
|
| +
|
| #if !defined(OS_IOS)
|
|
|
| const size_t kPingPongHandlesPerIteration = 50;
|
|
|