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

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

Issue 417113010: Convert ReadData...() to use the new user pointer handling (see r285350). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/system/local_data_pipe.cc ('k') | mojo/system/memory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/system/local_data_pipe.h" 5 #include "mojo/system/local_data_pipe.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 DataPipe::ValidateCreateOptions(&options, &validated_options)); 105 DataPipe::ValidateCreateOptions(&options, &validated_options));
106 106
107 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 107 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
108 108
109 int32_t elements[10] = { 0 }; 109 int32_t elements[10] = { 0 };
110 uint32_t num_bytes = 0; 110 uint32_t num_bytes = 0;
111 111
112 // Try reading; nothing there yet. 112 // Try reading; nothing there yet.
113 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0])); 113 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0]));
114 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 114 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
115 dp->ConsumerReadData(elements, &num_bytes, false)); 115 dp->ConsumerReadData(UserPointer<void>(elements),
116 MakeUserPointer(&num_bytes), false));
116 117
117 // Query; nothing there yet. 118 // Query; nothing there yet.
118 num_bytes = 0; 119 num_bytes = 0;
119 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 120 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
120 EXPECT_EQ(0u, num_bytes); 121 EXPECT_EQ(0u, num_bytes);
121 122
122 // Discard; nothing there yet. 123 // Discard; nothing there yet.
123 num_bytes = static_cast<uint32_t>(5u * sizeof(elements[0])); 124 num_bytes = static_cast<uint32_t>(5u * sizeof(elements[0]));
124 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 125 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
125 dp->ConsumerDiscardData(&num_bytes, false)); 126 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), false));
126 127
127 // Read with invalid |num_bytes|. 128 // Read with invalid |num_bytes|.
128 num_bytes = sizeof(elements[0]) + 1; 129 num_bytes = sizeof(elements[0]) + 1;
129 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 130 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
130 dp->ConsumerReadData(elements, &num_bytes, false)); 131 dp->ConsumerReadData(UserPointer<void>(elements),
132 MakeUserPointer(&num_bytes), false));
131 133
132 // Write two elements. 134 // Write two elements.
133 elements[0] = 123; 135 elements[0] = 123;
134 elements[1] = 456; 136 elements[1] = 456;
135 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 137 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
136 EXPECT_EQ(MOJO_RESULT_OK, 138 EXPECT_EQ(MOJO_RESULT_OK,
137 dp->ProducerWriteData(elements, &num_bytes, false)); 139 dp->ProducerWriteData(elements, &num_bytes, false));
138 // It should have written everything (even without "all or none"). 140 // It should have written everything (even without "all or none").
139 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); 141 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes);
140 142
141 // Query. 143 // Query.
142 num_bytes = 0; 144 num_bytes = 0;
143 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 145 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
144 EXPECT_EQ(2 * sizeof(elements[0]), num_bytes); 146 EXPECT_EQ(2 * sizeof(elements[0]), num_bytes);
145 147
146 // Read one element. 148 // Read one element.
147 elements[0] = -1; 149 elements[0] = -1;
148 elements[1] = -1; 150 elements[1] = -1;
149 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 151 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
150 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, false)); 152 EXPECT_EQ(MOJO_RESULT_OK,
153 dp->ConsumerReadData(UserPointer<void>(elements),
154 MakeUserPointer(&num_bytes), false));
151 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); 155 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes);
152 EXPECT_EQ(123, elements[0]); 156 EXPECT_EQ(123, elements[0]);
153 EXPECT_EQ(-1, elements[1]); 157 EXPECT_EQ(-1, elements[1]);
154 158
155 // Query. 159 // Query.
156 num_bytes = 0; 160 num_bytes = 0;
157 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 161 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
158 EXPECT_EQ(1 * sizeof(elements[0]), num_bytes); 162 EXPECT_EQ(1 * sizeof(elements[0]), num_bytes);
159 163
160 // Try to read two elements, with "all or none". 164 // Try to read two elements, with "all or none".
161 elements[0] = -1; 165 elements[0] = -1;
162 elements[1] = -1; 166 elements[1] = -1;
163 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 167 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
164 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 168 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
165 dp->ConsumerReadData(elements, &num_bytes, true)); 169 dp->ConsumerReadData(UserPointer<void>(elements),
170 MakeUserPointer(&num_bytes), true));
166 EXPECT_EQ(-1, elements[0]); 171 EXPECT_EQ(-1, elements[0]);
167 EXPECT_EQ(-1, elements[1]); 172 EXPECT_EQ(-1, elements[1]);
168 173
169 // Try to read two elements, without "all or none". 174 // Try to read two elements, without "all or none".
170 elements[0] = -1; 175 elements[0] = -1;
171 elements[1] = -1; 176 elements[1] = -1;
172 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 177 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
173 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, false)); 178 EXPECT_EQ(MOJO_RESULT_OK,
179 dp->ConsumerReadData(UserPointer<void>(elements),
180 MakeUserPointer(&num_bytes), false));
174 EXPECT_EQ(456, elements[0]); 181 EXPECT_EQ(456, elements[0]);
175 EXPECT_EQ(-1, elements[1]); 182 EXPECT_EQ(-1, elements[1]);
176 183
177 // Query. 184 // Query.
178 num_bytes = 0; 185 num_bytes = 0;
179 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 186 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
180 EXPECT_EQ(0u, num_bytes); 187 EXPECT_EQ(0u, num_bytes);
181 188
182 dp->ProducerClose(); 189 dp->ProducerClose();
183 dp->ConsumerClose(); 190 dp->ConsumerClose();
184 } 191 }
185 192
186 // Note: The "basic" waiting tests test that the "wait states" are correct in 193 // Note: The "basic" waiting tests test that the "wait states" are correct in
187 // various situations; they don't test that waiters are properly awoken on state 194 // various situations; they don't test that waiters are properly awoken on state
188 // changes. (For that, we need to use multiple threads.) 195 // changes. (For that, we need to use multiple threads.)
189 TEST(LocalDataPipeTest, BasicProducerWaiting) { 196 TEST(LocalDataPipeTest, BasicProducerWaiting) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 237
231 // Do it again. 238 // Do it again.
232 waiter.Init(); 239 waiter.Init();
233 ASSERT_EQ(MOJO_RESULT_OK, 240 ASSERT_EQ(MOJO_RESULT_OK,
234 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 78)); 241 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 78));
235 242
236 // Read one element. 243 // Read one element.
237 elements[0] = -1; 244 elements[0] = -1;
238 elements[1] = -1; 245 elements[1] = -1;
239 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 246 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
240 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 247 EXPECT_EQ(MOJO_RESULT_OK,
248 dp->ConsumerReadData(UserPointer<void>(elements),
249 MakeUserPointer(&num_bytes), true));
241 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 250 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
242 EXPECT_EQ(123, elements[0]); 251 EXPECT_EQ(123, elements[0]);
243 EXPECT_EQ(-1, elements[1]); 252 EXPECT_EQ(-1, elements[1]);
244 253
245 // Waiting should now succeed. 254 // Waiting should now succeed.
246 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context)); 255 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context));
247 EXPECT_EQ(78u, context); 256 EXPECT_EQ(78u, context);
248 dp->ProducerRemoveWaiter(&waiter); 257 dp->ProducerRemoveWaiter(&waiter);
249 258
250 // Try writing, using a two-phase write. 259 // Try writing, using a two-phase write.
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 EXPECT_EQ(MOJO_RESULT_OK, 352 EXPECT_EQ(MOJO_RESULT_OK,
344 dp->ProducerWriteData(elements, &num_bytes, true)); 353 dp->ProducerWriteData(elements, &num_bytes, true));
345 354
346 // Should already be readable. 355 // Should already be readable.
347 waiter.Init(); 356 waiter.Init();
348 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 357 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
349 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 56)); 358 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 56));
350 359
351 // Discard one element. 360 // Discard one element.
352 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 361 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
353 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true)); 362 EXPECT_EQ(MOJO_RESULT_OK,
363 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
354 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 364 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
355 365
356 // Should still be readable. 366 // Should still be readable.
357 waiter.Init(); 367 waiter.Init();
358 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 368 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
359 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78)); 369 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78));
360 370
361 // Read one element. 371 // Read one element.
362 elements[0] = -1; 372 elements[0] = -1;
363 elements[1] = -1; 373 elements[1] = -1;
364 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 374 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
365 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 375 EXPECT_EQ(MOJO_RESULT_OK,
376 dp->ConsumerReadData(UserPointer<void>(elements),
377 MakeUserPointer(&num_bytes), true));
366 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 378 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
367 EXPECT_EQ(456, elements[0]); 379 EXPECT_EQ(456, elements[0]);
368 EXPECT_EQ(-1, elements[1]); 380 EXPECT_EQ(-1, elements[1]);
369 381
370 // Adding a waiter should now succeed. 382 // Adding a waiter should now succeed.
371 waiter.Init(); 383 waiter.Init();
372 ASSERT_EQ(MOJO_RESULT_OK, 384 ASSERT_EQ(MOJO_RESULT_OK,
373 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 90)); 385 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 90));
374 386
375 // Write one element. 387 // Write one element.
(...skipping 13 matching lines...) Expand all
389 401
390 // Should still be readable. 402 // Should still be readable.
391 waiter.Init(); 403 waiter.Init();
392 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 404 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
393 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12)); 405 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12));
394 406
395 // Read one element. 407 // Read one element.
396 elements[0] = -1; 408 elements[0] = -1;
397 elements[1] = -1; 409 elements[1] = -1;
398 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 410 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
399 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 411 EXPECT_EQ(MOJO_RESULT_OK,
412 dp->ConsumerReadData(UserPointer<void>(elements),
413 MakeUserPointer(&num_bytes), true));
400 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 414 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
401 EXPECT_EQ(789, elements[0]); 415 EXPECT_EQ(789, elements[0]);
402 EXPECT_EQ(-1, elements[1]); 416 EXPECT_EQ(-1, elements[1]);
403 417
404 // Should be never-readable. 418 // Should be never-readable.
405 waiter.Init(); 419 waiter.Init();
406 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 420 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
407 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34)); 421 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34));
408 422
409 dp->ConsumerClose(); 423 dp->ConsumerClose();
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 669
656 // And still readable. 670 // And still readable.
657 waiter.Init(); 671 waiter.Init();
658 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 672 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
659 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5)); 673 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5));
660 674
661 // Read that element. 675 // Read that element.
662 num_bytes = static_cast<uint32_t>(sizeof(int32_t)); 676 num_bytes = static_cast<uint32_t>(sizeof(int32_t));
663 element = 0; 677 element = 0;
664 EXPECT_EQ(MOJO_RESULT_OK, 678 EXPECT_EQ(MOJO_RESULT_OK,
665 dp->ConsumerReadData(&element, &num_bytes, false)); 679 dp->ConsumerReadData(UserPointer<void>(&element),
680 MakeUserPointer(&num_bytes), false));
666 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); 681 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes);
667 EXPECT_EQ(456, element); 682 EXPECT_EQ(456, element);
668 683
669 // Still writable. 684 // Still writable.
670 waiter.Init(); 685 waiter.Init();
671 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 686 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
672 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6)); 687 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6));
673 688
674 // No longer readable. 689 // No longer readable.
675 waiter.Init(); 690 waiter.Init();
(...skipping 30 matching lines...) Expand all
706 num_bytes = 20u * sizeof(int32_t); 721 num_bytes = 20u * sizeof(int32_t);
707 Seq(0, arraysize(buffer), buffer); 722 Seq(0, arraysize(buffer), buffer);
708 // Try writing more than capacity. (This test relies on the implementation 723 // Try writing more than capacity. (This test relies on the implementation
709 // enforcing the capacity strictly.) 724 // enforcing the capacity strictly.)
710 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false)); 725 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false));
711 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 726 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
712 727
713 // Read half of what we wrote. 728 // Read half of what we wrote.
714 num_bytes = 5u * sizeof(int32_t); 729 num_bytes = 5u * sizeof(int32_t);
715 memset(buffer, 0xab, sizeof(buffer)); 730 memset(buffer, 0xab, sizeof(buffer));
716 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, false)); 731 EXPECT_EQ(MOJO_RESULT_OK,
732 dp->ConsumerReadData(UserPointer<void>(buffer),
733 MakeUserPointer(&num_bytes), false));
717 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 734 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
718 int32_t expected_buffer[100]; 735 int32_t expected_buffer[100];
719 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 736 memset(expected_buffer, 0xab, sizeof(expected_buffer));
720 Seq(0, 5u, expected_buffer); 737 Seq(0, 5u, expected_buffer);
721 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 738 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
722 // Internally, a circular buffer would now look like: 739 // Internally, a circular buffer would now look like:
723 // -, -, -, -, -, 5, 6, 7, 8, 9 740 // -, -, -, -, -, 5, 6, 7, 8, 9
724 741
725 // Write a bit more than the space that's available. 742 // Write a bit more than the space that's available.
726 num_bytes = 8u * sizeof(int32_t); 743 num_bytes = 8u * sizeof(int32_t);
727 Seq(100, arraysize(buffer), buffer); 744 Seq(100, arraysize(buffer), buffer);
728 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false)); 745 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false));
729 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); 746 EXPECT_EQ(8u * sizeof(int32_t), num_bytes);
730 // Internally, a circular buffer would now look like: 747 // Internally, a circular buffer would now look like:
731 // 100, 101, 102, 103, 104, 105, 106, 107, 8, 9 748 // 100, 101, 102, 103, 104, 105, 106, 107, 8, 9
732 749
733 // Read half of what's available. 750 // Read half of what's available.
734 num_bytes = 5u * sizeof(int32_t); 751 num_bytes = 5u * sizeof(int32_t);
735 memset(buffer, 0xab, sizeof(buffer)); 752 memset(buffer, 0xab, sizeof(buffer));
736 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, false)); 753 EXPECT_EQ(MOJO_RESULT_OK,
754 dp->ConsumerReadData(UserPointer<void>(buffer),
755 MakeUserPointer(&num_bytes), false));
737 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 756 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
738 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 757 memset(expected_buffer, 0xab, sizeof(expected_buffer));
739 expected_buffer[0] = 8; 758 expected_buffer[0] = 8;
740 expected_buffer[1] = 9; 759 expected_buffer[1] = 9;
741 expected_buffer[2] = 100; 760 expected_buffer[2] = 100;
742 expected_buffer[3] = 101; 761 expected_buffer[3] = 101;
743 expected_buffer[4] = 102; 762 expected_buffer[4] = 102;
744 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 763 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
745 // Internally, a circular buffer would now look like: 764 // Internally, a circular buffer would now look like:
746 // -, -, -, 103, 104, 105, 106, 107, -, - 765 // -, -, -, 103, 104, 105, 106, 107, -, -
(...skipping 10 matching lines...) Expand all
757 num_bytes = 5u * sizeof(int32_t); 776 num_bytes = 5u * sizeof(int32_t);
758 Seq(300, arraysize(buffer), buffer); 777 Seq(300, arraysize(buffer), buffer);
759 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false)); 778 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, false));
760 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 779 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
761 // Internally, a circular buffer would now look like: 780 // Internally, a circular buffer would now look like:
762 // 301, 302, 303, 304, 104, 105, 106, 107, 200, 300 781 // 301, 302, 303, 304, 104, 105, 106, 107, 200, 300
763 782
764 // Read it all. 783 // Read it all.
765 num_bytes = sizeof(buffer); 784 num_bytes = sizeof(buffer);
766 memset(buffer, 0xab, sizeof(buffer)); 785 memset(buffer, 0xab, sizeof(buffer));
767 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, false)); 786 EXPECT_EQ(MOJO_RESULT_OK,
787 dp->ConsumerReadData(UserPointer<void>(buffer),
788 MakeUserPointer(&num_bytes), false));
768 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 789 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
769 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 790 memset(expected_buffer, 0xab, sizeof(expected_buffer));
770 expected_buffer[0] = 104; 791 expected_buffer[0] = 104;
771 expected_buffer[1] = 105; 792 expected_buffer[1] = 105;
772 expected_buffer[2] = 106; 793 expected_buffer[2] = 106;
773 expected_buffer[3] = 107; 794 expected_buffer[3] = 107;
774 expected_buffer[4] = 200; 795 expected_buffer[4] = 200;
775 expected_buffer[5] = 300; 796 expected_buffer[5] = 300;
776 expected_buffer[6] = 301; 797 expected_buffer[6] = 301;
777 expected_buffer[7] = 302; 798 expected_buffer[7] = 302;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 861 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
841 // Only write 3 elements though. 862 // Only write 3 elements though.
842 Seq(700, 3, static_cast<int32_t*>(write_ptr)); 863 Seq(700, 3, static_cast<int32_t*>(write_ptr));
843 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(3u * sizeof(int32_t))); 864 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(3u * sizeof(int32_t)));
844 // Internally, a circular buffer would now look like: 865 // Internally, a circular buffer would now look like:
845 // 500, 600, 601, 602, 603, 700, 701, 702, -, - 866 // 500, 600, 601, 602, 603, 700, 701, 702, -, -
846 867
847 // Read everything. 868 // Read everything.
848 num_bytes = sizeof(buffer); 869 num_bytes = sizeof(buffer);
849 memset(buffer, 0xab, sizeof(buffer)); 870 memset(buffer, 0xab, sizeof(buffer));
850 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, false)); 871 EXPECT_EQ(MOJO_RESULT_OK,
872 dp->ConsumerReadData(UserPointer<void>(buffer),
873 MakeUserPointer(&num_bytes), false));
851 EXPECT_EQ(8u * sizeof(int32_t), num_bytes); 874 EXPECT_EQ(8u * sizeof(int32_t), num_bytes);
852 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 875 memset(expected_buffer, 0xab, sizeof(expected_buffer));
853 expected_buffer[0] = 500; 876 expected_buffer[0] = 500;
854 expected_buffer[1] = 600; 877 expected_buffer[1] = 600;
855 expected_buffer[2] = 601; 878 expected_buffer[2] = 601;
856 expected_buffer[3] = 602; 879 expected_buffer[3] = 602;
857 expected_buffer[4] = 603; 880 expected_buffer[4] = 603;
858 expected_buffer[5] = 700; 881 expected_buffer[5] = 700;
859 expected_buffer[6] = 701; 882 expected_buffer[6] = 701;
860 expected_buffer[7] = 702; 883 expected_buffer[7] = 702;
(...skipping 18 matching lines...) Expand all
879 902
880 // Try writing way too much. 903 // Try writing way too much.
881 uint32_t num_bytes = 20u * sizeof(int32_t); 904 uint32_t num_bytes = 20u * sizeof(int32_t);
882 int32_t buffer[100]; 905 int32_t buffer[100];
883 Seq(0, arraysize(buffer), buffer); 906 Seq(0, arraysize(buffer), buffer);
884 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 907 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
885 dp->ProducerWriteData(buffer, &num_bytes, true)); 908 dp->ProducerWriteData(buffer, &num_bytes, true));
886 909
887 // Should still be empty. 910 // Should still be empty.
888 num_bytes = ~0u; 911 num_bytes = ~0u;
889 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 912 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
890 EXPECT_EQ(0u, num_bytes); 913 EXPECT_EQ(0u, num_bytes);
891 914
892 // Write some data. 915 // Write some data.
893 num_bytes = 5u * sizeof(int32_t); 916 num_bytes = 5u * sizeof(int32_t);
894 Seq(100, arraysize(buffer), buffer); 917 Seq(100, arraysize(buffer), buffer);
895 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 918 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
896 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 919 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
897 920
898 // Half full. 921 // Half full.
899 num_bytes = 0u; 922 num_bytes = 0u;
900 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 923 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
901 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 924 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
902 925
903 // Too much. 926 // Too much.
904 num_bytes = 6u * sizeof(int32_t); 927 num_bytes = 6u * sizeof(int32_t);
905 Seq(200, arraysize(buffer), buffer); 928 Seq(200, arraysize(buffer), buffer);
906 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 929 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
907 dp->ProducerWriteData(buffer, &num_bytes, true)); 930 dp->ProducerWriteData(buffer, &num_bytes, true));
908 931
909 // Try reading too much. 932 // Try reading too much.
910 num_bytes = 11u * sizeof(int32_t); 933 num_bytes = 11u * sizeof(int32_t);
911 memset(buffer, 0xab, sizeof(buffer)); 934 memset(buffer, 0xab, sizeof(buffer));
912 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 935 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
913 dp->ConsumerReadData(buffer, &num_bytes, true)); 936 dp->ConsumerReadData(UserPointer<void>(buffer),
937 MakeUserPointer(&num_bytes), true));
914 int32_t expected_buffer[100]; 938 int32_t expected_buffer[100];
915 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 939 memset(expected_buffer, 0xab, sizeof(expected_buffer));
916 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 940 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
917 941
918 // Try discarding too much. 942 // Try discarding too much.
919 num_bytes = 11u * sizeof(int32_t); 943 num_bytes = 11u * sizeof(int32_t);
920 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 944 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
921 dp->ConsumerDiscardData(&num_bytes, true)); 945 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
922 946
923 // Just a little. 947 // Just a little.
924 num_bytes = 2u * sizeof(int32_t); 948 num_bytes = 2u * sizeof(int32_t);
925 Seq(300, arraysize(buffer), buffer); 949 Seq(300, arraysize(buffer), buffer);
926 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 950 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
927 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); 951 EXPECT_EQ(2u * sizeof(int32_t), num_bytes);
928 952
929 // Just right. 953 // Just right.
930 num_bytes = 3u * sizeof(int32_t); 954 num_bytes = 3u * sizeof(int32_t);
931 Seq(400, arraysize(buffer), buffer); 955 Seq(400, arraysize(buffer), buffer);
932 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 956 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
933 EXPECT_EQ(3u * sizeof(int32_t), num_bytes); 957 EXPECT_EQ(3u * sizeof(int32_t), num_bytes);
934 958
935 // Exactly full. 959 // Exactly full.
936 num_bytes = 0u; 960 num_bytes = 0u;
937 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 961 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
938 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 962 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
939 963
940 // Read half. 964 // Read half.
941 num_bytes = 5u * sizeof(int32_t); 965 num_bytes = 5u * sizeof(int32_t);
942 memset(buffer, 0xab, sizeof(buffer)); 966 memset(buffer, 0xab, sizeof(buffer));
943 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, true)); 967 EXPECT_EQ(MOJO_RESULT_OK,
968 dp->ConsumerReadData(UserPointer<void>(buffer),
969 MakeUserPointer(&num_bytes), true));
944 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 970 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
945 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 971 memset(expected_buffer, 0xab, sizeof(expected_buffer));
946 Seq(100, 5, expected_buffer); 972 Seq(100, 5, expected_buffer);
947 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 973 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
948 974
949 // Try reading too much again. 975 // Try reading too much again.
950 num_bytes = 6u * sizeof(int32_t); 976 num_bytes = 6u * sizeof(int32_t);
951 memset(buffer, 0xab, sizeof(buffer)); 977 memset(buffer, 0xab, sizeof(buffer));
952 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 978 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
953 dp->ConsumerReadData(buffer, &num_bytes, true)); 979 dp->ConsumerReadData(UserPointer<void>(buffer),
980 MakeUserPointer(&num_bytes), true));
954 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 981 memset(expected_buffer, 0xab, sizeof(expected_buffer));
955 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 982 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
956 983
957 // Try discarding too much again. 984 // Try discarding too much again.
958 num_bytes = 6u * sizeof(int32_t); 985 num_bytes = 6u * sizeof(int32_t);
959 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 986 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
960 dp->ConsumerDiscardData(&num_bytes, true)); 987 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
961 988
962 // Discard a little. 989 // Discard a little.
963 num_bytes = 2u * sizeof(int32_t); 990 num_bytes = 2u * sizeof(int32_t);
964 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true)); 991 EXPECT_EQ(MOJO_RESULT_OK,
992 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
965 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); 993 EXPECT_EQ(2u * sizeof(int32_t), num_bytes);
966 994
967 // Three left. 995 // Three left.
968 num_bytes = 0u; 996 num_bytes = 0u;
969 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 997 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
970 EXPECT_EQ(3u * sizeof(int32_t), num_bytes); 998 EXPECT_EQ(3u * sizeof(int32_t), num_bytes);
971 999
972 // Close the producer, then test producer-closed cases. 1000 // Close the producer, then test producer-closed cases.
973 dp->ProducerClose(); 1001 dp->ProducerClose();
974 1002
975 // Try reading too much; "failed precondition" since the producer is closed. 1003 // Try reading too much; "failed precondition" since the producer is closed.
976 num_bytes = 4u * sizeof(int32_t); 1004 num_bytes = 4u * sizeof(int32_t);
977 memset(buffer, 0xab, sizeof(buffer)); 1005 memset(buffer, 0xab, sizeof(buffer));
978 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1006 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
979 dp->ConsumerReadData(buffer, &num_bytes, true)); 1007 dp->ConsumerReadData(UserPointer<void>(buffer),
1008 MakeUserPointer(&num_bytes), true));
980 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 1009 memset(expected_buffer, 0xab, sizeof(expected_buffer));
981 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 1010 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
982 1011
983 // Try discarding too much; "failed precondition" again. 1012 // Try discarding too much; "failed precondition" again.
984 num_bytes = 4u * sizeof(int32_t); 1013 num_bytes = 4u * sizeof(int32_t);
985 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1014 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
986 dp->ConsumerDiscardData(&num_bytes, true)); 1015 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
987 1016
988 // Read a little. 1017 // Read a little.
989 num_bytes = 2u * sizeof(int32_t); 1018 num_bytes = 2u * sizeof(int32_t);
990 memset(buffer, 0xab, sizeof(buffer)); 1019 memset(buffer, 0xab, sizeof(buffer));
991 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, true)); 1020 EXPECT_EQ(MOJO_RESULT_OK,
1021 dp->ConsumerReadData(UserPointer<void>(buffer),
1022 MakeUserPointer(&num_bytes), true));
992 EXPECT_EQ(2u * sizeof(int32_t), num_bytes); 1023 EXPECT_EQ(2u * sizeof(int32_t), num_bytes);
993 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 1024 memset(expected_buffer, 0xab, sizeof(expected_buffer));
994 Seq(400, 2, expected_buffer); 1025 Seq(400, 2, expected_buffer);
995 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 1026 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
996 1027
997 // Discard the remaining element. 1028 // Discard the remaining element.
998 num_bytes = 1u * sizeof(int32_t); 1029 num_bytes = 1u * sizeof(int32_t);
999 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true)); 1030 EXPECT_EQ(MOJO_RESULT_OK,
1031 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
1000 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1032 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1001 1033
1002 // Empty again. 1034 // Empty again.
1003 num_bytes = ~0u; 1035 num_bytes = ~0u;
1004 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1036 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1005 EXPECT_EQ(0u, num_bytes); 1037 EXPECT_EQ(0u, num_bytes);
1006 1038
1007 dp->ConsumerClose(); 1039 dp->ConsumerClose();
1008 } 1040 }
1009 1041
1010 TEST(LocalDataPipeTest, AllOrNoneMayDiscard) { 1042 TEST(LocalDataPipeTest, AllOrNoneMayDiscard) {
1011 const MojoCreateDataPipeOptions options = { 1043 const MojoCreateDataPipeOptions options = {
1012 kSizeOfOptions, // |struct_size|. 1044 kSizeOfOptions, // |struct_size|.
1013 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. 1045 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|.
1014 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. 1046 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|.
(...skipping 20 matching lines...) Expand all
1035 1067
1036 // Write lots of stuff (discarding all but "104"). 1068 // Write lots of stuff (discarding all but "104").
1037 num_bytes = 9u * sizeof(int32_t); 1069 num_bytes = 9u * sizeof(int32_t);
1038 Seq(200, arraysize(buffer), buffer); 1070 Seq(200, arraysize(buffer), buffer);
1039 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 1071 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
1040 EXPECT_EQ(9u * sizeof(int32_t), num_bytes); 1072 EXPECT_EQ(9u * sizeof(int32_t), num_bytes);
1041 1073
1042 // Read one. 1074 // Read one.
1043 num_bytes = 1u * sizeof(int32_t); 1075 num_bytes = 1u * sizeof(int32_t);
1044 memset(buffer, 0xab, sizeof(buffer)); 1076 memset(buffer, 0xab, sizeof(buffer));
1045 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, true)); 1077 EXPECT_EQ(MOJO_RESULT_OK,
1078 dp->ConsumerReadData(UserPointer<void>(buffer),
1079 MakeUserPointer(&num_bytes), true));
1046 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1080 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1047 int32_t expected_buffer[100]; 1081 int32_t expected_buffer[100];
1048 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 1082 memset(expected_buffer, 0xab, sizeof(expected_buffer));
1049 expected_buffer[0] = 104; 1083 expected_buffer[0] = 104;
1050 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 1084 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
1051 1085
1052 // Try reading too many. 1086 // Try reading too many.
1053 num_bytes = 10u * sizeof(int32_t); 1087 num_bytes = 10u * sizeof(int32_t);
1054 memset(buffer, 0xab, sizeof(buffer)); 1088 memset(buffer, 0xab, sizeof(buffer));
1055 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 1089 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
1056 dp->ConsumerReadData(buffer, &num_bytes, true)); 1090 dp->ConsumerReadData(UserPointer<void>(buffer),
1091 MakeUserPointer(&num_bytes), true));
1057 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 1092 memset(expected_buffer, 0xab, sizeof(expected_buffer));
1058 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 1093 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
1059 1094
1060 // Try discarding too many. 1095 // Try discarding too many.
1061 num_bytes = 10u * sizeof(int32_t); 1096 num_bytes = 10u * sizeof(int32_t);
1062 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 1097 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
1063 dp->ConsumerDiscardData(&num_bytes, true)); 1098 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
1064 1099
1065 // Discard a bunch. 1100 // Discard a bunch.
1066 num_bytes = 4u * sizeof(int32_t); 1101 num_bytes = 4u * sizeof(int32_t);
1067 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true)); 1102 EXPECT_EQ(MOJO_RESULT_OK,
1103 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), true));
1068 1104
1069 // Half full. 1105 // Half full.
1070 num_bytes = 0u; 1106 num_bytes = 0u;
1071 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1107 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1072 EXPECT_EQ(5u * sizeof(int32_t), num_bytes); 1108 EXPECT_EQ(5u * sizeof(int32_t), num_bytes);
1073 1109
1074 // Write as much as possible. 1110 // Write as much as possible.
1075 num_bytes = 10u * sizeof(int32_t); 1111 num_bytes = 10u * sizeof(int32_t);
1076 Seq(300, arraysize(buffer), buffer); 1112 Seq(300, arraysize(buffer), buffer);
1077 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 1113 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
1078 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 1114 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
1079 1115
1080 // Read everything. 1116 // Read everything.
1081 num_bytes = 10u * sizeof(int32_t); 1117 num_bytes = 10u * sizeof(int32_t);
1082 memset(buffer, 0xab, sizeof(buffer)); 1118 memset(buffer, 0xab, sizeof(buffer));
1083 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(buffer, &num_bytes, true)); 1119 EXPECT_EQ(MOJO_RESULT_OK,
1120 dp->ConsumerReadData(UserPointer<void>(buffer),
1121 MakeUserPointer(&num_bytes), true));
1084 memset(expected_buffer, 0xab, sizeof(expected_buffer)); 1122 memset(expected_buffer, 0xab, sizeof(expected_buffer));
1085 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 1123 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
1086 Seq(300, 10, expected_buffer); 1124 Seq(300, 10, expected_buffer);
1087 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer))); 1125 EXPECT_EQ(0, memcmp(buffer, expected_buffer, sizeof(buffer)));
1088 1126
1089 // Note: All-or-none two-phase writes on a "may discard" data pipe are tested 1127 // Note: All-or-none two-phase writes on a "may discard" data pipe are tested
1090 // in LocalDataPipeTest.MayDiscard. 1128 // in LocalDataPipeTest.MayDiscard.
1091 1129
1092 dp->ProducerClose(); 1130 dp->ProducerClose();
1093 dp->ConsumerClose(); 1131 dp->ConsumerClose();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 read_ptr = NULL; 1192 read_ptr = NULL;
1155 EXPECT_EQ(MOJO_RESULT_OK, 1193 EXPECT_EQ(MOJO_RESULT_OK,
1156 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr), 1194 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
1157 MakeUserPointer(&num_bytes), true)); 1195 MakeUserPointer(&num_bytes), true));
1158 EXPECT_GE(num_bytes, 1u * sizeof(int32_t)); 1196 EXPECT_GE(num_bytes, 1u * sizeof(int32_t));
1159 EXPECT_EQ(0, static_cast<const int32_t*>(read_ptr)[0]); 1197 EXPECT_EQ(0, static_cast<const int32_t*>(read_ptr)[0]);
1160 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(1u * sizeof(int32_t))); 1198 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(1u * sizeof(int32_t)));
1161 1199
1162 // We should have four left, leaving room for six. 1200 // We should have four left, leaving room for six.
1163 num_bytes = 0u; 1201 num_bytes = 0u;
1164 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1202 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1165 EXPECT_EQ(4u * sizeof(int32_t), num_bytes); 1203 EXPECT_EQ(4u * sizeof(int32_t), num_bytes);
1166 1204
1167 // Assuming a tight circular buffer of the specified capacity, we can't do a 1205 // Assuming a tight circular buffer of the specified capacity, we can't do a
1168 // two-phase write of six now. 1206 // two-phase write of six now.
1169 num_bytes = 6u * sizeof(int32_t); 1207 num_bytes = 6u * sizeof(int32_t);
1170 write_ptr = NULL; 1208 write_ptr = NULL;
1171 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 1209 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
1172 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 1210 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
1173 MakeUserPointer(&num_bytes), true)); 1211 MakeUserPointer(&num_bytes), true));
1174 1212
1175 // Write six elements (simple), filling the buffer. 1213 // Write six elements (simple), filling the buffer.
1176 num_bytes = 6u * sizeof(int32_t); 1214 num_bytes = 6u * sizeof(int32_t);
1177 int32_t buffer[100]; 1215 int32_t buffer[100];
1178 Seq(100, 6, buffer); 1216 Seq(100, 6, buffer);
1179 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true)); 1217 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(buffer, &num_bytes, true));
1180 EXPECT_EQ(6u * sizeof(int32_t), num_bytes); 1218 EXPECT_EQ(6u * sizeof(int32_t), num_bytes);
1181 1219
1182 // We have ten. 1220 // We have ten.
1183 num_bytes = 0u; 1221 num_bytes = 0u;
1184 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1222 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1185 EXPECT_EQ(10u * sizeof(int32_t), num_bytes); 1223 EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
1186 1224
1187 // But a two-phase read of ten should fail. 1225 // But a two-phase read of ten should fail.
1188 num_bytes = 10u * sizeof(int32_t); 1226 num_bytes = 10u * sizeof(int32_t);
1189 read_ptr = NULL; 1227 read_ptr = NULL;
1190 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, 1228 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
1191 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr), 1229 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
1192 MakeUserPointer(&num_bytes), true)); 1230 MakeUserPointer(&num_bytes), true));
1193 1231
1194 // Close the producer. 1232 // Close the producer.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 // Write 20 bytes. 1287 // Write 20 bytes.
1250 uint32_t num_bytes = 20u; 1288 uint32_t num_bytes = 20u;
1251 EXPECT_EQ(MOJO_RESULT_OK, 1289 EXPECT_EQ(MOJO_RESULT_OK,
1252 dp->ProducerWriteData(&test_data[0], &num_bytes, false)); 1290 dp->ProducerWriteData(&test_data[0], &num_bytes, false));
1253 EXPECT_EQ(20u, num_bytes); 1291 EXPECT_EQ(20u, num_bytes);
1254 1292
1255 // Read 10 bytes. 1293 // Read 10 bytes.
1256 unsigned char read_buffer[1000] = { 0 }; 1294 unsigned char read_buffer[1000] = { 0 };
1257 num_bytes = 10u; 1295 num_bytes = 10u;
1258 EXPECT_EQ(MOJO_RESULT_OK, 1296 EXPECT_EQ(MOJO_RESULT_OK,
1259 dp->ConsumerReadData(read_buffer, &num_bytes, false)); 1297 dp->ConsumerReadData(UserPointer<void>(read_buffer),
1298 MakeUserPointer(&num_bytes), false));
1260 EXPECT_EQ(10u, num_bytes); 1299 EXPECT_EQ(10u, num_bytes);
1261 EXPECT_EQ(0, memcmp(read_buffer, &test_data[0], 10u)); 1300 EXPECT_EQ(0, memcmp(read_buffer, &test_data[0], 10u));
1262 1301
1263 // Check that a two-phase write can now only write (at most) 80 bytes. (This 1302 // Check that a two-phase write can now only write (at most) 80 bytes. (This
1264 // checks an implementation detail; this behavior is not guaranteed, but we 1303 // checks an implementation detail; this behavior is not guaranteed, but we
1265 // need it for this test.) 1304 // need it for this test.)
1266 void* write_buffer_ptr = NULL; 1305 void* write_buffer_ptr = NULL;
1267 num_bytes = 0u; 1306 num_bytes = 0u;
1268 EXPECT_EQ(MOJO_RESULT_OK, 1307 EXPECT_EQ(MOJO_RESULT_OK,
1269 dp->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr), 1308 dp->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
(...skipping 20 matching lines...) Expand all
1290 EXPECT_TRUE(read_buffer_ptr != NULL); 1329 EXPECT_TRUE(read_buffer_ptr != NULL);
1291 EXPECT_EQ(90u, num_bytes); 1330 EXPECT_EQ(90u, num_bytes);
1292 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u)); 1331 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u));
1293 1332
1294 // Read as much as possible (using |ConsumerReadData()|). We should read 100 1333 // Read as much as possible (using |ConsumerReadData()|). We should read 100
1295 // bytes. 1334 // bytes.
1296 num_bytes = 1335 num_bytes =
1297 static_cast<uint32_t>(arraysize(read_buffer) * sizeof(read_buffer[0])); 1336 static_cast<uint32_t>(arraysize(read_buffer) * sizeof(read_buffer[0]));
1298 memset(read_buffer, 0, num_bytes); 1337 memset(read_buffer, 0, num_bytes);
1299 EXPECT_EQ(MOJO_RESULT_OK, 1338 EXPECT_EQ(MOJO_RESULT_OK,
1300 dp->ConsumerReadData(read_buffer, &num_bytes, false)); 1339 dp->ConsumerReadData(UserPointer<void>(read_buffer),
1340 MakeUserPointer(&num_bytes), false));
1301 EXPECT_EQ(100u, num_bytes); 1341 EXPECT_EQ(100u, num_bytes);
1302 EXPECT_EQ(0, memcmp(read_buffer, &test_data[10], 100u)); 1342 EXPECT_EQ(0, memcmp(read_buffer, &test_data[10], 100u));
1303 1343
1304 dp->ProducerClose(); 1344 dp->ProducerClose();
1305 dp->ConsumerClose(); 1345 dp->ConsumerClose();
1306 } 1346 }
1307 1347
1308 // Tests the behavior of closing the producer or consumer with respect to 1348 // Tests the behavior of closing the producer or consumer with respect to
1309 // writes and reads (simple and two-phase). 1349 // writes and reads (simple and two-phase).
1310 TEST(LocalDataPipeTest, CloseWriteRead) { 1350 TEST(LocalDataPipeTest, CloseWriteRead) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 dp->ProducerWriteData(kTestData, &num_bytes, false)); 1496 dp->ProducerWriteData(kTestData, &num_bytes, false));
1457 EXPECT_EQ(kTestDataSize, num_bytes); 1497 EXPECT_EQ(kTestDataSize, num_bytes);
1458 1498
1459 // Close the producer. 1499 // Close the producer.
1460 dp->ProducerClose(); 1500 dp->ProducerClose();
1461 1501
1462 // Read that data. 1502 // Read that data.
1463 char buffer[1000]; 1503 char buffer[1000];
1464 num_bytes = static_cast<uint32_t>(sizeof(buffer)); 1504 num_bytes = static_cast<uint32_t>(sizeof(buffer));
1465 EXPECT_EQ(MOJO_RESULT_OK, 1505 EXPECT_EQ(MOJO_RESULT_OK,
1466 dp->ConsumerReadData(buffer, &num_bytes, false)); 1506 dp->ConsumerReadData(UserPointer<void>(buffer),
1507 MakeUserPointer(&num_bytes), false));
1467 EXPECT_EQ(kTestDataSize, num_bytes); 1508 EXPECT_EQ(kTestDataSize, num_bytes);
1468 EXPECT_EQ(0, memcmp(buffer, kTestData, kTestDataSize)); 1509 EXPECT_EQ(0, memcmp(buffer, kTestData, kTestDataSize));
1469 1510
1470 // A second read should fail. 1511 // A second read should fail.
1471 num_bytes = static_cast<uint32_t>(sizeof(buffer)); 1512 num_bytes = static_cast<uint32_t>(sizeof(buffer));
1472 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1513 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
1473 dp->ConsumerReadData(buffer, &num_bytes, false)); 1514 dp->ConsumerReadData(UserPointer<void>(buffer),
1515 MakeUserPointer(&num_bytes), false));
1474 1516
1475 // A two-phase read should also fail. 1517 // A two-phase read should also fail.
1476 const void* read_buffer_ptr = NULL; 1518 const void* read_buffer_ptr = NULL;
1477 num_bytes = 0u; 1519 num_bytes = 0u;
1478 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1520 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
1479 dp->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr), 1521 dp->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
1480 MakeUserPointer(&num_bytes), false)); 1522 MakeUserPointer(&num_bytes), false));
1481 1523
1482 // Ditto for discard. 1524 // Ditto for discard.
1483 num_bytes = 10u; 1525 num_bytes = 10u;
1484 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1526 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
1485 dp->ConsumerDiscardData(&num_bytes, false)); 1527 dp->ConsumerDiscardData(MakeUserPointer(&num_bytes), false));
1486 1528
1487 dp->ConsumerClose(); 1529 dp->ConsumerClose();
1488 } 1530 }
1489 } 1531 }
1490 1532
1491 TEST(LocalDataPipeTest, TwoPhaseMoreInvalidArguments) { 1533 TEST(LocalDataPipeTest, TwoPhaseMoreInvalidArguments) {
1492 const MojoCreateDataPipeOptions options = { 1534 const MojoCreateDataPipeOptions options = {
1493 kSizeOfOptions, // |struct_size|. 1535 kSizeOfOptions, // |struct_size|.
1494 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. 1536 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
1495 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. 1537 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|.
1496 10 * sizeof(int32_t) // |capacity_num_bytes|. 1538 10 * sizeof(int32_t) // |capacity_num_bytes|.
1497 }; 1539 };
1498 MojoCreateDataPipeOptions validated_options = { 0 }; 1540 MojoCreateDataPipeOptions validated_options = { 0 };
1499 EXPECT_EQ(MOJO_RESULT_OK, 1541 EXPECT_EQ(MOJO_RESULT_OK,
1500 DataPipe::ValidateCreateOptions(&options, &validated_options)); 1542 DataPipe::ValidateCreateOptions(&options, &validated_options));
1501 1543
1502 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 1544 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
1503 1545
1504 // No data. 1546 // No data.
1505 uint32_t num_bytes = 1000u; 1547 uint32_t num_bytes = 1000u;
1506 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1548 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1507 EXPECT_EQ(0u, num_bytes); 1549 EXPECT_EQ(0u, num_bytes);
1508 1550
1509 // Try "ending" a two-phase write when one isn't active. 1551 // Try "ending" a two-phase write when one isn't active.
1510 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1552 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
1511 dp->ProducerEndWriteData(1u * sizeof(int32_t))); 1553 dp->ProducerEndWriteData(1u * sizeof(int32_t)));
1512 1554
1513 // Still no data. 1555 // Still no data.
1514 num_bytes = 1000u; 1556 num_bytes = 1000u;
1515 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1557 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1516 EXPECT_EQ(0u, num_bytes); 1558 EXPECT_EQ(0u, num_bytes);
1517 1559
1518 // Try ending a two-phase write with an invalid amount (too much). 1560 // Try ending a two-phase write with an invalid amount (too much).
1519 num_bytes = 0u; 1561 num_bytes = 0u;
1520 void* write_ptr = NULL; 1562 void* write_ptr = NULL;
1521 EXPECT_EQ(MOJO_RESULT_OK, 1563 EXPECT_EQ(MOJO_RESULT_OK,
1522 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 1564 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
1523 MakeUserPointer(&num_bytes), false)); 1565 MakeUserPointer(&num_bytes), false));
1524 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 1566 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
1525 dp->ProducerEndWriteData( 1567 dp->ProducerEndWriteData(
1526 num_bytes + static_cast<uint32_t>(sizeof(int32_t)))); 1568 num_bytes + static_cast<uint32_t>(sizeof(int32_t))));
1527 1569
1528 // But the two-phase write still ended. 1570 // But the two-phase write still ended.
1529 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, dp->ProducerEndWriteData(0u)); 1571 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, dp->ProducerEndWriteData(0u));
1530 1572
1531 // Still no data. 1573 // Still no data.
1532 num_bytes = 1000u; 1574 num_bytes = 1000u;
1533 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1575 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1534 EXPECT_EQ(0u, num_bytes); 1576 EXPECT_EQ(0u, num_bytes);
1535 1577
1536 // Try ending a two-phase write with an invalid amount (not a multiple of the 1578 // Try ending a two-phase write with an invalid amount (not a multiple of the
1537 // element size). 1579 // element size).
1538 num_bytes = 0u; 1580 num_bytes = 0u;
1539 write_ptr = NULL; 1581 write_ptr = NULL;
1540 EXPECT_EQ(MOJO_RESULT_OK, 1582 EXPECT_EQ(MOJO_RESULT_OK,
1541 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 1583 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
1542 MakeUserPointer(&num_bytes), false)); 1584 MakeUserPointer(&num_bytes), false));
1543 EXPECT_GE(num_bytes, 1u); 1585 EXPECT_GE(num_bytes, 1u);
1544 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dp->ProducerEndWriteData(1u)); 1586 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dp->ProducerEndWriteData(1u));
1545 1587
1546 // But the two-phase write still ended. 1588 // But the two-phase write still ended.
1547 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, dp->ProducerEndWriteData(0u)); 1589 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, dp->ProducerEndWriteData(0u));
1548 1590
1549 // Still no data. 1591 // Still no data.
1550 num_bytes = 1000u; 1592 num_bytes = 1000u;
1551 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1593 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1552 EXPECT_EQ(0u, num_bytes); 1594 EXPECT_EQ(0u, num_bytes);
1553 1595
1554 // Now write some data, so we'll be able to try reading. 1596 // Now write some data, so we'll be able to try reading.
1555 int32_t element = 123; 1597 int32_t element = 123;
1556 num_bytes = 1u * sizeof(int32_t); 1598 num_bytes = 1u * sizeof(int32_t);
1557 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(&element, &num_bytes, false)); 1599 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(&element, &num_bytes, false));
1558 1600
1559 // One element available. 1601 // One element available.
1560 num_bytes = 0u; 1602 num_bytes = 0u;
1561 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1603 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1562 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1604 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1563 1605
1564 // Try "ending" a two-phase read when one isn't active. 1606 // Try "ending" a two-phase read when one isn't active.
1565 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 1607 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
1566 dp->ConsumerEndReadData(1u * sizeof(int32_t))); 1608 dp->ConsumerEndReadData(1u * sizeof(int32_t)));
1567 1609
1568 // Still one element available. 1610 // Still one element available.
1569 num_bytes = 0u; 1611 num_bytes = 0u;
1570 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1612 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1571 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1613 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1572 1614
1573 // Try ending a two-phase read with an invalid amount (too much). 1615 // Try ending a two-phase read with an invalid amount (too much).
1574 num_bytes = 0u; 1616 num_bytes = 0u;
1575 const void* read_ptr = NULL; 1617 const void* read_ptr = NULL;
1576 EXPECT_EQ(MOJO_RESULT_OK, 1618 EXPECT_EQ(MOJO_RESULT_OK,
1577 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr), 1619 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
1578 MakeUserPointer(&num_bytes), false)); 1620 MakeUserPointer(&num_bytes), false));
1579 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 1621 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
1580 dp->ConsumerEndReadData( 1622 dp->ConsumerEndReadData(
1581 num_bytes + static_cast<uint32_t>(sizeof(int32_t)))); 1623 num_bytes + static_cast<uint32_t>(sizeof(int32_t))));
1582 1624
1583 // Still one element available. 1625 // Still one element available.
1584 num_bytes = 0u; 1626 num_bytes = 0u;
1585 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1627 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1586 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1628 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1587 1629
1588 // Try ending a two-phase read with an invalid amount (not a multiple of the 1630 // Try ending a two-phase read with an invalid amount (not a multiple of the
1589 // element size). 1631 // element size).
1590 num_bytes = 0u; 1632 num_bytes = 0u;
1591 read_ptr = NULL; 1633 read_ptr = NULL;
1592 EXPECT_EQ(MOJO_RESULT_OK, 1634 EXPECT_EQ(MOJO_RESULT_OK,
1593 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr), 1635 dp->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
1594 MakeUserPointer(&num_bytes), false)); 1636 MakeUserPointer(&num_bytes), false));
1595 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1637 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1596 EXPECT_EQ(123, static_cast<const int32_t*>(read_ptr)[0]); 1638 EXPECT_EQ(123, static_cast<const int32_t*>(read_ptr)[0]);
1597 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dp->ConsumerEndReadData(1u)); 1639 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dp->ConsumerEndReadData(1u));
1598 1640
1599 // Still one element available. 1641 // Still one element available.
1600 num_bytes = 0u; 1642 num_bytes = 0u;
1601 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(&num_bytes)); 1643 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes)));
1602 EXPECT_EQ(1u * sizeof(int32_t), num_bytes); 1644 EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
1603 1645
1604 dp->ProducerClose(); 1646 dp->ProducerClose();
1605 dp->ConsumerClose(); 1647 dp->ConsumerClose();
1606 } 1648 }
1607 1649
1608 // Tests that even with "may discard", the data won't change under a two-phase 1650 // Tests that even with "may discard", the data won't change under a two-phase
1609 // read. 1651 // read.
1610 // TODO(vtl): crbug.com/348644: We currently don't pass this. (There are two 1652 // TODO(vtl): crbug.com/348644: We currently don't pass this. (There are two
1611 // related issues: First, we don't recognize that the data given to 1653 // related issues: First, we don't recognize that the data given to
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 // End reading. 1717 // End reading.
1676 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); 1718 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u));
1677 1719
1678 dp->ProducerClose(); 1720 dp->ProducerClose();
1679 dp->ConsumerClose(); 1721 dp->ConsumerClose();
1680 } 1722 }
1681 1723
1682 } // namespace 1724 } // namespace
1683 } // namespace system 1725 } // namespace system
1684 } // namespace mojo 1726 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/local_data_pipe.cc ('k') | mojo/system/memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698