Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: mojo/edk/embedder/embedder_unittest.cc

Issue 830593003: Update mojo sdk to rev 9fbbc4f0fef1187312316c0ed992342474e139f1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cherry-pick mojo 9d3b8dd17f12d20035a14737fdc38dd926890ff8 Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/common/message_pump_mojo.cc ('k') | mojo/edk/embedder/entrypoints.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/common/message_pump_mojo.cc ('k') | mojo/edk/embedder/entrypoints.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698