| 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 |