Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Unified Diff: mojo/edk/system/message_pipe_unittest.cc

Issue 1880823005: [mojo-edk] Add explicit message object APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698