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

Side by Side Diff: mojo/edk/system/core_unittest.cc

Issue 1856113002: EDK: Add implementation of data pipe consumer read threshold stuff. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698