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/edk/embedder/embedder.h" | 5 #include "mojo/edk/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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 | 125 |
126 // We can write to a message pipe handle immediately. | 126 // We can write to a message pipe handle immediately. |
127 const char kHello[] = "hello"; | 127 const char kHello[] = "hello"; |
128 EXPECT_EQ(MOJO_RESULT_OK, | 128 EXPECT_EQ(MOJO_RESULT_OK, |
129 MojoWriteMessage(server_mp, kHello, | 129 MojoWriteMessage(server_mp, kHello, |
130 static_cast<uint32_t>(sizeof(kHello)), nullptr, | 130 static_cast<uint32_t>(sizeof(kHello)), nullptr, |
131 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 131 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
132 | 132 |
133 // Now wait for the other side to become readable. | 133 // Now wait for the other side to become readable. |
134 MojoHandleSignalsState state; | 134 MojoHandleSignalsState state; |
135 EXPECT_EQ(MOJO_RESULT_OK, | 135 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
136 MojoNewWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, | 136 MOJO_DEADLINE_INDEFINITE, &state)); |
137 MOJO_DEADLINE_INDEFINITE, &state)); | |
138 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 137 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
139 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 138 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
140 | 139 |
141 char buffer[1000] = {}; | 140 char buffer[1000] = {}; |
142 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 141 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
143 EXPECT_EQ(MOJO_RESULT_OK, | 142 EXPECT_EQ(MOJO_RESULT_OK, |
144 MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, | 143 MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, |
145 MOJO_READ_MESSAGE_FLAG_NONE)); | 144 MOJO_READ_MESSAGE_FLAG_NONE)); |
146 EXPECT_EQ(sizeof(kHello), num_bytes); | 145 EXPECT_EQ(sizeof(kHello), num_bytes); |
147 EXPECT_STREQ(kHello, buffer); | 146 EXPECT_STREQ(kHello, buffer); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 h1 = MOJO_HANDLE_INVALID; | 282 h1 = MOJO_HANDLE_INVALID; |
284 | 283 |
285 // Write another message to |h0|. | 284 // Write another message to |h0|. |
286 const char kFoo[] = "foo"; | 285 const char kFoo[] = "foo"; |
287 EXPECT_EQ(MOJO_RESULT_OK, | 286 EXPECT_EQ(MOJO_RESULT_OK, |
288 MojoWriteMessage(h0, kFoo, static_cast<uint32_t>(sizeof(kFoo)), | 287 MojoWriteMessage(h0, kFoo, static_cast<uint32_t>(sizeof(kFoo)), |
289 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 288 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
290 | 289 |
291 // Wait for |client_mp| to become readable. | 290 // Wait for |client_mp| to become readable. |
292 MojoHandleSignalsState state; | 291 MojoHandleSignalsState state; |
293 EXPECT_EQ(MOJO_RESULT_OK, | 292 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
294 MojoNewWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, | 293 MOJO_DEADLINE_INDEFINITE, &state)); |
295 MOJO_DEADLINE_INDEFINITE, &state)); | |
296 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 294 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
297 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 295 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
298 | 296 |
299 // Read a message from |client_mp|. | 297 // Read a message from |client_mp|. |
300 char buffer[1000] = {}; | 298 char buffer[1000] = {}; |
301 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 299 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
302 MojoHandle handles[10] = {}; | 300 MojoHandle handles[10] = {}; |
303 uint32_t num_handles = arraysize(handles); | 301 uint32_t num_handles = arraysize(handles); |
304 EXPECT_EQ(MOJO_RESULT_OK, | 302 EXPECT_EQ(MOJO_RESULT_OK, |
305 MojoReadMessage(client_mp, buffer, &num_bytes, handles, | 303 MojoReadMessage(client_mp, buffer, &num_bytes, handles, |
306 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); | 304 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); |
307 EXPECT_EQ(sizeof(kWorld), num_bytes); | 305 EXPECT_EQ(sizeof(kWorld), num_bytes); |
308 EXPECT_STREQ(kWorld, buffer); | 306 EXPECT_STREQ(kWorld, buffer); |
309 EXPECT_EQ(1u, num_handles); | 307 EXPECT_EQ(1u, num_handles); |
310 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); | 308 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); |
311 h1 = handles[0]; | 309 h1 = handles[0]; |
312 | 310 |
313 // Wait for |h1| to become readable. | 311 // Wait for |h1| to become readable. |
314 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(h1, MOJO_HANDLE_SIGNAL_READABLE, | 312 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
315 MOJO_DEADLINE_INDEFINITE, &state)); | 313 MOJO_DEADLINE_INDEFINITE, &state)); |
316 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 314 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
317 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 315 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
318 | 316 |
319 // Read a message from |h1|. | 317 // Read a message from |h1|. |
320 memset(buffer, 0, sizeof(buffer)); | 318 memset(buffer, 0, sizeof(buffer)); |
321 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 319 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
322 memset(handles, 0, sizeof(handles)); | 320 memset(handles, 0, sizeof(handles)); |
323 num_handles = arraysize(handles); | 321 num_handles = arraysize(handles); |
324 EXPECT_EQ(MOJO_RESULT_OK, | 322 EXPECT_EQ(MOJO_RESULT_OK, |
325 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, | 323 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, |
326 MOJO_READ_MESSAGE_FLAG_NONE)); | 324 MOJO_READ_MESSAGE_FLAG_NONE)); |
327 EXPECT_EQ(sizeof(kHello), num_bytes); | 325 EXPECT_EQ(sizeof(kHello), num_bytes); |
328 EXPECT_STREQ(kHello, buffer); | 326 EXPECT_STREQ(kHello, buffer); |
329 EXPECT_EQ(0u, num_handles); | 327 EXPECT_EQ(0u, num_handles); |
330 | 328 |
331 // Wait for |h1| to become readable (again). | 329 // Wait for |h1| to become readable (again). |
332 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(h1, MOJO_HANDLE_SIGNAL_READABLE, | 330 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
333 MOJO_DEADLINE_INDEFINITE, &state)); | 331 MOJO_DEADLINE_INDEFINITE, &state)); |
334 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 332 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
335 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 333 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
336 | 334 |
337 // Read the second message from |h1|. | 335 // Read the second message from |h1|. |
338 memset(buffer, 0, sizeof(buffer)); | 336 memset(buffer, 0, sizeof(buffer)); |
339 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 337 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
340 EXPECT_EQ(MOJO_RESULT_OK, | 338 EXPECT_EQ(MOJO_RESULT_OK, |
341 MojoReadMessage(h1, buffer, &num_bytes, nullptr, nullptr, | 339 MojoReadMessage(h1, buffer, &num_bytes, nullptr, nullptr, |
342 MOJO_READ_MESSAGE_FLAG_NONE)); | 340 MOJO_READ_MESSAGE_FLAG_NONE)); |
343 EXPECT_EQ(sizeof(kFoo), num_bytes); | 341 EXPECT_EQ(sizeof(kFoo), num_bytes); |
344 EXPECT_STREQ(kFoo, buffer); | 342 EXPECT_STREQ(kFoo, buffer); |
345 | 343 |
346 // Write a message to |h1|. | 344 // Write a message to |h1|. |
347 const char kBarBaz[] = "barbaz"; | 345 const char kBarBaz[] = "barbaz"; |
348 EXPECT_EQ( | 346 EXPECT_EQ( |
349 MOJO_RESULT_OK, | 347 MOJO_RESULT_OK, |
350 MojoWriteMessage(h1, kBarBaz, static_cast<uint32_t>(sizeof(kBarBaz)), | 348 MojoWriteMessage(h1, kBarBaz, static_cast<uint32_t>(sizeof(kBarBaz)), |
351 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 349 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
352 | 350 |
353 // Wait for |h0| to become readable. | 351 // Wait for |h0| to become readable. |
354 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(h0, MOJO_HANDLE_SIGNAL_READABLE, | 352 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, |
355 MOJO_DEADLINE_INDEFINITE, &state)); | 353 MOJO_DEADLINE_INDEFINITE, &state)); |
356 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 354 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
357 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 355 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
358 | 356 |
359 // Read a message from |h0|. | 357 // Read a message from |h0|. |
360 memset(buffer, 0, sizeof(buffer)); | 358 memset(buffer, 0, sizeof(buffer)); |
361 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 359 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
362 EXPECT_EQ(MOJO_RESULT_OK, | 360 EXPECT_EQ(MOJO_RESULT_OK, |
363 MojoReadMessage(h0, buffer, &num_bytes, nullptr, nullptr, | 361 MojoReadMessage(h0, buffer, &num_bytes, nullptr, nullptr, |
364 MOJO_READ_MESSAGE_FLAG_NONE)); | 362 MOJO_READ_MESSAGE_FLAG_NONE)); |
365 EXPECT_EQ(sizeof(kBarBaz), num_bytes); | 363 EXPECT_EQ(sizeof(kBarBaz), num_bytes); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 EXPECT_EQ(MOJO_RESULT_OK, | 417 EXPECT_EQ(MOJO_RESULT_OK, |
420 MojoWriteMessage(server_mp, kHello, | 418 MojoWriteMessage(server_mp, kHello, |
421 static_cast<uint32_t>(sizeof(kHello)), nullptr, | 419 static_cast<uint32_t>(sizeof(kHello)), nullptr, |
422 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 420 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
423 | 421 |
424 // TODO(vtl): If the scope were ended immediately here (maybe after closing | 422 // TODO(vtl): If the scope were ended immediately here (maybe after closing |
425 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. | 423 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. |
426 | 424 |
427 // 2. Read a message from |server_mp|. | 425 // 2. Read a message from |server_mp|. |
428 MojoHandleSignalsState state; | 426 MojoHandleSignalsState state; |
429 EXPECT_EQ(MOJO_RESULT_OK, | 427 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(server_mp, MOJO_HANDLE_SIGNAL_READABLE, |
430 MojoNewWait(server_mp, MOJO_HANDLE_SIGNAL_READABLE, | 428 MOJO_DEADLINE_INDEFINITE, &state)); |
431 MOJO_DEADLINE_INDEFINITE, &state)); | |
432 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 429 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
433 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 430 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
434 | 431 |
435 char buffer[1000] = {}; | 432 char buffer[1000] = {}; |
436 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 433 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
437 EXPECT_EQ(MOJO_RESULT_OK, | 434 EXPECT_EQ(MOJO_RESULT_OK, |
438 MojoReadMessage(server_mp, buffer, &num_bytes, nullptr, nullptr, | 435 MojoReadMessage(server_mp, buffer, &num_bytes, nullptr, nullptr, |
439 MOJO_READ_MESSAGE_FLAG_NONE)); | 436 MOJO_READ_MESSAGE_FLAG_NONE)); |
440 const char kWorld[] = "world!"; | 437 const char kWorld[] = "world!"; |
441 EXPECT_EQ(sizeof(kWorld), num_bytes); | 438 EXPECT_EQ(sizeof(kWorld), num_bytes); |
(...skipping 14 matching lines...) Expand all Loading... |
456 EXPECT_EQ( | 453 EXPECT_EQ( |
457 MOJO_RESULT_OK, | 454 MOJO_RESULT_OK, |
458 MojoWriteMessage(server_mp, kBar, static_cast<uint32_t>(sizeof(kBar)), | 455 MojoWriteMessage(server_mp, kBar, static_cast<uint32_t>(sizeof(kBar)), |
459 &mp1, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 456 &mp1, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
460 mp1 = MOJO_HANDLE_INVALID; | 457 mp1 = MOJO_HANDLE_INVALID; |
461 | 458 |
462 // 5. Close |server_mp|. | 459 // 5. Close |server_mp|. |
463 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); | 460 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); |
464 | 461 |
465 // 9. Read a message from |mp0|, which should have |mp2| attached. | 462 // 9. Read a message from |mp0|, which should have |mp2| attached. |
466 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(mp0, MOJO_HANDLE_SIGNAL_READABLE, | 463 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(mp0, MOJO_HANDLE_SIGNAL_READABLE, |
467 MOJO_DEADLINE_INDEFINITE, &state)); | 464 MOJO_DEADLINE_INDEFINITE, &state)); |
468 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 465 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
469 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 466 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
470 | 467 |
471 memset(buffer, 0, sizeof(buffer)); | 468 memset(buffer, 0, sizeof(buffer)); |
472 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 469 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
473 MojoHandle mp2 = MOJO_HANDLE_INVALID; | 470 MojoHandle mp2 = MOJO_HANDLE_INVALID; |
474 uint32_t num_handles = 1; | 471 uint32_t num_handles = 1; |
475 EXPECT_EQ(MOJO_RESULT_OK, | 472 EXPECT_EQ(MOJO_RESULT_OK, |
476 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, | 473 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, |
477 MOJO_READ_MESSAGE_FLAG_NONE)); | 474 MOJO_READ_MESSAGE_FLAG_NONE)); |
478 const char kQuux[] = "quux"; | 475 const char kQuux[] = "quux"; |
479 EXPECT_EQ(sizeof(kQuux), num_bytes); | 476 EXPECT_EQ(sizeof(kQuux), num_bytes); |
480 EXPECT_STREQ(kQuux, buffer); | 477 EXPECT_STREQ(kQuux, buffer); |
481 EXPECT_EQ(1u, num_handles); | 478 EXPECT_EQ(1u, num_handles); |
482 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); | 479 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); |
483 | 480 |
484 // 7. Read a message from |mp2|. | 481 // 7. Read a message from |mp2|. |
485 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, | 482 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
486 MOJO_DEADLINE_INDEFINITE, &state)); | 483 MOJO_DEADLINE_INDEFINITE, &state)); |
487 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 484 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
488 state.satisfied_signals); | 485 state.satisfied_signals); |
489 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 486 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
490 state.satisfiable_signals); | 487 state.satisfiable_signals); |
491 | 488 |
492 memset(buffer, 0, sizeof(buffer)); | 489 memset(buffer, 0, sizeof(buffer)); |
493 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 490 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
494 EXPECT_EQ(MOJO_RESULT_OK, | 491 EXPECT_EQ(MOJO_RESULT_OK, |
495 MojoReadMessage(mp2, buffer, &num_bytes, nullptr, nullptr, | 492 MojoReadMessage(mp2, buffer, &num_bytes, nullptr, nullptr, |
496 MOJO_READ_MESSAGE_FLAG_NONE)); | 493 MOJO_READ_MESSAGE_FLAG_NONE)); |
497 const char kBaz[] = "baz"; | 494 const char kBaz[] = "baz"; |
498 EXPECT_EQ(sizeof(kBaz), num_bytes); | 495 EXPECT_EQ(sizeof(kBaz), num_bytes); |
499 EXPECT_STREQ(kBaz, buffer); | 496 EXPECT_STREQ(kBaz, buffer); |
500 | 497 |
501 // 10. Close |mp0|. | 498 // 10. Close |mp0|. |
502 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); | 499 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); |
503 | 500 |
504 // 12. Wait on |mp2| (which should eventually fail) and then close it. | 501 // 12. Wait on |mp2| (which should eventually fail) and then close it. |
505 // TODO(vtl): crbug.com/351768 | 502 // TODO(vtl): crbug.com/351768 |
506 #if 0 | 503 #if 0 |
507 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 504 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
508 MojoNewWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, | 505 MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
509 MOJO_DEADLINE_INDEFINITE, | 506 MOJO_DEADLINE_INDEFINITE, |
510 &state)); | 507 &state)); |
511 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); | 508 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); |
512 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfiable_signals); | 509 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfiable_signals); |
513 #endif | 510 #endif |
514 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); | 511 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); |
515 } | 512 } |
516 | 513 |
517 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); | 514 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); |
518 EXPECT_TRUE(test::Shutdown()); | 515 EXPECT_TRUE(test::Shutdown()); |
(...skipping 10 matching lines...) Expand all Loading... |
529 { | 526 { |
530 ScopedTestChannel client_channel(test_io_thread.task_runner(), | 527 ScopedTestChannel client_channel(test_io_thread.task_runner(), |
531 client_platform_handle.Pass()); | 528 client_platform_handle.Pass()); |
532 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); | 529 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); |
533 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); | 530 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); |
534 client_channel.WaitForChannelCreationCompletion(); | 531 client_channel.WaitForChannelCreationCompletion(); |
535 CHECK(client_channel.channel_info() != nullptr); | 532 CHECK(client_channel.channel_info() != nullptr); |
536 | 533 |
537 // 1. Read the first message from |client_mp|. | 534 // 1. Read the first message from |client_mp|. |
538 MojoHandleSignalsState state; | 535 MojoHandleSignalsState state; |
539 EXPECT_EQ(MOJO_RESULT_OK, | 536 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
540 MojoNewWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, | 537 MOJO_DEADLINE_INDEFINITE, &state)); |
541 MOJO_DEADLINE_INDEFINITE, &state)); | |
542 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 538 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
543 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 539 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
544 | 540 |
545 char buffer[1000] = {}; | 541 char buffer[1000] = {}; |
546 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 542 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
547 EXPECT_EQ(MOJO_RESULT_OK, | 543 EXPECT_EQ(MOJO_RESULT_OK, |
548 MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, | 544 MojoReadMessage(client_mp, buffer, &num_bytes, nullptr, nullptr, |
549 MOJO_READ_MESSAGE_FLAG_NONE)); | 545 MOJO_READ_MESSAGE_FLAG_NONE)); |
550 const char kHello[] = "hello"; | 546 const char kHello[] = "hello"; |
551 EXPECT_EQ(sizeof(kHello), num_bytes); | 547 EXPECT_EQ(sizeof(kHello), num_bytes); |
552 EXPECT_STREQ(kHello, buffer); | 548 EXPECT_STREQ(kHello, buffer); |
553 | 549 |
554 // 2. Write a message to |client_mp| (attaching nothing). | 550 // 2. Write a message to |client_mp| (attaching nothing). |
555 const char kWorld[] = "world!"; | 551 const char kWorld[] = "world!"; |
556 EXPECT_EQ(MOJO_RESULT_OK, | 552 EXPECT_EQ(MOJO_RESULT_OK, |
557 MojoWriteMessage(client_mp, kWorld, | 553 MojoWriteMessage(client_mp, kWorld, |
558 static_cast<uint32_t>(sizeof(kWorld)), nullptr, | 554 static_cast<uint32_t>(sizeof(kWorld)), nullptr, |
559 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 555 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
560 | 556 |
561 // 4. Read a message from |client_mp|, which should have |mp1| attached. | 557 // 4. Read a message from |client_mp|, which should have |mp1| attached. |
562 EXPECT_EQ(MOJO_RESULT_OK, | 558 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
563 MojoNewWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, | 559 MOJO_DEADLINE_INDEFINITE, &state)); |
564 MOJO_DEADLINE_INDEFINITE, &state)); | |
565 // The other end of the handle may or may not be closed at this point, so we | 560 // The other end of the handle may or may not be closed at this point, so we |
566 // can't test MOJO_HANDLE_SIGNAL_WRITABLE or MOJO_HANDLE_SIGNAL_PEER_CLOSED. | 561 // can't test MOJO_HANDLE_SIGNAL_WRITABLE or MOJO_HANDLE_SIGNAL_PEER_CLOSED. |
567 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, | 562 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
568 state.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE); | 563 state.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE); |
569 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, | 564 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, |
570 state.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE); | 565 state.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE); |
571 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd | 566 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd |
572 // die (again due to |Channel::HandleLocalError()|). | 567 // die (again due to |Channel::HandleLocalError()|). |
573 memset(buffer, 0, sizeof(buffer)); | 568 memset(buffer, 0, sizeof(buffer)); |
574 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 569 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
(...skipping 28 matching lines...) Expand all Loading... |
603 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp3)); | 598 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp3)); |
604 | 599 |
605 // 9. Write a message to |mp1|, attaching |mp2|. | 600 // 9. Write a message to |mp1|, attaching |mp2|. |
606 const char kQuux[] = "quux"; | 601 const char kQuux[] = "quux"; |
607 EXPECT_EQ(MOJO_RESULT_OK, | 602 EXPECT_EQ(MOJO_RESULT_OK, |
608 MojoWriteMessage(mp1, kQuux, static_cast<uint32_t>(sizeof(kQuux)), | 603 MojoWriteMessage(mp1, kQuux, static_cast<uint32_t>(sizeof(kQuux)), |
609 &mp2, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 604 &mp2, 1, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
610 mp2 = MOJO_HANDLE_INVALID; | 605 mp2 = MOJO_HANDLE_INVALID; |
611 | 606 |
612 // 3. Read a message from |mp1|. | 607 // 3. Read a message from |mp1|. |
613 EXPECT_EQ(MOJO_RESULT_OK, MojoNewWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, | 608 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
614 MOJO_DEADLINE_INDEFINITE, &state)); | 609 MOJO_DEADLINE_INDEFINITE, &state)); |
615 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); | 610 EXPECT_EQ(kSignalReadadableWritable, state.satisfied_signals); |
616 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 611 EXPECT_EQ(kSignalAll, state.satisfiable_signals); |
617 | 612 |
618 memset(buffer, 0, sizeof(buffer)); | 613 memset(buffer, 0, sizeof(buffer)); |
619 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 614 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
620 EXPECT_EQ(MOJO_RESULT_OK, | 615 EXPECT_EQ(MOJO_RESULT_OK, |
621 MojoReadMessage(mp1, buffer, &num_bytes, nullptr, nullptr, | 616 MojoReadMessage(mp1, buffer, &num_bytes, nullptr, nullptr, |
622 MOJO_READ_MESSAGE_FLAG_NONE)); | 617 MOJO_READ_MESSAGE_FLAG_NONE)); |
623 const char kFoo[] = "FOO"; | 618 const char kFoo[] = "FOO"; |
624 EXPECT_EQ(sizeof(kFoo), num_bytes); | 619 EXPECT_EQ(sizeof(kFoo), num_bytes); |
625 EXPECT_STREQ(kFoo, buffer); | 620 EXPECT_STREQ(kFoo, buffer); |
626 | 621 |
627 // 11. Wait on |mp1| (which should eventually fail) and then close it. | 622 // 11. Wait on |mp1| (which should eventually fail) and then close it. |
628 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 623 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
629 MojoNewWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, | 624 MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
630 MOJO_DEADLINE_INDEFINITE, &state)); | 625 MOJO_DEADLINE_INDEFINITE, &state)); |
631 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); | 626 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); |
632 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); | 627 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); |
633 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); | 628 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); |
634 } | 629 } |
635 | 630 |
636 EXPECT_TRUE(test::Shutdown()); | 631 EXPECT_TRUE(test::Shutdown()); |
637 } | 632 } |
638 | 633 |
639 // TODO(vtl): Test immediate write & close. | 634 // TODO(vtl): Test immediate write & close. |
640 // TODO(vtl): Test broken-connection cases. | 635 // TODO(vtl): Test broken-connection cases. |
641 | 636 |
642 } // namespace | 637 } // namespace |
643 } // namespace embedder | 638 } // namespace embedder |
644 } // namespace mojo | 639 } // namespace mojo |
OLD | NEW |