| Index: mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| diff --git a/mojo/edk/system/multiprocess_message_pipe_unittest.cc b/mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| index 946322c9b97de509f7286f9fc8812c3aaad9db56..61efd8e890d737d7f98951e0e493f885d3755448 100644
|
| --- a/mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| +++ b/mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| @@ -11,6 +11,7 @@
|
| #include <utility>
|
| #include <vector>
|
|
|
| +#include "base/bind.h"
|
| #include "base/containers/hash_tables.h"
|
| #include "base/files/file_path.h"
|
| #include "base/files/file_util.h"
|
| @@ -1280,6 +1281,61 @@ TEST_F(MultiprocessMessagePipeTest, BootstrapMessagePipeAsync) {
|
| END_CHILD()
|
| }
|
|
|
| +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(BadMessageClient, MultiprocessMessagePipeTest,
|
| + parent) {
|
| + MojoHandle pipe;
|
| + EXPECT_EQ("hi", ReadMessageWithHandles(parent, &pipe, 1));
|
| + WriteMessage(pipe, "derp");
|
| + EXPECT_EQ("bye", ReadMessage(parent));
|
| +}
|
| +
|
| +void OnBadMessage(bool* flag) { *flag = true; }
|
| +
|
| +TEST_F(MultiprocessMessagePipeTest, NotifyBadMessage) {
|
| + bool first_process_bad = false;
|
| + bool second_process_bad = false;
|
| +
|
| + set_bad_message_callback(base::Bind(&OnBadMessage, &first_process_bad));
|
| + RUN_CHILD_ON_PIPE(BadMessageClient, child1)
|
| + set_bad_message_callback(base::Bind(&OnBadMessage, &second_process_bad));
|
| + RUN_CHILD_ON_PIPE(BadMessageClient, child2)
|
| + MojoHandle a, b, c, d;
|
| + CreateMessagePipe(&a, &b);
|
| + CreateMessagePipe(&c, &d);
|
| + WriteMessageWithHandles(child1, "hi", &b, 1);
|
| + WriteMessageWithHandles(child2, "hi", &d, 1);
|
| +
|
| + // Read a message from the pipe we sent to child1 and flag it as bad.
|
| + ASSERT_EQ(MOJO_RESULT_OK, MojoWait(a, MOJO_HANDLE_SIGNAL_READABLE,
|
| + MOJO_DEADLINE_INDEFINITE, nullptr));
|
| + uint32_t num_bytes = 0;
|
| + MojoMessageHandle message;
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + MojoReadMessageNew(a, &message, &num_bytes, nullptr, 0,
|
| + MOJO_READ_MESSAGE_FLAG_NONE));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoNotifyBadMessage(message));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoFreeMessage(message));
|
| +
|
| + // Read a message from the pipe we sent to child2 and flag it as bad.
|
| + ASSERT_EQ(MOJO_RESULT_OK, MojoWait(c, MOJO_HANDLE_SIGNAL_READABLE,
|
| + MOJO_DEADLINE_INDEFINITE, nullptr));
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + MojoReadMessageNew(c, &message, &num_bytes, nullptr, 0,
|
| + MOJO_READ_MESSAGE_FLAG_NONE));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoNotifyBadMessage(message));
|
| + EXPECT_EQ(MOJO_RESULT_OK, MojoFreeMessage(message));
|
| +
|
| + WriteMessage(child2, "bye");
|
| + END_CHILD();
|
| +
|
| + WriteMessage(child1, "bye");
|
| + END_CHILD()
|
| +
|
| + // Both flags should be set.
|
| + EXPECT_TRUE(first_process_bad);
|
| + EXPECT_TRUE(second_process_bad);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace edk
|
| } // namespace mojo
|
|
|