OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/embedder/embedder.h" | 5 #include "mojo/embedder/embedder.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 | 126 |
127 // We can write to a message pipe handle immediately. | 127 // We can write to a message pipe handle immediately. |
128 const char kHello[] = "hello"; | 128 const char kHello[] = "hello"; |
129 EXPECT_EQ(MOJO_RESULT_OK, | 129 EXPECT_EQ(MOJO_RESULT_OK, |
130 MojoWriteMessage(server_mp, kHello, | 130 MojoWriteMessage(server_mp, kHello, |
131 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, | 131 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, |
132 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 132 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
133 | 133 |
134 // Now wait for the other side to become readable. | 134 // Now wait for the other side to become readable. |
135 EXPECT_EQ(MOJO_RESULT_OK, | 135 EXPECT_EQ(MOJO_RESULT_OK, |
136 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 136 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
137 MOJO_DEADLINE_INDEFINITE)); | 137 MOJO_DEADLINE_INDEFINITE)); |
138 | 138 |
139 char buffer[1000] = {}; | 139 char buffer[1000] = {}; |
140 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 140 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
141 EXPECT_EQ(MOJO_RESULT_OK, | 141 EXPECT_EQ(MOJO_RESULT_OK, |
142 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, | 142 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, |
143 MOJO_READ_MESSAGE_FLAG_NONE)); | 143 MOJO_READ_MESSAGE_FLAG_NONE)); |
144 EXPECT_EQ(sizeof(kHello), num_bytes); | 144 EXPECT_EQ(sizeof(kHello), num_bytes); |
145 EXPECT_STREQ(kHello, buffer); | 145 EXPECT_STREQ(kHello, buffer); |
146 | 146 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 | 193 |
194 // Write another message to |h0|. | 194 // Write another message to |h0|. |
195 const char kFoo[] = "foo"; | 195 const char kFoo[] = "foo"; |
196 EXPECT_EQ(MOJO_RESULT_OK, | 196 EXPECT_EQ(MOJO_RESULT_OK, |
197 MojoWriteMessage(h0, kFoo, | 197 MojoWriteMessage(h0, kFoo, |
198 static_cast<uint32_t>(sizeof(kFoo)), NULL, 0, | 198 static_cast<uint32_t>(sizeof(kFoo)), NULL, 0, |
199 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 199 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
200 | 200 |
201 // Wait for |client_mp| to become readable. | 201 // Wait for |client_mp| to become readable. |
202 EXPECT_EQ(MOJO_RESULT_OK, | 202 EXPECT_EQ(MOJO_RESULT_OK, |
203 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 203 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
204 MOJO_DEADLINE_INDEFINITE)); | 204 MOJO_DEADLINE_INDEFINITE)); |
205 | 205 |
206 // Read a message from |client_mp|. | 206 // Read a message from |client_mp|. |
207 char buffer[1000] = {}; | 207 char buffer[1000] = {}; |
208 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 208 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
209 MojoHandle handles[10] = {}; | 209 MojoHandle handles[10] = {}; |
210 uint32_t num_handles = arraysize(handles); | 210 uint32_t num_handles = arraysize(handles); |
211 EXPECT_EQ(MOJO_RESULT_OK, | 211 EXPECT_EQ(MOJO_RESULT_OK, |
212 MojoReadMessage(client_mp, buffer, &num_bytes, handles, | 212 MojoReadMessage(client_mp, buffer, &num_bytes, handles, |
213 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); | 213 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); |
214 EXPECT_EQ(sizeof(kWorld), num_bytes); | 214 EXPECT_EQ(sizeof(kWorld), num_bytes); |
215 EXPECT_STREQ(kWorld, buffer); | 215 EXPECT_STREQ(kWorld, buffer); |
216 EXPECT_EQ(1u, num_handles); | 216 EXPECT_EQ(1u, num_handles); |
217 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); | 217 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); |
218 h1 = handles[0]; | 218 h1 = handles[0]; |
219 | 219 |
220 // Wait for |h1| to become readable. | 220 // Wait for |h1| to become readable. |
221 EXPECT_EQ(MOJO_RESULT_OK, | 221 EXPECT_EQ(MOJO_RESULT_OK, |
222 MojoWait(h1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 222 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
| 223 MOJO_DEADLINE_INDEFINITE)); |
223 | 224 |
224 // Read a message from |h1|. | 225 // Read a message from |h1|. |
225 memset(buffer, 0, sizeof(buffer)); | 226 memset(buffer, 0, sizeof(buffer)); |
226 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 227 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
227 memset(handles, 0, sizeof(handles)); | 228 memset(handles, 0, sizeof(handles)); |
228 num_handles = arraysize(handles); | 229 num_handles = arraysize(handles); |
229 EXPECT_EQ(MOJO_RESULT_OK, | 230 EXPECT_EQ(MOJO_RESULT_OK, |
230 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, | 231 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, |
231 MOJO_READ_MESSAGE_FLAG_NONE)); | 232 MOJO_READ_MESSAGE_FLAG_NONE)); |
232 EXPECT_EQ(sizeof(kHello), num_bytes); | 233 EXPECT_EQ(sizeof(kHello), num_bytes); |
233 EXPECT_STREQ(kHello, buffer); | 234 EXPECT_STREQ(kHello, buffer); |
234 EXPECT_EQ(0u, num_handles); | 235 EXPECT_EQ(0u, num_handles); |
235 | 236 |
236 // Wait for |h1| to become readable (again). | 237 // Wait for |h1| to become readable (again). |
237 EXPECT_EQ(MOJO_RESULT_OK, | 238 EXPECT_EQ(MOJO_RESULT_OK, |
238 MojoWait(h1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 239 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
| 240 MOJO_DEADLINE_INDEFINITE)); |
239 | 241 |
240 // Read the second message from |h1|. | 242 // Read the second message from |h1|. |
241 memset(buffer, 0, sizeof(buffer)); | 243 memset(buffer, 0, sizeof(buffer)); |
242 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 244 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
243 EXPECT_EQ(MOJO_RESULT_OK, | 245 EXPECT_EQ(MOJO_RESULT_OK, |
244 MojoReadMessage(h1, buffer, &num_bytes, NULL, NULL, | 246 MojoReadMessage(h1, buffer, &num_bytes, NULL, NULL, |
245 MOJO_READ_MESSAGE_FLAG_NONE)); | 247 MOJO_READ_MESSAGE_FLAG_NONE)); |
246 EXPECT_EQ(sizeof(kFoo), num_bytes); | 248 EXPECT_EQ(sizeof(kFoo), num_bytes); |
247 EXPECT_STREQ(kFoo, buffer); | 249 EXPECT_STREQ(kFoo, buffer); |
248 | 250 |
249 // Write a message to |h1|. | 251 // Write a message to |h1|. |
250 const char kBarBaz[] = "barbaz"; | 252 const char kBarBaz[] = "barbaz"; |
251 EXPECT_EQ(MOJO_RESULT_OK, | 253 EXPECT_EQ(MOJO_RESULT_OK, |
252 MojoWriteMessage(h1, kBarBaz, | 254 MojoWriteMessage(h1, kBarBaz, |
253 static_cast<uint32_t>(sizeof(kBarBaz)), NULL, 0, | 255 static_cast<uint32_t>(sizeof(kBarBaz)), NULL, 0, |
254 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 256 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
255 | 257 |
256 // Wait for |h0| to become readable. | 258 // Wait for |h0| to become readable. |
257 EXPECT_EQ(MOJO_RESULT_OK, | 259 EXPECT_EQ(MOJO_RESULT_OK, |
258 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 260 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, |
| 261 MOJO_DEADLINE_INDEFINITE)); |
259 | 262 |
260 // Read a message from |h0|. | 263 // Read a message from |h0|. |
261 memset(buffer, 0, sizeof(buffer)); | 264 memset(buffer, 0, sizeof(buffer)); |
262 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 265 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
263 EXPECT_EQ(MOJO_RESULT_OK, | 266 EXPECT_EQ(MOJO_RESULT_OK, |
264 MojoReadMessage(h0, buffer, &num_bytes, NULL, NULL, | 267 MojoReadMessage(h0, buffer, &num_bytes, NULL, NULL, |
265 MOJO_READ_MESSAGE_FLAG_NONE)); | 268 MOJO_READ_MESSAGE_FLAG_NONE)); |
266 EXPECT_EQ(sizeof(kBarBaz), num_bytes); | 269 EXPECT_EQ(sizeof(kBarBaz), num_bytes); |
267 EXPECT_STREQ(kBarBaz, buffer); | 270 EXPECT_STREQ(kBarBaz, buffer); |
268 | 271 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 EXPECT_EQ(MOJO_RESULT_OK, | 316 EXPECT_EQ(MOJO_RESULT_OK, |
314 MojoWriteMessage(server_mp, kHello, | 317 MojoWriteMessage(server_mp, kHello, |
315 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, | 318 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, |
316 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 319 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
317 | 320 |
318 // TODO(vtl): If the scope were ended immediately here (maybe after closing | 321 // TODO(vtl): If the scope were ended immediately here (maybe after closing |
319 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. | 322 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. |
320 | 323 |
321 // 2. Read a message from |server_mp|. | 324 // 2. Read a message from |server_mp|. |
322 EXPECT_EQ(MOJO_RESULT_OK, | 325 EXPECT_EQ(MOJO_RESULT_OK, |
323 MojoWait(server_mp, MOJO_WAIT_FLAG_READABLE, | 326 MojoWait(server_mp, MOJO_HANDLE_SIGNAL_READABLE, |
324 MOJO_DEADLINE_INDEFINITE)); | 327 MOJO_DEADLINE_INDEFINITE)); |
325 char buffer[1000] = {}; | 328 char buffer[1000] = {}; |
326 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 329 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
327 EXPECT_EQ(MOJO_RESULT_OK, | 330 EXPECT_EQ(MOJO_RESULT_OK, |
328 MojoReadMessage(server_mp, buffer, &num_bytes, NULL, NULL, | 331 MojoReadMessage(server_mp, buffer, &num_bytes, NULL, NULL, |
329 MOJO_READ_MESSAGE_FLAG_NONE)); | 332 MOJO_READ_MESSAGE_FLAG_NONE)); |
330 const char kWorld[] = "world!"; | 333 const char kWorld[] = "world!"; |
331 EXPECT_EQ(sizeof(kWorld), num_bytes); | 334 EXPECT_EQ(sizeof(kWorld), num_bytes); |
332 EXPECT_STREQ(kWorld, buffer); | 335 EXPECT_STREQ(kWorld, buffer); |
333 | 336 |
(...skipping 14 matching lines...) Expand all Loading... |
348 MojoWriteMessage(server_mp, kBar, | 351 MojoWriteMessage(server_mp, kBar, |
349 static_cast<uint32_t>(sizeof(kBar)), &mp1, 1, | 352 static_cast<uint32_t>(sizeof(kBar)), &mp1, 1, |
350 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 353 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
351 mp1 = MOJO_HANDLE_INVALID; | 354 mp1 = MOJO_HANDLE_INVALID; |
352 | 355 |
353 // 5. Close |server_mp|. | 356 // 5. Close |server_mp|. |
354 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); | 357 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); |
355 | 358 |
356 // 9. Read a message from |mp0|, which should have |mp2| attached. | 359 // 9. Read a message from |mp0|, which should have |mp2| attached. |
357 EXPECT_EQ(MOJO_RESULT_OK, | 360 EXPECT_EQ(MOJO_RESULT_OK, |
358 MojoWait(mp0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 361 MojoWait(mp0, MOJO_HANDLE_SIGNAL_READABLE, |
| 362 MOJO_DEADLINE_INDEFINITE)); |
359 memset(buffer, 0, sizeof(buffer)); | 363 memset(buffer, 0, sizeof(buffer)); |
360 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 364 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
361 MojoHandle mp2 = MOJO_HANDLE_INVALID; | 365 MojoHandle mp2 = MOJO_HANDLE_INVALID; |
362 uint32_t num_handles = 1; | 366 uint32_t num_handles = 1; |
363 EXPECT_EQ(MOJO_RESULT_OK, | 367 EXPECT_EQ(MOJO_RESULT_OK, |
364 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, | 368 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, |
365 MOJO_READ_MESSAGE_FLAG_NONE)); | 369 MOJO_READ_MESSAGE_FLAG_NONE)); |
366 const char kQuux[] = "quux"; | 370 const char kQuux[] = "quux"; |
367 EXPECT_EQ(sizeof(kQuux), num_bytes); | 371 EXPECT_EQ(sizeof(kQuux), num_bytes); |
368 EXPECT_STREQ(kQuux, buffer); | 372 EXPECT_STREQ(kQuux, buffer); |
369 EXPECT_EQ(1u, num_handles); | 373 EXPECT_EQ(1u, num_handles); |
370 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); | 374 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); |
371 | 375 |
372 // 7. Read a message from |mp2|. | 376 // 7. Read a message from |mp2|. |
373 EXPECT_EQ(MOJO_RESULT_OK, | 377 EXPECT_EQ(MOJO_RESULT_OK, |
374 MojoWait(mp2, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 378 MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
| 379 MOJO_DEADLINE_INDEFINITE)); |
375 memset(buffer, 0, sizeof(buffer)); | 380 memset(buffer, 0, sizeof(buffer)); |
376 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 381 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
377 EXPECT_EQ(MOJO_RESULT_OK, | 382 EXPECT_EQ(MOJO_RESULT_OK, |
378 MojoReadMessage(mp2, buffer, &num_bytes, NULL, NULL, | 383 MojoReadMessage(mp2, buffer, &num_bytes, NULL, NULL, |
379 MOJO_READ_MESSAGE_FLAG_NONE)); | 384 MOJO_READ_MESSAGE_FLAG_NONE)); |
380 const char kBaz[] = "baz"; | 385 const char kBaz[] = "baz"; |
381 EXPECT_EQ(sizeof(kBaz), num_bytes); | 386 EXPECT_EQ(sizeof(kBaz), num_bytes); |
382 EXPECT_STREQ(kBaz, buffer); | 387 EXPECT_STREQ(kBaz, buffer); |
383 | 388 |
384 // 10. Close |mp0|. | 389 // 10. Close |mp0|. |
385 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); | 390 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); |
386 | 391 |
387 // 12. Wait on |mp2| (which should eventually fail) and then close it. | 392 // 12. Wait on |mp2| (which should eventually fail) and then close it. |
388 // TODO(vtl): crbug.com/351768 | 393 // TODO(vtl): crbug.com/351768 |
389 #if 0 | 394 #if 0 |
390 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 395 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
391 MojoWait(mp2, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 396 MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
| 397 MOJO_DEADLINE_INDEFINITE)); |
392 #endif | 398 #endif |
393 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); | 399 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); |
394 } | 400 } |
395 | 401 |
396 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); | 402 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); |
397 EXPECT_TRUE(test::Shutdown()); | 403 EXPECT_TRUE(test::Shutdown()); |
398 } | 404 } |
399 | 405 |
400 MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) { | 406 MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) { |
401 embedder::ScopedPlatformHandle client_platform_handle = | 407 embedder::ScopedPlatformHandle client_platform_handle = |
402 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass(); | 408 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass(); |
403 EXPECT_TRUE(client_platform_handle.is_valid()); | 409 EXPECT_TRUE(client_platform_handle.is_valid()); |
404 | 410 |
405 system::test::TestIOThread | 411 system::test::TestIOThread |
406 test_io_thread(system::test::TestIOThread::kAutoStart); | 412 test_io_thread(system::test::TestIOThread::kAutoStart); |
407 Init(); | 413 Init(); |
408 | 414 |
409 { | 415 { |
410 ScopedTestChannel client_channel(test_io_thread.task_runner(), | 416 ScopedTestChannel client_channel(test_io_thread.task_runner(), |
411 client_platform_handle.Pass()); | 417 client_platform_handle.Pass()); |
412 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); | 418 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); |
413 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); | 419 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); |
414 client_channel.WaitForChannelCreationCompletion(); | 420 client_channel.WaitForChannelCreationCompletion(); |
415 CHECK(client_channel.channel_info() != NULL); | 421 CHECK(client_channel.channel_info() != NULL); |
416 | 422 |
417 // 1. Read the first message from |client_mp|. | 423 // 1. Read the first message from |client_mp|. |
418 EXPECT_EQ(MOJO_RESULT_OK, | 424 EXPECT_EQ(MOJO_RESULT_OK, |
419 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 425 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
420 MOJO_DEADLINE_INDEFINITE)); | 426 MOJO_DEADLINE_INDEFINITE)); |
421 char buffer[1000] = {}; | 427 char buffer[1000] = {}; |
422 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 428 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
423 EXPECT_EQ(MOJO_RESULT_OK, | 429 EXPECT_EQ(MOJO_RESULT_OK, |
424 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, | 430 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, |
425 MOJO_READ_MESSAGE_FLAG_NONE)); | 431 MOJO_READ_MESSAGE_FLAG_NONE)); |
426 const char kHello[] = "hello"; | 432 const char kHello[] = "hello"; |
427 EXPECT_EQ(sizeof(kHello), num_bytes); | 433 EXPECT_EQ(sizeof(kHello), num_bytes); |
428 EXPECT_STREQ(kHello, buffer); | 434 EXPECT_STREQ(kHello, buffer); |
429 | 435 |
430 // 2. Write a message to |client_mp| (attaching nothing). | 436 // 2. Write a message to |client_mp| (attaching nothing). |
431 const char kWorld[] = "world!"; | 437 const char kWorld[] = "world!"; |
432 EXPECT_EQ(MOJO_RESULT_OK, | 438 EXPECT_EQ(MOJO_RESULT_OK, |
433 MojoWriteMessage(client_mp, kWorld, | 439 MojoWriteMessage(client_mp, kWorld, |
434 static_cast<uint32_t>(sizeof(kWorld)), NULL, 0, | 440 static_cast<uint32_t>(sizeof(kWorld)), NULL, 0, |
435 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 441 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
436 | 442 |
437 // 4. Read a message from |client_mp|, which should have |mp1| attached. | 443 // 4. Read a message from |client_mp|, which should have |mp1| attached. |
438 EXPECT_EQ(MOJO_RESULT_OK, | 444 EXPECT_EQ(MOJO_RESULT_OK, |
439 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 445 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
440 MOJO_DEADLINE_INDEFINITE)); | 446 MOJO_DEADLINE_INDEFINITE)); |
441 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd | 447 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd |
442 // die (again due to |Channel::HandleLocalError()|). | 448 // die (again due to |Channel::HandleLocalError()|). |
443 memset(buffer, 0, sizeof(buffer)); | 449 memset(buffer, 0, sizeof(buffer)); |
444 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 450 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
445 MojoHandle mp1 = MOJO_HANDLE_INVALID; | 451 MojoHandle mp1 = MOJO_HANDLE_INVALID; |
446 uint32_t num_handles = 1; | 452 uint32_t num_handles = 1; |
447 EXPECT_EQ(MOJO_RESULT_OK, | 453 EXPECT_EQ(MOJO_RESULT_OK, |
448 MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, | 454 MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, |
449 MOJO_READ_MESSAGE_FLAG_NONE)); | 455 MOJO_READ_MESSAGE_FLAG_NONE)); |
(...skipping 26 matching lines...) Expand all Loading... |
476 // 9. Write a message to |mp1|, attaching |mp2|. | 482 // 9. Write a message to |mp1|, attaching |mp2|. |
477 const char kQuux[] = "quux"; | 483 const char kQuux[] = "quux"; |
478 EXPECT_EQ(MOJO_RESULT_OK, | 484 EXPECT_EQ(MOJO_RESULT_OK, |
479 MojoWriteMessage(mp1, kQuux, | 485 MojoWriteMessage(mp1, kQuux, |
480 static_cast<uint32_t>(sizeof(kQuux)), &mp2, 1, | 486 static_cast<uint32_t>(sizeof(kQuux)), &mp2, 1, |
481 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 487 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
482 mp2 = MOJO_HANDLE_INVALID; | 488 mp2 = MOJO_HANDLE_INVALID; |
483 | 489 |
484 // 3. Read a message from |mp1|. | 490 // 3. Read a message from |mp1|. |
485 EXPECT_EQ(MOJO_RESULT_OK, | 491 EXPECT_EQ(MOJO_RESULT_OK, |
486 MojoWait(mp1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 492 MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
| 493 MOJO_DEADLINE_INDEFINITE)); |
487 memset(buffer, 0, sizeof(buffer)); | 494 memset(buffer, 0, sizeof(buffer)); |
488 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 495 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
489 EXPECT_EQ(MOJO_RESULT_OK, | 496 EXPECT_EQ(MOJO_RESULT_OK, |
490 MojoReadMessage(mp1, buffer, &num_bytes, NULL, NULL, | 497 MojoReadMessage(mp1, buffer, &num_bytes, NULL, NULL, |
491 MOJO_READ_MESSAGE_FLAG_NONE)); | 498 MOJO_READ_MESSAGE_FLAG_NONE)); |
492 const char kFoo[] = "FOO"; | 499 const char kFoo[] = "FOO"; |
493 EXPECT_EQ(sizeof(kFoo), num_bytes); | 500 EXPECT_EQ(sizeof(kFoo), num_bytes); |
494 EXPECT_STREQ(kFoo, buffer); | 501 EXPECT_STREQ(kFoo, buffer); |
495 | 502 |
496 // 11. Wait on |mp1| (which should eventually fail) and then close it. | 503 // 11. Wait on |mp1| (which should eventually fail) and then close it. |
497 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 504 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
498 MojoWait(mp1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 505 MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
| 506 MOJO_DEADLINE_INDEFINITE)); |
499 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); | 507 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); |
500 } | 508 } |
501 | 509 |
502 EXPECT_TRUE(test::Shutdown()); | 510 EXPECT_TRUE(test::Shutdown()); |
503 } | 511 } |
504 | 512 |
505 // TODO(vtl): Test immediate write & close. | 513 // TODO(vtl): Test immediate write & close. |
506 // TODO(vtl): Test broken-connection cases. | 514 // TODO(vtl): Test broken-connection cases. |
507 | 515 |
508 } // namespace | 516 } // namespace |
509 } // namespace embedder | 517 } // namespace embedder |
510 } // namespace mojo | 518 } // namespace mojo |
OLD | NEW |