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

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

Issue 414393002: Convert verification of options structs to use the new user pointer handling (see r285350). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: temporarily disable part of OptionsValidationTest.InvalidDeath Created 6 years, 4 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/dispatcher_unittest.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"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/system/dispatcher_unittest.cc ('k') | mojo/system/memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698