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 e3ecff3498e42a1b742e7eea4875acbfe006230d..0589880996d33ef5bb52ae668ebb16587b6a36dd 100644 |
--- a/mojo/edk/system/message_pipe_unittest.cc |
+++ b/mojo/edk/system/message_pipe_unittest.cc |
@@ -409,59 +409,94 @@ TEST_F(MessagePipeTest, BasicWaiting) { |
#if !defined(OS_IOS) |
-const size_t kPingPongIterations = 50000; |
+const size_t kPingPongHandlesPerIteration = 50; |
+const size_t kPingPongIterations = 500; |
-DEFINE_TEST_CLIENT_TEST_WITH_PIPE(DataPipeHandlePingPong, MessagePipeTest, h) { |
- // Wait for the consumer to become readable. |
+DEFINE_TEST_CLIENT_TEST_WITH_PIPE(HandlePingPong, MessagePipeTest, h) { |
+ // Waits for a handle to become readable and writes it back to the sender. |
for (size_t i = 0; i < kPingPongIterations; i++) { |
- MojoHandle handle; |
- ReadMessageWithHandles(h, &handle, 1); |
- WriteMessageWithHandles(h, "", &handle, 1); |
+ MojoHandle handles[kPingPongHandlesPerIteration]; |
+ ReadMessageWithHandles(h, handles, kPingPongHandlesPerIteration); |
+ WriteMessageWithHandles(h, "", handles, kPingPongHandlesPerIteration); |
} |
-} |
-// Test that sending a data pipe handle across processes doesn't leak resources. |
-// Currently times out on multiple platforms. crbug.com/585784 |
-TEST_F(MessagePipeTest, DISABLED_DataPipeConsumerHandlePingPong) { |
- MojoHandle p, c; |
- EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); |
- MojoClose(p); |
+ EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h, MOJO_HANDLE_SIGNAL_READABLE, |
+ MOJO_DEADLINE_INDEFINITE, nullptr)); |
+ char msg[4]; |
+ uint32_t num_bytes = 4; |
+ EXPECT_EQ(MOJO_RESULT_OK, ReadMessage(h, msg, &num_bytes)); |
+} |
- RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) |
- for (size_t i = 0; i < kPingPongIterations; i++) { |
- WriteMessageWithHandles(h, "", &c, 1); |
- ReadMessageWithHandles(h, &c, 1); |
+#if defined(OS_ANDROID) |
+// Android multi-process tests are not executing the new process. This is flaky. |
+#define MAYBE_DataPipeConsumerHandlePingPong \ |
+ DISABLED_DataPipeConsumerHandlePingPong |
+#else |
+#define MAYBE_DataPipeConsumerHandlePingPong DataPipeConsumerHandlePingPong |
+#endif |
+TEST_F(MessagePipeTest, MAYBE_DataPipeConsumerHandlePingPong) { |
+ MojoHandle p, c[kPingPongHandlesPerIteration]; |
+ for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) { |
+ EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c[i])); |
+ MojoClose(p); |
} |
+ |
+ RUN_CHILD_ON_PIPE(HandlePingPong, h) |
+ for (size_t i = 0; i < kPingPongIterations; i++) { |
+ WriteMessageWithHandles(h, "", c, kPingPongHandlesPerIteration); |
+ ReadMessageWithHandles(h, c, kPingPongHandlesPerIteration); |
+ } |
+ WriteMessage(h, "quit", 4); |
END_CHILD() |
- MojoClose(c); |
+ for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
+ MojoClose(c[i]); |
} |
-// Currently times out on multiple platforms. crbug.com/585784 |
-TEST_F(MessagePipeTest, DISABLED_DataPipeProducerHandlePingPong) { |
- MojoHandle p, c; |
- EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); |
- MojoClose(c); |
+#if defined(OS_ANDROID) |
+// Android multi-process tests are not executing the new process. This is flaky. |
+#define MAYBE_DataPipeProducerHandlePingPong \ |
+ DISABLED_DataPipeProducerHandlePingPong |
+#else |
+#define MAYBE_DataPipeProducerHandlePingPong DataPipeProducerHandlePingPong |
+#endif |
+TEST_F(MessagePipeTest, MAYBE_DataPipeProducerHandlePingPong) { |
+ MojoHandle p[kPingPongHandlesPerIteration], c; |
+ for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) { |
+ EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p[i], &c)); |
+ MojoClose(c); |
+ } |
- RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) |
+ RUN_CHILD_ON_PIPE(HandlePingPong, h) |
for (size_t i = 0; i < kPingPongIterations; i++) { |
- WriteMessageWithHandles(h, "", &p, 1); |
- ReadMessageWithHandles(h, &p, 1); |
+ WriteMessageWithHandles(h, "", p, kPingPongHandlesPerIteration); |
+ ReadMessageWithHandles(h, p, kPingPongHandlesPerIteration); |
} |
+ WriteMessage(h, "quit", 4); |
END_CHILD() |
- MojoClose(p); |
+ for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
+ MojoClose(p[i]); |
} |
-TEST_F(MessagePipeTest, DISABLED_SharedBufferHandlePingPong) { |
- MojoHandle buffer; |
- EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 1, &buffer)); |
- |
- RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) |
+#if defined(OS_ANDROID) |
+// Android multi-process tests are not executing the new process. This is flaky. |
+#define MAYBE_SharedBufferHandlePingPong DISABLED_SharedBufferHandlePingPong |
+#else |
+#define MAYBE_SharedBufferHandlePingPong SharedBufferHandlePingPong |
+#endif |
+TEST_F(MessagePipeTest, MAYBE_SharedBufferHandlePingPong) { |
+ MojoHandle buffers[kPingPongHandlesPerIteration]; |
+ for (size_t i = 0; i <kPingPongHandlesPerIteration; ++i) |
+ EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 1, &buffers[i])); |
+ |
+ RUN_CHILD_ON_PIPE(HandlePingPong, h) |
for (size_t i = 0; i < kPingPongIterations; i++) { |
- WriteMessageWithHandles(h, "", &buffer, 1); |
- ReadMessageWithHandles(h, &buffer, 1); |
+ WriteMessageWithHandles(h, "", buffers, kPingPongHandlesPerIteration); |
+ ReadMessageWithHandles(h, buffers, kPingPongHandlesPerIteration); |
} |
+ WriteMessage(h, "quit", 4); |
END_CHILD() |
- MojoClose(buffer); |
+ for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
+ MojoClose(buffers[i]); |
} |
#endif // !defined(OS_IOS) |