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/local_data_pipe.h" | 5 #include "mojo/edk/system/local_data_pipe.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 111 |
112 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 112 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
113 | 113 |
114 int32_t elements[10] = {0}; | 114 int32_t elements[10] = {0}; |
115 uint32_t num_bytes = 0; | 115 uint32_t num_bytes = 0; |
116 | 116 |
117 // Try reading; nothing there yet. | 117 // Try reading; nothing there yet. |
118 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0])); | 118 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0])); |
119 EXPECT_EQ( | 119 EXPECT_EQ( |
120 MOJO_RESULT_SHOULD_WAIT, | 120 MOJO_RESULT_SHOULD_WAIT, |
121 dp->ConsumerReadData( | 121 dp->ConsumerReadData(UserPointer<void>(elements), |
122 UserPointer<void>(elements), MakeUserPointer(&num_bytes), false)); | 122 MakeUserPointer(&num_bytes), |
| 123 false, |
| 124 false)); |
123 | 125 |
124 // Query; nothing there yet. | 126 // Query; nothing there yet. |
125 num_bytes = 0; | 127 num_bytes = 0; |
126 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 128 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
127 EXPECT_EQ(0u, num_bytes); | 129 EXPECT_EQ(0u, num_bytes); |
128 | 130 |
129 // Discard; nothing there yet. | 131 // Discard; nothing there yet. |
130 num_bytes = static_cast<uint32_t>(5u * sizeof(elements[0])); | 132 num_bytes = static_cast<uint32_t>(5u * sizeof(elements[0])); |
131 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 133 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
132 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), false)); | 134 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), false)); |
133 | 135 |
134 // Read with invalid |num_bytes|. | 136 // Read with invalid |num_bytes|. |
135 num_bytes = sizeof(elements[0]) + 1; | 137 num_bytes = sizeof(elements[0]) + 1; |
136 EXPECT_EQ( | 138 EXPECT_EQ( |
137 MOJO_RESULT_INVALID_ARGUMENT, | 139 MOJO_RESULT_INVALID_ARGUMENT, |
138 dp->ConsumerReadData( | 140 dp->ConsumerReadData(UserPointer<void>(elements), |
139 UserPointer<void>(elements), MakeUserPointer(&num_bytes), false)); | 141 MakeUserPointer(&num_bytes), |
| 142 false, |
| 143 false)); |
140 | 144 |
141 // Write two elements. | 145 // Write two elements. |
142 elements[0] = 123; | 146 elements[0] = 123; |
143 elements[1] = 456; | 147 elements[1] = 456; |
144 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); | 148 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); |
145 EXPECT_EQ(MOJO_RESULT_OK, | 149 EXPECT_EQ(MOJO_RESULT_OK, |
146 dp->ProducerWriteData(UserPointer<const void>(elements), | 150 dp->ProducerWriteData(UserPointer<const void>(elements), |
147 MakeUserPointer(&num_bytes), | 151 MakeUserPointer(&num_bytes), |
148 false)); | 152 false)); |
149 // It should have written everything (even without "all or none"). | 153 // It should have written everything (even without "all or none"). |
150 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); | 154 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); |
151 | 155 |
152 // Query. | 156 // Query. |
153 num_bytes = 0; | 157 num_bytes = 0; |
154 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 158 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
155 EXPECT_EQ(2 * sizeof(elements[0]), num_bytes); | 159 EXPECT_EQ(2 * sizeof(elements[0]), num_bytes); |
156 | 160 |
157 // Read one element. | 161 // Read one element. |
158 elements[0] = -1; | 162 elements[0] = -1; |
159 elements[1] = -1; | 163 elements[1] = -1; |
160 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 164 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
161 EXPECT_EQ( | 165 EXPECT_EQ( |
162 MOJO_RESULT_OK, | 166 MOJO_RESULT_OK, |
163 dp->ConsumerReadData( | 167 dp->ConsumerReadData(UserPointer<void>(elements), |
164 UserPointer<void>(elements), MakeUserPointer(&num_bytes), false)); | 168 MakeUserPointer(&num_bytes), |
| 169 false, |
| 170 false)); |
165 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); | 171 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); |
166 EXPECT_EQ(123, elements[0]); | 172 EXPECT_EQ(123, elements[0]); |
167 EXPECT_EQ(-1, elements[1]); | 173 EXPECT_EQ(-1, elements[1]); |
168 | 174 |
169 // Query. | 175 // Query. |
170 num_bytes = 0; | 176 num_bytes = 0; |
171 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 177 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
172 EXPECT_EQ(1 * sizeof(elements[0]), num_bytes); | 178 EXPECT_EQ(1 * sizeof(elements[0]), num_bytes); |
173 | 179 |
| 180 // Peek one element. |
| 181 elements[0] = -1; |
| 182 elements[1] = -1; |
| 183 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 184 EXPECT_EQ( |
| 185 MOJO_RESULT_OK, |
| 186 dp->ConsumerReadData(UserPointer<void>(elements), |
| 187 MakeUserPointer(&num_bytes), |
| 188 false, |
| 189 true)); |
| 190 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); |
| 191 EXPECT_EQ(456, elements[0]); |
| 192 EXPECT_EQ(-1, elements[1]); |
| 193 |
| 194 // Query. Still has 1 element remaining. |
| 195 num_bytes = 0; |
| 196 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
| 197 EXPECT_EQ(1 * sizeof(elements[0]), num_bytes); |
| 198 |
174 // Try to read two elements, with "all or none". | 199 // Try to read two elements, with "all or none". |
175 elements[0] = -1; | 200 elements[0] = -1; |
176 elements[1] = -1; | 201 elements[1] = -1; |
177 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); | 202 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); |
178 EXPECT_EQ( | 203 EXPECT_EQ( |
179 MOJO_RESULT_OUT_OF_RANGE, | 204 MOJO_RESULT_OUT_OF_RANGE, |
180 dp->ConsumerReadData( | 205 dp->ConsumerReadData(UserPointer<void>(elements), |
181 UserPointer<void>(elements), MakeUserPointer(&num_bytes), true)); | 206 MakeUserPointer(&num_bytes), |
| 207 true, |
| 208 false)); |
182 EXPECT_EQ(-1, elements[0]); | 209 EXPECT_EQ(-1, elements[0]); |
183 EXPECT_EQ(-1, elements[1]); | 210 EXPECT_EQ(-1, elements[1]); |
184 | 211 |
185 // Try to read two elements, without "all or none". | 212 // Try to read two elements, without "all or none". |
186 elements[0] = -1; | 213 elements[0] = -1; |
187 elements[1] = -1; | 214 elements[1] = -1; |
188 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); | 215 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); |
189 EXPECT_EQ( | 216 EXPECT_EQ( |
190 MOJO_RESULT_OK, | 217 MOJO_RESULT_OK, |
191 dp->ConsumerReadData( | 218 dp->ConsumerReadData(UserPointer<void>(elements), |
192 UserPointer<void>(elements), MakeUserPointer(&num_bytes), false)); | 219 MakeUserPointer(&num_bytes), |
| 220 false, |
| 221 false)); |
193 EXPECT_EQ(456, elements[0]); | 222 EXPECT_EQ(456, elements[0]); |
194 EXPECT_EQ(-1, elements[1]); | 223 EXPECT_EQ(-1, elements[1]); |
195 | 224 |
196 // Query. | 225 // Query. |
197 num_bytes = 0; | 226 num_bytes = 0; |
198 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 227 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
199 EXPECT_EQ(0u, num_bytes); | 228 EXPECT_EQ(0u, num_bytes); |
200 | 229 |
201 dp->ProducerClose(); | 230 dp->ProducerClose(); |
202 dp->ConsumerClose(); | 231 dp->ConsumerClose(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 ASSERT_EQ( | 284 ASSERT_EQ( |
256 MOJO_RESULT_OK, | 285 MOJO_RESULT_OK, |
257 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 56, nullptr)); | 286 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 56, nullptr)); |
258 // And it shouldn't be writable yet. | 287 // And it shouldn't be writable yet. |
259 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr)); | 288 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr)); |
260 hss = HandleSignalsState(); | 289 hss = HandleSignalsState(); |
261 dp->ProducerRemoveWaiter(&waiter, &hss); | 290 dp->ProducerRemoveWaiter(&waiter, &hss); |
262 EXPECT_EQ(0u, hss.satisfied_signals); | 291 EXPECT_EQ(0u, hss.satisfied_signals); |
263 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); | 292 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); |
264 | 293 |
| 294 // Peek one element. |
| 295 elements[0] = -1; |
| 296 elements[1] = -1; |
| 297 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 298 EXPECT_EQ( |
| 299 MOJO_RESULT_OK, |
| 300 dp->ConsumerReadData(UserPointer<void>(elements), |
| 301 MakeUserPointer(&num_bytes), |
| 302 true, |
| 303 true)); |
| 304 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); |
| 305 EXPECT_EQ(123, elements[0]); |
| 306 EXPECT_EQ(-1, elements[1]); |
| 307 |
| 308 // Add a waiter. |
| 309 waiter.Init(); |
| 310 ASSERT_EQ( |
| 311 MOJO_RESULT_OK, |
| 312 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 56, nullptr)); |
| 313 // And it still shouldn't be writable yet. |
| 314 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr)); |
| 315 hss = HandleSignalsState(); |
| 316 dp->ProducerRemoveWaiter(&waiter, &hss); |
| 317 EXPECT_EQ(0u, hss.satisfied_signals); |
| 318 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); |
| 319 |
265 // Do it again. | 320 // Do it again. |
266 waiter.Init(); | 321 waiter.Init(); |
267 ASSERT_EQ( | 322 ASSERT_EQ( |
268 MOJO_RESULT_OK, | 323 MOJO_RESULT_OK, |
269 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 78, nullptr)); | 324 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 78, nullptr)); |
270 | 325 |
271 // Read one element. | 326 // Read one element. |
272 elements[0] = -1; | 327 elements[0] = -1; |
273 elements[1] = -1; | 328 elements[1] = -1; |
274 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 329 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
275 EXPECT_EQ( | 330 EXPECT_EQ( |
276 MOJO_RESULT_OK, | 331 MOJO_RESULT_OK, |
277 dp->ConsumerReadData( | 332 dp->ConsumerReadData(UserPointer<void>(elements), |
278 UserPointer<void>(elements), MakeUserPointer(&num_bytes), true)); | 333 MakeUserPointer(&num_bytes), |
| 334 true, |
| 335 false)); |
279 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); | 336 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); |
280 EXPECT_EQ(123, elements[0]); | 337 EXPECT_EQ(123, elements[0]); |
281 EXPECT_EQ(-1, elements[1]); | 338 EXPECT_EQ(-1, elements[1]); |
282 | 339 |
283 // Waiting should now succeed. | 340 // Waiting should now succeed. |
284 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context)); | 341 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context)); |
285 EXPECT_EQ(78u, context); | 342 EXPECT_EQ(78u, context); |
286 hss = HandleSignalsState(); | 343 hss = HandleSignalsState(); |
287 dp->ProducerRemoveWaiter(&waiter, &hss); | 344 dp->ProducerRemoveWaiter(&waiter, &hss); |
288 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 345 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 482 |
426 // Should still be readable. | 483 // Should still be readable. |
427 waiter.Init(); | 484 waiter.Init(); |
428 hss = HandleSignalsState(); | 485 hss = HandleSignalsState(); |
429 EXPECT_EQ( | 486 EXPECT_EQ( |
430 MOJO_RESULT_ALREADY_EXISTS, | 487 MOJO_RESULT_ALREADY_EXISTS, |
431 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78, &hss)); | 488 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78, &hss)); |
432 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 489 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
433 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 490 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
434 | 491 |
| 492 // Peek one element. |
| 493 elements[0] = -1; |
| 494 elements[1] = -1; |
| 495 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 496 EXPECT_EQ( |
| 497 MOJO_RESULT_OK, |
| 498 dp->ConsumerReadData(UserPointer<void>(elements), |
| 499 MakeUserPointer(&num_bytes), |
| 500 true, |
| 501 true)); |
| 502 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); |
| 503 EXPECT_EQ(456, elements[0]); |
| 504 EXPECT_EQ(-1, elements[1]); |
| 505 |
| 506 // Should still be readable. |
| 507 waiter.Init(); |
| 508 hss = HandleSignalsState(); |
| 509 EXPECT_EQ( |
| 510 MOJO_RESULT_ALREADY_EXISTS, |
| 511 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78, &hss)); |
| 512 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 513 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
| 514 |
435 // Read one element. | 515 // Read one element. |
436 elements[0] = -1; | 516 elements[0] = -1; |
437 elements[1] = -1; | 517 elements[1] = -1; |
438 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 518 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
439 EXPECT_EQ( | 519 EXPECT_EQ( |
440 MOJO_RESULT_OK, | 520 MOJO_RESULT_OK, |
441 dp->ConsumerReadData( | 521 dp->ConsumerReadData(UserPointer<void>(elements), |
442 UserPointer<void>(elements), MakeUserPointer(&num_bytes), true)); | 522 MakeUserPointer(&num_bytes), |
| 523 true, |
| 524 false)); |
443 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); | 525 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); |
444 EXPECT_EQ(456, elements[0]); | 526 EXPECT_EQ(456, elements[0]); |
445 EXPECT_EQ(-1, elements[1]); | 527 EXPECT_EQ(-1, elements[1]); |
446 | 528 |
447 // Adding a waiter should now succeed. | 529 // Adding a waiter should now succeed. |
448 waiter.Init(); | 530 waiter.Init(); |
449 ASSERT_EQ(MOJO_RESULT_OK, | 531 ASSERT_EQ(MOJO_RESULT_OK, |
450 dp->ConsumerAddWaiter( | 532 dp->ConsumerAddWaiter( |
451 &waiter, MOJO_HANDLE_SIGNAL_READABLE, 90, nullptr)); | 533 &waiter, MOJO_HANDLE_SIGNAL_READABLE, 90, nullptr)); |
452 | 534 |
(...skipping 25 matching lines...) Expand all Loading... |
478 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12, &hss)); | 560 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12, &hss)); |
479 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 561 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
480 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 562 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
481 | 563 |
482 // Read one element. | 564 // Read one element. |
483 elements[0] = -1; | 565 elements[0] = -1; |
484 elements[1] = -1; | 566 elements[1] = -1; |
485 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 567 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
486 EXPECT_EQ( | 568 EXPECT_EQ( |
487 MOJO_RESULT_OK, | 569 MOJO_RESULT_OK, |
488 dp->ConsumerReadData( | 570 dp->ConsumerReadData(UserPointer<void>(elements), |
489 UserPointer<void>(elements), MakeUserPointer(&num_bytes), true)); | 571 MakeUserPointer(&num_bytes), |
| 572 true, |
| 573 false)); |
490 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); | 574 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); |
491 EXPECT_EQ(789, elements[0]); | 575 EXPECT_EQ(789, elements[0]); |
492 EXPECT_EQ(-1, elements[1]); | 576 EXPECT_EQ(-1, elements[1]); |
493 | 577 |
494 // Should be never-readable. | 578 // Should be never-readable. |
495 waiter.Init(); | 579 waiter.Init(); |
496 hss = HandleSignalsState(); | 580 hss = HandleSignalsState(); |
497 EXPECT_EQ( | 581 EXPECT_EQ( |
498 MOJO_RESULT_FAILED_PRECONDITION, | 582 MOJO_RESULT_FAILED_PRECONDITION, |
499 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34, &hss)); | 583 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34, &hss)); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 MOJO_RESULT_ALREADY_EXISTS, | 920 MOJO_RESULT_ALREADY_EXISTS, |
837 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5, &hss)); | 921 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5, &hss)); |
838 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 922 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
839 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 923 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
840 | 924 |
841 // Read that element. | 925 // Read that element. |
842 num_bytes = static_cast<uint32_t>(sizeof(int32_t)); | 926 num_bytes = static_cast<uint32_t>(sizeof(int32_t)); |
843 element = 0; | 927 element = 0; |
844 EXPECT_EQ( | 928 EXPECT_EQ( |
845 MOJO_RESULT_OK, | 929 MOJO_RESULT_OK, |
846 dp->ConsumerReadData( | 930 dp->ConsumerReadData(UserPointer<void>(&element), |
847 UserPointer<void>(&element), MakeUserPointer(&num_bytes), false)); | 931 MakeUserPointer(&num_bytes), |
| 932 false, |
| 933 false)); |
848 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); | 934 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); |
849 EXPECT_EQ(456, element); | 935 EXPECT_EQ(456, element); |
850 | 936 |
851 // Still writable. | 937 // Still writable. |
852 waiter.Init(); | 938 waiter.Init(); |
853 hss = HandleSignalsState(); | 939 hss = HandleSignalsState(); |
854 EXPECT_EQ( | 940 EXPECT_EQ( |
855 MOJO_RESULT_ALREADY_EXISTS, | 941 MOJO_RESULT_ALREADY_EXISTS, |
856 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6, &hss)); | 942 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6, &hss)); |
857 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 943 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 EXPECT_EQ( | 987 EXPECT_EQ( |
902 MOJO_RESULT_OK, | 988 MOJO_RESULT_OK, |
903 dp->ProducerWriteData( | 989 dp->ProducerWriteData( |
904 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); | 990 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); |
905 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); | 991 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); |
906 | 992 |
907 // Read half of what we wrote. | 993 // Read half of what we wrote. |
908 num_bytes = 5u * sizeof(int32_t); | 994 num_bytes = 5u * sizeof(int32_t); |
909 memset(buffer, 0xab, sizeof(buffer)); | 995 memset(buffer, 0xab, sizeof(buffer)); |
910 EXPECT_EQ(MOJO_RESULT_OK, | 996 EXPECT_EQ(MOJO_RESULT_OK, |
911 dp->ConsumerReadData( | 997 dp->ConsumerReadData(UserPointer<void>(buffer), |
912 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 998 MakeUserPointer(&num_bytes), |
| 999 false, |
| 1000 false)); |
913 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); | 1001 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); |
914 int32_t expected_buffer[100]; | 1002 int32_t expected_buffer[100]; |
915 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1003 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
916 Seq(0, 5u, expected_buffer); | 1004 Seq(0, 5u, expected_buffer); |
917 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1005 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
918 // Internally, a circular buffer would now look like: | 1006 // Internally, a circular buffer would now look like: |
919 // -, -, -, -, -, 5, 6, 7, 8, 9 | 1007 // -, -, -, -, -, 5, 6, 7, 8, 9 |
920 | 1008 |
921 // Write a bit more than the space that's available. | 1009 // Write a bit more than the space that's available. |
922 num_bytes = 8u * sizeof(int32_t); | 1010 num_bytes = 8u * sizeof(int32_t); |
923 Seq(100, arraysize(buffer), buffer); | 1011 Seq(100, arraysize(buffer), buffer); |
924 EXPECT_EQ( | 1012 EXPECT_EQ( |
925 MOJO_RESULT_OK, | 1013 MOJO_RESULT_OK, |
926 dp->ProducerWriteData( | 1014 dp->ProducerWriteData( |
927 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); | 1015 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); |
928 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); | 1016 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); |
929 // Internally, a circular buffer would now look like: | 1017 // Internally, a circular buffer would now look like: |
930 // 100, 101, 102, 103, 104, 105, 106, 107, 8, 9 | 1018 // 100, 101, 102, 103, 104, 105, 106, 107, 8, 9 |
931 | 1019 |
932 // Read half of what's available. | 1020 // Read half of what's available. |
933 num_bytes = 5u * sizeof(int32_t); | 1021 num_bytes = 5u * sizeof(int32_t); |
934 memset(buffer, 0xab, sizeof(buffer)); | 1022 memset(buffer, 0xab, sizeof(buffer)); |
935 EXPECT_EQ(MOJO_RESULT_OK, | 1023 EXPECT_EQ(MOJO_RESULT_OK, |
936 dp->ConsumerReadData( | 1024 dp->ConsumerReadData(UserPointer<void>(buffer), |
937 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 1025 MakeUserPointer(&num_bytes), |
| 1026 false, |
| 1027 false)); |
938 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); | 1028 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); |
939 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1029 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
940 expected_buffer[0] = 8; | 1030 expected_buffer[0] = 8; |
941 expected_buffer[1] = 9; | 1031 expected_buffer[1] = 9; |
942 expected_buffer[2] = 100; | 1032 expected_buffer[2] = 100; |
943 expected_buffer[3] = 101; | 1033 expected_buffer[3] = 101; |
944 expected_buffer[4] = 102; | 1034 expected_buffer[4] = 102; |
945 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1035 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
946 // Internally, a circular buffer would now look like: | 1036 // Internally, a circular buffer would now look like: |
947 // -, -, -, 103, 104, 105, 106, 107, -, - | 1037 // -, -, -, 103, 104, 105, 106, 107, -, - |
(...skipping 17 matching lines...) Expand all Loading... |
965 dp->ProducerWriteData( | 1055 dp->ProducerWriteData( |
966 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); | 1056 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), false)); |
967 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); | 1057 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); |
968 // Internally, a circular buffer would now look like: | 1058 // Internally, a circular buffer would now look like: |
969 // 301, 302, 303, 304, 104, 105, 106, 107, 200, 300 | 1059 // 301, 302, 303, 304, 104, 105, 106, 107, 200, 300 |
970 | 1060 |
971 // Read it all. | 1061 // Read it all. |
972 num_bytes = sizeof(buffer); | 1062 num_bytes = sizeof(buffer); |
973 memset(buffer, 0xab, sizeof(buffer)); | 1063 memset(buffer, 0xab, sizeof(buffer)); |
974 EXPECT_EQ(MOJO_RESULT_OK, | 1064 EXPECT_EQ(MOJO_RESULT_OK, |
975 dp->ConsumerReadData( | 1065 dp->ConsumerReadData(UserPointer<void>(buffer), |
976 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 1066 MakeUserPointer(&num_bytes), |
| 1067 false, |
| 1068 false)); |
977 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); | 1069 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); |
978 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1070 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
979 expected_buffer[0] = 104; | 1071 expected_buffer[0] = 104; |
980 expected_buffer[1] = 105; | 1072 expected_buffer[1] = 105; |
981 expected_buffer[2] = 106; | 1073 expected_buffer[2] = 106; |
982 expected_buffer[3] = 107; | 1074 expected_buffer[3] = 107; |
983 expected_buffer[4] = 200; | 1075 expected_buffer[4] = 200; |
984 expected_buffer[5] = 300; | 1076 expected_buffer[5] = 300; |
985 expected_buffer[6] = 301; | 1077 expected_buffer[6] = 301; |
986 expected_buffer[7] = 302; | 1078 expected_buffer[7] = 302; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 // Only write 3 elements though. | 1147 // Only write 3 elements though. |
1056 Seq(700, 3, static_cast<int32_t*>(write_ptr)); | 1148 Seq(700, 3, static_cast<int32_t*>(write_ptr)); |
1057 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(3u * sizeof(int32_t))); | 1149 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(3u * sizeof(int32_t))); |
1058 // Internally, a circular buffer would now look like: | 1150 // Internally, a circular buffer would now look like: |
1059 // 500, 600, 601, 602, 603, 700, 701, 702, -, - | 1151 // 500, 600, 601, 602, 603, 700, 701, 702, -, - |
1060 | 1152 |
1061 // Read everything. | 1153 // Read everything. |
1062 num_bytes = sizeof(buffer); | 1154 num_bytes = sizeof(buffer); |
1063 memset(buffer, 0xab, sizeof(buffer)); | 1155 memset(buffer, 0xab, sizeof(buffer)); |
1064 EXPECT_EQ(MOJO_RESULT_OK, | 1156 EXPECT_EQ(MOJO_RESULT_OK, |
1065 dp->ConsumerReadData( | 1157 dp->ConsumerReadData(UserPointer<void>(buffer), |
1066 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 1158 MakeUserPointer(&num_bytes), |
| 1159 false, |
| 1160 false)); |
1067 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); | 1161 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); |
1068 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1162 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1069 expected_buffer[0] = 500; | 1163 expected_buffer[0] = 500; |
1070 expected_buffer[1] = 600; | 1164 expected_buffer[1] = 600; |
1071 expected_buffer[2] = 601; | 1165 expected_buffer[2] = 601; |
1072 expected_buffer[3] = 602; | 1166 expected_buffer[3] = 602; |
1073 expected_buffer[4] = 603; | 1167 expected_buffer[4] = 603; |
1074 expected_buffer[5] = 700; | 1168 expected_buffer[5] = 700; |
1075 expected_buffer[6] = 701; | 1169 expected_buffer[6] = 701; |
1076 expected_buffer[7] = 702; | 1170 expected_buffer[7] = 702; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1127 Seq(200, arraysize(buffer), buffer); | 1221 Seq(200, arraysize(buffer), buffer); |
1128 EXPECT_EQ( | 1222 EXPECT_EQ( |
1129 MOJO_RESULT_OUT_OF_RANGE, | 1223 MOJO_RESULT_OUT_OF_RANGE, |
1130 dp->ProducerWriteData( | 1224 dp->ProducerWriteData( |
1131 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); | 1225 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); |
1132 | 1226 |
1133 // Try reading too much. | 1227 // Try reading too much. |
1134 num_bytes = 11u * sizeof(int32_t); | 1228 num_bytes = 11u * sizeof(int32_t); |
1135 memset(buffer, 0xab, sizeof(buffer)); | 1229 memset(buffer, 0xab, sizeof(buffer)); |
1136 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1230 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1137 dp->ConsumerReadData( | 1231 dp->ConsumerReadData(UserPointer<void>(buffer), |
1138 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1232 MakeUserPointer(&num_bytes), |
| 1233 true, |
| 1234 false)); |
1139 int32_t expected_buffer[100]; | 1235 int32_t expected_buffer[100]; |
1140 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1236 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1141 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1237 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1142 | 1238 |
1143 // Try discarding too much. | 1239 // Try discarding too much. |
1144 num_bytes = 11u * sizeof(int32_t); | 1240 num_bytes = 11u * sizeof(int32_t); |
1145 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1241 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1146 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1242 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1147 | 1243 |
1148 // Just a little. | 1244 // Just a little. |
(...skipping 16 matching lines...) Expand all Loading... |
1165 | 1261 |
1166 // Exactly full. | 1262 // Exactly full. |
1167 num_bytes = 0u; | 1263 num_bytes = 0u; |
1168 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 1264 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
1169 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); | 1265 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); |
1170 | 1266 |
1171 // Read half. | 1267 // Read half. |
1172 num_bytes = 5u * sizeof(int32_t); | 1268 num_bytes = 5u * sizeof(int32_t); |
1173 memset(buffer, 0xab, sizeof(buffer)); | 1269 memset(buffer, 0xab, sizeof(buffer)); |
1174 EXPECT_EQ(MOJO_RESULT_OK, | 1270 EXPECT_EQ(MOJO_RESULT_OK, |
1175 dp->ConsumerReadData( | 1271 dp->ConsumerReadData(UserPointer<void>(buffer), |
1176 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1272 MakeUserPointer(&num_bytes), |
| 1273 true, |
| 1274 false)); |
1177 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); | 1275 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); |
1178 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1276 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1179 Seq(100, 5, expected_buffer); | 1277 Seq(100, 5, expected_buffer); |
1180 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1278 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1181 | 1279 |
1182 // Try reading too much again. | 1280 // Try reading too much again. |
1183 num_bytes = 6u * sizeof(int32_t); | 1281 num_bytes = 6u * sizeof(int32_t); |
1184 memset(buffer, 0xab, sizeof(buffer)); | 1282 memset(buffer, 0xab, sizeof(buffer)); |
1185 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1283 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1186 dp->ConsumerReadData( | 1284 dp->ConsumerReadData(UserPointer<void>(buffer), |
1187 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1285 MakeUserPointer(&num_bytes), |
| 1286 true, |
| 1287 false)); |
1188 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1288 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1189 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1289 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1190 | 1290 |
1191 // Try discarding too much again. | 1291 // Try discarding too much again. |
1192 num_bytes = 6u * sizeof(int32_t); | 1292 num_bytes = 6u * sizeof(int32_t); |
1193 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1293 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1194 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1294 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1195 | 1295 |
1196 // Discard a little. | 1296 // Discard a little. |
1197 num_bytes = 2u * sizeof(int32_t); | 1297 num_bytes = 2u * sizeof(int32_t); |
1198 EXPECT_EQ(MOJO_RESULT_OK, | 1298 EXPECT_EQ(MOJO_RESULT_OK, |
1199 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1299 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1200 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); | 1300 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); |
1201 | 1301 |
1202 // Three left. | 1302 // Three left. |
1203 num_bytes = 0u; | 1303 num_bytes = 0u; |
1204 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 1304 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
1205 EXPECT_EQ(3u * sizeof(int32_t), num_bytes); | 1305 EXPECT_EQ(3u * sizeof(int32_t), num_bytes); |
1206 | 1306 |
1207 // Close the producer, then test producer-closed cases. | 1307 // Close the producer, then test producer-closed cases. |
1208 dp->ProducerClose(); | 1308 dp->ProducerClose(); |
1209 | 1309 |
1210 // Try reading too much; "failed precondition" since the producer is closed. | 1310 // Try reading too much; "failed precondition" since the producer is closed. |
1211 num_bytes = 4u * sizeof(int32_t); | 1311 num_bytes = 4u * sizeof(int32_t); |
1212 memset(buffer, 0xab, sizeof(buffer)); | 1312 memset(buffer, 0xab, sizeof(buffer)); |
1213 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 1313 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
1214 dp->ConsumerReadData( | 1314 dp->ConsumerReadData(UserPointer<void>(buffer), |
1215 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1315 MakeUserPointer(&num_bytes), |
| 1316 true, |
| 1317 false)); |
1216 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1318 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1217 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1319 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1218 | 1320 |
1219 // Try discarding too much; "failed precondition" again. | 1321 // Try discarding too much; "failed precondition" again. |
1220 num_bytes = 4u * sizeof(int32_t); | 1322 num_bytes = 4u * sizeof(int32_t); |
1221 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 1323 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
1222 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1324 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1223 | 1325 |
1224 // Read a little. | 1326 // Read a little. |
1225 num_bytes = 2u * sizeof(int32_t); | 1327 num_bytes = 2u * sizeof(int32_t); |
1226 memset(buffer, 0xab, sizeof(buffer)); | 1328 memset(buffer, 0xab, sizeof(buffer)); |
1227 EXPECT_EQ(MOJO_RESULT_OK, | 1329 EXPECT_EQ(MOJO_RESULT_OK, |
1228 dp->ConsumerReadData( | 1330 dp->ConsumerReadData(UserPointer<void>(buffer), |
1229 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1331 MakeUserPointer(&num_bytes), |
| 1332 true, |
| 1333 false)); |
1230 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); | 1334 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); |
1231 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1335 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1232 Seq(400, 2, expected_buffer); | 1336 Seq(400, 2, expected_buffer); |
1233 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1337 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1234 | 1338 |
1235 // Discard the remaining element. | 1339 // Discard the remaining element. |
1236 num_bytes = 1u * sizeof(int32_t); | 1340 num_bytes = 1u * sizeof(int32_t); |
1237 EXPECT_EQ(MOJO_RESULT_OK, | 1341 EXPECT_EQ(MOJO_RESULT_OK, |
1238 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1342 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1239 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); | 1343 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1284 EXPECT_EQ( | 1388 EXPECT_EQ( |
1285 MOJO_RESULT_OK, | 1389 MOJO_RESULT_OK, |
1286 dp->ProducerWriteData( | 1390 dp->ProducerWriteData( |
1287 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); | 1391 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); |
1288 EXPECT_EQ(9u * sizeof(int32_t), num_bytes); | 1392 EXPECT_EQ(9u * sizeof(int32_t), num_bytes); |
1289 | 1393 |
1290 // Read one. | 1394 // Read one. |
1291 num_bytes = 1u * sizeof(int32_t); | 1395 num_bytes = 1u * sizeof(int32_t); |
1292 memset(buffer, 0xab, sizeof(buffer)); | 1396 memset(buffer, 0xab, sizeof(buffer)); |
1293 EXPECT_EQ(MOJO_RESULT_OK, | 1397 EXPECT_EQ(MOJO_RESULT_OK, |
1294 dp->ConsumerReadData( | 1398 dp->ConsumerReadData(UserPointer<void>(buffer), |
1295 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1399 MakeUserPointer(&num_bytes), |
| 1400 true, |
| 1401 false)); |
1296 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); | 1402 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); |
1297 int32_t expected_buffer[100]; | 1403 int32_t expected_buffer[100]; |
1298 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1404 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1299 expected_buffer[0] = 104; | 1405 expected_buffer[0] = 104; |
1300 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1406 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1301 | 1407 |
1302 // Try reading too many. | 1408 // Try reading too many. |
1303 num_bytes = 10u * sizeof(int32_t); | 1409 num_bytes = 10u * sizeof(int32_t); |
1304 memset(buffer, 0xab, sizeof(buffer)); | 1410 memset(buffer, 0xab, sizeof(buffer)); |
1305 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1411 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1306 dp->ConsumerReadData( | 1412 dp->ConsumerReadData(UserPointer<void>(buffer), |
1307 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1413 MakeUserPointer(&num_bytes), |
| 1414 true, |
| 1415 false)); |
1308 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1416 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1309 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1417 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1310 | 1418 |
1311 // Try discarding too many. | 1419 // Try discarding too many. |
1312 num_bytes = 10u * sizeof(int32_t); | 1420 num_bytes = 10u * sizeof(int32_t); |
1313 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1421 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1314 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); | 1422 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true)); |
1315 | 1423 |
1316 // Discard a bunch. | 1424 // Discard a bunch. |
1317 num_bytes = 4u * sizeof(int32_t); | 1425 num_bytes = 4u * sizeof(int32_t); |
(...skipping 11 matching lines...) Expand all Loading... |
1329 EXPECT_EQ( | 1437 EXPECT_EQ( |
1330 MOJO_RESULT_OK, | 1438 MOJO_RESULT_OK, |
1331 dp->ProducerWriteData( | 1439 dp->ProducerWriteData( |
1332 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); | 1440 UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true)); |
1333 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); | 1441 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); |
1334 | 1442 |
1335 // Read everything. | 1443 // Read everything. |
1336 num_bytes = 10u * sizeof(int32_t); | 1444 num_bytes = 10u * sizeof(int32_t); |
1337 memset(buffer, 0xab, sizeof(buffer)); | 1445 memset(buffer, 0xab, sizeof(buffer)); |
1338 EXPECT_EQ(MOJO_RESULT_OK, | 1446 EXPECT_EQ(MOJO_RESULT_OK, |
1339 dp->ConsumerReadData( | 1447 dp->ConsumerReadData(UserPointer<void>(buffer), |
1340 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), true)); | 1448 MakeUserPointer(&num_bytes), |
| 1449 true, |
| 1450 false)); |
1341 memset(expected_buffer, 0xab, sizeof(expected_buffer)); | 1451 memset(expected_buffer, 0xab, sizeof(expected_buffer)); |
1342 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); | 1452 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); |
1343 Seq(300, 10, expected_buffer); | 1453 Seq(300, 10, expected_buffer); |
1344 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); | 1454 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); |
1345 | 1455 |
1346 // Note: All-or-none two-phase writes on a "may discard" data pipe are tested | 1456 // Note: All-or-none two-phase writes on a "may discard" data pipe are tested |
1347 // in LocalDataPipeTest.MayDiscard. | 1457 // in LocalDataPipeTest.MayDiscard. |
1348 | 1458 |
1349 dp->ProducerClose(); | 1459 dp->ProducerClose(); |
1350 dp->ConsumerClose(); | 1460 dp->ConsumerClose(); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1518 dp->ProducerWriteData(UserPointer<const void>(&test_data[0]), | 1628 dp->ProducerWriteData(UserPointer<const void>(&test_data[0]), |
1519 MakeUserPointer(&num_bytes), | 1629 MakeUserPointer(&num_bytes), |
1520 false)); | 1630 false)); |
1521 EXPECT_EQ(20u, num_bytes); | 1631 EXPECT_EQ(20u, num_bytes); |
1522 | 1632 |
1523 // Read 10 bytes. | 1633 // Read 10 bytes. |
1524 unsigned char read_buffer[1000] = {0}; | 1634 unsigned char read_buffer[1000] = {0}; |
1525 num_bytes = 10u; | 1635 num_bytes = 10u; |
1526 EXPECT_EQ( | 1636 EXPECT_EQ( |
1527 MOJO_RESULT_OK, | 1637 MOJO_RESULT_OK, |
1528 dp->ConsumerReadData( | 1638 dp->ConsumerReadData(UserPointer<void>(read_buffer), |
1529 UserPointer<void>(read_buffer), MakeUserPointer(&num_bytes), false)); | 1639 MakeUserPointer(&num_bytes), |
| 1640 false, |
| 1641 false)); |
1530 EXPECT_EQ(10u, num_bytes); | 1642 EXPECT_EQ(10u, num_bytes); |
1531 EXPECT_EQ(0, memcmp(read_buffer, &test_data[0], 10u)); | 1643 EXPECT_EQ(0, memcmp(read_buffer, &test_data[0], 10u)); |
1532 | 1644 |
1533 // Check that a two-phase write can now only write (at most) 80 bytes. (This | 1645 // Check that a two-phase write can now only write (at most) 80 bytes. (This |
1534 // checks an implementation detail; this behavior is not guaranteed, but we | 1646 // checks an implementation detail; this behavior is not guaranteed, but we |
1535 // need it for this test.) | 1647 // need it for this test.) |
1536 void* write_buffer_ptr = nullptr; | 1648 void* write_buffer_ptr = nullptr; |
1537 num_bytes = 0u; | 1649 num_bytes = 0u; |
1538 EXPECT_EQ(MOJO_RESULT_OK, | 1650 EXPECT_EQ(MOJO_RESULT_OK, |
1539 dp->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr), | 1651 dp->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr), |
(...skipping 25 matching lines...) Expand all Loading... |
1565 EXPECT_EQ(90u, num_bytes); | 1677 EXPECT_EQ(90u, num_bytes); |
1566 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u)); | 1678 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u)); |
1567 | 1679 |
1568 // Read as much as possible (using |ConsumerReadData()|). We should read 100 | 1680 // Read as much as possible (using |ConsumerReadData()|). We should read 100 |
1569 // bytes. | 1681 // bytes. |
1570 num_bytes = | 1682 num_bytes = |
1571 static_cast<uint32_t>(arraysize(read_buffer) * sizeof(read_buffer[0])); | 1683 static_cast<uint32_t>(arraysize(read_buffer) * sizeof(read_buffer[0])); |
1572 memset(read_buffer, 0, num_bytes); | 1684 memset(read_buffer, 0, num_bytes); |
1573 EXPECT_EQ( | 1685 EXPECT_EQ( |
1574 MOJO_RESULT_OK, | 1686 MOJO_RESULT_OK, |
1575 dp->ConsumerReadData( | 1687 dp->ConsumerReadData(UserPointer<void>(read_buffer), |
1576 UserPointer<void>(read_buffer), MakeUserPointer(&num_bytes), false)); | 1688 MakeUserPointer(&num_bytes), |
| 1689 false, |
| 1690 false)); |
1577 EXPECT_EQ(100u, num_bytes); | 1691 EXPECT_EQ(100u, num_bytes); |
1578 EXPECT_EQ(0, memcmp(read_buffer, &test_data[10], 100u)); | 1692 EXPECT_EQ(0, memcmp(read_buffer, &test_data[10], 100u)); |
1579 | 1693 |
1580 dp->ProducerClose(); | 1694 dp->ProducerClose(); |
1581 dp->ConsumerClose(); | 1695 dp->ConsumerClose(); |
1582 } | 1696 } |
1583 | 1697 |
1584 // Tests the behavior of closing the producer or consumer with respect to | 1698 // Tests the behavior of closing the producer or consumer with respect to |
1585 // writes and reads (simple and two-phase). | 1699 // writes and reads (simple and two-phase). |
1586 TEST(LocalDataPipeTest, CloseWriteRead) { | 1700 TEST(LocalDataPipeTest, CloseWriteRead) { |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1746 uint32_t num_bytes = kTestDataSize; | 1860 uint32_t num_bytes = kTestDataSize; |
1747 EXPECT_EQ(MOJO_RESULT_OK, | 1861 EXPECT_EQ(MOJO_RESULT_OK, |
1748 dp->ProducerWriteData(UserPointer<const void>(kTestData), | 1862 dp->ProducerWriteData(UserPointer<const void>(kTestData), |
1749 MakeUserPointer(&num_bytes), | 1863 MakeUserPointer(&num_bytes), |
1750 false)); | 1864 false)); |
1751 EXPECT_EQ(kTestDataSize, num_bytes); | 1865 EXPECT_EQ(kTestDataSize, num_bytes); |
1752 | 1866 |
1753 // Close the producer. | 1867 // Close the producer. |
1754 dp->ProducerClose(); | 1868 dp->ProducerClose(); |
1755 | 1869 |
1756 // Read that data. | 1870 // Peek that data. |
1757 char buffer[1000]; | 1871 char buffer[1000]; |
1758 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 1872 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
1759 EXPECT_EQ( | 1873 EXPECT_EQ( |
1760 MOJO_RESULT_OK, | 1874 MOJO_RESULT_OK, |
1761 dp->ConsumerReadData( | 1875 dp->ConsumerReadData(UserPointer<void>(buffer), |
1762 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 1876 MakeUserPointer(&num_bytes), |
| 1877 false, |
| 1878 true)); |
1763 EXPECT_EQ(kTestDataSize, num_bytes); | 1879 EXPECT_EQ(kTestDataSize, num_bytes); |
1764 EXPECT_EQ(0, memcmp(buffer, kTestData, kTestDataSize)); | 1880 EXPECT_EQ(0, memcmp(buffer, kTestData, kTestDataSize)); |
1765 | 1881 |
| 1882 // Read that data. |
| 1883 memset(buffer, 0, 1000); |
| 1884 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 1885 EXPECT_EQ( |
| 1886 MOJO_RESULT_OK, |
| 1887 dp->ConsumerReadData(UserPointer<void>(buffer), |
| 1888 MakeUserPointer(&num_bytes), |
| 1889 false, |
| 1890 false)); |
| 1891 EXPECT_EQ(kTestDataSize, num_bytes); |
| 1892 EXPECT_EQ(0, memcmp(buffer, kTestData, kTestDataSize)); |
| 1893 |
1766 // A second read should fail. | 1894 // A second read should fail. |
1767 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 1895 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
1768 EXPECT_EQ( | 1896 EXPECT_EQ( |
1769 MOJO_RESULT_FAILED_PRECONDITION, | 1897 MOJO_RESULT_FAILED_PRECONDITION, |
1770 dp->ConsumerReadData( | 1898 dp->ConsumerReadData(UserPointer<void>(buffer), |
1771 UserPointer<void>(buffer), MakeUserPointer(&num_bytes), false)); | 1899 MakeUserPointer(&num_bytes), |
| 1900 false, |
| 1901 false)); |
1772 | 1902 |
1773 // A two-phase read should also fail. | 1903 // A two-phase read should also fail. |
1774 const void* read_buffer_ptr = nullptr; | 1904 const void* read_buffer_ptr = nullptr; |
1775 num_bytes = 0u; | 1905 num_bytes = 0u; |
1776 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 1906 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
1777 dp->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr), | 1907 dp->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr), |
1778 MakeUserPointer(&num_bytes), | 1908 MakeUserPointer(&num_bytes), |
1779 false)); | 1909 false)); |
1780 | 1910 |
1781 // Ditto for discard. | 1911 // Ditto for discard. |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 // End reading. | 2124 // End reading. |
1995 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); | 2125 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); |
1996 | 2126 |
1997 dp->ProducerClose(); | 2127 dp->ProducerClose(); |
1998 dp->ConsumerClose(); | 2128 dp->ConsumerClose(); |
1999 } | 2129 } |
2000 | 2130 |
2001 } // namespace | 2131 } // namespace |
2002 } // namespace system | 2132 } // namespace system |
2003 } // namespace mojo | 2133 } // namespace mojo |
OLD | NEW |