| 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 "mojo/edk/platform/thread_utils.h" | 11 #include "mojo/edk/platform/thread_utils.h" |
| 12 #include "mojo/edk/system/awakable.h" | 12 #include "mojo/edk/system/awakable.h" |
| 13 #include "mojo/edk/system/core_test_base.h" | 13 #include "mojo/edk/system/core_test_base.h" |
| 14 #include "mojo/edk/system/test/timeouts.h" | 14 #include "mojo/edk/system/test/timeouts.h" |
| 15 #include "mojo/public/cpp/system/macros.h" | 15 #include "mojo/public/cpp/system/macros.h" |
| 16 | 16 |
| 17 using mojo::platform::ThreadSleep; | 17 using mojo::platform::ThreadSleep; |
| 18 | 18 |
| 19 namespace mojo { | 19 namespace mojo { |
| 20 namespace system { | 20 namespace system { |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; | 23 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; |
| 24 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; | 24 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; |
| 25 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE | | |
| 26 MOJO_HANDLE_SIGNAL_WRITABLE | | |
| 27 MOJO_HANDLE_SIGNAL_PEER_CLOSED; | |
| 28 | 25 |
| 29 using CoreTest = test::CoreTestBase; | 26 using CoreTest = test::CoreTestBase; |
| 30 | 27 |
| 31 TEST_F(CoreTest, GetTimeTicksNow) { | 28 TEST_F(CoreTest, GetTimeTicksNow) { |
| 32 const MojoTimeTicks start = core()->GetTimeTicksNow(); | 29 const MojoTimeTicks start = core()->GetTimeTicksNow(); |
| 33 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 30 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 34 << "GetTimeTicksNow should return nonzero value"; | 31 << "GetTimeTicksNow should return nonzero value"; |
| 35 ThreadSleep(test::DeadlineFromMilliseconds(15u)); | 32 ThreadSleep(test::DeadlineFromMilliseconds(15u)); |
| 36 const MojoTimeTicks finish = core()->GetTimeTicksNow(); | 33 const MojoTimeTicks finish = core()->GetTimeTicksNow(); |
| 37 // Allow for some fuzz in sleep. | 34 // Allow for some fuzz in sleep. |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 MOJO_HANDLE_SIGNAL_READABLE}; | 649 MOJO_HANDLE_SIGNAL_READABLE}; |
| 653 result_index = static_cast<uint32_t>(-1); | 650 result_index = static_cast<uint32_t>(-1); |
| 654 hss[0] = kEmptyMojoHandleSignalsState; | 651 hss[0] = kEmptyMojoHandleSignalsState; |
| 655 hss[1] = kEmptyMojoHandleSignalsState; | 652 hss[1] = kEmptyMojoHandleSignalsState; |
| 656 EXPECT_EQ( | 653 EXPECT_EQ( |
| 657 MOJO_RESULT_DEADLINE_EXCEEDED, | 654 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 658 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, | 655 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, |
| 659 MakeUserPointer(&result_index), MakeUserPointer(hss))); | 656 MakeUserPointer(&result_index), MakeUserPointer(hss))); |
| 660 EXPECT_EQ(static_cast<uint32_t>(-1), result_index); | 657 EXPECT_EQ(static_cast<uint32_t>(-1), result_index); |
| 661 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 658 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 662 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 659 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 660 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 661 hss[0].satisfiable_signals); |
| 663 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 662 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 664 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); | 663 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 664 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 665 hss[1].satisfiable_signals); |
| 665 | 666 |
| 666 // Try to read anyway. | 667 // Try to read anyway. |
| 667 char buffer[1] = {'a'}; | 668 char buffer[1] = {'a'}; |
| 668 uint32_t buffer_size = 1; | 669 uint32_t buffer_size = 1; |
| 669 EXPECT_EQ( | 670 EXPECT_EQ( |
| 670 MOJO_RESULT_SHOULD_WAIT, | 671 MOJO_RESULT_SHOULD_WAIT, |
| 671 core()->ReadMessage(h[0], UserPointer<void>(buffer), | 672 core()->ReadMessage(h[0], UserPointer<void>(buffer), |
| 672 MakeUserPointer(&buffer_size), NullUserPointer(), | 673 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 673 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 674 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 674 // Check that it left its inputs alone. | 675 // Check that it left its inputs alone. |
| 675 EXPECT_EQ('a', buffer[0]); | 676 EXPECT_EQ('a', buffer[0]); |
| 676 EXPECT_EQ(1u, buffer_size); | 677 EXPECT_EQ(1u, buffer_size); |
| 677 | 678 |
| 678 // Both should be writable. | 679 // Both should be writable. |
| 679 hss[0] = kEmptyMojoHandleSignalsState; | 680 hss[0] = kEmptyMojoHandleSignalsState; |
| 680 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, | 681 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, |
| 681 1000000000, MakeUserPointer(&hss[0]))); | 682 1000000000, MakeUserPointer(&hss[0]))); |
| 682 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 683 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 683 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 684 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 685 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 686 hss[0].satisfiable_signals); |
| 684 hss[0] = kEmptyMojoHandleSignalsState; | 687 hss[0] = kEmptyMojoHandleSignalsState; |
| 685 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, | 688 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, |
| 686 1000000000, MakeUserPointer(&hss[0]))); | 689 1000000000, MakeUserPointer(&hss[0]))); |
| 687 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 690 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 688 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 691 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 692 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 693 hss[0].satisfiable_signals); |
| 689 | 694 |
| 690 // Also check that |h[1]| is writable using |WaitMany()|. | 695 // Also check that |h[1]| is writable using |WaitMany()|. |
| 691 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; | 696 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; |
| 692 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE; | 697 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE; |
| 693 result_index = static_cast<uint32_t>(-1); | 698 result_index = static_cast<uint32_t>(-1); |
| 694 hss[0] = kEmptyMojoHandleSignalsState; | 699 hss[0] = kEmptyMojoHandleSignalsState; |
| 695 hss[1] = kEmptyMojoHandleSignalsState; | 700 hss[1] = kEmptyMojoHandleSignalsState; |
| 696 EXPECT_EQ( | 701 EXPECT_EQ( |
| 697 MOJO_RESULT_OK, | 702 MOJO_RESULT_OK, |
| 698 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, | 703 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, |
| 699 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 704 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 700 MakeUserPointer(hss))); | 705 MakeUserPointer(hss))); |
| 701 EXPECT_EQ(1u, result_index); | 706 EXPECT_EQ(1u, result_index); |
| 702 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 707 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 703 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 708 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 709 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 710 hss[0].satisfiable_signals); |
| 704 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 711 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 705 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); | 712 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 713 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 714 hss[1].satisfiable_signals); |
| 706 | 715 |
| 707 // Write to |h[1]|. | 716 // Write to |h[1]|. |
| 708 buffer[0] = 'b'; | 717 buffer[0] = 'b'; |
| 709 EXPECT_EQ( | 718 EXPECT_EQ( |
| 710 MOJO_RESULT_OK, | 719 MOJO_RESULT_OK, |
| 711 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, | 720 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, |
| 712 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 721 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 713 | 722 |
| 714 // Check that |h[0]| is now readable. | 723 // Check that |h[0]| is now readable. |
| 715 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; | 724 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; |
| 716 signals[1] = MOJO_HANDLE_SIGNAL_READABLE; | 725 signals[1] = MOJO_HANDLE_SIGNAL_READABLE; |
| 717 result_index = static_cast<uint32_t>(-1); | 726 result_index = static_cast<uint32_t>(-1); |
| 718 hss[0] = kEmptyMojoHandleSignalsState; | 727 hss[0] = kEmptyMojoHandleSignalsState; |
| 719 hss[1] = kEmptyMojoHandleSignalsState; | 728 hss[1] = kEmptyMojoHandleSignalsState; |
| 720 EXPECT_EQ( | 729 EXPECT_EQ( |
| 721 MOJO_RESULT_OK, | 730 MOJO_RESULT_OK, |
| 722 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, | 731 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, |
| 723 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 732 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 724 MakeUserPointer(hss))); | 733 MakeUserPointer(hss))); |
| 725 EXPECT_EQ(0u, result_index); | 734 EXPECT_EQ(0u, result_index); |
| 726 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 735 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 727 hss[0].satisfied_signals); | 736 hss[0].satisfied_signals); |
| 728 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 737 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 738 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 739 hss[0].satisfiable_signals); |
| 729 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); | 740 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); |
| 730 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals); | 741 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 742 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 743 hss[1].satisfiable_signals); |
| 731 | 744 |
| 732 // Read from |h[0]|. | 745 // Read from |h[0]|. |
| 733 // First, get only the size. | 746 // First, get only the size. |
| 734 buffer_size = 0; | 747 buffer_size = 0; |
| 735 EXPECT_EQ( | 748 EXPECT_EQ( |
| 736 MOJO_RESULT_RESOURCE_EXHAUSTED, | 749 MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 737 core()->ReadMessage(h[0], NullUserPointer(), | 750 core()->ReadMessage(h[0], NullUserPointer(), |
| 738 MakeUserPointer(&buffer_size), NullUserPointer(), | 751 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 739 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 752 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 740 EXPECT_EQ(1u, buffer_size); | 753 EXPECT_EQ(1u, buffer_size); |
| 741 // Then actually read it. | 754 // Then actually read it. |
| 742 buffer[0] = 'c'; | 755 buffer[0] = 'c'; |
| 743 buffer_size = 1; | 756 buffer_size = 1; |
| 744 EXPECT_EQ( | 757 EXPECT_EQ( |
| 745 MOJO_RESULT_OK, | 758 MOJO_RESULT_OK, |
| 746 core()->ReadMessage(h[0], UserPointer<void>(buffer), | 759 core()->ReadMessage(h[0], UserPointer<void>(buffer), |
| 747 MakeUserPointer(&buffer_size), NullUserPointer(), | 760 MakeUserPointer(&buffer_size), NullUserPointer(), |
| 748 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); | 761 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 749 EXPECT_EQ('b', buffer[0]); | 762 EXPECT_EQ('b', buffer[0]); |
| 750 EXPECT_EQ(1u, buffer_size); | 763 EXPECT_EQ(1u, buffer_size); |
| 751 | 764 |
| 752 // |h[0]| should no longer be readable. | 765 // |h[0]| should no longer be readable. |
| 753 hss[0] = kEmptyMojoHandleSignalsState; | 766 hss[0] = kEmptyMojoHandleSignalsState; |
| 754 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 767 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 755 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0, | 768 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0, |
| 756 MakeUserPointer(&hss[0]))); | 769 MakeUserPointer(&hss[0]))); |
| 757 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); | 770 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); |
| 758 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals); | 771 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 772 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 773 hss[0].satisfiable_signals); |
| 759 | 774 |
| 760 // Write to |h[0]|. | 775 // Write to |h[0]|. |
| 761 buffer[0] = 'd'; | 776 buffer[0] = 'd'; |
| 762 EXPECT_EQ( | 777 EXPECT_EQ( |
| 763 MOJO_RESULT_OK, | 778 MOJO_RESULT_OK, |
| 764 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1, | 779 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1, |
| 765 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 780 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 766 | 781 |
| 767 // Close |h[0]|. | 782 // Close |h[0]|. |
| 768 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); | 783 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 834 EXPECT_EQ(MOJO_RESULT_OK, | 849 EXPECT_EQ(MOJO_RESULT_OK, |
| 835 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 850 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 836 kHelloSize, NullUserPointer(), 0, | 851 kHelloSize, NullUserPointer(), 0, |
| 837 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 852 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 838 hss = kEmptyMojoHandleSignalsState; | 853 hss = kEmptyMojoHandleSignalsState; |
| 839 EXPECT_EQ(MOJO_RESULT_OK, | 854 EXPECT_EQ(MOJO_RESULT_OK, |
| 840 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 855 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 841 MakeUserPointer(&hss))); | 856 MakeUserPointer(&hss))); |
| 842 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 857 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 843 hss.satisfied_signals); | 858 hss.satisfied_signals); |
| 844 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 859 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 860 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 861 hss.satisfiable_signals); |
| 845 num_bytes = kBufferSize; | 862 num_bytes = kBufferSize; |
| 846 num_handles = MOJO_ARRAYSIZE(handles); | 863 num_handles = MOJO_ARRAYSIZE(handles); |
| 847 EXPECT_EQ(MOJO_RESULT_OK, | 864 EXPECT_EQ(MOJO_RESULT_OK, |
| 848 core()->ReadMessage( | 865 core()->ReadMessage( |
| 849 h_passing[1], UserPointer<void>(buffer), | 866 h_passing[1], UserPointer<void>(buffer), |
| 850 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 867 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 851 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 868 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 852 EXPECT_EQ(kHelloSize, num_bytes); | 869 EXPECT_EQ(kHelloSize, num_bytes); |
| 853 EXPECT_STREQ(kHello, buffer); | 870 EXPECT_STREQ(kHello, buffer); |
| 854 EXPECT_EQ(0u, num_handles); | 871 EXPECT_EQ(0u, num_handles); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 874 EXPECT_EQ(MOJO_RESULT_OK, | 891 EXPECT_EQ(MOJO_RESULT_OK, |
| 875 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), | 892 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), |
| 876 kHelloSize, NullUserPointer(), 0, | 893 kHelloSize, NullUserPointer(), 0, |
| 877 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 894 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 878 hss = kEmptyMojoHandleSignalsState; | 895 hss = kEmptyMojoHandleSignalsState; |
| 879 EXPECT_EQ(MOJO_RESULT_OK, | 896 EXPECT_EQ(MOJO_RESULT_OK, |
| 880 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 897 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 881 MakeUserPointer(&hss))); | 898 MakeUserPointer(&hss))); |
| 882 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 899 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 883 hss.satisfied_signals); | 900 hss.satisfied_signals); |
| 884 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 901 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 902 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 903 hss.satisfiable_signals); |
| 885 num_bytes = kBufferSize; | 904 num_bytes = kBufferSize; |
| 886 num_handles = MOJO_ARRAYSIZE(handles); | 905 num_handles = MOJO_ARRAYSIZE(handles); |
| 887 EXPECT_EQ(MOJO_RESULT_OK, | 906 EXPECT_EQ(MOJO_RESULT_OK, |
| 888 core()->ReadMessage( | 907 core()->ReadMessage( |
| 889 h_passed[1], UserPointer<void>(buffer), | 908 h_passed[1], UserPointer<void>(buffer), |
| 890 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 909 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 891 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 910 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 892 EXPECT_EQ(kHelloSize, num_bytes); | 911 EXPECT_EQ(kHelloSize, num_bytes); |
| 893 EXPECT_STREQ(kHello, buffer); | 912 EXPECT_STREQ(kHello, buffer); |
| 894 EXPECT_EQ(0u, num_handles); | 913 EXPECT_EQ(0u, num_handles); |
| 895 | 914 |
| 896 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. | 915 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. |
| 897 EXPECT_EQ(MOJO_RESULT_OK, | 916 EXPECT_EQ(MOJO_RESULT_OK, |
| 898 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 917 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 899 kWorldSize, MakeUserPointer(&h_passed[1]), 1, | 918 kWorldSize, MakeUserPointer(&h_passed[1]), 1, |
| 900 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 919 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 901 hss = kEmptyMojoHandleSignalsState; | 920 hss = kEmptyMojoHandleSignalsState; |
| 902 EXPECT_EQ(MOJO_RESULT_OK, | 921 EXPECT_EQ(MOJO_RESULT_OK, |
| 903 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 922 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 904 MakeUserPointer(&hss))); | 923 MakeUserPointer(&hss))); |
| 905 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 924 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 906 hss.satisfied_signals); | 925 hss.satisfied_signals); |
| 907 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 926 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 927 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 928 hss.satisfiable_signals); |
| 908 num_bytes = kBufferSize; | 929 num_bytes = kBufferSize; |
| 909 num_handles = MOJO_ARRAYSIZE(handles); | 930 num_handles = MOJO_ARRAYSIZE(handles); |
| 910 EXPECT_EQ(MOJO_RESULT_OK, | 931 EXPECT_EQ(MOJO_RESULT_OK, |
| 911 core()->ReadMessage( | 932 core()->ReadMessage( |
| 912 h_passing[1], UserPointer<void>(buffer), | 933 h_passing[1], UserPointer<void>(buffer), |
| 913 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 934 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 914 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 935 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 915 EXPECT_EQ(kWorldSize, num_bytes); | 936 EXPECT_EQ(kWorldSize, num_bytes); |
| 916 EXPECT_STREQ(kWorld, buffer); | 937 EXPECT_STREQ(kWorld, buffer); |
| 917 EXPECT_EQ(1u, num_handles); | 938 EXPECT_EQ(1u, num_handles); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 932 EXPECT_EQ(MOJO_RESULT_OK, | 953 EXPECT_EQ(MOJO_RESULT_OK, |
| 933 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), | 954 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), |
| 934 kHelloSize, NullUserPointer(), 0, | 955 kHelloSize, NullUserPointer(), 0, |
| 935 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 956 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 936 hss = kEmptyMojoHandleSignalsState; | 957 hss = kEmptyMojoHandleSignalsState; |
| 937 EXPECT_EQ(MOJO_RESULT_OK, | 958 EXPECT_EQ(MOJO_RESULT_OK, |
| 938 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 959 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 939 MakeUserPointer(&hss))); | 960 MakeUserPointer(&hss))); |
| 940 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 961 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 941 hss.satisfied_signals); | 962 hss.satisfied_signals); |
| 942 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 963 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 964 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 965 hss.satisfiable_signals); |
| 943 num_bytes = kBufferSize; | 966 num_bytes = kBufferSize; |
| 944 num_handles = MOJO_ARRAYSIZE(handles); | 967 num_handles = MOJO_ARRAYSIZE(handles); |
| 945 EXPECT_EQ(MOJO_RESULT_OK, | 968 EXPECT_EQ(MOJO_RESULT_OK, |
| 946 core()->ReadMessage( | 969 core()->ReadMessage( |
| 947 h_received, UserPointer<void>(buffer), | 970 h_received, UserPointer<void>(buffer), |
| 948 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 971 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 949 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 972 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 950 EXPECT_EQ(kHelloSize, num_bytes); | 973 EXPECT_EQ(kHelloSize, num_bytes); |
| 951 EXPECT_STREQ(kHello, buffer); | 974 EXPECT_STREQ(kHello, buffer); |
| 952 EXPECT_EQ(0u, num_handles); | 975 EXPECT_EQ(0u, num_handles); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 983 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 1006 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 984 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1007 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 985 hss.satisfiable_signals); | 1008 hss.satisfiable_signals); |
| 986 | 1009 |
| 987 // Consumer should be never-writable, and not yet readable. | 1010 // Consumer should be never-writable, and not yet readable. |
| 988 hss = kFullMojoHandleSignalsState; | 1011 hss = kFullMojoHandleSignalsState; |
| 989 EXPECT_EQ( | 1012 EXPECT_EQ( |
| 990 MOJO_RESULT_FAILED_PRECONDITION, | 1013 MOJO_RESULT_FAILED_PRECONDITION, |
| 991 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); | 1014 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); |
| 992 EXPECT_EQ(0u, hss.satisfied_signals); | 1015 EXPECT_EQ(0u, hss.satisfied_signals); |
| 993 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1016 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1017 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 994 hss.satisfiable_signals); | 1018 hss.satisfiable_signals); |
| 995 hss = kFullMojoHandleSignalsState; | 1019 hss = kFullMojoHandleSignalsState; |
| 996 EXPECT_EQ( | 1020 EXPECT_EQ( |
| 997 MOJO_RESULT_DEADLINE_EXCEEDED, | 1021 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 998 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1022 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 999 EXPECT_EQ(0u, hss.satisfied_signals); | 1023 EXPECT_EQ(0u, hss.satisfied_signals); |
| 1000 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1024 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1025 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1001 hss.satisfiable_signals); | 1026 hss.satisfiable_signals); |
| 1002 | 1027 |
| 1003 // Write. | 1028 // Write. |
| 1004 signed char elements[2] = {'A', 'B'}; | 1029 signed char elements[2] = {'A', 'B'}; |
| 1005 uint32_t num_bytes = 2u; | 1030 uint32_t num_bytes = 2u; |
| 1006 EXPECT_EQ(MOJO_RESULT_OK, | 1031 EXPECT_EQ(MOJO_RESULT_OK, |
| 1007 core()->WriteData(ph, UserPointer<const void>(elements), | 1032 core()->WriteData(ph, UserPointer<const void>(elements), |
| 1008 MakeUserPointer(&num_bytes), | 1033 MakeUserPointer(&num_bytes), |
| 1009 MOJO_WRITE_DATA_FLAG_NONE)); | 1034 MOJO_WRITE_DATA_FLAG_NONE)); |
| 1010 EXPECT_EQ(2u, num_bytes); | 1035 EXPECT_EQ(2u, num_bytes); |
| 1011 | 1036 |
| 1012 // Consumer should now be readable. | 1037 // Consumer should now be readable. |
| 1013 hss = kEmptyMojoHandleSignalsState; | 1038 hss = kEmptyMojoHandleSignalsState; |
| 1014 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, | 1039 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, |
| 1015 MakeUserPointer(&hss))); | 1040 MakeUserPointer(&hss))); |
| 1016 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1041 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1017 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1042 hss.satisfied_signals); |
| 1043 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1044 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1018 hss.satisfiable_signals); | 1045 hss.satisfiable_signals); |
| 1019 | 1046 |
| 1020 // Peek one character. | 1047 // Peek one character. |
| 1021 elements[0] = -1; | 1048 elements[0] = -1; |
| 1022 elements[1] = -1; | 1049 elements[1] = -1; |
| 1023 num_bytes = 1u; | 1050 num_bytes = 1u; |
| 1024 EXPECT_EQ(MOJO_RESULT_OK, | 1051 EXPECT_EQ(MOJO_RESULT_OK, |
| 1025 core()->ReadData( | 1052 core()->ReadData( |
| 1026 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes), | 1053 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes), |
| 1027 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK)); | 1054 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK)); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1125 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); | 1152 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); |
| 1126 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); | 1153 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); |
| 1127 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); | 1154 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); |
| 1128 | 1155 |
| 1129 // Consumer should now be no longer readable. | 1156 // Consumer should now be no longer readable. |
| 1130 hss = kFullMojoHandleSignalsState; | 1157 hss = kFullMojoHandleSignalsState; |
| 1131 EXPECT_EQ( | 1158 EXPECT_EQ( |
| 1132 MOJO_RESULT_DEADLINE_EXCEEDED, | 1159 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 1133 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1160 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1134 EXPECT_EQ(0u, hss.satisfied_signals); | 1161 EXPECT_EQ(0u, hss.satisfied_signals); |
| 1135 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1162 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1163 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1136 hss.satisfiable_signals); | 1164 hss.satisfiable_signals); |
| 1137 | 1165 |
| 1138 // TODO(vtl): More. | 1166 // TODO(vtl): More. |
| 1139 | 1167 |
| 1140 // Close the producer. | 1168 // Close the producer. |
| 1141 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); | 1169 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); |
| 1142 | 1170 |
| 1143 // The consumer should now be never-readable. | 1171 // The consumer should now be never-readable. |
| 1144 hss = kFullMojoHandleSignalsState; | 1172 hss = kFullMojoHandleSignalsState; |
| 1145 EXPECT_EQ( | 1173 EXPECT_EQ( |
| 1146 MOJO_RESULT_FAILED_PRECONDITION, | 1174 MOJO_RESULT_FAILED_PRECONDITION, |
| 1147 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1175 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1148 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 1176 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 1149 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 1177 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 1150 | 1178 |
| 1151 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); | 1179 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); |
| 1152 } | 1180 } |
| 1153 | 1181 |
| 1182 TEST_F(CoreTest, DataPipeSetGetConsumerOptions) { |
| 1183 MojoCreateDataPipeOptions options = { |
| 1184 sizeof(MojoCreateDataPipeOptions), // |struct_size|. |
| 1185 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 1186 8, // |element_num_bytes|. |
| 1187 800 // |capacity_num_bytes|. |
| 1188 }; |
| 1189 MojoHandle ph, ch; // p is for producer and c is for consumer. |
| 1190 |
| 1191 EXPECT_EQ(MOJO_RESULT_OK, |
| 1192 core()->CreateDataPipe(MakeUserPointer(&options), |
| 1193 MakeUserPointer(&ph), MakeUserPointer(&ch))); |
| 1194 // Should get two distinct, valid handles. |
| 1195 EXPECT_NE(ph, MOJO_HANDLE_INVALID); |
| 1196 EXPECT_NE(ch, MOJO_HANDLE_INVALID); |
| 1197 EXPECT_NE(ph, ch); |
| 1198 |
| 1199 // Read it. |
| 1200 MojoDataPipeConsumerOptions copts = {}; |
| 1201 const uint32_t kCoptsSize = static_cast<uint32_t>(sizeof(copts)); |
| 1202 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1203 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1204 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1205 EXPECT_EQ(0u, copts.read_threshold_num_bytes); |
| 1206 |
| 1207 // Invalid read threshold. |
| 1208 copts.struct_size = kCoptsSize; |
| 1209 copts.read_threshold_num_bytes = 4; |
| 1210 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 1211 core()->SetDataPipeConsumerOptions(ch, MakeUserPointer(&copts))); |
| 1212 // The options shouldn't change. |
| 1213 copts = MojoDataPipeConsumerOptions(); |
| 1214 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1215 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1216 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1217 EXPECT_EQ(0u, copts.read_threshold_num_bytes); |
| 1218 |
| 1219 // Valid read threshold. |
| 1220 copts.struct_size = kCoptsSize; |
| 1221 copts.read_threshold_num_bytes = 8; |
| 1222 EXPECT_EQ(MOJO_RESULT_OK, |
| 1223 core()->SetDataPipeConsumerOptions(ch, MakeUserPointer(&copts))); |
| 1224 copts = MojoDataPipeConsumerOptions(); |
| 1225 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1226 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1227 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1228 EXPECT_EQ(8u, copts.read_threshold_num_bytes); |
| 1229 |
| 1230 // Invalid read threshold. |
| 1231 copts.struct_size = kCoptsSize; |
| 1232 copts.read_threshold_num_bytes = 9; |
| 1233 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 1234 core()->SetDataPipeConsumerOptions(ch, MakeUserPointer(&copts))); |
| 1235 // The options shouldn't change. |
| 1236 copts = MojoDataPipeConsumerOptions(); |
| 1237 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1238 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1239 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1240 EXPECT_EQ(8u, copts.read_threshold_num_bytes); |
| 1241 |
| 1242 // Valid read threshold. |
| 1243 copts.struct_size = kCoptsSize; |
| 1244 copts.read_threshold_num_bytes = 16; |
| 1245 EXPECT_EQ(MOJO_RESULT_OK, |
| 1246 core()->SetDataPipeConsumerOptions(ch, MakeUserPointer(&copts))); |
| 1247 copts = MojoDataPipeConsumerOptions(); |
| 1248 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1249 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1250 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1251 EXPECT_EQ(16u, copts.read_threshold_num_bytes); |
| 1252 |
| 1253 // Default read threshold. |
| 1254 copts.struct_size = kCoptsSize; |
| 1255 copts.read_threshold_num_bytes = 0; |
| 1256 EXPECT_EQ(MOJO_RESULT_OK, |
| 1257 core()->SetDataPipeConsumerOptions(ch, MakeUserPointer(&copts))); |
| 1258 copts = MojoDataPipeConsumerOptions(); |
| 1259 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( |
| 1260 ch, MakeUserPointer(&copts), kCoptsSize)); |
| 1261 EXPECT_EQ(kCoptsSize, copts.struct_size); |
| 1262 // Note: Should be reported as 0 ("default"), even if it means the element |
| 1263 // struct_size. |
| 1264 EXPECT_EQ(0u, copts.read_threshold_num_bytes); |
| 1265 |
| 1266 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); |
| 1267 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); |
| 1268 } |
| 1269 |
| 1154 // Tests passing data pipe producer and consumer handles. | 1270 // Tests passing data pipe producer and consumer handles. |
| 1155 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { | 1271 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { |
| 1156 const char kHello[] = "hello"; | 1272 const char kHello[] = "hello"; |
| 1157 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 1273 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
| 1158 const char kWorld[] = "world!!!"; | 1274 const char kWorld[] = "world!!!"; |
| 1159 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); | 1275 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); |
| 1160 char buffer[100]; | 1276 char buffer[100]; |
| 1161 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); | 1277 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 1162 uint32_t num_bytes; | 1278 uint32_t num_bytes; |
| 1163 MojoHandle handles[10]; | 1279 MojoHandle handles[10]; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1179 EXPECT_EQ(MOJO_RESULT_OK, | 1295 EXPECT_EQ(MOJO_RESULT_OK, |
| 1180 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 1296 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 1181 kHelloSize, MakeUserPointer(&ch), 1, | 1297 kHelloSize, MakeUserPointer(&ch), 1, |
| 1182 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1298 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1183 hss = kEmptyMojoHandleSignalsState; | 1299 hss = kEmptyMojoHandleSignalsState; |
| 1184 EXPECT_EQ(MOJO_RESULT_OK, | 1300 EXPECT_EQ(MOJO_RESULT_OK, |
| 1185 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1301 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1186 MakeUserPointer(&hss))); | 1302 MakeUserPointer(&hss))); |
| 1187 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1303 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1188 hss.satisfied_signals); | 1304 hss.satisfied_signals); |
| 1189 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1305 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 1306 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1307 hss.satisfiable_signals); |
| 1190 num_bytes = kBufferSize; | 1308 num_bytes = kBufferSize; |
| 1191 num_handles = MOJO_ARRAYSIZE(handles); | 1309 num_handles = MOJO_ARRAYSIZE(handles); |
| 1192 EXPECT_EQ(MOJO_RESULT_OK, | 1310 EXPECT_EQ(MOJO_RESULT_OK, |
| 1193 core()->ReadMessage( | 1311 core()->ReadMessage( |
| 1194 h_passing[1], UserPointer<void>(buffer), | 1312 h_passing[1], UserPointer<void>(buffer), |
| 1195 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1313 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1196 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1314 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1197 EXPECT_EQ(kHelloSize, num_bytes); | 1315 EXPECT_EQ(kHelloSize, num_bytes); |
| 1198 EXPECT_STREQ(kHello, buffer); | 1316 EXPECT_STREQ(kHello, buffer); |
| 1199 EXPECT_EQ(1u, num_handles); | 1317 EXPECT_EQ(1u, num_handles); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1213 // Write to |ph|. Should receive on |ch_received|. | 1331 // Write to |ph|. Should receive on |ch_received|. |
| 1214 num_bytes = kWorldSize; | 1332 num_bytes = kWorldSize; |
| 1215 EXPECT_EQ(MOJO_RESULT_OK, | 1333 EXPECT_EQ(MOJO_RESULT_OK, |
| 1216 core()->WriteData(ph, UserPointer<const void>(kWorld), | 1334 core()->WriteData(ph, UserPointer<const void>(kWorld), |
| 1217 MakeUserPointer(&num_bytes), | 1335 MakeUserPointer(&num_bytes), |
| 1218 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1336 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1219 hss = kEmptyMojoHandleSignalsState; | 1337 hss = kEmptyMojoHandleSignalsState; |
| 1220 EXPECT_EQ(MOJO_RESULT_OK, | 1338 EXPECT_EQ(MOJO_RESULT_OK, |
| 1221 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1339 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1222 MakeUserPointer(&hss))); | 1340 MakeUserPointer(&hss))); |
| 1223 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1341 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1224 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1342 hss.satisfied_signals); |
| 1343 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1344 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1225 hss.satisfiable_signals); | 1345 hss.satisfiable_signals); |
| 1226 num_bytes = kBufferSize; | 1346 num_bytes = kBufferSize; |
| 1227 EXPECT_EQ(MOJO_RESULT_OK, | 1347 EXPECT_EQ(MOJO_RESULT_OK, |
| 1228 core()->ReadData(ch_received, UserPointer<void>(buffer), | 1348 core()->ReadData(ch_received, UserPointer<void>(buffer), |
| 1229 MakeUserPointer(&num_bytes), | 1349 MakeUserPointer(&num_bytes), |
| 1230 MOJO_READ_MESSAGE_FLAG_NONE)); | 1350 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1231 EXPECT_EQ(kWorldSize, num_bytes); | 1351 EXPECT_EQ(kWorldSize, num_bytes); |
| 1232 EXPECT_STREQ(kWorld, buffer); | 1352 EXPECT_STREQ(kWorld, buffer); |
| 1233 | 1353 |
| 1234 // Now pass |ph| in the same direction. | 1354 // Now pass |ph| in the same direction. |
| 1235 EXPECT_EQ(MOJO_RESULT_OK, | 1355 EXPECT_EQ(MOJO_RESULT_OK, |
| 1236 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 1356 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 1237 kWorldSize, MakeUserPointer(&ph), 1, | 1357 kWorldSize, MakeUserPointer(&ph), 1, |
| 1238 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1358 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1239 hss = kEmptyMojoHandleSignalsState; | 1359 hss = kEmptyMojoHandleSignalsState; |
| 1240 EXPECT_EQ(MOJO_RESULT_OK, | 1360 EXPECT_EQ(MOJO_RESULT_OK, |
| 1241 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1361 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1242 MakeUserPointer(&hss))); | 1362 MakeUserPointer(&hss))); |
| 1243 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1363 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1244 hss.satisfied_signals); | 1364 hss.satisfied_signals); |
| 1245 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1365 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 1366 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1367 hss.satisfiable_signals); |
| 1246 num_bytes = kBufferSize; | 1368 num_bytes = kBufferSize; |
| 1247 num_handles = MOJO_ARRAYSIZE(handles); | 1369 num_handles = MOJO_ARRAYSIZE(handles); |
| 1248 EXPECT_EQ(MOJO_RESULT_OK, | 1370 EXPECT_EQ(MOJO_RESULT_OK, |
| 1249 core()->ReadMessage( | 1371 core()->ReadMessage( |
| 1250 h_passing[1], UserPointer<void>(buffer), | 1372 h_passing[1], UserPointer<void>(buffer), |
| 1251 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1373 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1252 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1374 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1253 EXPECT_EQ(kWorldSize, num_bytes); | 1375 EXPECT_EQ(kWorldSize, num_bytes); |
| 1254 EXPECT_STREQ(kWorld, buffer); | 1376 EXPECT_STREQ(kWorld, buffer); |
| 1255 EXPECT_EQ(1u, num_handles); | 1377 EXPECT_EQ(1u, num_handles); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1269 // Write to |ph_received|. Should receive on |ch_received|. | 1391 // Write to |ph_received|. Should receive on |ch_received|. |
| 1270 num_bytes = kHelloSize; | 1392 num_bytes = kHelloSize; |
| 1271 EXPECT_EQ(MOJO_RESULT_OK, | 1393 EXPECT_EQ(MOJO_RESULT_OK, |
| 1272 core()->WriteData(ph_received, UserPointer<const void>(kHello), | 1394 core()->WriteData(ph_received, UserPointer<const void>(kHello), |
| 1273 MakeUserPointer(&num_bytes), | 1395 MakeUserPointer(&num_bytes), |
| 1274 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1396 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1275 hss = kEmptyMojoHandleSignalsState; | 1397 hss = kEmptyMojoHandleSignalsState; |
| 1276 EXPECT_EQ(MOJO_RESULT_OK, | 1398 EXPECT_EQ(MOJO_RESULT_OK, |
| 1277 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1399 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1278 MakeUserPointer(&hss))); | 1400 MakeUserPointer(&hss))); |
| 1279 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1401 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1280 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1402 hss.satisfied_signals); |
| 1403 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1404 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1281 hss.satisfiable_signals); | 1405 hss.satisfiable_signals); |
| 1282 num_bytes = kBufferSize; | 1406 num_bytes = kBufferSize; |
| 1283 EXPECT_EQ(MOJO_RESULT_OK, | 1407 EXPECT_EQ(MOJO_RESULT_OK, |
| 1284 core()->ReadData(ch_received, UserPointer<void>(buffer), | 1408 core()->ReadData(ch_received, UserPointer<void>(buffer), |
| 1285 MakeUserPointer(&num_bytes), | 1409 MakeUserPointer(&num_bytes), |
| 1286 MOJO_READ_MESSAGE_FLAG_NONE)); | 1410 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1287 EXPECT_EQ(kHelloSize, num_bytes); | 1411 EXPECT_EQ(kHelloSize, num_bytes); |
| 1288 EXPECT_STREQ(kHello, buffer); | 1412 EXPECT_STREQ(kHello, buffer); |
| 1289 | 1413 |
| 1290 ph = ph_received; | 1414 ph = ph_received; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1328 EXPECT_NE(ch, MOJO_HANDLE_INVALID); | 1452 EXPECT_NE(ch, MOJO_HANDLE_INVALID); |
| 1329 | 1453 |
| 1330 // Complete the two-phase write. | 1454 // Complete the two-phase write. |
| 1331 static_cast<char*>(write_ptr)[0] = 'x'; | 1455 static_cast<char*>(write_ptr)[0] = 'x'; |
| 1332 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); | 1456 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); |
| 1333 | 1457 |
| 1334 // Wait for |ch| to be readable. | 1458 // Wait for |ch| to be readable. |
| 1335 hss = kEmptyMojoHandleSignalsState; | 1459 hss = kEmptyMojoHandleSignalsState; |
| 1336 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, | 1460 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, |
| 1337 1000000000, MakeUserPointer(&hss))); | 1461 1000000000, MakeUserPointer(&hss))); |
| 1338 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 1462 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1339 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1463 hss.satisfied_signals); |
| 1464 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1465 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 1340 hss.satisfiable_signals); | 1466 hss.satisfiable_signals); |
| 1341 | 1467 |
| 1342 // Make sure that |ch| can't be sent if it's in a two-phase read. | 1468 // Make sure that |ch| can't be sent if it's in a two-phase read. |
| 1343 const void* read_ptr = nullptr; | 1469 const void* read_ptr = nullptr; |
| 1344 num_bytes = 1; | 1470 num_bytes = 1; |
| 1345 ASSERT_EQ(MOJO_RESULT_OK, | 1471 ASSERT_EQ(MOJO_RESULT_OK, |
| 1346 core()->BeginReadData(ch, MakeUserPointer(&read_ptr), | 1472 core()->BeginReadData(ch, MakeUserPointer(&read_ptr), |
| 1347 MakeUserPointer(&num_bytes), | 1473 MakeUserPointer(&num_bytes), |
| 1348 MOJO_READ_DATA_FLAG_NONE)); | 1474 MOJO_READ_DATA_FLAG_NONE)); |
| 1349 EXPECT_EQ(MOJO_RESULT_BUSY, | 1475 EXPECT_EQ(MOJO_RESULT_BUSY, |
| 1350 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), | 1476 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), |
| 1351 kHelloSize, MakeUserPointer(&ch), 1, | 1477 kHelloSize, MakeUserPointer(&ch), 1, |
| 1352 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1478 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1353 | 1479 |
| 1354 // But |ph| can, even if |ch| is in a two-phase read. | 1480 // But |ph| can, even if |ch| is in a two-phase read. |
| 1355 EXPECT_EQ(MOJO_RESULT_OK, | 1481 EXPECT_EQ(MOJO_RESULT_OK, |
| 1356 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), | 1482 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), |
| 1357 kWorldSize, MakeUserPointer(&ph), 1, | 1483 kWorldSize, MakeUserPointer(&ph), 1, |
| 1358 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1484 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1359 ph = MOJO_HANDLE_INVALID; | 1485 ph = MOJO_HANDLE_INVALID; |
| 1360 hss = kEmptyMojoHandleSignalsState; | 1486 hss = kEmptyMojoHandleSignalsState; |
| 1361 EXPECT_EQ(MOJO_RESULT_OK, | 1487 EXPECT_EQ(MOJO_RESULT_OK, |
| 1362 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1488 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1363 MakeUserPointer(&hss))); | 1489 MakeUserPointer(&hss))); |
| 1364 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1490 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1365 hss.satisfied_signals); | 1491 hss.satisfied_signals); |
| 1366 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1492 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 1493 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1494 hss.satisfiable_signals); |
| 1367 num_bytes = kBufferSize; | 1495 num_bytes = kBufferSize; |
| 1368 num_handles = MOJO_ARRAYSIZE(handles); | 1496 num_handles = MOJO_ARRAYSIZE(handles); |
| 1369 EXPECT_EQ(MOJO_RESULT_OK, | 1497 EXPECT_EQ(MOJO_RESULT_OK, |
| 1370 core()->ReadMessage( | 1498 core()->ReadMessage( |
| 1371 h_passing[1], UserPointer<void>(buffer), | 1499 h_passing[1], UserPointer<void>(buffer), |
| 1372 MakeUserPointer(&num_bytes), MakeUserPointer(handles), | 1500 MakeUserPointer(&num_bytes), MakeUserPointer(handles), |
| 1373 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); | 1501 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1374 EXPECT_EQ(kWorldSize, num_bytes); | 1502 EXPECT_EQ(kWorldSize, num_bytes); |
| 1375 EXPECT_STREQ(kWorld, buffer); | 1503 EXPECT_STREQ(kWorld, buffer); |
| 1376 EXPECT_EQ(1u, num_handles); | 1504 EXPECT_EQ(1u, num_handles); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1417 EXPECT_EQ(MOJO_RESULT_BUSY, waiter.result); | 1545 EXPECT_EQ(MOJO_RESULT_BUSY, waiter.result); |
| 1418 | 1546 |
| 1419 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 1547 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 1420 } | 1548 } |
| 1421 | 1549 |
| 1422 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. | 1550 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. |
| 1423 | 1551 |
| 1424 } // namespace | 1552 } // namespace |
| 1425 } // namespace system | 1553 } // namespace system |
| 1426 } // namespace mojo | 1554 } // namespace mojo |
| OLD | NEW |