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

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

Issue 703273002: Update mojo sdk to rev 04a510fb37db10642e156957f9b2c11c2f6442ac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix content/child -> mojo/common linking Created 6 years, 1 month 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/local_data_pipe.cc ('k') | mojo/mojo.gyp » ('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/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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/edk/system/local_data_pipe.cc ('k') | mojo/mojo.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698