OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/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" |
11 #include "mojo/system/data_pipe.h" | 11 #include "mojo/system/data_pipe.h" |
12 #include "mojo/system/memory.h" | |
13 #include "mojo/system/waiter.h" | 12 #include "mojo/system/waiter.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
15 | 14 |
16 namespace mojo { | 15 namespace mojo { |
17 namespace system { | 16 namespace system { |
18 namespace { | 17 namespace { |
19 | 18 |
20 const uint32_t kSizeOfOptions = | 19 const uint32_t kSizeOfOptions = |
21 static_cast<uint32_t>(sizeof(MojoCreateDataPipeOptions)); | 20 static_cast<uint32_t>(sizeof(MojoCreateDataPipeOptions)); |
22 | 21 |
23 // Validate options. | 22 // Validate options. |
24 TEST(LocalDataPipeTest, Creation) { | 23 TEST(LocalDataPipeTest, Creation) { |
25 // Create using default options. | 24 // Create using default options. |
26 { | 25 { |
27 // Get default options. | 26 // Get default options. |
28 MojoCreateDataPipeOptions default_options = { 0 }; | 27 MojoCreateDataPipeOptions default_options = { 0 }; |
29 EXPECT_EQ(MOJO_RESULT_OK, | 28 EXPECT_EQ(MOJO_RESULT_OK, |
30 DataPipe::ValidateCreateOptions(NULL, &default_options)); | 29 DataPipe::ValidateCreateOptions(NullUserPointer(), |
| 30 &default_options)); |
31 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(default_options)); | 31 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(default_options)); |
32 dp->ProducerClose(); | 32 dp->ProducerClose(); |
33 dp->ConsumerClose(); | 33 dp->ConsumerClose(); |
34 } | 34 } |
35 | 35 |
36 // Create using non-default options. | 36 // Create using non-default options. |
37 { | 37 { |
38 const MojoCreateDataPipeOptions options = { | 38 const MojoCreateDataPipeOptions options = { |
39 kSizeOfOptions, // |struct_size|. | 39 kSizeOfOptions, // |struct_size|. |
40 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 40 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
41 1, // |element_num_bytes|. | 41 1, // |element_num_bytes|. |
42 1000 // |capacity_num_bytes|. | 42 1000 // |capacity_num_bytes|. |
43 }; | 43 }; |
44 MojoCreateDataPipeOptions validated_options = { 0 }; | 44 MojoCreateDataPipeOptions validated_options = { 0 }; |
45 EXPECT_EQ(MOJO_RESULT_OK, | 45 EXPECT_EQ(MOJO_RESULT_OK, |
46 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 46 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 47 &validated_options)); |
47 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 48 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
48 dp->ProducerClose(); | 49 dp->ProducerClose(); |
49 dp->ConsumerClose(); | 50 dp->ConsumerClose(); |
50 } | 51 } |
51 { | 52 { |
52 const MojoCreateDataPipeOptions options = { | 53 const MojoCreateDataPipeOptions options = { |
53 kSizeOfOptions, // |struct_size|. | 54 kSizeOfOptions, // |struct_size|. |
54 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 55 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
55 4, // |element_num_bytes|. | 56 4, // |element_num_bytes|. |
56 4000 // |capacity_num_bytes|. | 57 4000 // |capacity_num_bytes|. |
57 }; | 58 }; |
58 MojoCreateDataPipeOptions validated_options = { 0 }; | 59 MojoCreateDataPipeOptions validated_options = { 0 }; |
59 EXPECT_EQ(MOJO_RESULT_OK, | 60 EXPECT_EQ(MOJO_RESULT_OK, |
60 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 61 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 62 &validated_options)); |
61 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 63 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
62 dp->ProducerClose(); | 64 dp->ProducerClose(); |
63 dp->ConsumerClose(); | 65 dp->ConsumerClose(); |
64 } | 66 } |
65 { | 67 { |
66 const MojoCreateDataPipeOptions options = { | 68 const MojoCreateDataPipeOptions options = { |
67 kSizeOfOptions, // |struct_size|. | 69 kSizeOfOptions, // |struct_size|. |
68 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 70 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
69 7, // |element_num_bytes|. | 71 7, // |element_num_bytes|. |
70 7000000 // |capacity_num_bytes|. | 72 7000000 // |capacity_num_bytes|. |
71 }; | 73 }; |
72 MojoCreateDataPipeOptions validated_options = { 0 }; | 74 MojoCreateDataPipeOptions validated_options = { 0 }; |
73 EXPECT_EQ(MOJO_RESULT_OK, | 75 EXPECT_EQ(MOJO_RESULT_OK, |
74 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 76 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 77 &validated_options)); |
75 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 78 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
76 dp->ProducerClose(); | 79 dp->ProducerClose(); |
77 dp->ConsumerClose(); | 80 dp->ConsumerClose(); |
78 } | 81 } |
79 // Default capacity. | 82 // Default capacity. |
80 { | 83 { |
81 const MojoCreateDataPipeOptions options = { | 84 const MojoCreateDataPipeOptions options = { |
82 kSizeOfOptions, // |struct_size|. | 85 kSizeOfOptions, // |struct_size|. |
83 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 86 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
84 100, // |element_num_bytes|. | 87 100, // |element_num_bytes|. |
85 0 // |capacity_num_bytes|. | 88 0 // |capacity_num_bytes|. |
86 }; | 89 }; |
87 MojoCreateDataPipeOptions validated_options = { 0 }; | 90 MojoCreateDataPipeOptions validated_options = { 0 }; |
88 EXPECT_EQ(MOJO_RESULT_OK, | 91 EXPECT_EQ(MOJO_RESULT_OK, |
89 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 92 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 93 &validated_options)); |
90 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 94 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
91 dp->ProducerClose(); | 95 dp->ProducerClose(); |
92 dp->ConsumerClose(); | 96 dp->ConsumerClose(); |
93 } | 97 } |
94 } | 98 } |
95 | 99 |
96 TEST(LocalDataPipeTest, SimpleReadWrite) { | 100 TEST(LocalDataPipeTest, SimpleReadWrite) { |
97 const MojoCreateDataPipeOptions options = { | 101 const MojoCreateDataPipeOptions options = { |
98 kSizeOfOptions, // |struct_size|. | 102 kSizeOfOptions, // |struct_size|. |
99 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 103 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
100 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 104 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
101 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 105 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
102 }; | 106 }; |
103 MojoCreateDataPipeOptions validated_options = { 0 }; | 107 MojoCreateDataPipeOptions validated_options = { 0 }; |
104 EXPECT_EQ(MOJO_RESULT_OK, | 108 EXPECT_EQ(MOJO_RESULT_OK, |
105 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 109 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 110 &validated_options)); |
106 | 111 |
107 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 112 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
108 | 113 |
109 int32_t elements[10] = { 0 }; | 114 int32_t elements[10] = { 0 }; |
110 uint32_t num_bytes = 0; | 115 uint32_t num_bytes = 0; |
111 | 116 |
112 // Try reading; nothing there yet. | 117 // Try reading; nothing there yet. |
113 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0])); | 118 num_bytes = static_cast<uint32_t>(arraysize(elements) * sizeof(elements[0])); |
114 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 119 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
115 dp->ConsumerReadData(UserPointer<void>(elements), | 120 dp->ConsumerReadData(UserPointer<void>(elements), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 // are strict maximums. This is not guaranteed by the API. | 204 // are strict maximums. This is not guaranteed by the API. |
200 | 205 |
201 const MojoCreateDataPipeOptions options = { | 206 const MojoCreateDataPipeOptions options = { |
202 kSizeOfOptions, // |struct_size|. | 207 kSizeOfOptions, // |struct_size|. |
203 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 208 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
204 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 209 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
205 2 * sizeof(int32_t) // |capacity_num_bytes|. | 210 2 * sizeof(int32_t) // |capacity_num_bytes|. |
206 }; | 211 }; |
207 MojoCreateDataPipeOptions validated_options = { 0 }; | 212 MojoCreateDataPipeOptions validated_options = { 0 }; |
208 EXPECT_EQ(MOJO_RESULT_OK, | 213 EXPECT_EQ(MOJO_RESULT_OK, |
209 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 214 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 215 &validated_options)); |
210 | 216 |
211 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 217 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
212 Waiter waiter; | 218 Waiter waiter; |
213 uint32_t context = 0; | 219 uint32_t context = 0; |
214 | 220 |
215 // Never readable. | 221 // Never readable. |
216 waiter.Init(); | 222 waiter.Init(); |
217 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 223 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
218 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12)); | 224 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12)); |
219 | 225 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 | 331 |
326 TEST(LocalDataPipeTest, BasicConsumerWaiting) { | 332 TEST(LocalDataPipeTest, BasicConsumerWaiting) { |
327 const MojoCreateDataPipeOptions options = { | 333 const MojoCreateDataPipeOptions options = { |
328 kSizeOfOptions, // |struct_size|. | 334 kSizeOfOptions, // |struct_size|. |
329 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 335 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
330 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 336 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
331 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 337 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
332 }; | 338 }; |
333 MojoCreateDataPipeOptions validated_options = { 0 }; | 339 MojoCreateDataPipeOptions validated_options = { 0 }; |
334 EXPECT_EQ(MOJO_RESULT_OK, | 340 EXPECT_EQ(MOJO_RESULT_OK, |
335 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 341 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 342 &validated_options)); |
336 | 343 |
337 { | 344 { |
338 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 345 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
339 Waiter waiter; | 346 Waiter waiter; |
340 uint32_t context = 0; | 347 uint32_t context = 0; |
341 | 348 |
342 // Never writable. | 349 // Never writable. |
343 waiter.Init(); | 350 waiter.Init(); |
344 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 351 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
345 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12)); | 352 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12)); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 // Tests that data pipes aren't writable/readable during two-phase writes/reads. | 521 // Tests that data pipes aren't writable/readable during two-phase writes/reads. |
515 TEST(LocalDataPipeTest, BasicTwoPhaseWaiting) { | 522 TEST(LocalDataPipeTest, BasicTwoPhaseWaiting) { |
516 const MojoCreateDataPipeOptions options = { | 523 const MojoCreateDataPipeOptions options = { |
517 kSizeOfOptions, // |struct_size|. | 524 kSizeOfOptions, // |struct_size|. |
518 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 525 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
519 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 526 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
520 1000 * sizeof(int32_t) // |capacity_num_bytes|. | 527 1000 * sizeof(int32_t) // |capacity_num_bytes|. |
521 }; | 528 }; |
522 MojoCreateDataPipeOptions validated_options = { 0 }; | 529 MojoCreateDataPipeOptions validated_options = { 0 }; |
523 EXPECT_EQ(MOJO_RESULT_OK, | 530 EXPECT_EQ(MOJO_RESULT_OK, |
524 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 531 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 532 &validated_options)); |
525 | 533 |
526 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 534 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
527 Waiter waiter; | 535 Waiter waiter; |
528 | 536 |
529 // It should be writable. | 537 // It should be writable. |
530 waiter.Init(); | 538 waiter.Init(); |
531 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 539 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
532 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0)); | 540 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0)); |
533 | 541 |
534 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t)); | 542 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t)); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 // Test that a "may discard" data pipe is writable even when it's full. | 630 // Test that a "may discard" data pipe is writable even when it's full. |
623 TEST(LocalDataPipeTest, BasicMayDiscardWaiting) { | 631 TEST(LocalDataPipeTest, BasicMayDiscardWaiting) { |
624 const MojoCreateDataPipeOptions options = { | 632 const MojoCreateDataPipeOptions options = { |
625 kSizeOfOptions, // |struct_size|. | 633 kSizeOfOptions, // |struct_size|. |
626 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 634 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
627 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 635 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
628 1 * sizeof(int32_t) // |capacity_num_bytes|. | 636 1 * sizeof(int32_t) // |capacity_num_bytes|. |
629 }; | 637 }; |
630 MojoCreateDataPipeOptions validated_options = { 0 }; | 638 MojoCreateDataPipeOptions validated_options = { 0 }; |
631 EXPECT_EQ(MOJO_RESULT_OK, | 639 EXPECT_EQ(MOJO_RESULT_OK, |
632 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 640 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 641 &validated_options)); |
633 | 642 |
634 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 643 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
635 Waiter waiter; | 644 Waiter waiter; |
636 | 645 |
637 // Writable. | 646 // Writable. |
638 waiter.Init(); | 647 waiter.Init(); |
639 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 648 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
640 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0)); | 649 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0)); |
641 | 650 |
642 // Not readable. | 651 // Not readable. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 | 722 |
714 TEST(LocalDataPipeTest, MayDiscard) { | 723 TEST(LocalDataPipeTest, MayDiscard) { |
715 const MojoCreateDataPipeOptions options = { | 724 const MojoCreateDataPipeOptions options = { |
716 kSizeOfOptions, // |struct_size|. | 725 kSizeOfOptions, // |struct_size|. |
717 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 726 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
718 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 727 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
719 10 * sizeof(int32_t) // |capacity_num_bytes|. | 728 10 * sizeof(int32_t) // |capacity_num_bytes|. |
720 }; | 729 }; |
721 MojoCreateDataPipeOptions validated_options = { 0 }; | 730 MojoCreateDataPipeOptions validated_options = { 0 }; |
722 EXPECT_EQ(MOJO_RESULT_OK, | 731 EXPECT_EQ(MOJO_RESULT_OK, |
723 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 732 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 733 &validated_options)); |
724 | 734 |
725 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 735 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
726 | 736 |
727 int32_t buffer[100] = { 0 }; | 737 int32_t buffer[100] = { 0 }; |
728 uint32_t num_bytes = 0; | 738 uint32_t num_bytes = 0; |
729 | 739 |
730 num_bytes = 20u * sizeof(int32_t); | 740 num_bytes = 20u * sizeof(int32_t); |
731 Seq(0, arraysize(buffer), buffer); | 741 Seq(0, arraysize(buffer), buffer); |
732 // Try writing more than capacity. (This test relies on the implementation | 742 // Try writing more than capacity. (This test relies on the implementation |
733 // enforcing the capacity strictly.) | 743 // enforcing the capacity strictly.) |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 | 916 |
907 TEST(LocalDataPipeTest, AllOrNone) { | 917 TEST(LocalDataPipeTest, AllOrNone) { |
908 const MojoCreateDataPipeOptions options = { | 918 const MojoCreateDataPipeOptions options = { |
909 kSizeOfOptions, // |struct_size|. | 919 kSizeOfOptions, // |struct_size|. |
910 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 920 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
911 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 921 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
912 10 * sizeof(int32_t) // |capacity_num_bytes|. | 922 10 * sizeof(int32_t) // |capacity_num_bytes|. |
913 }; | 923 }; |
914 MojoCreateDataPipeOptions validated_options = { 0 }; | 924 MojoCreateDataPipeOptions validated_options = { 0 }; |
915 EXPECT_EQ(MOJO_RESULT_OK, | 925 EXPECT_EQ(MOJO_RESULT_OK, |
916 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 926 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 927 &validated_options)); |
917 | 928 |
918 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 929 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
919 | 930 |
920 // Try writing way too much. | 931 // Try writing way too much. |
921 uint32_t num_bytes = 20u * sizeof(int32_t); | 932 uint32_t num_bytes = 20u * sizeof(int32_t); |
922 int32_t buffer[100]; | 933 int32_t buffer[100]; |
923 Seq(0, arraysize(buffer), buffer); | 934 Seq(0, arraysize(buffer), buffer); |
924 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 935 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
925 dp->ProducerWriteData(UserPointer<const void>(buffer), | 936 dp->ProducerWriteData(UserPointer<const void>(buffer), |
926 MakeUserPointer(&num_bytes), true)); | 937 MakeUserPointer(&num_bytes), true)); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1066 | 1077 |
1067 TEST(LocalDataPipeTest, AllOrNoneMayDiscard) { | 1078 TEST(LocalDataPipeTest, AllOrNoneMayDiscard) { |
1068 const MojoCreateDataPipeOptions options = { | 1079 const MojoCreateDataPipeOptions options = { |
1069 kSizeOfOptions, // |struct_size|. | 1080 kSizeOfOptions, // |struct_size|. |
1070 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 1081 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
1071 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1082 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
1072 10 * sizeof(int32_t) // |capacity_num_bytes|. | 1083 10 * sizeof(int32_t) // |capacity_num_bytes|. |
1073 }; | 1084 }; |
1074 MojoCreateDataPipeOptions validated_options = { 0 }; | 1085 MojoCreateDataPipeOptions validated_options = { 0 }; |
1075 EXPECT_EQ(MOJO_RESULT_OK, | 1086 EXPECT_EQ(MOJO_RESULT_OK, |
1076 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1087 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1088 &validated_options)); |
1077 | 1089 |
1078 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1090 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1079 | 1091 |
1080 // Try writing way too much. | 1092 // Try writing way too much. |
1081 uint32_t num_bytes = 20u * sizeof(int32_t); | 1093 uint32_t num_bytes = 20u * sizeof(int32_t); |
1082 int32_t buffer[100]; | 1094 int32_t buffer[100]; |
1083 Seq(0, arraysize(buffer), buffer); | 1095 Seq(0, arraysize(buffer), buffer); |
1084 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1096 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1085 dp->ProducerWriteData(UserPointer<const void>(buffer), | 1097 dp->ProducerWriteData(UserPointer<const void>(buffer), |
1086 MakeUserPointer(&num_bytes), true)); | 1098 MakeUserPointer(&num_bytes), true)); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1165 | 1177 |
1166 TEST(LocalDataPipeTest, TwoPhaseAllOrNone) { | 1178 TEST(LocalDataPipeTest, TwoPhaseAllOrNone) { |
1167 const MojoCreateDataPipeOptions options = { | 1179 const MojoCreateDataPipeOptions options = { |
1168 kSizeOfOptions, // |struct_size|. | 1180 kSizeOfOptions, // |struct_size|. |
1169 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1181 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
1170 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1182 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
1171 10 * sizeof(int32_t) // |capacity_num_bytes|. | 1183 10 * sizeof(int32_t) // |capacity_num_bytes|. |
1172 }; | 1184 }; |
1173 MojoCreateDataPipeOptions validated_options = { 0 }; | 1185 MojoCreateDataPipeOptions validated_options = { 0 }; |
1174 EXPECT_EQ(MOJO_RESULT_OK, | 1186 EXPECT_EQ(MOJO_RESULT_OK, |
1175 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1187 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1188 &validated_options)); |
1176 | 1189 |
1177 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1190 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1178 | 1191 |
1179 // Try writing way too much (two-phase). | 1192 // Try writing way too much (two-phase). |
1180 uint32_t num_bytes = 20u * sizeof(int32_t); | 1193 uint32_t num_bytes = 20u * sizeof(int32_t); |
1181 void* write_ptr = NULL; | 1194 void* write_ptr = NULL; |
1182 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, | 1195 EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, |
1183 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), | 1196 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), |
1184 MakeUserPointer(&num_bytes), true)); | 1197 MakeUserPointer(&num_bytes), true)); |
1185 | 1198 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 test_data[i] = static_cast<unsigned char>(i); | 1317 test_data[i] = static_cast<unsigned char>(i); |
1305 | 1318 |
1306 const MojoCreateDataPipeOptions options = { | 1319 const MojoCreateDataPipeOptions options = { |
1307 kSizeOfOptions, // |struct_size|. | 1320 kSizeOfOptions, // |struct_size|. |
1308 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1321 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
1309 1u, // |element_num_bytes|. | 1322 1u, // |element_num_bytes|. |
1310 100u // |capacity_num_bytes|. | 1323 100u // |capacity_num_bytes|. |
1311 }; | 1324 }; |
1312 MojoCreateDataPipeOptions validated_options = { 0 }; | 1325 MojoCreateDataPipeOptions validated_options = { 0 }; |
1313 EXPECT_EQ(MOJO_RESULT_OK, | 1326 EXPECT_EQ(MOJO_RESULT_OK, |
1314 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1327 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1328 &validated_options)); |
1315 // This test won't be valid if |ValidateCreateOptions()| decides to give the | 1329 // This test won't be valid if |ValidateCreateOptions()| decides to give the |
1316 // pipe more space. | 1330 // pipe more space. |
1317 ASSERT_EQ(100u, validated_options.capacity_num_bytes); | 1331 ASSERT_EQ(100u, validated_options.capacity_num_bytes); |
1318 | 1332 |
1319 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1333 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1320 | 1334 |
1321 // Write 20 bytes. | 1335 // Write 20 bytes. |
1322 uint32_t num_bytes = 20u; | 1336 uint32_t num_bytes = 20u; |
1323 EXPECT_EQ(MOJO_RESULT_OK, | 1337 EXPECT_EQ(MOJO_RESULT_OK, |
1324 dp->ProducerWriteData(UserPointer<const void>(&test_data[0]), | 1338 dp->ProducerWriteData(UserPointer<const void>(&test_data[0]), |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1388 const uint32_t kTestDataSize = static_cast<uint32_t>(sizeof(kTestData)); | 1402 const uint32_t kTestDataSize = static_cast<uint32_t>(sizeof(kTestData)); |
1389 | 1403 |
1390 const MojoCreateDataPipeOptions options = { | 1404 const MojoCreateDataPipeOptions options = { |
1391 kSizeOfOptions, // |struct_size|. | 1405 kSizeOfOptions, // |struct_size|. |
1392 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1406 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
1393 1u, // |element_num_bytes|. | 1407 1u, // |element_num_bytes|. |
1394 1000u // |capacity_num_bytes|. | 1408 1000u // |capacity_num_bytes|. |
1395 }; | 1409 }; |
1396 MojoCreateDataPipeOptions validated_options = { 0 }; | 1410 MojoCreateDataPipeOptions validated_options = { 0 }; |
1397 EXPECT_EQ(MOJO_RESULT_OK, | 1411 EXPECT_EQ(MOJO_RESULT_OK, |
1398 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1412 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1413 &validated_options)); |
1399 | 1414 |
1400 // Close producer first, then consumer. | 1415 // Close producer first, then consumer. |
1401 { | 1416 { |
1402 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1417 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1403 | 1418 |
1404 // Write some data, so we'll have something to read. | 1419 // Write some data, so we'll have something to read. |
1405 uint32_t num_bytes = kTestDataSize; | 1420 uint32_t num_bytes = kTestDataSize; |
1406 EXPECT_EQ(MOJO_RESULT_OK, | 1421 EXPECT_EQ(MOJO_RESULT_OK, |
1407 dp->ProducerWriteData(UserPointer<const void>(kTestData), | 1422 dp->ProducerWriteData(UserPointer<const void>(kTestData), |
1408 MakeUserPointer(&num_bytes), false)); | 1423 MakeUserPointer(&num_bytes), false)); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1573 | 1588 |
1574 TEST(LocalDataPipeTest, TwoPhaseMoreInvalidArguments) { | 1589 TEST(LocalDataPipeTest, TwoPhaseMoreInvalidArguments) { |
1575 const MojoCreateDataPipeOptions options = { | 1590 const MojoCreateDataPipeOptions options = { |
1576 kSizeOfOptions, // |struct_size|. | 1591 kSizeOfOptions, // |struct_size|. |
1577 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. | 1592 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. |
1578 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. | 1593 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. |
1579 10 * sizeof(int32_t) // |capacity_num_bytes|. | 1594 10 * sizeof(int32_t) // |capacity_num_bytes|. |
1580 }; | 1595 }; |
1581 MojoCreateDataPipeOptions validated_options = { 0 }; | 1596 MojoCreateDataPipeOptions validated_options = { 0 }; |
1582 EXPECT_EQ(MOJO_RESULT_OK, | 1597 EXPECT_EQ(MOJO_RESULT_OK, |
1583 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1598 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1599 &validated_options)); |
1584 | 1600 |
1585 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1601 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1586 | 1602 |
1587 // No data. | 1603 // No data. |
1588 uint32_t num_bytes = 1000u; | 1604 uint32_t num_bytes = 1000u; |
1589 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); | 1605 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerQueryData(MakeUserPointer(&num_bytes))); |
1590 EXPECT_EQ(0u, num_bytes); | 1606 EXPECT_EQ(0u, num_bytes); |
1591 | 1607 |
1592 // Try "ending" a two-phase write when one isn't active. | 1608 // Try "ending" a two-phase write when one isn't active. |
1593 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 1609 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1699 // |ProducerWriteData()| then changes the data underneath the two-phase read.) | 1715 // |ProducerWriteData()| then changes the data underneath the two-phase read.) |
1700 TEST(LocalDataPipeTest, DISABLED_MayDiscardTwoPhaseConsistent) { | 1716 TEST(LocalDataPipeTest, DISABLED_MayDiscardTwoPhaseConsistent) { |
1701 const MojoCreateDataPipeOptions options = { | 1717 const MojoCreateDataPipeOptions options = { |
1702 kSizeOfOptions, // |struct_size|. | 1718 kSizeOfOptions, // |struct_size|. |
1703 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. | 1719 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. |
1704 1, // |element_num_bytes|. | 1720 1, // |element_num_bytes|. |
1705 2 // |capacity_num_bytes|. | 1721 2 // |capacity_num_bytes|. |
1706 }; | 1722 }; |
1707 MojoCreateDataPipeOptions validated_options = { 0 }; | 1723 MojoCreateDataPipeOptions validated_options = { 0 }; |
1708 EXPECT_EQ(MOJO_RESULT_OK, | 1724 EXPECT_EQ(MOJO_RESULT_OK, |
1709 DataPipe::ValidateCreateOptions(&options, &validated_options)); | 1725 DataPipe::ValidateCreateOptions(MakeUserPointer(&options), |
| 1726 &validated_options)); |
1710 | 1727 |
1711 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); | 1728 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); |
1712 | 1729 |
1713 // Write some elements. | 1730 // Write some elements. |
1714 char elements[2] = { 'a', 'b' }; | 1731 char elements[2] = { 'a', 'b' }; |
1715 uint32_t num_bytes = 2u; | 1732 uint32_t num_bytes = 2u; |
1716 EXPECT_EQ(MOJO_RESULT_OK, | 1733 EXPECT_EQ(MOJO_RESULT_OK, |
1717 dp->ProducerWriteData(UserPointer<const void>(elements), | 1734 dp->ProducerWriteData(UserPointer<const void>(elements), |
1718 MakeUserPointer(&num_bytes), false)); | 1735 MakeUserPointer(&num_bytes), false)); |
1719 EXPECT_EQ(2u, num_bytes); | 1736 EXPECT_EQ(2u, num_bytes); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1766 // End reading. | 1783 // End reading. |
1767 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); | 1784 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); |
1768 | 1785 |
1769 dp->ProducerClose(); | 1786 dp->ProducerClose(); |
1770 dp->ConsumerClose(); | 1787 dp->ConsumerClose(); |
1771 } | 1788 } |
1772 | 1789 |
1773 } // namespace | 1790 } // namespace |
1774 } // namespace system | 1791 } // namespace system |
1775 } // namespace mojo | 1792 } // namespace mojo |
OLD | NEW |