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

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

Issue 1412283002: Convert mojo::system::Dispatcher to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: no change Created 5 years, 2 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
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/edk/system/shared_buffer_dispatcher.h" 5 #include "mojo/edk/system/shared_buffer_dispatcher.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "mojo/edk/embedder/platform_shared_buffer.h" 10 #include "mojo/edk/embedder/platform_shared_buffer.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 ~0u // |flags|. 106 ~0u // |flags|.
107 }; 107 };
108 MojoCreateSharedBufferOptions unused; 108 MojoCreateSharedBufferOptions unused;
109 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED, 109 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED,
110 SharedBufferDispatcher::ValidateCreateOptions( 110 SharedBufferDispatcher::ValidateCreateOptions(
111 MakeUserPointer(&options), &unused)); 111 MakeUserPointer(&options), &unused));
112 } 112 }
113 } 113 }
114 114
115 TEST_F(SharedBufferDispatcherTest, CreateAndMapBuffer) { 115 TEST_F(SharedBufferDispatcherTest, CreateAndMapBuffer) {
116 scoped_refptr<SharedBufferDispatcher> dispatcher; 116 MojoResult result = MOJO_RESULT_INTERNAL;
117 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 117 auto dispatcher = SharedBufferDispatcher::Create(
118 platform_support(), 118 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
119 SharedBufferDispatcher::kDefaultCreateOptions, 119 &result);
120 100, &dispatcher)); 120 EXPECT_EQ(MOJO_RESULT_OK, result);
121
121 ASSERT_TRUE(dispatcher); 122 ASSERT_TRUE(dispatcher);
122 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher->GetType()); 123 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher->GetType());
123 124
124 // Make a couple of mappings. 125 // Make a couple of mappings.
125 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping1; 126 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping1;
126 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( 127 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer(
127 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); 128 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1));
128 ASSERT_TRUE(mapping1); 129 ASSERT_TRUE(mapping1);
129 ASSERT_TRUE(mapping1->GetBase()); 130 ASSERT_TRUE(mapping1->GetBase());
130 EXPECT_EQ(100u, mapping1->GetLength()); 131 EXPECT_EQ(100u, mapping1->GetLength());
(...skipping 10 matching lines...) Expand all
141 142
142 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 143 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
143 144
144 // Check that we can still read/write to mappings after the dispatcher has 145 // Check that we can still read/write to mappings after the dispatcher has
145 // gone away. 146 // gone away.
146 static_cast<char*>(mapping2->GetBase())[1] = 'y'; 147 static_cast<char*>(mapping2->GetBase())[1] = 'y';
147 EXPECT_EQ('y', static_cast<char*>(mapping1->GetBase())[51]); 148 EXPECT_EQ('y', static_cast<char*>(mapping1->GetBase())[51]);
148 } 149 }
149 150
150 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandle) { 151 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandle) {
151 scoped_refptr<SharedBufferDispatcher> dispatcher1; 152 MojoResult result = MOJO_RESULT_INTERNAL;
152 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 153 auto dispatcher1 = SharedBufferDispatcher::Create(
153 platform_support(), 154 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
154 SharedBufferDispatcher::kDefaultCreateOptions, 155 &result);
155 100, &dispatcher1)); 156 EXPECT_EQ(MOJO_RESULT_OK, result);
156 157
157 // Map and write something. 158 // Map and write something.
158 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping; 159 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping;
159 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->MapBuffer( 160 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->MapBuffer(
160 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 161 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
161 static_cast<char*>(mapping->GetBase())[0] = 'x'; 162 static_cast<char*>(mapping->GetBase())[0] = 'x';
162 mapping.reset(); 163 mapping.reset();
163 164
164 // Duplicate |dispatcher1| and then close it. 165 // Duplicate |dispatcher1| and then close it.
165 scoped_refptr<Dispatcher> dispatcher2; 166 RefPtr<Dispatcher> dispatcher2;
166 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle( 167 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle(
167 NullUserPointer(), &dispatcher2)); 168 NullUserPointer(), &dispatcher2));
168 ASSERT_TRUE(dispatcher2); 169 ASSERT_TRUE(dispatcher2);
169 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType()); 170 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType());
170 171
171 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 172 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
172 173
173 // Map |dispatcher2| and read something. 174 // Map |dispatcher2| and read something.
174 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->MapBuffer( 175 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->MapBuffer(
175 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 176 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
176 EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]); 177 EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]);
177 178
178 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); 179 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close());
179 } 180 }
180 181
181 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) { 182 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) {
182 scoped_refptr<SharedBufferDispatcher> dispatcher1; 183 MojoResult result = MOJO_RESULT_INTERNAL;
183 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 184 auto dispatcher1 = SharedBufferDispatcher::Create(
184 platform_support(), 185 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
185 SharedBufferDispatcher::kDefaultCreateOptions, 186 &result);
186 100, &dispatcher1)); 187 EXPECT_EQ(MOJO_RESULT_OK, result);
187 188
188 MojoDuplicateBufferHandleOptions options[] = { 189 MojoDuplicateBufferHandleOptions options[] = {
189 {sizeof(MojoDuplicateBufferHandleOptions), 190 {sizeof(MojoDuplicateBufferHandleOptions),
190 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE}, 191 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE},
191 {sizeof(MojoDuplicateBufferHandleOptionsFlags), ~0u}}; 192 {sizeof(MojoDuplicateBufferHandleOptionsFlags), ~0u}};
192 for (size_t i = 0; i < MOJO_ARRAYSIZE(options); i++) { 193 for (size_t i = 0; i < MOJO_ARRAYSIZE(options); i++) {
193 scoped_refptr<Dispatcher> dispatcher2; 194 RefPtr<Dispatcher> dispatcher2;
194 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle( 195 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle(
195 MakeUserPointer(&options[i]), &dispatcher2)); 196 MakeUserPointer(&options[i]), &dispatcher2));
196 ASSERT_TRUE(dispatcher2); 197 ASSERT_TRUE(dispatcher2);
197 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType()); 198 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType());
198 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); 199 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close());
199 } 200 }
200 201
201 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 202 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
202 } 203 }
203 204
204 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsInvalid) { 205 TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsInvalid) {
205 scoped_refptr<SharedBufferDispatcher> dispatcher1; 206 MojoResult result = MOJO_RESULT_INTERNAL;
206 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 207 auto dispatcher1 = SharedBufferDispatcher::Create(
207 platform_support(), 208 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
208 SharedBufferDispatcher::kDefaultCreateOptions, 209 &result);
209 100, &dispatcher1)); 210 EXPECT_EQ(MOJO_RESULT_OK, result);
210 211
211 // Invalid |struct_size|. 212 // Invalid |struct_size|.
212 { 213 {
213 MojoDuplicateBufferHandleOptions options = { 214 MojoDuplicateBufferHandleOptions options = {
214 1u, MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE}; 215 1u, MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE};
215 scoped_refptr<Dispatcher> dispatcher2; 216 RefPtr<Dispatcher> dispatcher2;
216 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 217 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
217 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options), 218 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options),
218 &dispatcher2)); 219 &dispatcher2));
219 EXPECT_FALSE(dispatcher2); 220 EXPECT_FALSE(dispatcher2);
220 } 221 }
221 222
222 // Unknown |flags|. 223 // Unknown |flags|.
223 { 224 {
224 MojoDuplicateBufferHandleOptions options = { 225 MojoDuplicateBufferHandleOptions options = {
225 sizeof(MojoDuplicateBufferHandleOptions), ~0u}; 226 sizeof(MojoDuplicateBufferHandleOptions), ~0u};
226 scoped_refptr<Dispatcher> dispatcher2; 227 RefPtr<Dispatcher> dispatcher2;
227 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED, 228 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED,
228 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options), 229 dispatcher1->DuplicateBufferHandle(MakeUserPointer(&options),
229 &dispatcher2)); 230 &dispatcher2));
230 EXPECT_FALSE(dispatcher2); 231 EXPECT_FALSE(dispatcher2);
231 } 232 }
232 233
233 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); 234 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
234 } 235 }
235 236
236 TEST_F(SharedBufferDispatcherTest, CreateInvalidNumBytes) { 237 TEST_F(SharedBufferDispatcherTest, CreateInvalidNumBytes) {
237 // Size too big. 238 // Size too big.
238 scoped_refptr<SharedBufferDispatcher> dispatcher; 239 MojoResult result = MOJO_RESULT_INTERNAL;
239 EXPECT_EQ( 240 auto dispatcher = SharedBufferDispatcher::Create(
240 MOJO_RESULT_RESOURCE_EXHAUSTED, 241 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions,
241 SharedBufferDispatcher::Create( 242 std::numeric_limits<uint64_t>::max(), &result);
242 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 243 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, result);
243 std::numeric_limits<uint64_t>::max(), &dispatcher));
244 EXPECT_FALSE(dispatcher); 244 EXPECT_FALSE(dispatcher);
245 245
246 // Zero size. 246 // Zero size.
247 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 247 result = MOJO_RESULT_INTERNAL;
248 SharedBufferDispatcher::Create( 248 dispatcher = SharedBufferDispatcher::Create(
249 platform_support(), 249 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 0,
250 SharedBufferDispatcher::kDefaultCreateOptions, 0, &dispatcher)); 250 &result);
251 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, result);
251 EXPECT_FALSE(dispatcher); 252 EXPECT_FALSE(dispatcher);
252 } 253 }
253 254
254 TEST_F(SharedBufferDispatcherTest, MapBufferInvalidArguments) { 255 TEST_F(SharedBufferDispatcherTest, MapBufferInvalidArguments) {
255 scoped_refptr<SharedBufferDispatcher> dispatcher; 256 MojoResult result = MOJO_RESULT_INTERNAL;
256 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 257 auto dispatcher = SharedBufferDispatcher::Create(
257 platform_support(), 258 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
258 SharedBufferDispatcher::kDefaultCreateOptions, 259 &result);
259 100, &dispatcher)); 260 EXPECT_EQ(MOJO_RESULT_OK, result);
260 261
261 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping; 262 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping;
262 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 263 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
263 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 264 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
264 EXPECT_FALSE(mapping); 265 EXPECT_FALSE(mapping);
265 266
266 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 267 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
267 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 268 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
268 EXPECT_FALSE(mapping); 269 EXPECT_FALSE(mapping);
269 270
270 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 271 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
271 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); 272 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
272 EXPECT_FALSE(mapping); 273 EXPECT_FALSE(mapping);
273 274
274 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 275 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
275 } 276 }
276 277
277 } // namespace 278 } // namespace
278 } // namespace system 279 } // namespace system
279 } // namespace mojo 280 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/shared_buffer_dispatcher.cc ('k') | mojo/edk/system/simple_dispatcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698