| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/system/core.h" | 5 #include "mojo/edk/system/core.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| 11 #include "base/threading/platform_thread.h" | 11 #include "base/threading/platform_thread.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "mojo/edk/system/core_test_base.h" | 13 #include "mojo/edk/system/core_test_base.h" |
| 14 | 14 |
| 15 namespace mojo { | 15 namespace mojo { |
| 16 namespace system { | 16 namespace system { |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; | 19 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; |
| 20 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; | 20 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; |
| 21 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE | |
| 22 MOJO_HANDLE_SIGNAL_WRITABLE | |
| 23 MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
| 21 | 24 |
| 22 typedef test::CoreTestBase CoreTest; | 25 typedef test::CoreTestBase CoreTest; |
| 23 | 26 |
| 24 TEST_F(CoreTest, GetTimeTicksNow) { | 27 TEST_F(CoreTest, GetTimeTicksNow) { |
| 25 const MojoTimeTicks start = core()->GetTimeTicksNow(); | 28 const MojoTimeTicks start = core()->GetTimeTicksNow(); |
| 26 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 29 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 27 << "GetTimeTicksNow should return nonzero value"; | 30 << "GetTimeTicksNow should return nonzero value"; |
| 28 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(15)); | 31 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(15)); |
| 29 const MojoTimeTicks finish = core()->GetTimeTicksNow(); | 32 const MojoTimeTicks finish = core()->GetTimeTicksNow(); |
| 30 // Allow for some fuzz in sleep. | 33 // Allow for some fuzz in sleep. |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 MOJO_HANDLE_SIGNAL_READABLE}; | 541 MOJO_HANDLE_SIGNAL_READABLE}; |
| 539 result_index = static_cast<uint32_t>(-1); | 542 result_index = static_cast<uint32_t>(-1); |
| 540 hss[0] = kEmptyMojoHandleSignalsState; | 543 hss[0] = kEmptyMojoHandleSignalsState; |
| 541 hss[1] = kEmptyMojoHandleSignalsState; | 544 hss[1] = kEmptyMojoHandleSignalsState; |
| 542 EXPECT_EQ( | 545 EXPECT_EQ( |
| 543 MOJO_RESULT_DEADLINE_EXCEEDED, | 546 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 544 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, | 547 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, |
| 545 MakeUserPointer(&result_index), MakeUserPointer(hss))); | 548 MakeUserPointer(&result_index), MakeUserPointer(hss))); |
| 546 EXPECT_EQ(static_cast<uint32_t>(-1), result_index); | 549 EXPECT_EQ(static_cast<uint32_t>(-1), result_index); |
| 547 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 550 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 548 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 551 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 549 hss[0].satisfiable_signals); | |
| 550 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 552 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 551 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 553 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); |
| 552 hss[1].satisfiable_signals); | |
| 553 | 554 |
| 554 // Try to read anyway. | 555 // Try to read anyway. |
| 555 char buffer[1] = {'a'}; | 556 char buffer[1] = {'a'}; |
| 556 uint32_t buffer_size = 1; | 557 uint32_t buffer_size = 1; |
| 557 EXPECT_EQ( | 558 EXPECT_EQ( |
| 558 MOJO_RESULT_SHOULD_WAIT, | 559 MOJO_RESULT_SHOULD_WAIT, |
| 559 core()->ReadMessage(h[0], UserPointer<void>(buffer), | 560 core()->ReadMessage(h[0], UserPointer<void>(buffer), |
| 560 MakeUserPointer(&buffer_size), NullUserPointer(), | 561 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 561 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 562 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 562 // Check that it left its inputs alone. | 563 // Check that it left its inputs alone. |
| 563 EXPECT_EQ('a', buffer[0]); | 564 EXPECT_EQ('a', buffer[0]); |
| 564 EXPECT_EQ(1u, buffer_size); | 565 EXPECT_EQ(1u, buffer_size); |
| 565 | 566 |
| 566 // Both should be writable. | 567 // Both should be writable. |
| 567 hss[0] = kEmptyMojoHandleSignalsState; | 568 hss[0] = kEmptyMojoHandleSignalsState; |
| 568 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, | 569 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, |
| 569 1000000000, MakeUserPointer(&hss[0]))); | 570 1000000000, MakeUserPointer(&hss[0]))); |
| 570 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 571 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 571 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 572 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 572 hss[0].satisfiable_signals); | |
| 573 hss[0] = kEmptyMojoHandleSignalsState; | 573 hss[0] = kEmptyMojoHandleSignalsState; |
| 574 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, | 574 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, |
| 575 1000000000, MakeUserPointer(&hss[0]))); | 575 1000000000, MakeUserPointer(&hss[0]))); |
| 576 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 576 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 577 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 577 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 578 hss[0].satisfiable_signals); | |
| 579 | 578 |
| 580 // Also check that |h[1]| is writable using |WaitMany()|. | 579 // Also check that |h[1]| is writable using |WaitMany()|. |
| 581 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; | 580 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; |
| 582 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE; | 581 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE; |
| 583 result_index = static_cast<uint32_t>(-1); | 582 result_index = static_cast<uint32_t>(-1); |
| 584 hss[0] = kEmptyMojoHandleSignalsState; | 583 hss[0] = kEmptyMojoHandleSignalsState; |
| 585 hss[1] = kEmptyMojoHandleSignalsState; | 584 hss[1] = kEmptyMojoHandleSignalsState; |
| 586 EXPECT_EQ( | 585 EXPECT_EQ( |
| 587 MOJO_RESULT_OK, | 586 MOJO_RESULT_OK, |
| 588 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, | 587 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, |
| 589 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 588 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 590 MakeUserPointer(hss))); | 589 MakeUserPointer(hss))); |
| 591 EXPECT_EQ(1u, result_index); | 590 EXPECT_EQ(1u, result_index); |
| 592 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 591 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 593 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 592 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 594 hss[0].satisfiable_signals); | |
| 595 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 593 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 596 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 594 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); |
| 597 hss[1].satisfiable_signals); | |
| 598 | 595 |
| 599 // Write to |h[1]|. | 596 // Write to |h[1]|. |
| 600 buffer[0] = 'b'; | 597 buffer[0] = 'b'; |
| 601 EXPECT_EQ( | 598 EXPECT_EQ( |
| 602 MOJO_RESULT_OK, | 599 MOJO_RESULT_OK, |
| 603 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, | 600 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, |
| 604 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 601 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 605 | 602 |
| 606 // Check that |h[0]| is now readable. | 603 // Check that |h[0]| is now readable. |
| 607 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; | 604 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; |
| 608 signals[1] = MOJO_HANDLE_SIGNAL_READABLE; | 605 signals[1] = MOJO_HANDLE_SIGNAL_READABLE; |
| 609 result_index = static_cast<uint32_t>(-1); | 606 result_index = static_cast<uint32_t>(-1); |
| 610 hss[0] = kEmptyMojoHandleSignalsState; | 607 hss[0] = kEmptyMojoHandleSignalsState; |
| 611 hss[1] = kEmptyMojoHandleSignalsState; | 608 hss[1] = kEmptyMojoHandleSignalsState; |
| 612 EXPECT_EQ( | 609 EXPECT_EQ( |
| 613 MOJO_RESULT_OK, | 610 MOJO_RESULT_OK, |
| 614 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, | 611 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, |
| 615 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 612 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 616 MakeUserPointer(hss))); | 613 MakeUserPointer(hss))); |
| 617 EXPECT_EQ(0u, result_index); | 614 EXPECT_EQ(0u, result_index); |
| 618 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 615 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 619 hss[0].satisfied_signals); | 616 hss[0].satisfied_signals); |
| 620 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 617 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 621 hss[0].satisfiable_signals); | |
| 622 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 618 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 623 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 619 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); |
| 624 hss[1].satisfiable_signals); | |
| 625 | 620 |
| 626 // Read from |h[0]|. | 621 // Read from |h[0]|. |
| 627 // First, get only the size. | 622 // First, get only the size. |
| 628 buffer_size = 0; | 623 buffer_size = 0; |
| 629 EXPECT_EQ( | 624 EXPECT_EQ( |
| 630 MOJO_RESULT_RESOURCE_EXHAUSTED, | 625 MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 631 core()->ReadMessage(h[0], NullUserPointer(), | 626 core()->ReadMessage(h[0], NullUserPointer(), |
| 632 MakeUserPointer(&buffer_size), NullUserPointer(), | 627 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 633 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 628 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 634 EXPECT_EQ(1u, buffer_size); | 629 EXPECT_EQ(1u, buffer_size); |
| 635 // Then actually read it. | 630 // Then actually read it. |
| 636 buffer[0] = 'c'; | 631 buffer[0] = 'c'; |
| 637 buffer_size = 1; | 632 buffer_size = 1; |
| 638 EXPECT_EQ( | 633 EXPECT_EQ( |
| 639 MOJO_RESULT_OK, | 634 MOJO_RESULT_OK, |
| 640 core()->ReadMessage(h[0], UserPointer<void>(buffer), | 635 core()->ReadMessage(h[0], UserPointer<void>(buffer), |
| 641 MakeUserPointer(&buffer_size), NullUserPointer(), | 636 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 642 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 637 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 643 EXPECT_EQ('b', buffer[0]); | 638 EXPECT_EQ('b', buffer[0]); |
| 644 EXPECT_EQ(1u, buffer_size); | 639 EXPECT_EQ(1u, buffer_size); |
| 645 | 640 |
| 646 // |h[0]| should no longer be readable. | 641 // |h[0]| should no longer be readable. |
| 647 hss[0] = kEmptyMojoHandleSignalsState; | 642 hss[0] = kEmptyMojoHandleSignalsState; |
| 648 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 643 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 649 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0, | 644 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0, |
| 650 MakeUserPointer(&hss[0]))); | 645 MakeUserPointer(&hss[0]))); |
| 651 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 646 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 652 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 647 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); |
| 653 hss[0].satisfiable_signals); | |
| 654 | 648 |
| 655 // Write to |h[0]|. | 649 // Write to |h[0]|. |
| 656 buffer[0] = 'd'; | 650 buffer[0] = 'd'; |
| 657 EXPECT_EQ( | 651 EXPECT_EQ( |
| 658 MOJO_RESULT_OK, | 652 MOJO_RESULT_OK, |
| 659 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1, | 653 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1, |
| 660 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 654 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 661 | 655 |
| 662 // Close |h[0]|. | 656 // Close |h[0]|. |
| 663 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); | 657 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); |
| 664 | 658 |
| 665 // Check that |h[1]| is no longer writable (and will never be). | 659 // Check that |h[1]| is no longer writable (and will never be). |
| 666 hss[0] = kEmptyMojoHandleSignalsState; | 660 hss[0] = kEmptyMojoHandleSignalsState; |
| 667 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 661 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 668 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000, | 662 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000, |
| 669 MakeUserPointer(&hss[0]))); | 663 MakeUserPointer(&hss[0]))); |
| 670 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfied_signals); | 664 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 671 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfiable_signals); | 665 hss[0].satisfied_signals); |
| 666 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 667 hss[0].satisfiable_signals); |
| 672 | 668 |
| 673 // Check that |h[1]| is still readable (for the moment). | 669 // Check that |h[1]| is still readable (for the moment). |
| 674 hss[0] = kEmptyMojoHandleSignalsState; | 670 hss[0] = kEmptyMojoHandleSignalsState; |
| 675 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, | 671 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, |
| 676 1000000000, MakeUserPointer(&hss[0]))); | 672 1000000000, MakeUserPointer(&hss[0]))); |
| 677 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfied_signals); | 673 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 678 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfiable_signals); | 674 hss[0].satisfied_signals); |
| 675 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 676 hss[0].satisfiable_signals); |
| 679 | 677 |
| 680 // Discard a message from |h[1]|. | 678 // Discard a message from |h[1]|. |
| 681 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 679 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 682 core()->ReadMessage(h[1], NullUserPointer(), NullUserPointer(), | 680 core()->ReadMessage(h[1], NullUserPointer(), NullUserPointer(), |
| 683 NullUserPointer(), NullUserPointer(), | 681 NullUserPointer(), NullUserPointer(), |
| 684 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 682 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 685 | 683 |
| 686 // |h[1]| is no longer readable (and will never be). | 684 // |h[1]| is no longer readable (and will never be). |
| 687 hss[0] = kFullMojoHandleSignalsState; | 685 hss[0] = kFullMojoHandleSignalsState; |
| 688 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 686 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 689 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 687 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 690 MakeUserPointer(&hss[0]))); | 688 MakeUserPointer(&hss[0]))); |
| 691 EXPECT_EQ(0u, hss[0].satisfied_signals); | 689 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss[0].satisfied_signals); |
| 692 EXPECT_EQ(0u, hss[0].satisfiable_signals); | 690 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss[0].satisfiable_signals); |
| 693 | 691 |
| 694 // Try writing to |h[1]|. | 692 // Try writing to |h[1]|. |
| 695 buffer[0] = 'e'; | 693 buffer[0] = 'e'; |
| 696 EXPECT_EQ( | 694 EXPECT_EQ( |
| 697 MOJO_RESULT_FAILED_PRECONDITION, | 695 MOJO_RESULT_FAILED_PRECONDITION, |
| 698 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, | 696 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, |
| 699 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 697 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 700 | 698 |
| 701 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1])); | 699 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1])); |
| 702 } | 700 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 725 EXPECT_EQ(MOJO_RESULT_OK, | 723 EXPECT_EQ(MOJO_RESULT_OK, |
| 726 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 724 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 727 kHelloSize, NullUserPointer(), 0, | 725 kHelloSize, NullUserPointer(), 0, |
| 728 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 726 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 729 hss = kEmptyMojoHandleSignalsState; | 727 hss = kEmptyMojoHandleSignalsState; |
| 730 EXPECT_EQ(MOJO_RESULT_OK, | 728 EXPECT_EQ(MOJO_RESULT_OK, |
| 731 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 729 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 732 MakeUserPointer(&hss))); | 730 MakeUserPointer(&hss))); |
| 733 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 731 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 734 hss.satisfied_signals); | 732 hss.satisfied_signals); |
| 735 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 733 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 736 hss.satisfiable_signals); | |
| 737 num_bytes = kBufferSize; | 734 num_bytes = kBufferSize; |
| 738 num_handles = arraysize(handles); | 735 num_handles = arraysize(handles); |
| 739 EXPECT_EQ(MOJO_RESULT_OK, | 736 EXPECT_EQ(MOJO_RESULT_OK, |
| 740 core()->ReadMessage( | 737 core()->ReadMessage( |
| 741 h_passing[1], UserPointer<void>(buffer), | 738 h_passing[1], UserPointer<void>(buffer), |
| 742 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 739 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 743 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 740 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 744 EXPECT_EQ(kHelloSize, num_bytes); | 741 EXPECT_EQ(kHelloSize, num_bytes); |
| 745 EXPECT_STREQ(kHello, buffer); | 742 EXPECT_STREQ(kHello, buffer); |
| 746 EXPECT_EQ(0u, num_handles); | 743 EXPECT_EQ(0u, num_handles); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 766 EXPECT_EQ(MOJO_RESULT_OK, | 763 EXPECT_EQ(MOJO_RESULT_OK, |
| 767 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), | 764 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), |
| 768 kHelloSize, NullUserPointer(), 0, | 765 kHelloSize, NullUserPointer(), 0, |
| 769 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 766 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 770 hss = kEmptyMojoHandleSignalsState; | 767 hss = kEmptyMojoHandleSignalsState; |
| 771 EXPECT_EQ(MOJO_RESULT_OK, | 768 EXPECT_EQ(MOJO_RESULT_OK, |
| 772 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 769 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 773 MakeUserPointer(&hss))); | 770 MakeUserPointer(&hss))); |
| 774 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 771 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 775 hss.satisfied_signals); | 772 hss.satisfied_signals); |
| 776 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 773 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 777 hss.satisfiable_signals); | |
| 778 num_bytes = kBufferSize; | 774 num_bytes = kBufferSize; |
| 779 num_handles = arraysize(handles); | 775 num_handles = arraysize(handles); |
| 780 EXPECT_EQ(MOJO_RESULT_OK, | 776 EXPECT_EQ(MOJO_RESULT_OK, |
| 781 core()->ReadMessage( | 777 core()->ReadMessage( |
| 782 h_passed[1], UserPointer<void>(buffer), | 778 h_passed[1], UserPointer<void>(buffer), |
| 783 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 779 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 784 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 780 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 785 EXPECT_EQ(kHelloSize, num_bytes); | 781 EXPECT_EQ(kHelloSize, num_bytes); |
| 786 EXPECT_STREQ(kHello, buffer); | 782 EXPECT_STREQ(kHello, buffer); |
| 787 EXPECT_EQ(0u, num_handles); | 783 EXPECT_EQ(0u, num_handles); |
| 788 | 784 |
| 789 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. | 785 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. |
| 790 EXPECT_EQ(MOJO_RESULT_OK, | 786 EXPECT_EQ(MOJO_RESULT_OK, |
| 791 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 787 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 792 kWorldSize, MakeUserPointer(&h_passed[1]), 1, | 788 kWorldSize, MakeUserPointer(&h_passed[1]), 1, |
| 793 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 789 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 794 hss = kEmptyMojoHandleSignalsState; | 790 hss = kEmptyMojoHandleSignalsState; |
| 795 EXPECT_EQ(MOJO_RESULT_OK, | 791 EXPECT_EQ(MOJO_RESULT_OK, |
| 796 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 792 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 797 MakeUserPointer(&hss))); | 793 MakeUserPointer(&hss))); |
| 798 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 794 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 799 hss.satisfied_signals); | 795 hss.satisfied_signals); |
| 800 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 796 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 801 hss.satisfiable_signals); | |
| 802 num_bytes = kBufferSize; | 797 num_bytes = kBufferSize; |
| 803 num_handles = arraysize(handles); | 798 num_handles = arraysize(handles); |
| 804 EXPECT_EQ(MOJO_RESULT_OK, | 799 EXPECT_EQ(MOJO_RESULT_OK, |
| 805 core()->ReadMessage( | 800 core()->ReadMessage( |
| 806 h_passing[1], UserPointer<void>(buffer), | 801 h_passing[1], UserPointer<void>(buffer), |
| 807 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 802 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 808 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 803 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 809 EXPECT_EQ(kWorldSize, num_bytes); | 804 EXPECT_EQ(kWorldSize, num_bytes); |
| 810 EXPECT_STREQ(kWorld, buffer); | 805 EXPECT_STREQ(kWorld, buffer); |
| 811 EXPECT_EQ(1u, num_handles); | 806 EXPECT_EQ(1u, num_handles); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 826 EXPECT_EQ(MOJO_RESULT_OK, | 821 EXPECT_EQ(MOJO_RESULT_OK, |
| 827 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), | 822 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), |
| 828 kHelloSize, NullUserPointer(), 0, | 823 kHelloSize, NullUserPointer(), 0, |
| 829 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 824 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 830 hss = kEmptyMojoHandleSignalsState; | 825 hss = kEmptyMojoHandleSignalsState; |
| 831 EXPECT_EQ(MOJO_RESULT_OK, | 826 EXPECT_EQ(MOJO_RESULT_OK, |
| 832 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 827 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 833 MakeUserPointer(&hss))); | 828 MakeUserPointer(&hss))); |
| 834 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 829 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 835 hss.satisfied_signals); | 830 hss.satisfied_signals); |
| 836 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 831 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 837 hss.satisfiable_signals); | |
| 838 num_bytes = kBufferSize; | 832 num_bytes = kBufferSize; |
| 839 num_handles = arraysize(handles); | 833 num_handles = arraysize(handles); |
| 840 EXPECT_EQ(MOJO_RESULT_OK, | 834 EXPECT_EQ(MOJO_RESULT_OK, |
| 841 core()->ReadMessage( | 835 core()->ReadMessage( |
| 842 h_received, UserPointer<void>(buffer), | 836 h_received, UserPointer<void>(buffer), |
| 843 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 837 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 844 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 838 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 845 EXPECT_EQ(kHelloSize, num_bytes); | 839 EXPECT_EQ(kHelloSize, num_bytes); |
| 846 EXPECT_STREQ(kHello, buffer); | 840 EXPECT_STREQ(kHello, buffer); |
| 847 EXPECT_EQ(0u, num_handles); | 841 EXPECT_EQ(0u, num_handles); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 863 EXPECT_NE(ph, MOJO_HANDLE_INVALID); | 857 EXPECT_NE(ph, MOJO_HANDLE_INVALID); |
| 864 EXPECT_NE(ch, MOJO_HANDLE_INVALID); | 858 EXPECT_NE(ch, MOJO_HANDLE_INVALID); |
| 865 EXPECT_NE(ph, ch); | 859 EXPECT_NE(ph, ch); |
| 866 | 860 |
| 867 // Producer should be never-readable, but already writable. | 861 // Producer should be never-readable, but already writable. |
| 868 hss = kEmptyMojoHandleSignalsState; | 862 hss = kEmptyMojoHandleSignalsState; |
| 869 EXPECT_EQ( | 863 EXPECT_EQ( |
| 870 MOJO_RESULT_FAILED_PRECONDITION, | 864 MOJO_RESULT_FAILED_PRECONDITION, |
| 871 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 865 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 872 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 866 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 873 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); | 867 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 868 hss.satisfiable_signals); |
| 874 hss = kEmptyMojoHandleSignalsState; | 869 hss = kEmptyMojoHandleSignalsState; |
| 875 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0, | 870 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0, |
| 876 MakeUserPointer(&hss))); | 871 MakeUserPointer(&hss))); |
| 877 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 872 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 878 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); | 873 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 874 hss.satisfiable_signals); |
| 879 | 875 |
| 880 // Consumer should be never-writable, and not yet readable. | 876 // Consumer should be never-writable, and not yet readable. |
| 881 hss = kFullMojoHandleSignalsState; | 877 hss = kFullMojoHandleSignalsState; |
| 882 EXPECT_EQ( | 878 EXPECT_EQ( |
| 883 MOJO_RESULT_FAILED_PRECONDITION, | 879 MOJO_RESULT_FAILED_PRECONDITION, |
| 884 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); | 880 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); |
| 885 EXPECT_EQ(0u, hss.satisfied_signals); | 881 EXPECT_EQ(0u, hss.satisfied_signals); |
| 886 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 882 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 883 hss.satisfiable_signals); |
| 887 hss = kFullMojoHandleSignalsState; | 884 hss = kFullMojoHandleSignalsState; |
| 888 EXPECT_EQ( | 885 EXPECT_EQ( |
| 889 MOJO_RESULT_DEADLINE_EXCEEDED, | 886 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 890 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 887 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 891 EXPECT_EQ(0u, hss.satisfied_signals); | 888 EXPECT_EQ(0u, hss.satisfied_signals); |
| 892 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 889 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 890 hss.satisfiable_signals); |
| 893 | 891 |
| 894 // Write. | 892 // Write. |
| 895 signed char elements[2] = {'A', 'B'}; | 893 signed char elements[2] = {'A', 'B'}; |
| 896 uint32_t num_bytes = 2u; | 894 uint32_t num_bytes = 2u; |
| 897 EXPECT_EQ(MOJO_RESULT_OK, | 895 EXPECT_EQ(MOJO_RESULT_OK, |
| 898 core()->WriteData(ph, UserPointer<const void>(elements), | 896 core()->WriteData(ph, UserPointer<const void>(elements), |
| 899 MakeUserPointer(&num_bytes), | 897 MakeUserPointer(&num_bytes), |
| 900 MOJO_WRITE_DATA_FLAG_NONE)); | 898 MOJO_WRITE_DATA_FLAG_NONE)); |
| 901 EXPECT_EQ(2u, num_bytes); | 899 EXPECT_EQ(2u, num_bytes); |
| 902 | 900 |
| 903 // Consumer should now be readable. | 901 // Consumer should now be readable. |
| 904 hss = kEmptyMojoHandleSignalsState; | 902 hss = kEmptyMojoHandleSignalsState; |
| 905 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, | 903 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, |
| 906 MakeUserPointer(&hss))); | 904 MakeUserPointer(&hss))); |
| 907 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 905 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 908 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 906 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 907 hss.satisfiable_signals); |
| 909 | 908 |
| 910 // Peek one character. | 909 // Peek one character. |
| 911 elements[0] = -1; | 910 elements[0] = -1; |
| 912 elements[1] = -1; | 911 elements[1] = -1; |
| 913 num_bytes = 1u; | 912 num_bytes = 1u; |
| 914 EXPECT_EQ(MOJO_RESULT_OK, | 913 EXPECT_EQ(MOJO_RESULT_OK, |
| 915 core()->ReadData( | 914 core()->ReadData( |
| 916 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes), | 915 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes), |
| 917 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK)); | 916 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK)); |
| 918 EXPECT_EQ('A', elements[0]); | 917 EXPECT_EQ('A', elements[0]); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); | 1014 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); |
| 1016 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); | 1015 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); |
| 1017 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); | 1016 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); |
| 1018 | 1017 |
| 1019 // Consumer should now be no longer readable. | 1018 // Consumer should now be no longer readable. |
| 1020 hss = kFullMojoHandleSignalsState; | 1019 hss = kFullMojoHandleSignalsState; |
| 1021 EXPECT_EQ( | 1020 EXPECT_EQ( |
| 1022 MOJO_RESULT_DEADLINE_EXCEEDED, | 1021 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 1023 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1022 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1024 EXPECT_EQ(0u, hss.satisfied_signals); | 1023 EXPECT_EQ(0u, hss.satisfied_signals); |
| 1025 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 1024 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1025 hss.satisfiable_signals); |
| 1026 | 1026 |
| 1027 // TODO(vtl): More. | 1027 // TODO(vtl): More. |
| 1028 | 1028 |
| 1029 // Close the producer. | 1029 // Close the producer. |
| 1030 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); | 1030 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); |
| 1031 | 1031 |
| 1032 // The consumer should now be never-readable. | 1032 // The consumer should now be never-readable. |
| 1033 hss = kFullMojoHandleSignalsState; | 1033 hss = kFullMojoHandleSignalsState; |
| 1034 EXPECT_EQ( | 1034 EXPECT_EQ( |
| 1035 MOJO_RESULT_FAILED_PRECONDITION, | 1035 MOJO_RESULT_FAILED_PRECONDITION, |
| 1036 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1036 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1037 EXPECT_EQ(0u, hss.satisfied_signals); | 1037 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 1038 EXPECT_EQ(0u, hss.satisfiable_signals); | 1038 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 1039 | 1039 |
| 1040 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); | 1040 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); |
| 1041 } | 1041 } |
| 1042 | 1042 |
| 1043 // Tests passing data pipe producer and consumer handles. | 1043 // Tests passing data pipe producer and consumer handles. |
| 1044 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { | 1044 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { |
| 1045 const char kHello[] = "hello"; | 1045 const char kHello[] = "hello"; |
| 1046 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 1046 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
| 1047 const char kWorld[] = "world!!!"; | 1047 const char kWorld[] = "world!!!"; |
| 1048 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); | 1048 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1068 EXPECT_EQ(MOJO_RESULT_OK, | 1068 EXPECT_EQ(MOJO_RESULT_OK, |
| 1069 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 1069 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 1070 kHelloSize, MakeUserPointer(&ch), 1, | 1070 kHelloSize, MakeUserPointer(&ch), 1, |
| 1071 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1071 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1072 hss = kEmptyMojoHandleSignalsState; | 1072 hss = kEmptyMojoHandleSignalsState; |
| 1073 EXPECT_EQ(MOJO_RESULT_OK, | 1073 EXPECT_EQ(MOJO_RESULT_OK, |
| 1074 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1074 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1075 MakeUserPointer(&hss))); | 1075 MakeUserPointer(&hss))); |
| 1076 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1076 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1077 hss.satisfied_signals); | 1077 hss.satisfied_signals); |
| 1078 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1078 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1079 hss.satisfiable_signals); | |
| 1080 num_bytes = kBufferSize; | 1079 num_bytes = kBufferSize; |
| 1081 num_handles = arraysize(handles); | 1080 num_handles = arraysize(handles); |
| 1082 EXPECT_EQ(MOJO_RESULT_OK, | 1081 EXPECT_EQ(MOJO_RESULT_OK, |
| 1083 core()->ReadMessage( | 1082 core()->ReadMessage( |
| 1084 h_passing[1], UserPointer<void>(buffer), | 1083 h_passing[1], UserPointer<void>(buffer), |
| 1085 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1084 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1086 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1085 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1087 EXPECT_EQ(kHelloSize, num_bytes); | 1086 EXPECT_EQ(kHelloSize, num_bytes); |
| 1088 EXPECT_STREQ(kHello, buffer); | 1087 EXPECT_STREQ(kHello, buffer); |
| 1089 EXPECT_EQ(1u, num_handles); | 1088 EXPECT_EQ(1u, num_handles); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1104 num_bytes = kWorldSize; | 1103 num_bytes = kWorldSize; |
| 1105 EXPECT_EQ(MOJO_RESULT_OK, | 1104 EXPECT_EQ(MOJO_RESULT_OK, |
| 1106 core()->WriteData(ph, UserPointer<const void>(kWorld), | 1105 core()->WriteData(ph, UserPointer<const void>(kWorld), |
| 1107 MakeUserPointer(&num_bytes), | 1106 MakeUserPointer(&num_bytes), |
| 1108 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1107 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1109 hss = kEmptyMojoHandleSignalsState; | 1108 hss = kEmptyMojoHandleSignalsState; |
| 1110 EXPECT_EQ(MOJO_RESULT_OK, | 1109 EXPECT_EQ(MOJO_RESULT_OK, |
| 1111 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1110 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1112 MakeUserPointer(&hss))); | 1111 MakeUserPointer(&hss))); |
| 1113 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1112 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 1114 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 1113 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1114 hss.satisfiable_signals); |
| 1115 num_bytes = kBufferSize; | 1115 num_bytes = kBufferSize; |
| 1116 EXPECT_EQ(MOJO_RESULT_OK, | 1116 EXPECT_EQ(MOJO_RESULT_OK, |
| 1117 core()->ReadData(ch_received, UserPointer<void>(buffer), | 1117 core()->ReadData(ch_received, UserPointer<void>(buffer), |
| 1118 MakeUserPointer(&num_bytes), | 1118 MakeUserPointer(&num_bytes), |
| 1119 MOJO_READ_MESSAGE_FLAG_NONE)); | 1119 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1120 EXPECT_EQ(kWorldSize, num_bytes); | 1120 EXPECT_EQ(kWorldSize, num_bytes); |
| 1121 EXPECT_STREQ(kWorld, buffer); | 1121 EXPECT_STREQ(kWorld, buffer); |
| 1122 | 1122 |
| 1123 // Now pass |ph| in the same direction. | 1123 // Now pass |ph| in the same direction. |
| 1124 EXPECT_EQ(MOJO_RESULT_OK, | 1124 EXPECT_EQ(MOJO_RESULT_OK, |
| 1125 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 1125 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 1126 kWorldSize, MakeUserPointer(&ph), 1, | 1126 kWorldSize, MakeUserPointer(&ph), 1, |
| 1127 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1127 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1128 hss = kEmptyMojoHandleSignalsState; | 1128 hss = kEmptyMojoHandleSignalsState; |
| 1129 EXPECT_EQ(MOJO_RESULT_OK, | 1129 EXPECT_EQ(MOJO_RESULT_OK, |
| 1130 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1130 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1131 MakeUserPointer(&hss))); | 1131 MakeUserPointer(&hss))); |
| 1132 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1132 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1133 hss.satisfied_signals); | 1133 hss.satisfied_signals); |
| 1134 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1134 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1135 hss.satisfiable_signals); | |
| 1136 num_bytes = kBufferSize; | 1135 num_bytes = kBufferSize; |
| 1137 num_handles = arraysize(handles); | 1136 num_handles = arraysize(handles); |
| 1138 EXPECT_EQ(MOJO_RESULT_OK, | 1137 EXPECT_EQ(MOJO_RESULT_OK, |
| 1139 core()->ReadMessage( | 1138 core()->ReadMessage( |
| 1140 h_passing[1], UserPointer<void>(buffer), | 1139 h_passing[1], UserPointer<void>(buffer), |
| 1141 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1140 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1142 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1141 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1143 EXPECT_EQ(kWorldSize, num_bytes); | 1142 EXPECT_EQ(kWorldSize, num_bytes); |
| 1144 EXPECT_STREQ(kWorld, buffer); | 1143 EXPECT_STREQ(kWorld, buffer); |
| 1145 EXPECT_EQ(1u, num_handles); | 1144 EXPECT_EQ(1u, num_handles); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1160 num_bytes = kHelloSize; | 1159 num_bytes = kHelloSize; |
| 1161 EXPECT_EQ(MOJO_RESULT_OK, | 1160 EXPECT_EQ(MOJO_RESULT_OK, |
| 1162 core()->WriteData(ph_received, UserPointer<const void>(kHello), | 1161 core()->WriteData(ph_received, UserPointer<const void>(kHello), |
| 1163 MakeUserPointer(&num_bytes), | 1162 MakeUserPointer(&num_bytes), |
| 1164 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1163 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1165 hss = kEmptyMojoHandleSignalsState; | 1164 hss = kEmptyMojoHandleSignalsState; |
| 1166 EXPECT_EQ(MOJO_RESULT_OK, | 1165 EXPECT_EQ(MOJO_RESULT_OK, |
| 1167 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1166 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1168 MakeUserPointer(&hss))); | 1167 MakeUserPointer(&hss))); |
| 1169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 1170 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 1169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1170 hss.satisfiable_signals); |
| 1171 num_bytes = kBufferSize; | 1171 num_bytes = kBufferSize; |
| 1172 EXPECT_EQ(MOJO_RESULT_OK, | 1172 EXPECT_EQ(MOJO_RESULT_OK, |
| 1173 core()->ReadData(ch_received, UserPointer<void>(buffer), | 1173 core()->ReadData(ch_received, UserPointer<void>(buffer), |
| 1174 MakeUserPointer(&num_bytes), | 1174 MakeUserPointer(&num_bytes), |
| 1175 MOJO_READ_MESSAGE_FLAG_NONE)); | 1175 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1176 EXPECT_EQ(kHelloSize, num_bytes); | 1176 EXPECT_EQ(kHelloSize, num_bytes); |
| 1177 EXPECT_STREQ(kHello, buffer); | 1177 EXPECT_STREQ(kHello, buffer); |
| 1178 | 1178 |
| 1179 ph = ph_received; | 1179 ph = ph_received; |
| 1180 ph_received = MOJO_HANDLE_INVALID; | 1180 ph_received = MOJO_HANDLE_INVALID; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1218 | 1218 |
| 1219 // Complete the two-phase write. | 1219 // Complete the two-phase write. |
| 1220 static_cast<char*>(write_ptr)[0] = 'x'; | 1220 static_cast<char*>(write_ptr)[0] = 'x'; |
| 1221 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); | 1221 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); |
| 1222 | 1222 |
| 1223 // Wait for |ch| to be readable. | 1223 // Wait for |ch| to be readable. |
| 1224 hss = kEmptyMojoHandleSignalsState; | 1224 hss = kEmptyMojoHandleSignalsState; |
| 1225 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, | 1225 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, |
| 1226 1000000000, MakeUserPointer(&hss))); | 1226 1000000000, MakeUserPointer(&hss))); |
| 1227 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1227 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 1228 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 1228 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1229 hss.satisfiable_signals); |
| 1229 | 1230 |
| 1230 // Make sure that |ch| can't be sent if it's in a two-phase read. | 1231 // Make sure that |ch| can't be sent if it's in a two-phase read. |
| 1231 const void* read_ptr = nullptr; | 1232 const void* read_ptr = nullptr; |
| 1232 num_bytes = 1; | 1233 num_bytes = 1; |
| 1233 ASSERT_EQ(MOJO_RESULT_OK, | 1234 ASSERT_EQ(MOJO_RESULT_OK, |
| 1234 core()->BeginReadData(ch, MakeUserPointer(&read_ptr), | 1235 core()->BeginReadData(ch, MakeUserPointer(&read_ptr), |
| 1235 MakeUserPointer(&num_bytes), | 1236 MakeUserPointer(&num_bytes), |
| 1236 MOJO_READ_DATA_FLAG_ALL_OR_NONE)); | 1237 MOJO_READ_DATA_FLAG_ALL_OR_NONE)); |
| 1237 EXPECT_EQ(MOJO_RESULT_BUSY, | 1238 EXPECT_EQ(MOJO_RESULT_BUSY, |
| 1238 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 1239 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 1239 kHelloSize, MakeUserPointer(&ch), 1, | 1240 kHelloSize, MakeUserPointer(&ch), 1, |
| 1240 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1241 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1241 | 1242 |
| 1242 // But |ph| can, even if |ch| is in a two-phase read. | 1243 // But |ph| can, even if |ch| is in a two-phase read. |
| 1243 EXPECT_EQ(MOJO_RESULT_OK, | 1244 EXPECT_EQ(MOJO_RESULT_OK, |
| 1244 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 1245 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 1245 kWorldSize, MakeUserPointer(&ph), 1, | 1246 kWorldSize, MakeUserPointer(&ph), 1, |
| 1246 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1247 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1247 ph = MOJO_HANDLE_INVALID; | 1248 ph = MOJO_HANDLE_INVALID; |
| 1248 hss = kEmptyMojoHandleSignalsState; | 1249 hss = kEmptyMojoHandleSignalsState; |
| 1249 EXPECT_EQ(MOJO_RESULT_OK, | 1250 EXPECT_EQ(MOJO_RESULT_OK, |
| 1250 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1251 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1251 MakeUserPointer(&hss))); | 1252 MakeUserPointer(&hss))); |
| 1252 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1253 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1253 hss.satisfied_signals); | 1254 hss.satisfied_signals); |
| 1254 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1255 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1255 hss.satisfiable_signals); | |
| 1256 num_bytes = kBufferSize; | 1256 num_bytes = kBufferSize; |
| 1257 num_handles = arraysize(handles); | 1257 num_handles = arraysize(handles); |
| 1258 EXPECT_EQ(MOJO_RESULT_OK, | 1258 EXPECT_EQ(MOJO_RESULT_OK, |
| 1259 core()->ReadMessage( | 1259 core()->ReadMessage( |
| 1260 h_passing[1], UserPointer<void>(buffer), | 1260 h_passing[1], UserPointer<void>(buffer), |
| 1261 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1261 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1262 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1262 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1263 EXPECT_EQ(kWorldSize, num_bytes); | 1263 EXPECT_EQ(kWorldSize, num_bytes); |
| 1264 EXPECT_STREQ(kWorld, buffer); | 1264 EXPECT_STREQ(kWorld, buffer); |
| 1265 EXPECT_EQ(1u, num_handles); | 1265 EXPECT_EQ(1u, num_handles); |
| 1266 ph = handles[0]; | 1266 ph = handles[0]; |
| 1267 EXPECT_NE(ph, MOJO_HANDLE_INVALID); | 1267 EXPECT_NE(ph, MOJO_HANDLE_INVALID); |
| 1268 | 1268 |
| 1269 // Complete the two-phase read. | 1269 // Complete the two-phase read. |
| 1270 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]); | 1270 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]); |
| 1271 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1)); | 1271 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1)); |
| 1272 | 1272 |
| 1273 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0])); | 1273 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0])); |
| 1274 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1])); | 1274 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1])); |
| 1275 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); | 1275 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); |
| 1276 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); | 1276 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); |
| 1277 } | 1277 } |
| 1278 | 1278 |
| 1279 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. | 1279 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. |
| 1280 | 1280 |
| 1281 } // namespace | 1281 } // namespace |
| 1282 } // namespace system | 1282 } // namespace system |
| 1283 } // namespace mojo | 1283 } // namespace mojo |
| OLD | NEW |