| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string.h> | 5 #include <string.h> |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 // Reads a single message with a shared buffer handle, maps the buffer, copies | 55 // Reads a single message with a shared buffer handle, maps the buffer, copies |
| 56 // the message contents into it, then exits. | 56 // the message contents into it, then exits. |
| 57 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CopyToBufferClient, SharedBufferTest, h) { | 57 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CopyToBufferClient, SharedBufferTest, h) { |
| 58 MojoHandle b; | 58 MojoHandle b; |
| 59 std::string message = ReadMessageWithHandles(h, &b, 1); | 59 std::string message = ReadMessageWithHandles(h, &b, 1); |
| 60 WriteToBuffer(b, 0, message); | 60 WriteToBuffer(b, 0, message); |
| 61 | 61 |
| 62 EXPECT_EQ("quit", ReadMessage(h)); | 62 EXPECT_EQ("quit", ReadMessage(h)); |
| 63 } | 63 } |
| 64 | 64 |
| 65 TEST_F(SharedBufferTest, PassSharedBufferCrossProcess) { | 65 #if defined(OS_ANDROID) |
| 66 // Android multi-process tests are not executing the new process. This is flaky. |
| 67 #define MAYBE_PassSharedBufferCrossProcess DISABLED_PassSharedBufferCrossProcess |
| 68 #else |
| 69 #define MAYBE_PassSharedBufferCrossProcess PassSharedBufferCrossProcess |
| 70 #endif |
| 71 TEST_F(SharedBufferTest, MAYBE_PassSharedBufferCrossProcess) { |
| 66 const std::string message = "hello"; | 72 const std::string message = "hello"; |
| 67 MojoHandle b = CreateBuffer(message.size()); | 73 MojoHandle b = CreateBuffer(message.size()); |
| 68 | 74 |
| 69 RUN_CHILD_ON_PIPE(CopyToBufferClient, h) | 75 RUN_CHILD_ON_PIPE(CopyToBufferClient, h) |
| 70 MojoHandle dupe = DuplicateBuffer(b); | 76 MojoHandle dupe = DuplicateBuffer(b); |
| 71 WriteMessageWithHandles(h, message, &dupe, 1); | 77 WriteMessageWithHandles(h, message, &dupe, 1); |
| 72 WriteMessage(h, "quit"); | 78 WriteMessage(h, "quit"); |
| 73 END_CHILD() | 79 END_CHILD() |
| 74 | 80 |
| 75 ExpectBufferContents(b, 0, message); | 81 ExpectBufferContents(b, 0, message); |
| 76 } | 82 } |
| 77 | 83 |
| 78 // Creates a new buffer, maps it, writes a message contents to it, unmaps it, | 84 // Creates a new buffer, maps it, writes a message contents to it, unmaps it, |
| 79 // and finally passes it back to the parent. | 85 // and finally passes it back to the parent. |
| 80 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CreateBufferClient, SharedBufferTest, h) { | 86 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CreateBufferClient, SharedBufferTest, h) { |
| 81 std::string message = ReadMessage(h); | 87 std::string message = ReadMessage(h); |
| 82 MojoHandle b = CreateBuffer(message.size()); | 88 MojoHandle b = CreateBuffer(message.size()); |
| 83 WriteToBuffer(b, 0, message); | 89 WriteToBuffer(b, 0, message); |
| 84 WriteMessageWithHandles(h, "have a buffer", &b, 1); | 90 WriteMessageWithHandles(h, "have a buffer", &b, 1); |
| 85 | 91 |
| 86 EXPECT_EQ("quit", ReadMessage(h)); | 92 EXPECT_EQ("quit", ReadMessage(h)); |
| 87 } | 93 } |
| 88 | 94 |
| 89 TEST_F(SharedBufferTest, PassSharedBufferFromChild) { | 95 #if defined(OS_ANDROID) |
| 96 // Android multi-process tests are not executing the new process. This is flaky. |
| 97 #define MAYBE_PassSharedBufferFromChild DISABLED_PassSharedBufferFromChild |
| 98 #else |
| 99 #define MAYBE_PassSharedBufferFromChild PassSharedBufferFromChild |
| 100 #endif |
| 101 TEST_F(SharedBufferTest, MAYBE_PassSharedBufferFromChild) { |
| 90 const std::string message = "hello"; | 102 const std::string message = "hello"; |
| 91 MojoHandle b; | 103 MojoHandle b; |
| 92 RUN_CHILD_ON_PIPE(CreateBufferClient, h) | 104 RUN_CHILD_ON_PIPE(CreateBufferClient, h) |
| 93 WriteMessage(h, message); | 105 WriteMessage(h, message); |
| 94 ReadMessageWithHandles(h, &b, 1); | 106 ReadMessageWithHandles(h, &b, 1); |
| 95 WriteMessage(h, "quit"); | 107 WriteMessage(h, "quit"); |
| 96 END_CHILD() | 108 END_CHILD() |
| 97 | 109 |
| 98 ExpectBufferContents(b, 0, message); | 110 ExpectBufferContents(b, 0, message); |
| 99 } | 111 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 126 MojoHandle b; | 138 MojoHandle b; |
| 127 ReadMessageWithHandles(other_child, &b, 1); | 139 ReadMessageWithHandles(other_child, &b, 1); |
| 128 | 140 |
| 129 // Write the message from the parent into the buffer and exit. | 141 // Write the message from the parent into the buffer and exit. |
| 130 WriteToBuffer(b, 0, message); | 142 WriteToBuffer(b, 0, message); |
| 131 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); | 143 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); |
| 132 EXPECT_EQ("quit", ReadMessage(h)); | 144 EXPECT_EQ("quit", ReadMessage(h)); |
| 133 WriteMessage(h, "ok"); | 145 WriteMessage(h, "ok"); |
| 134 } | 146 } |
| 135 | 147 |
| 136 TEST_F(SharedBufferTest, PassSharedBufferFromChildToChild) { | 148 #if defined(OS_ANDROID) |
| 149 // Android multi-process tests are not executing the new process. This is flaky. |
| 150 #define MAYBE_PassSharedBufferFromChildToChild \ |
| 151 DISABLED_PassSharedBufferFromChildToChild |
| 152 #else |
| 153 #define MAYBE_PassSharedBufferFromChildToChild PassSharedBufferFromChildToChild |
| 154 #endif |
| 155 TEST_F(SharedBufferTest, MAYBE_PassSharedBufferFromChildToChild) { |
| 137 const std::string message = "hello"; | 156 const std::string message = "hello"; |
| 138 MojoHandle p0, p1; | 157 MojoHandle p0, p1; |
| 139 CreateMessagePipe(&p0, &p1); | 158 CreateMessagePipe(&p0, &p1); |
| 140 | 159 |
| 141 MojoHandle b; | 160 MojoHandle b; |
| 142 RUN_CHILD_ON_PIPE(CreateAndPassBuffer, h0) | 161 RUN_CHILD_ON_PIPE(CreateAndPassBuffer, h0) |
| 143 RUN_CHILD_ON_PIPE(ReceiveAndEditBuffer, h1) | 162 RUN_CHILD_ON_PIPE(ReceiveAndEditBuffer, h1) |
| 144 // Send one end of the pipe to each child. The first child will create | 163 // Send one end of the pipe to each child. The first child will create |
| 145 // and pass a buffer to the second child and back to us. The second child | 164 // and pass a buffer to the second child and back to us. The second child |
| 146 // will write our message into the buffer. | 165 // will write our message into the buffer. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 std::string message = ReadMessageWithHandles(parent, &pipe, 1); | 209 std::string message = ReadMessageWithHandles(parent, &pipe, 1); |
| 191 WriteMessageWithHandles(child, message, &pipe, 1); | 210 WriteMessageWithHandles(child, message, &pipe, 1); |
| 192 | 211 |
| 193 EXPECT_EQ("quit", ReadMessage(parent)); | 212 EXPECT_EQ("quit", ReadMessage(parent)); |
| 194 WriteMessage(child, "quit"); | 213 WriteMessage(child, "quit"); |
| 195 EXPECT_EQ("ok", ReadMessage(child)); | 214 EXPECT_EQ("ok", ReadMessage(child)); |
| 196 WriteMessage(parent, "ok"); | 215 WriteMessage(parent, "ok"); |
| 197 END_CHILD() | 216 END_CHILD() |
| 198 } | 217 } |
| 199 | 218 |
| 200 TEST_F(SharedBufferTest, PassHandleBetweenCousins) { | 219 #if defined(OS_ANDROID) |
| 220 // Android multi-process tests are not executing the new process. This is flaky. |
| 221 #define MAYBE_PassHandleBetweenCousins DISABLED_PassHandleBetweenCousins |
| 222 #else |
| 223 #define MAYBE_PassHandleBetweenCousins PassHandleBetweenCousins |
| 224 #endif |
| 225 TEST_F(SharedBufferTest, MAYBE_PassHandleBetweenCousins) { |
| 201 const std::string message = "hello"; | 226 const std::string message = "hello"; |
| 202 MojoHandle p0, p1; | 227 MojoHandle p0, p1; |
| 203 CreateMessagePipe(&p0, &p1); | 228 CreateMessagePipe(&p0, &p1); |
| 204 | 229 |
| 205 // Spawn two children who will each spawn their own child. Make sure the | 230 // Spawn two children who will each spawn their own child. Make sure the |
| 206 // grandchildren (cousins to each other) can pass platform handles. | 231 // grandchildren (cousins to each other) can pass platform handles. |
| 207 MojoHandle b; | 232 MojoHandle b; |
| 208 RUN_CHILD_ON_PIPE(CreateAndPassBufferParent, child1) | 233 RUN_CHILD_ON_PIPE(CreateAndPassBufferParent, child1) |
| 209 RUN_CHILD_ON_PIPE(ReceiveAndEditBufferParent, child2) | 234 RUN_CHILD_ON_PIPE(ReceiveAndEditBufferParent, child2) |
| 210 MojoHandle pipe[2]; | 235 MojoHandle pipe[2]; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 225 | 250 |
| 226 // The second grandchild should have written this message. | 251 // The second grandchild should have written this message. |
| 227 ExpectBufferContents(b, 0, message); | 252 ExpectBufferContents(b, 0, message); |
| 228 } | 253 } |
| 229 | 254 |
| 230 #endif // !defined(OS_IOS) | 255 #endif // !defined(OS_IOS) |
| 231 | 256 |
| 232 } // namespace | 257 } // namespace |
| 233 } // namespace edk | 258 } // namespace edk |
| 234 } // namespace mojo | 259 } // namespace mojo |
| OLD | NEW |