| 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 498980c9d0e99db6fca826a10c11e6a63077a76c..ad4eeb49887a88a13fe2c761d807b529501eb852 100644
|
| --- a/mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| +++ b/mojo/edk/system/multiprocess_message_pipe_unittest.cc
|
| @@ -31,9 +31,13 @@
|
| #include "mojo/public/c/system/buffer.h"
|
| #include "mojo/public/c/system/functions.h"
|
| #include "mojo/public/c/system/types.h"
|
| +#include "mojo/public/cpp/system/platform_handle.h"
|
| #include "mojo/public/cpp/system/watcher.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +#if defined(OS_ANDROID)
|
| +#include "base/test/android/jni_test_util.h"
|
| +#endif
|
|
|
| namespace mojo {
|
| namespace edk {
|
| @@ -107,11 +111,13 @@ DEFINE_TEST_CLIENT_WITH_PIPE(EchoEcho, MultiprocessMessagePipeTest, h) {
|
|
|
| std::string read_buffer(1000, '\0');
|
| uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size());
|
| - CHECK_EQ(MojoReadMessage(h, &read_buffer[0],
|
| - &read_buffer_size, nullptr,
|
| - 0, MOJO_READ_MESSAGE_FLAG_NONE),
|
| + MojoHandle handles[10];
|
| + uint32_t num_handles = 10;
|
| + CHECK_EQ(MojoReadMessage(h, &read_buffer[0], &read_buffer_size, handles,
|
| + &num_handles, MOJO_READ_MESSAGE_FLAG_NONE),
|
| MOJO_RESULT_OK);
|
| read_buffer.resize(read_buffer_size);
|
| +
|
| VLOG(2) << "Child got: " << read_buffer;
|
|
|
| if (read_buffer == quitquitquit) {
|
| @@ -120,10 +126,11 @@ DEFINE_TEST_CLIENT_WITH_PIPE(EchoEcho, MultiprocessMessagePipeTest, h) {
|
| }
|
|
|
| std::string write_buffer = read_buffer + read_buffer;
|
| - CHECK_EQ(MojoWriteMessage(h, write_buffer.data(),
|
| - static_cast<uint32_t>(write_buffer.size()),
|
| - nullptr, 0u, MOJO_WRITE_MESSAGE_FLAG_NONE),
|
| - MOJO_RESULT_OK);
|
| + CHECK_EQ(
|
| + MojoWriteMessage(h, write_buffer.data(),
|
| + static_cast<uint32_t>(write_buffer.size()), handles,
|
| + num_handles, MOJO_WRITE_MESSAGE_FLAG_NONE),
|
| + MOJO_RESULT_OK);
|
| }
|
|
|
| return rv;
|
| @@ -1328,6 +1335,68 @@ void OnProcessError(std::string* out_error, const std::string& error) {
|
| *out_error = error;
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +TEST_F(MultiprocessMessagePipeTest, BasicParcelable) {
|
| + RUN_CHILD_ON_PIPE(EchoEcho, h)
|
| + MojoHandle handles[2];
|
| + base::android::ScopedJavaLocalRef<jobject> parcelable1 =
|
| + base::android::test::CreateJavaPoint(11, 22);
|
| + base::android::ScopedJavaLocalRef<jobject> parcelable2 =
|
| + base::android::test::CreateJavaPoint(88, 99);
|
| + ScopedHandle parcelable1_handle = WrapParcelable(parcelable1);
|
| + handles[0] = parcelable1_handle.release().value();
|
| + ScopedHandle parcelable2_handle = WrapParcelable(parcelable2);
|
| + handles[1] = parcelable2_handle.release().value();
|
| +
|
| + std::string hello("hello");
|
| + WriteMessageWithHandles(h, hello, handles, 2u);
|
| +
|
| + HandleSignalsState hss;
|
| + ASSERT_EQ(MOJO_RESULT_OK, MojoWait(h, MOJO_HANDLE_SIGNAL_READABLE,
|
| + MOJO_DEADLINE_INDEFINITE, &hss));
|
| + // The child may or may not have closed its end of the message pipe and died
|
| + // (and we may or may not know it yet), so our end may or may not appear as
|
| + // writable.
|
| + EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE));
|
| + EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE));
|
| +
|
| + std::string read_buffer(1000, '\0');
|
| + uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size());
|
| + MojoHandle received_handles[10];
|
| + uint32_t num_received_handles = 10;
|
| + CHECK_EQ(
|
| + MojoReadMessage(h, &read_buffer[0], &read_buffer_size, received_handles,
|
| + &num_received_handles, MOJO_READ_MESSAGE_FLAG_NONE),
|
| + MOJO_RESULT_OK);
|
| + read_buffer.resize(read_buffer_size);
|
| + VLOG(2) << "Parent got: " << read_buffer;
|
| + ASSERT_EQ(hello + hello, read_buffer);
|
| +
|
| + ASSERT_EQ(2U, num_received_handles);
|
| + base::android::ScopedJavaLocalRef<jobject> received_parcelable1;
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + UnwrapParcelable(MakeScopedHandle(Handle(received_handles[0])),
|
| + &received_parcelable1));
|
| + EXPECT_TRUE(base::android::test::AreJavaObjectsEqual(
|
| + parcelable1.obj(), received_parcelable1.obj()));
|
| +
|
| + base::android::ScopedJavaLocalRef<jobject> received_parcelable2;
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + UnwrapParcelable(MakeScopedHandle(Handle(received_handles[1])),
|
| + &received_parcelable2));
|
| + EXPECT_TRUE(base::android::test::AreJavaObjectsEqual(
|
| + parcelable2.obj(), received_parcelable2.obj()));
|
| +
|
| + std::string quitquitquit("quitquitquit");
|
| + CHECK_EQ(MojoWriteMessage(h, quitquitquit.data(),
|
| + static_cast<uint32_t>(quitquitquit.size()), nullptr,
|
| + 0u, MOJO_WRITE_MESSAGE_FLAG_NONE),
|
| + MOJO_RESULT_OK);
|
| + END_CHILD_AND_EXPECT_EXIT_CODE(1 % 100);
|
| +}
|
| +
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| TEST_F(MultiprocessMessagePipeTest, NotifyBadMessage) {
|
| const std::string kFirstErrorMessage = "everything is terrible!";
|
| const std::string kSecondErrorMessage = "not the bits you're looking for";
|
|
|