| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // This file contains tests that are shared between different implementations of | 5 // This file contains tests that are shared between different implementations of |
| 6 // |DataPipeImpl|. | 6 // |DataPipeImpl|. |
| 7 | 7 |
| 8 #include "mojo/edk/system/data_pipe_impl.h" | 8 #include "mojo/edk/system/data_pipe_impl.h" |
| 9 | 9 |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 } | 134 } |
| 135 MojoResult ProducerBeginWriteData(UserPointer<void*> buffer, | 135 MojoResult ProducerBeginWriteData(UserPointer<void*> buffer, |
| 136 UserPointer<uint32_t> buffer_num_bytes) { | 136 UserPointer<uint32_t> buffer_num_bytes) { |
| 137 return dpp()->ProducerBeginWriteData(buffer, buffer_num_bytes); | 137 return dpp()->ProducerBeginWriteData(buffer, buffer_num_bytes); |
| 138 } | 138 } |
| 139 MojoResult ProducerEndWriteData(uint32_t num_bytes_written) { | 139 MojoResult ProducerEndWriteData(uint32_t num_bytes_written) { |
| 140 return dpp()->ProducerEndWriteData(num_bytes_written); | 140 return dpp()->ProducerEndWriteData(num_bytes_written); |
| 141 } | 141 } |
| 142 MojoResult ProducerAddAwakable(Awakable* awakable, | 142 MojoResult ProducerAddAwakable(Awakable* awakable, |
| 143 MojoHandleSignals signals, | 143 MojoHandleSignals signals, |
| 144 uint32_t context, | 144 uint64_t context, |
| 145 HandleSignalsState* signals_state) { | 145 HandleSignalsState* signals_state) { |
| 146 return dpp()->ProducerAddAwakable(awakable, signals, context, | 146 return dpp()->ProducerAddAwakable(awakable, signals, context, |
| 147 signals_state); | 147 signals_state); |
| 148 } | 148 } |
| 149 void ProducerRemoveAwakable(Awakable* awakable, | 149 void ProducerRemoveAwakable(Awakable* awakable, |
| 150 HandleSignalsState* signals_state) { | 150 HandleSignalsState* signals_state) { |
| 151 return dpp()->ProducerRemoveAwakable(awakable, signals_state); | 151 return dpp()->ProducerRemoveAwakable(awakable, signals_state); |
| 152 } | 152 } |
| 153 | 153 |
| 154 void ConsumerClose() { helper_->ConsumerClose(); } | 154 void ConsumerClose() { helper_->ConsumerClose(); } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 173 } | 173 } |
| 174 MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer, | 174 MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer, |
| 175 UserPointer<uint32_t> buffer_num_bytes) { | 175 UserPointer<uint32_t> buffer_num_bytes) { |
| 176 return dpc()->ConsumerBeginReadData(buffer, buffer_num_bytes); | 176 return dpc()->ConsumerBeginReadData(buffer, buffer_num_bytes); |
| 177 } | 177 } |
| 178 MojoResult ConsumerEndReadData(uint32_t num_bytes_read) { | 178 MojoResult ConsumerEndReadData(uint32_t num_bytes_read) { |
| 179 return dpc()->ConsumerEndReadData(num_bytes_read); | 179 return dpc()->ConsumerEndReadData(num_bytes_read); |
| 180 } | 180 } |
| 181 MojoResult ConsumerAddAwakable(Awakable* awakable, | 181 MojoResult ConsumerAddAwakable(Awakable* awakable, |
| 182 MojoHandleSignals signals, | 182 MojoHandleSignals signals, |
| 183 uint32_t context, | 183 uint64_t context, |
| 184 HandleSignalsState* signals_state) { | 184 HandleSignalsState* signals_state) { |
| 185 return dpc()->ConsumerAddAwakable(awakable, signals, context, | 185 return dpc()->ConsumerAddAwakable(awakable, signals, context, |
| 186 signals_state); | 186 signals_state); |
| 187 } | 187 } |
| 188 void ConsumerRemoveAwakable(Awakable* awakable, | 188 void ConsumerRemoveAwakable(Awakable* awakable, |
| 189 HandleSignalsState* signals_state) { | 189 HandleSignalsState* signals_state) { |
| 190 return dpc()->ConsumerRemoveAwakable(awakable, signals_state); | 190 return dpc()->ConsumerRemoveAwakable(awakable, signals_state); |
| 191 } | 191 } |
| 192 | 192 |
| 193 private: | 193 private: |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 HandleTransport transport(test::HandleTryStartTransport(handle_to_send)); | 285 HandleTransport transport(test::HandleTryStartTransport(handle_to_send)); |
| 286 ASSERT_TRUE(transport.is_valid()); | 286 ASSERT_TRUE(transport.is_valid()); |
| 287 | 287 |
| 288 std::vector<HandleTransport> transports; | 288 std::vector<HandleTransport> transports; |
| 289 transports.push_back(transport); | 289 transports.push_back(transport); |
| 290 ASSERT_EQ(MOJO_RESULT_OK, message_pipe(source_i)->WriteMessage( | 290 ASSERT_EQ(MOJO_RESULT_OK, message_pipe(source_i)->WriteMessage( |
| 291 0, NullUserPointer(), 0, &transports, | 291 0, NullUserPointer(), 0, &transports, |
| 292 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 292 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 293 transport.End(); | 293 transport.End(); |
| 294 } | 294 } |
| 295 uint32_t context = 0; | 295 uint64_t context = 0; |
| 296 ASSERT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 296 ASSERT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 297 EXPECT_EQ(987u, context); | 297 EXPECT_EQ(987u, context); |
| 298 HandleSignalsState hss = HandleSignalsState(); | 298 HandleSignalsState hss = HandleSignalsState(); |
| 299 message_pipe(dest_i)->RemoveAwakable(0, &waiter, &hss); | 299 message_pipe(dest_i)->RemoveAwakable(0, &waiter, &hss); |
| 300 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 300 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 301 hss.satisfied_signals); | 301 hss.satisfied_signals); |
| 302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 303 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 303 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 304 hss.satisfiable_signals); | 304 hss.satisfiable_signals); |
| 305 char read_buffer[100] = {}; | 305 char read_buffer[100] = {}; |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 kSizeOfOptions, // |struct_size|. | 631 kSizeOfOptions, // |struct_size|. |
| 632 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 632 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 633 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 633 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 634 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 634 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
| 635 }; | 635 }; |
| 636 this->Create(options); | 636 this->Create(options); |
| 637 this->DoTransfer(); | 637 this->DoTransfer(); |
| 638 | 638 |
| 639 Waiter waiter; | 639 Waiter waiter; |
| 640 HandleSignalsState hss; | 640 HandleSignalsState hss; |
| 641 uint32_t context; | 641 uint64_t context; |
| 642 | 642 |
| 643 int32_t elements[10] = {}; | 643 int32_t elements[10] = {}; |
| 644 uint32_t num_bytes = 0u; | 644 uint32_t num_bytes = 0u; |
| 645 | 645 |
| 646 // Try reading; nothing there yet. | 646 // Try reading; nothing there yet. |
| 647 num_bytes = | 647 num_bytes = |
| 648 static_cast<uint32_t>(MOJO_ARRAYSIZE(elements) * sizeof(elements[0])); | 648 static_cast<uint32_t>(MOJO_ARRAYSIZE(elements) * sizeof(elements[0])); |
| 649 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 649 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 650 this->ConsumerReadData(UserPointer<void>(elements), | 650 this->ConsumerReadData(UserPointer<void>(elements), |
| 651 MakeUserPointer(&num_bytes), false, false)); | 651 MakeUserPointer(&num_bytes), false, false)); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 785 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 785 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 786 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 786 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 787 2 * sizeof(int32_t) // |capacity_num_bytes|. | 787 2 * sizeof(int32_t) // |capacity_num_bytes|. |
| 788 }; | 788 }; |
| 789 this->Create(options); | 789 this->Create(options); |
| 790 this->DoTransfer(); | 790 this->DoTransfer(); |
| 791 | 791 |
| 792 Waiter pwaiter; // For producer. | 792 Waiter pwaiter; // For producer. |
| 793 Waiter cwaiter; // For consumer. | 793 Waiter cwaiter; // For consumer. |
| 794 HandleSignalsState hss; | 794 HandleSignalsState hss; |
| 795 uint32_t context; | 795 uint64_t context; |
| 796 | 796 |
| 797 // Never readable. | 797 // Never readable. |
| 798 pwaiter.Init(); | 798 pwaiter.Init(); |
| 799 hss = HandleSignalsState(); | 799 hss = HandleSignalsState(); |
| 800 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 800 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 801 this->ProducerAddAwakable(&pwaiter, MOJO_HANDLE_SIGNAL_READABLE, 12, | 801 this->ProducerAddAwakable(&pwaiter, MOJO_HANDLE_SIGNAL_READABLE, 12, |
| 802 &hss)); | 802 &hss)); |
| 803 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, | 803 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, |
| 804 hss.satisfied_signals); | 804 hss.satisfied_signals); |
| 805 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 805 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 988 kSizeOfOptions, // |struct_size|. | 988 kSizeOfOptions, // |struct_size|. |
| 989 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 989 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 990 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 990 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 991 2 * sizeof(int32_t) // |capacity_num_bytes|. | 991 2 * sizeof(int32_t) // |capacity_num_bytes|. |
| 992 }; | 992 }; |
| 993 this->Create(options); | 993 this->Create(options); |
| 994 this->DoTransfer(); | 994 this->DoTransfer(); |
| 995 | 995 |
| 996 Waiter waiter; | 996 Waiter waiter; |
| 997 HandleSignalsState hss; | 997 HandleSignalsState hss; |
| 998 uint32_t context; | 998 uint64_t context; |
| 999 | 999 |
| 1000 // Add a waiter. | 1000 // Add a waiter. |
| 1001 waiter.Init(); | 1001 waiter.Init(); |
| 1002 ASSERT_EQ(MOJO_RESULT_OK, | 1002 ASSERT_EQ(MOJO_RESULT_OK, |
| 1003 this->ProducerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1003 this->ProducerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1004 12, nullptr)); | 1004 12, nullptr)); |
| 1005 | 1005 |
| 1006 // Close the consumer. | 1006 // Close the consumer. |
| 1007 this->ConsumerClose(); | 1007 this->ConsumerClose(); |
| 1008 | 1008 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1023 kSizeOfOptions, // |struct_size|. | 1023 kSizeOfOptions, // |struct_size|. |
| 1024 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1024 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 1025 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1025 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 1026 2 * sizeof(int32_t) // |capacity_num_bytes|. | 1026 2 * sizeof(int32_t) // |capacity_num_bytes|. |
| 1027 }; | 1027 }; |
| 1028 this->Create(options); | 1028 this->Create(options); |
| 1029 this->DoTransfer(); | 1029 this->DoTransfer(); |
| 1030 | 1030 |
| 1031 Waiter waiter; | 1031 Waiter waiter; |
| 1032 HandleSignalsState hss; | 1032 HandleSignalsState hss; |
| 1033 uint32_t context; | 1033 uint64_t context; |
| 1034 | 1034 |
| 1035 // Add a waiter. | 1035 // Add a waiter. |
| 1036 waiter.Init(); | 1036 waiter.Init(); |
| 1037 ASSERT_EQ(MOJO_RESULT_OK, | 1037 ASSERT_EQ(MOJO_RESULT_OK, |
| 1038 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 1038 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 1039 12, nullptr)); | 1039 12, nullptr)); |
| 1040 | 1040 |
| 1041 // Close the producer. | 1041 // Close the producer. |
| 1042 this->ProducerClose(); | 1042 this->ProducerClose(); |
| 1043 | 1043 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1059 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1059 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 1060 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1060 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 1061 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 1061 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
| 1062 }; | 1062 }; |
| 1063 this->Create(options); | 1063 this->Create(options); |
| 1064 this->DoTransfer(); | 1064 this->DoTransfer(); |
| 1065 | 1065 |
| 1066 Waiter waiter; | 1066 Waiter waiter; |
| 1067 Waiter waiter2; | 1067 Waiter waiter2; |
| 1068 HandleSignalsState hss; | 1068 HandleSignalsState hss; |
| 1069 uint32_t context; | 1069 uint64_t context; |
| 1070 | 1070 |
| 1071 // Never writable. | 1071 // Never writable. |
| 1072 waiter.Init(); | 1072 waiter.Init(); |
| 1073 hss = HandleSignalsState(); | 1073 hss = HandleSignalsState(); |
| 1074 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 1074 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 1075 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12, | 1075 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12, |
| 1076 &hss)); | 1076 &hss)); |
| 1077 EXPECT_EQ(0u, hss.satisfied_signals); | 1077 EXPECT_EQ(0u, hss.satisfied_signals); |
| 1078 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 1078 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1079 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, | 1079 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 kSizeOfOptions, // |struct_size|. | 1248 kSizeOfOptions, // |struct_size|. |
| 1249 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1249 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
| 1250 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1250 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
| 1251 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 1251 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
| 1252 }; | 1252 }; |
| 1253 this->Create(options); | 1253 this->Create(options); |
| 1254 this->DoTransfer(); | 1254 this->DoTransfer(); |
| 1255 | 1255 |
| 1256 Waiter waiter; | 1256 Waiter waiter; |
| 1257 HandleSignalsState hss; | 1257 HandleSignalsState hss; |
| 1258 uint32_t context; | 1258 uint64_t context; |
| 1259 | 1259 |
| 1260 // Add waiter: not yet readable. | 1260 // Add waiter: not yet readable. |
| 1261 waiter.Init(); | 1261 waiter.Init(); |
| 1262 ASSERT_EQ(MOJO_RESULT_OK, | 1262 ASSERT_EQ(MOJO_RESULT_OK, |
| 1263 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12, | 1263 this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12, |
| 1264 nullptr)); | 1264 nullptr)); |
| 1265 | 1265 |
| 1266 // Write two elements. | 1266 // Write two elements. |
| 1267 int32_t* elements = nullptr; | 1267 int32_t* elements = nullptr; |
| 1268 void* buffer = nullptr; | 1268 void* buffer = nullptr; |
| (...skipping 1676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2945 &waiter, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, &hss)); | 2945 &waiter, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, &hss)); |
| 2946 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 2946 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 2947 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 2947 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 2948 | 2948 |
| 2949 this->ConsumerClose(); | 2949 this->ConsumerClose(); |
| 2950 } | 2950 } |
| 2951 | 2951 |
| 2952 } // namespace | 2952 } // namespace |
| 2953 } // namespace system | 2953 } // namespace system |
| 2954 } // namespace mojo | 2954 } // namespace mojo |
| OLD | NEW |