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

Side by Side Diff: mojo/edk/system/remote_data_pipe_impl_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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 // This file tests both |RemoteProducerDataPipeImpl| and 5 // This file tests both |RemoteProducerDataPipeImpl| and
6 // |RemoteConsumerDataPipeImpl|. 6 // |RemoteConsumerDataPipeImpl|.
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 char read_buffer[100] = {}; 167 char read_buffer[100] = {};
168 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 168 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
169 DispatcherVector read_dispatchers; 169 DispatcherVector read_dispatchers;
170 uint32_t read_num_dispatchers = 10; // Maximum to get. 170 uint32_t read_num_dispatchers = 10; // Maximum to get.
171 Waiter waiter; 171 Waiter waiter;
172 HandleSignalsState hss; 172 HandleSignalsState hss;
173 uint32_t context = 0; 173 uint32_t context = 0;
174 174
175 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 175 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
176 // This is the consumer dispatcher we'll send. 176 // This is the consumer dispatcher we'll send.
177 scoped_refptr<DataPipeConsumerDispatcher> consumer = 177 auto consumer = DataPipeConsumerDispatcher::Create();
178 DataPipeConsumerDispatcher::Create();
179 consumer->Init(dp.Clone()); 178 consumer->Init(dp.Clone());
180 179
181 // Write to the producer and close it, before sending the consumer. 180 // Write to the producer and close it, before sending the consumer.
182 int32_t elements[10] = {123}; 181 int32_t elements[10] = {123};
183 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 182 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
184 EXPECT_EQ(MOJO_RESULT_OK, 183 EXPECT_EQ(MOJO_RESULT_OK,
185 dp->ProducerWriteData(UserPointer<const void>(elements), 184 dp->ProducerWriteData(UserPointer<const void>(elements),
186 MakeUserPointer(&num_bytes), false)); 185 MakeUserPointer(&num_bytes), false));
187 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); 186 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes);
188 dp->ProducerClose(); 187 dp->ProducerClose();
(...skipping 12 matching lines...) Expand all
201 200
202 std::vector<DispatcherTransport> transports; 201 std::vector<DispatcherTransport> transports;
203 transports.push_back(transport); 202 transports.push_back(transport);
204 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( 203 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage(
205 0, NullUserPointer(), 0, &transports, 204 0, NullUserPointer(), 0, &transports,
206 MOJO_WRITE_MESSAGE_FLAG_NONE)); 205 MOJO_WRITE_MESSAGE_FLAG_NONE));
207 transport.End(); 206 transport.End();
208 207
209 // |consumer| should have been closed. This is |DCHECK()|ed when it is 208 // |consumer| should have been closed. This is |DCHECK()|ed when it is
210 // destroyed. 209 // destroyed.
211 EXPECT_TRUE(consumer->HasOneRef()); 210 consumer->AssertHasOneRef();
212 consumer = nullptr; 211 consumer = nullptr;
213 } 212 }
214 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context)); 213 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context));
215 EXPECT_EQ(123u, context); 214 EXPECT_EQ(123u, context);
216 hss = HandleSignalsState(); 215 hss = HandleSignalsState();
217 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); 216 message_pipe(1)->RemoveAwakable(0, &waiter, &hss);
218 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 217 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
219 hss.satisfied_signals); 218 hss.satisfied_signals);
220 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 219 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
221 EXPECT_EQ(MOJO_RESULT_OK, 220 EXPECT_EQ(MOJO_RESULT_OK,
222 message_pipe(1)->ReadMessage( 221 message_pipe(1)->ReadMessage(
223 0, UserPointer<void>(read_buffer), 222 0, UserPointer<void>(read_buffer),
224 MakeUserPointer(&read_buffer_size), &read_dispatchers, 223 MakeUserPointer(&read_buffer_size), &read_dispatchers,
225 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 224 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
226 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); 225 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size));
227 EXPECT_EQ(1u, read_dispatchers.size()); 226 EXPECT_EQ(1u, read_dispatchers.size());
228 EXPECT_EQ(1u, read_num_dispatchers); 227 EXPECT_EQ(1u, read_num_dispatchers);
229 ASSERT_TRUE(read_dispatchers[0]); 228 ASSERT_TRUE(read_dispatchers[0]);
230 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 229 read_dispatchers[0]->AssertHasOneRef();
231 230
232 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, 231 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER,
233 read_dispatchers[0]->GetType()); 232 read_dispatchers[0]->GetType());
234 consumer = 233 consumer = RefPtr<DataPipeConsumerDispatcher>(
235 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()); 234 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()));
236 read_dispatchers.clear(); 235 read_dispatchers.clear();
237 236
238 waiter.Init(); 237 waiter.Init();
239 hss = HandleSignalsState(); 238 hss = HandleSignalsState();
240 MojoResult result = 239 MojoResult result =
241 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss); 240 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss);
242 if (result == MOJO_RESULT_OK) { 241 if (result == MOJO_RESULT_OK) {
243 context = 0; 242 context = 0;
244 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context)); 243 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context));
245 EXPECT_EQ(456u, context); 244 EXPECT_EQ(456u, context);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 char read_buffer[100] = {}; 284 char read_buffer[100] = {};
286 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 285 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
287 DispatcherVector read_dispatchers; 286 DispatcherVector read_dispatchers;
288 uint32_t read_num_dispatchers = 10; // Maximum to get. 287 uint32_t read_num_dispatchers = 10; // Maximum to get.
289 Waiter waiter; 288 Waiter waiter;
290 HandleSignalsState hss; 289 HandleSignalsState hss;
291 uint32_t context = 0; 290 uint32_t context = 0;
292 291
293 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 292 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
294 // This is the consumer dispatcher we'll send. 293 // This is the consumer dispatcher we'll send.
295 scoped_refptr<DataPipeConsumerDispatcher> consumer = 294 auto consumer = DataPipeConsumerDispatcher::Create();
296 DataPipeConsumerDispatcher::Create();
297 consumer->Init(dp.Clone()); 295 consumer->Init(dp.Clone());
298 296
299 void* write_ptr = nullptr; 297 void* write_ptr = nullptr;
300 uint32_t num_bytes = 0u; 298 uint32_t num_bytes = 0u;
301 EXPECT_EQ(MOJO_RESULT_OK, 299 EXPECT_EQ(MOJO_RESULT_OK,
302 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 300 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
303 MakeUserPointer(&num_bytes))); 301 MakeUserPointer(&num_bytes)));
304 ASSERT_GE(num_bytes, 1u * sizeof(int32_t)); 302 ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
305 303
306 // Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0). 304 // Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0).
(...skipping 10 matching lines...) Expand all
317 315
318 std::vector<DispatcherTransport> transports; 316 std::vector<DispatcherTransport> transports;
319 transports.push_back(transport); 317 transports.push_back(transport);
320 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( 318 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage(
321 0, NullUserPointer(), 0, &transports, 319 0, NullUserPointer(), 0, &transports,
322 MOJO_WRITE_MESSAGE_FLAG_NONE)); 320 MOJO_WRITE_MESSAGE_FLAG_NONE));
323 transport.End(); 321 transport.End();
324 322
325 // |consumer| should have been closed. This is |DCHECK()|ed when it is 323 // |consumer| should have been closed. This is |DCHECK()|ed when it is
326 // destroyed. 324 // destroyed.
327 EXPECT_TRUE(consumer->HasOneRef()); 325 consumer->AssertHasOneRef();
328 consumer = nullptr; 326 consumer = nullptr;
329 } 327 }
330 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context)); 328 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context));
331 EXPECT_EQ(123u, context); 329 EXPECT_EQ(123u, context);
332 hss = HandleSignalsState(); 330 hss = HandleSignalsState();
333 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); 331 message_pipe(1)->RemoveAwakable(0, &waiter, &hss);
334 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 332 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
335 hss.satisfied_signals); 333 hss.satisfied_signals);
336 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 334 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
337 EXPECT_EQ(MOJO_RESULT_OK, 335 EXPECT_EQ(MOJO_RESULT_OK,
338 message_pipe(1)->ReadMessage( 336 message_pipe(1)->ReadMessage(
339 0, UserPointer<void>(read_buffer), 337 0, UserPointer<void>(read_buffer),
340 MakeUserPointer(&read_buffer_size), &read_dispatchers, 338 MakeUserPointer(&read_buffer_size), &read_dispatchers,
341 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 339 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
342 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); 340 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size));
343 EXPECT_EQ(1u, read_dispatchers.size()); 341 EXPECT_EQ(1u, read_dispatchers.size());
344 EXPECT_EQ(1u, read_num_dispatchers); 342 EXPECT_EQ(1u, read_num_dispatchers);
345 ASSERT_TRUE(read_dispatchers[0]); 343 ASSERT_TRUE(read_dispatchers[0]);
346 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 344 read_dispatchers[0]->AssertHasOneRef();
347 345
348 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, 346 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER,
349 read_dispatchers[0]->GetType()); 347 read_dispatchers[0]->GetType());
350 consumer = 348 consumer = RefPtr<DataPipeConsumerDispatcher>(
351 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()); 349 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()));
352 read_dispatchers.clear(); 350 read_dispatchers.clear();
353 351
354 // Now actually write the data, complete the two-phase write, and close the 352 // Now actually write the data, complete the two-phase write, and close the
355 // producer. 353 // producer.
356 *static_cast<int32_t*>(write_ptr) = 123456; 354 *static_cast<int32_t*>(write_ptr) = 123456;
357 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData( 355 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(
358 static_cast<uint32_t>(1u * sizeof(int32_t)))); 356 static_cast<uint32_t>(1u * sizeof(int32_t))));
359 dp->ProducerClose(); 357 dp->ProducerClose();
360 358
361 // Wait for the consumer to be readable. 359 // Wait for the consumer to be readable.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 char read_buffer[100] = {}; 393 char read_buffer[100] = {};
396 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 394 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
397 DispatcherVector read_dispatchers; 395 DispatcherVector read_dispatchers;
398 uint32_t read_num_dispatchers = 10; // Maximum to get. 396 uint32_t read_num_dispatchers = 10; // Maximum to get.
399 Waiter waiter; 397 Waiter waiter;
400 HandleSignalsState hss; 398 HandleSignalsState hss;
401 uint32_t context = 0; 399 uint32_t context = 0;
402 400
403 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 401 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
404 // This is the consumer dispatcher we'll send. 402 // This is the consumer dispatcher we'll send.
405 scoped_refptr<DataPipeConsumerDispatcher> consumer = 403 auto consumer = DataPipeConsumerDispatcher::Create();
406 DataPipeConsumerDispatcher::Create();
407 consumer->Init(dp.Clone()); 404 consumer->Init(dp.Clone());
408 405
409 void* write_ptr = nullptr; 406 void* write_ptr = nullptr;
410 uint32_t num_bytes = 0u; 407 uint32_t num_bytes = 0u;
411 EXPECT_EQ(MOJO_RESULT_OK, 408 EXPECT_EQ(MOJO_RESULT_OK,
412 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 409 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
413 MakeUserPointer(&num_bytes))); 410 MakeUserPointer(&num_bytes)));
414 ASSERT_GE(num_bytes, 1u * sizeof(int32_t)); 411 ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
415 *static_cast<int32_t*>(write_ptr) = 123456; 412 *static_cast<int32_t*>(write_ptr) = 123456;
416 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData( 413 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(
(...skipping 20 matching lines...) Expand all
437 434
438 std::vector<DispatcherTransport> transports; 435 std::vector<DispatcherTransport> transports;
439 transports.push_back(transport); 436 transports.push_back(transport);
440 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( 437 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage(
441 0, NullUserPointer(), 0, &transports, 438 0, NullUserPointer(), 0, &transports,
442 MOJO_WRITE_MESSAGE_FLAG_NONE)); 439 MOJO_WRITE_MESSAGE_FLAG_NONE));
443 transport.End(); 440 transport.End();
444 441
445 // |consumer| should have been closed. This is |DCHECK()|ed when it is 442 // |consumer| should have been closed. This is |DCHECK()|ed when it is
446 // destroyed. 443 // destroyed.
447 EXPECT_TRUE(consumer->HasOneRef()); 444 consumer->AssertHasOneRef();
448 consumer = nullptr; 445 consumer = nullptr;
449 } 446 }
450 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context)); 447 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionDeadline(), &context));
451 EXPECT_EQ(123u, context); 448 EXPECT_EQ(123u, context);
452 hss = HandleSignalsState(); 449 hss = HandleSignalsState();
453 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); 450 message_pipe(1)->RemoveAwakable(0, &waiter, &hss);
454 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 451 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
455 hss.satisfied_signals); 452 hss.satisfied_signals);
456 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 453 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
457 EXPECT_EQ(MOJO_RESULT_OK, 454 EXPECT_EQ(MOJO_RESULT_OK,
458 message_pipe(1)->ReadMessage( 455 message_pipe(1)->ReadMessage(
459 0, UserPointer<void>(read_buffer), 456 0, UserPointer<void>(read_buffer),
460 MakeUserPointer(&read_buffer_size), &read_dispatchers, 457 MakeUserPointer(&read_buffer_size), &read_dispatchers,
461 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 458 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
462 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); 459 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size));
463 EXPECT_EQ(1u, read_dispatchers.size()); 460 EXPECT_EQ(1u, read_dispatchers.size());
464 EXPECT_EQ(1u, read_num_dispatchers); 461 EXPECT_EQ(1u, read_num_dispatchers);
465 ASSERT_TRUE(read_dispatchers[0]); 462 ASSERT_TRUE(read_dispatchers[0]);
466 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 463 read_dispatchers[0]->AssertHasOneRef();
467 464
468 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, 465 EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER,
469 read_dispatchers[0]->GetType()); 466 read_dispatchers[0]->GetType());
470 consumer = 467 consumer = RefPtr<DataPipeConsumerDispatcher>(
471 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()); 468 static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get()));
472 read_dispatchers.clear(); 469 read_dispatchers.clear();
473 470
474 // Now actually write the data, complete the two-phase write, and close the 471 // Now actually write the data, complete the two-phase write, and close the
475 // producer. 472 // producer.
476 *static_cast<int32_t*>(write_ptr) = 789012; 473 *static_cast<int32_t*>(write_ptr) = 789012;
477 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData( 474 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(
478 static_cast<uint32_t>(1u * sizeof(int32_t)))); 475 static_cast<uint32_t>(1u * sizeof(int32_t))));
479 dp->ProducerClose(); 476 dp->ProducerClose();
480 477
481 // Wait for the consumer to know that the producer is closed. 478 // Wait for the consumer to know that the producer is closed.
(...skipping 24 matching lines...) Expand all
506 EXPECT_EQ(123456, elements[0]); 503 EXPECT_EQ(123456, elements[0]);
507 EXPECT_EQ(789012, elements[1]); 504 EXPECT_EQ(789012, elements[1]);
508 EXPECT_EQ(0, elements[2]); 505 EXPECT_EQ(0, elements[2]);
509 506
510 consumer->Close(); 507 consumer->Close();
511 } 508 }
512 509
513 } // namespace 510 } // namespace
514 } // namespace system 511 } // namespace system
515 } // namespace mojo 512 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/platform_handle_dispatcher_unittest.cc ('k') | mojo/edk/system/remote_message_pipe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698