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

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

Issue 475223002: Mojo: Add embedder::PlatformSupport and a simple implementation (and a bit of plumbing). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/shared_buffer_dispatcher.h" 5 #include "mojo/system/shared_buffer_dispatcher.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "mojo/embedder/platform_shared_buffer.h" 11 #include "mojo/embedder/platform_shared_buffer.h"
12 #include "mojo/embedder/simple_platform_support.h"
12 #include "mojo/system/dispatcher.h" 13 #include "mojo/system/dispatcher.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 namespace mojo { 16 namespace mojo {
16 namespace system { 17 namespace system {
17 namespace { 18 namespace {
18 19
19 // NOTE(vtl): There's currently not much to test for in 20 // NOTE(vtl): There's currently not much to test for in
20 // |SharedBufferDispatcher::ValidateCreateOptions()|, but the tests should be 21 // |SharedBufferDispatcher::ValidateCreateOptions()|, but the tests should be
21 // expanded if/when options are added, so I've kept the general form of the 22 // expanded if/when options are added, so I've kept the general form of the
(...skipping 10 matching lines...) Expand all
32 // Nothing to check for flags. 33 // Nothing to check for flags.
33 34
34 MojoCreateSharedBufferOptions revalidated_options = {}; 35 MojoCreateSharedBufferOptions revalidated_options = {};
35 EXPECT_EQ(MOJO_RESULT_OK, 36 EXPECT_EQ(MOJO_RESULT_OK,
36 SharedBufferDispatcher::ValidateCreateOptions( 37 SharedBufferDispatcher::ValidateCreateOptions(
37 MakeUserPointer(&validated_options), &revalidated_options)); 38 MakeUserPointer(&validated_options), &revalidated_options));
38 EXPECT_EQ(validated_options.struct_size, revalidated_options.struct_size); 39 EXPECT_EQ(validated_options.struct_size, revalidated_options.struct_size);
39 EXPECT_EQ(validated_options.flags, revalidated_options.flags); 40 EXPECT_EQ(validated_options.flags, revalidated_options.flags);
40 } 41 }
41 42
43 class SharedBufferDispatcherTest : public testing::Test {
44 public:
45 SharedBufferDispatcherTest() {}
46 virtual ~SharedBufferDispatcherTest() {}
47
48 embedder::PlatformSupport* platform_support() { return &platform_support_; }
49
50 private:
51 embedder::SimplePlatformSupport platform_support_;
52
53 DISALLOW_COPY_AND_ASSIGN(SharedBufferDispatcherTest);
54 };
55
42 // Tests valid inputs to |ValidateCreateOptions()|. 56 // Tests valid inputs to |ValidateCreateOptions()|.
43 TEST(SharedBufferDispatcherTest, ValidateCreateOptionsValid) { 57 TEST_F(SharedBufferDispatcherTest, ValidateCreateOptionsValid) {
44 // Default options. 58 // Default options.
45 { 59 {
46 MojoCreateSharedBufferOptions validated_options = {}; 60 MojoCreateSharedBufferOptions validated_options = {};
47 EXPECT_EQ(MOJO_RESULT_OK, 61 EXPECT_EQ(MOJO_RESULT_OK,
48 SharedBufferDispatcher::ValidateCreateOptions( 62 SharedBufferDispatcher::ValidateCreateOptions(
49 NullUserPointer(), &validated_options)); 63 NullUserPointer(), &validated_options));
50 RevalidateCreateOptions(validated_options); 64 RevalidateCreateOptions(validated_options);
51 } 65 }
52 66
53 // Different flags. 67 // Different flags.
(...skipping 12 matching lines...) Expand all
66 EXPECT_EQ(MOJO_RESULT_OK, 80 EXPECT_EQ(MOJO_RESULT_OK,
67 SharedBufferDispatcher::ValidateCreateOptions( 81 SharedBufferDispatcher::ValidateCreateOptions(
68 MakeUserPointer(&options), &validated_options)) 82 MakeUserPointer(&options), &validated_options))
69 << capacity; 83 << capacity;
70 RevalidateCreateOptions(validated_options); 84 RevalidateCreateOptions(validated_options);
71 EXPECT_EQ(options.flags, validated_options.flags); 85 EXPECT_EQ(options.flags, validated_options.flags);
72 } 86 }
73 } 87 }
74 } 88 }
75 89
76 TEST(SharedBufferDispatcherTest, ValidateCreateOptionsInvalid) { 90 TEST_F(SharedBufferDispatcherTest, ValidateCreateOptionsInvalid) {
77 // Invalid |struct_size|. 91 // Invalid |struct_size|.
78 { 92 {
79 MojoCreateSharedBufferOptions options = { 93 MojoCreateSharedBufferOptions options = {
80 1, // |struct_size|. 94 1, // |struct_size|.
81 MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE // |flags|. 95 MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE // |flags|.
82 }; 96 };
83 MojoCreateSharedBufferOptions unused; 97 MojoCreateSharedBufferOptions unused;
84 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 98 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
85 SharedBufferDispatcher::ValidateCreateOptions( 99 SharedBufferDispatcher::ValidateCreateOptions(
86 MakeUserPointer(&options), &unused)); 100 MakeUserPointer(&options), &unused));
87 } 101 }
88 102
89 // Unknown |flags|. 103 // Unknown |flags|.
90 { 104 {
91 MojoCreateSharedBufferOptions options = { 105 MojoCreateSharedBufferOptions options = {
92 kSizeOfCreateOptions, // |struct_size|. 106 kSizeOfCreateOptions, // |struct_size|.
93 ~0u // |flags|. 107 ~0u // |flags|.
94 }; 108 };
95 MojoCreateSharedBufferOptions unused; 109 MojoCreateSharedBufferOptions unused;
96 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED, 110 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED,
97 SharedBufferDispatcher::ValidateCreateOptions( 111 SharedBufferDispatcher::ValidateCreateOptions(
98 MakeUserPointer(&options), &unused)); 112 MakeUserPointer(&options), &unused));
99 } 113 }
100 } 114 }
101 115
102 TEST(SharedBufferDispatcherTest, CreateAndMapBuffer) { 116 TEST_F(SharedBufferDispatcherTest, CreateAndMapBuffer) {
103 scoped_refptr<SharedBufferDispatcher> dispatcher; 117 scoped_refptr<SharedBufferDispatcher> dispatcher;
104 EXPECT_EQ( 118 EXPECT_EQ(MOJO_RESULT_OK,
105 MOJO_RESULT_OK, 119 SharedBufferDispatcher::Create(
106 SharedBufferDispatcher::Create( 120 platform_support(),
107 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); 121 SharedBufferDispatcher::kDefaultCreateOptions,
122 100,
123 &dispatcher));
108 ASSERT_TRUE(dispatcher); 124 ASSERT_TRUE(dispatcher);
109 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher->GetType()); 125 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher->GetType());
110 126
111 // Make a couple of mappings. 127 // Make a couple of mappings.
112 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; 128 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1;
113 EXPECT_EQ( 129 EXPECT_EQ(
114 MOJO_RESULT_OK, 130 MOJO_RESULT_OK,
115 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); 131 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1));
116 ASSERT_TRUE(mapping1); 132 ASSERT_TRUE(mapping1);
117 ASSERT_TRUE(mapping1->GetBase()); 133 ASSERT_TRUE(mapping1->GetBase());
(...skipping 11 matching lines...) Expand all
129 EXPECT_EQ('x', static_cast<char*>(mapping2->GetBase())[0]); 145 EXPECT_EQ('x', static_cast<char*>(mapping2->GetBase())[0]);
130 146
131 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 147 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
132 148
133 // Check that we can still read/write to mappings after the dispatcher has 149 // Check that we can still read/write to mappings after the dispatcher has
134 // gone away. 150 // gone away.
135 static_cast<char*>(mapping2->GetBase())[1] = 'y'; 151 static_cast<char*>(mapping2->GetBase())[1] = 'y';
136 EXPECT_EQ('y', static_cast<char*>(mapping1->GetBase())[51]); 152 EXPECT_EQ('y', static_cast<char*>(mapping1->GetBase())[51]);
137 } 153 }
138 154
139 TEST(SharedBufferDispatcher, DuplicateBufferHandle) { 155 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandle) {
140 scoped_refptr<SharedBufferDispatcher> dispatcher1; 156 scoped_refptr<SharedBufferDispatcher> dispatcher1;
141 EXPECT_EQ( 157 EXPECT_EQ(MOJO_RESULT_OK,
142 MOJO_RESULT_OK, 158 SharedBufferDispatcher::Create(
143 SharedBufferDispatcher::Create( 159 platform_support(),
144 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); 160 SharedBufferDispatcher::kDefaultCreateOptions,
161 100,
162 &dispatcher1));
145 163
146 // Map and write something. 164 // Map and write something.
147 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping; 165 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping;
148 EXPECT_EQ( 166 EXPECT_EQ(
149 MOJO_RESULT_OK, 167 MOJO_RESULT_OK,
150 dispatcher1->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 168 dispatcher1->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
151 static_cast<char*>(mapping->GetBase())[0] = 'x'; 169 static_cast<char*>(mapping->GetBase())[0] = 'x';
152 mapping.reset(); 170 mapping.reset();
153 171
154 // Duplicate |dispatcher1| and then close it. 172 // Duplicate |dispatcher1| and then close it.
155 scoped_refptr<Dispatcher> dispatcher2; 173 scoped_refptr<Dispatcher> dispatcher2;
156 EXPECT_EQ( 174 EXPECT_EQ(
157 MOJO_RESULT_OK, 175 MOJO_RESULT_OK,
158 dispatcher1->DuplicateBufferHandle(NullUserPointer(), &dispatcher2)); 176 dispatcher1->DuplicateBufferHandle(NullUserPointer(), &dispatcher2));
159 ASSERT_TRUE(dispatcher2); 177 ASSERT_TRUE(dispatcher2);
160 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType()); 178 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType());
161 179
162 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 180 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
163 181
164 // Map |dispatcher2| and read something. 182 // Map |dispatcher2| and read something.
165 EXPECT_EQ( 183 EXPECT_EQ(
166 MOJO_RESULT_OK, 184 MOJO_RESULT_OK,
167 dispatcher2->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 185 dispatcher2->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
168 EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]); 186 EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]);
169 187
170 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); 188 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close());
171 } 189 }
172 190
173 TEST(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) { 191 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) {
174 scoped_refptr<SharedBufferDispatcher> dispatcher1; 192 scoped_refptr<SharedBufferDispatcher> dispatcher1;
175 EXPECT_EQ( 193 EXPECT_EQ(MOJO_RESULT_OK,
176 MOJO_RESULT_OK, 194 SharedBufferDispatcher::Create(
177 SharedBufferDispatcher::Create( 195 platform_support(),
178 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); 196 SharedBufferDispatcher::kDefaultCreateOptions,
197 100,
198 &dispatcher1));
179 199
180 MojoDuplicateBufferHandleOptions options[] = { 200 MojoDuplicateBufferHandleOptions options[] = {
181 {sizeof(MojoDuplicateBufferHandleOptions), 201 {sizeof(MojoDuplicateBufferHandleOptions),
182 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE}, 202 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE},
183 {sizeof(MojoDuplicateBufferHandleOptionsFlags), ~0u}}; 203 {sizeof(MojoDuplicateBufferHandleOptionsFlags), ~0u}};
184 for (size_t i = 0; i < arraysize(options); i++) { 204 for (size_t i = 0; i < arraysize(options); i++) {
185 scoped_refptr<Dispatcher> dispatcher2; 205 scoped_refptr<Dispatcher> dispatcher2;
186 EXPECT_EQ(MOJO_RESULT_OK, 206 EXPECT_EQ(MOJO_RESULT_OK,
187 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options[i]), 207 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options[i]),
188 &dispatcher2)); 208 &dispatcher2));
189 ASSERT_TRUE(dispatcher2); 209 ASSERT_TRUE(dispatcher2);
190 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType()); 210 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType());
191 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); 211 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close());
192 } 212 }
193 213
194 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 214 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
195 } 215 }
196 216
197 TEST(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsInvalid) { 217 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsInvalid) {
198 scoped_refptr<SharedBufferDispatcher> dispatcher1; 218 scoped_refptr<SharedBufferDispatcher> dispatcher1;
199 EXPECT_EQ( 219 EXPECT_EQ(MOJO_RESULT_OK,
200 MOJO_RESULT_OK, 220 SharedBufferDispatcher::Create(
201 SharedBufferDispatcher::Create( 221 platform_support(),
202 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); 222 SharedBufferDispatcher::kDefaultCreateOptions,
223 100,
224 &dispatcher1));
203 225
204 // Invalid |struct_size|. 226 // Invalid |struct_size|.
205 { 227 {
206 MojoDuplicateBufferHandleOptions options = { 228 MojoDuplicateBufferHandleOptions options = {
207 1u, MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE}; 229 1u, MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE};
208 scoped_refptr<Dispatcher> dispatcher2; 230 scoped_refptr<Dispatcher> dispatcher2;
209 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 231 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
210 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options), 232 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options),
211 &dispatcher2)); 233 &dispatcher2));
212 EXPECT_FALSE(dispatcher2); 234 EXPECT_FALSE(dispatcher2);
213 } 235 }
214 236
215 // Unknown |flags|. 237 // Unknown |flags|.
216 { 238 {
217 MojoDuplicateBufferHandleOptions options = { 239 MojoDuplicateBufferHandleOptions options = {
218 sizeof(MojoDuplicateBufferHandleOptions), ~0u}; 240 sizeof(MojoDuplicateBufferHandleOptions), ~0u};
219 scoped_refptr<Dispatcher> dispatcher2; 241 scoped_refptr<Dispatcher> dispatcher2;
220 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED, 242 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED,
221 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options), 243 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options),
222 &dispatcher2)); 244 &dispatcher2));
223 EXPECT_FALSE(dispatcher2); 245 EXPECT_FALSE(dispatcher2);
224 } 246 }
225 247
226 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 248 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
227 } 249 }
228 250
229 TEST(SharedBufferDispatcherTest, CreateInvalidNumBytes) { 251 TEST_F(SharedBufferDispatcherTest, CreateInvalidNumBytes) {
230 // Size too big. 252 // Size too big.
231 scoped_refptr<SharedBufferDispatcher> dispatcher; 253 scoped_refptr<SharedBufferDispatcher> dispatcher;
232 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 254 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
233 SharedBufferDispatcher::Create( 255 SharedBufferDispatcher::Create(
256 platform_support(),
234 SharedBufferDispatcher::kDefaultCreateOptions, 257 SharedBufferDispatcher::kDefaultCreateOptions,
235 std::numeric_limits<uint64_t>::max(), 258 std::numeric_limits<uint64_t>::max(),
236 &dispatcher)); 259 &dispatcher));
237 EXPECT_FALSE(dispatcher); 260 EXPECT_FALSE(dispatcher);
238 261
239 // Zero size. 262 // Zero size.
240 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 263 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
241 SharedBufferDispatcher::Create( 264 SharedBufferDispatcher::Create(
242 SharedBufferDispatcher::kDefaultCreateOptions, 0, &dispatcher)); 265 platform_support(),
266 SharedBufferDispatcher::kDefaultCreateOptions,
267 0,
268 &dispatcher));
243 EXPECT_FALSE(dispatcher); 269 EXPECT_FALSE(dispatcher);
244 } 270 }
245 271
246 TEST(SharedBufferDispatcherTest, MapBufferInvalidArguments) { 272 TEST_F(SharedBufferDispatcherTest, MapBufferInvalidArguments) {
247 scoped_refptr<SharedBufferDispatcher> dispatcher; 273 scoped_refptr<SharedBufferDispatcher> dispatcher;
248 EXPECT_EQ( 274 EXPECT_EQ(MOJO_RESULT_OK,
249 MOJO_RESULT_OK, 275 SharedBufferDispatcher::Create(
250 SharedBufferDispatcher::Create( 276 platform_support(),
251 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); 277 SharedBufferDispatcher::kDefaultCreateOptions,
278 100,
279 &dispatcher));
252 280
253 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping; 281 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping;
254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 282 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
255 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 283 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
256 EXPECT_FALSE(mapping); 284 EXPECT_FALSE(mapping);
257 285
258 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 286 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
259 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 287 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
260 EXPECT_FALSE(mapping); 288 EXPECT_FALSE(mapping);
261 289
262 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 290 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
263 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 291 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
264 EXPECT_FALSE(mapping); 292 EXPECT_FALSE(mapping);
265 293
266 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 294 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
267 } 295 }
268 296
269 } // namespace 297 } // namespace
270 } // namespace system 298 } // namespace system
271 } // namespace mojo 299 } // namespace mojo
OLDNEW
« mojo/embedder/platform_support.h ('K') | « mojo/system/shared_buffer_dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698