Index: mojo/edk/embedder/embedder_unittest.cc |
diff --git a/mojo/edk/embedder/embedder_unittest.cc b/mojo/edk/embedder/embedder_unittest.cc |
index 60a2b80124bb4a767ebc5805b9200c5aaef1d189..4f6493f74f1d582a6c6e7dcbe1ec4bf1f815a883 100644 |
--- a/mojo/edk/embedder/embedder_unittest.cc |
+++ b/mojo/edk/embedder/embedder_unittest.cc |
@@ -34,14 +34,7 @@ const MojoHandleSignals kSignalAll = MOJO_HANDLE_SIGNAL_READABLE | |
MOJO_HANDLE_SIGNAL_WRITABLE | |
MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
-class EmbedderTest : public test::MojoSystemTest { |
- public: |
- EmbedderTest() {} |
- ~EmbedderTest() override {} |
- |
- private: |
- MOJO_DISALLOW_COPY_AND_ASSIGN(EmbedderTest); |
-}; |
+typedef testing::Test EmbedderTest; |
TEST_F(EmbedderTest, ChannelBasic) { |
MojoHandle server_mp, client_mp; |
@@ -85,8 +78,11 @@ TEST_F(EmbedderTest, SendReadableMessagePipe) { |
MojoCreateMessagePipe(nullptr, &server_mp, &client_mp)); |
MojoHandle server_mp2, client_mp2; |
+ MojoCreateMessagePipeOptions options; |
+ options.struct_size = sizeof(MojoCreateMessagePipeOptions); |
+ options.flags = MOJO_CREATE_MESSAGE_PIPE_OPTIONS_FLAG_TRANSFERABLE; |
ASSERT_EQ(MOJO_RESULT_OK, |
- MojoCreateMessagePipe(nullptr, &server_mp2, &client_mp2)); |
+ MojoCreateMessagePipe(&options, &server_mp2, &client_mp2)); |
// Write to server2 and wait for client2 to be readable before sending it. |
// client2's MessagePipeDispatcher will have the message below in its |
@@ -165,9 +161,12 @@ TEST_F(EmbedderTest, SendMessagePipeWithWriteQueue) { |
ASSERT_EQ(MOJO_RESULT_OK, |
MojoCreateMessagePipe(nullptr, &server_mp, &client_mp)); |
+ MojoCreateMessagePipeOptions options; |
+ options.struct_size = sizeof(MojoCreateMessagePipeOptions); |
+ options.flags = MOJO_CREATE_MESSAGE_PIPE_OPTIONS_FLAG_TRANSFERABLE; |
MojoHandle server_mp2, client_mp2; |
ASSERT_EQ(MOJO_RESULT_OK, |
- MojoCreateMessagePipe(nullptr, &server_mp2, &client_mp2)); |
+ MojoCreateMessagePipe(&options, &server_mp2, &client_mp2)); |
static const size_t kNumMessages = 1001; |
for (size_t i = 0; i < kNumMessages; i++) { |
@@ -465,114 +464,108 @@ TEST_F(EmbedderTest, MAYBE_MultiprocessChannels) { |
} |
MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) { |
- base::MessageLoop message_loop; |
ScopedPlatformHandle client_platform_handle = |
test::MultiprocessTestHelper::client_platform_handle.Pass(); |
EXPECT_TRUE(client_platform_handle.is_valid()); |
- base::TestIOThread test_io_thread(base::TestIOThread::kAutoStart); |
- |
- { |
- test::ScopedIPCSupport ipc_support(test_io_thread.task_runner()); |
- MojoHandle client_mp = CreateMessagePipe( |
- client_platform_handle.Pass()).release().value(); |
+ MojoHandle client_mp = CreateMessagePipe( |
+ client_platform_handle.Pass()).release().value(); |
- // 1. Read the first message from |client_mp|. |
- MojoHandleSignalsState state; |
- ASSERT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
- MOJO_DEADLINE_INDEFINITE, &state)); |
- ASSERT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
- ASSERT_EQ(kSignalAll, state.satisfiable_signals); |
+ // 1. Read the first message from |client_mp|. |
+ MojoHandleSignalsState state; |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
+ MOJO_DEADLINE_INDEFINITE, &state)); |
+ ASSERT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
+ ASSERT_EQ(kSignalAll, state.satisfiable_signals); |
- char buffer[1000] = {}; |
- uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, |
- MOJO_READ_MESSAGE_FLAG_NONE)); |
- const char kHello[] = "hello"; |
- ASSERT_EQ(sizeof(kHello), num_bytes); |
- EXPECT_STREQ(kHello, buffer); |
+ char buffer[1000] = {}; |
+ uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, |
+ MOJO_READ_MESSAGE_FLAG_NONE)); |
+ const char kHello[] = "hello"; |
+ ASSERT_EQ(sizeof(kHello), num_bytes); |
+ EXPECT_STREQ(kHello, buffer); |
- // 2. Write a message to |client_mp| (attaching nothing). |
- const char kWorld[] = "world!"; |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoWriteMessage(client_mp, kWorld, |
- static_cast<uint32_t>(sizeof(kWorld)), nullptr, |
- 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
+ // 2. Write a message to |client_mp| (attaching nothing). |
+ const char kWorld[] = "world!"; |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoWriteMessage(client_mp, kWorld, |
+ static_cast<uint32_t>(sizeof(kWorld)), nullptr, |
+ 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
- // 4. Read a message from |client_mp|, which should have |mp1| attached. |
- ASSERT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
- MOJO_DEADLINE_INDEFINITE, &state)); |
- // The other end of the handle may or may not be closed at this point, so we |
- // can't test MOJO_HANDLE_SIGNAL_WRITABLE or MOJO_HANDLE_SIGNAL_PEER_CLOSED. |
- ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
- state.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE); |
- ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
- state.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE); |
- // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd |
- // die (again due to |Channel::HandleLocalError()|). |
- memset(buffer, 0, sizeof(buffer)); |
- num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
- MojoHandle mp1 = MOJO_HANDLE_INVALID; |
- uint32_t num_handles = 1; |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, |
- MOJO_READ_MESSAGE_FLAG_NONE)); |
- const char kBar[] = "Bar"; |
- ASSERT_EQ(sizeof(kBar), num_bytes); |
- EXPECT_STREQ(kBar, buffer); |
- ASSERT_EQ(1u, num_handles); |
- EXPECT_NE(mp1, MOJO_HANDLE_INVALID); |
- // TODO(vtl): If the scope were to end here (and the two handles closed), |
- // we'd die due to |Channel::RunRemoteMessagePipeEndpoint()| not handling |
- // write errors (assuming the parent had closed the pipe). |
+ // 4. Read a message from |client_mp|, which should have |mp1| attached. |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
+ MOJO_DEADLINE_INDEFINITE, &state)); |
+ // The other end of the handle may or may not be closed at this point, so we |
+ // can't test MOJO_HANDLE_SIGNAL_WRITABLE or MOJO_HANDLE_SIGNAL_PEER_CLOSED. |
+ ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
+ state.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE); |
+ ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
+ state.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE); |
+ // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd |
+ // die (again due to |Channel::HandleLocalError()|). |
+ memset(buffer, 0, sizeof(buffer)); |
+ num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
+ MojoHandle mp1 = MOJO_HANDLE_INVALID; |
+ uint32_t num_handles = 1; |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, |
+ MOJO_READ_MESSAGE_FLAG_NONE)); |
+ const char kBar[] = "Bar"; |
+ ASSERT_EQ(sizeof(kBar), num_bytes); |
+ EXPECT_STREQ(kBar, buffer); |
+ ASSERT_EQ(1u, num_handles); |
+ EXPECT_NE(mp1, MOJO_HANDLE_INVALID); |
+ // TODO(vtl): If the scope were to end here (and the two handles closed), |
+ // we'd die due to |Channel::RunRemoteMessagePipeEndpoint()| not handling |
+ // write errors (assuming the parent had closed the pipe). |
- // 6. Close |client_mp|. |
- ASSERT_EQ(MOJO_RESULT_OK, MojoClose(client_mp)); |
+ // 6. Close |client_mp|. |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoClose(client_mp)); |
- // Create a new message pipe (endpoints |mp2| and |mp3|). |
- MojoHandle mp2, mp3; |
- ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &mp2, &mp3)); |
+ // Create a new message pipe (endpoints |mp2| and |mp3|). |
+ MojoHandle mp2, mp3; |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &mp2, &mp3)); |
- // 7. Write a message to |mp3|. |
- const char kBaz[] = "baz"; |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoWriteMessage(mp3, kBaz, static_cast<uint32_t>(sizeof(kBaz)), |
- nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
+ // 7. Write a message to |mp3|. |
+ const char kBaz[] = "baz"; |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoWriteMessage(mp3, kBaz, static_cast<uint32_t>(sizeof(kBaz)), |
+ nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
- // 8. Close |mp3|. |
- ASSERT_EQ(MOJO_RESULT_OK, MojoClose(mp3)); |
+ // 8. Close |mp3|. |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoClose(mp3)); |
- // 9. Write a message to |mp1|, attaching |mp2|. |
- const char kQuux[] = "quux"; |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoWriteMessage(mp1, kQuux, static_cast<uint32_t>(sizeof(kQuux)), |
- &mp2, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
- mp2 = MOJO_HANDLE_INVALID; |
+ // 9. Write a message to |mp1|, attaching |mp2|. |
+ const char kQuux[] = "quux"; |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoWriteMessage(mp1, kQuux, static_cast<uint32_t>(sizeof(kQuux)), |
+ &mp2, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
+ mp2 = MOJO_HANDLE_INVALID; |
- // 3. Read a message from |mp1|. |
- ASSERT_EQ(MOJO_RESULT_OK, MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
- MOJO_DEADLINE_INDEFINITE, &state)); |
- ASSERT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
- ASSERT_EQ(kSignalAll, state.satisfiable_signals); |
+ // 3. Read a message from |mp1|. |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
+ MOJO_DEADLINE_INDEFINITE, &state)); |
+ ASSERT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
+ ASSERT_EQ(kSignalAll, state.satisfiable_signals); |
- memset(buffer, 0, sizeof(buffer)); |
- num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
- ASSERT_EQ(MOJO_RESULT_OK, |
- MojoReadMessage(mp1, buffer, &num_bytes, nullptr, nullptr, |
- MOJO_READ_MESSAGE_FLAG_NONE)); |
- const char kFoo[] = "FOO"; |
- ASSERT_EQ(sizeof(kFoo), num_bytes); |
- EXPECT_STREQ(kFoo, buffer); |
+ memset(buffer, 0, sizeof(buffer)); |
+ num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
+ ASSERT_EQ(MOJO_RESULT_OK, |
+ MojoReadMessage(mp1, buffer, &num_bytes, nullptr, nullptr, |
+ MOJO_READ_MESSAGE_FLAG_NONE)); |
+ const char kFoo[] = "FOO"; |
+ ASSERT_EQ(sizeof(kFoo), num_bytes); |
+ EXPECT_STREQ(kFoo, buffer); |
- // 11. Wait on |mp1| (which should eventually fail) and then close it. |
- ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
- MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
- MOJO_DEADLINE_INDEFINITE, &state)); |
- ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); |
- ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); |
- ASSERT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); |
- } |
+ // 11. Wait on |mp1| (which should eventually fail) and then close it. |
+ ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
+ MOJO_DEADLINE_INDEFINITE, &state)); |
+ ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); |
+ ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); |
+ ASSERT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); |
} |
// TODO(vtl): Test immediate write & close. |