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

Side by Side Diff: third_party/mojo/src/mojo/edk/system/connection_manager_unittest.cc

Issue 1310103002: Update mojo sdk to rev c02a28868825edfa57ab77947b8cb15e741c5598 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
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 is really a unit test for |MasterConnectionManager| and 5 // This is really a unit test for |MasterConnectionManager| and
6 // |SlaveConnectionManager| (since they need to be tested together). 6 // |SlaveConnectionManager| (since they need to be tested together).
7 7
8 #include "mojo/edk/system/connection_manager.h" 8 #include "mojo/edk/system/connection_manager.h"
9 9
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // TODO(vtl): If/when I add the ability to get one's own process identifier, 219 // TODO(vtl): If/when I add the ability to get one's own process identifier,
220 // there'll be more we can check. 220 // there'll be more we can check.
221 EXPECT_NE(slave1_id, slave2_id); 221 EXPECT_NE(slave1_id, slave2_id);
222 222
223 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 223 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
224 EXPECT_TRUE(slave1.AllowConnect(connection_id)); 224 EXPECT_TRUE(slave1.AllowConnect(connection_id));
225 EXPECT_TRUE(slave2.AllowConnect(connection_id)); 225 EXPECT_TRUE(slave2.AllowConnect(connection_id));
226 226
227 ProcessIdentifier peer1 = kInvalidProcessIdentifier; 227 ProcessIdentifier peer1 = kInvalidProcessIdentifier;
228 embedder::ScopedPlatformHandle h1; 228 embedder::ScopedPlatformHandle h1;
229 EXPECT_TRUE(slave1.Connect(connection_id, &peer1, &h1)); 229 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
230 slave1.Connect(connection_id, &peer1, &h1));
230 EXPECT_EQ(slave2_id, peer1); 231 EXPECT_EQ(slave2_id, peer1);
231 EXPECT_TRUE(h1.is_valid()); 232 EXPECT_TRUE(h1.is_valid());
232 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 233 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
233 embedder::ScopedPlatformHandle h2; 234 embedder::ScopedPlatformHandle h2;
234 EXPECT_TRUE(slave2.Connect(connection_id, &peer2, &h2)); 235 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
236 slave2.Connect(connection_id, &peer2, &h2));
235 EXPECT_EQ(slave1_id, peer2); 237 EXPECT_EQ(slave1_id, peer2);
236 EXPECT_TRUE(h2.is_valid()); 238 EXPECT_TRUE(h2.is_valid());
237 239
238 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); 240 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get()));
239 241
240 // The process manager shouldn't have gotten any notifications yet. (Spin the 242 // The process manager shouldn't have gotten any notifications yet. (Spin the
241 // message loop to make sure none were enqueued.) 243 // message loop to make sure none were enqueued.)
242 base::RunLoop().RunUntilIdle(); 244 base::RunLoop().RunUntilIdle();
243 EXPECT_EQ(0u, master_process_delegate().on_slave_disconnect_calls()); 245 EXPECT_EQ(0u, master_process_delegate().on_slave_disconnect_calls());
244 246
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave2_id)); 314 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave2_id));
313 EXPECT_NE(slave1_id, slave2_id); 315 EXPECT_NE(slave1_id, slave2_id);
314 316
315 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 317 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
316 EXPECT_TRUE(slave1.AllowConnect(connection_id)); 318 EXPECT_TRUE(slave1.AllowConnect(connection_id));
317 EXPECT_TRUE(slave2.AllowConnect(connection_id)); 319 EXPECT_TRUE(slave2.AllowConnect(connection_id));
318 320
319 EXPECT_TRUE(slave1.CancelConnect(connection_id)); 321 EXPECT_TRUE(slave1.CancelConnect(connection_id));
320 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 322 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
321 embedder::ScopedPlatformHandle h2; 323 embedder::ScopedPlatformHandle h2;
322 EXPECT_FALSE(slave2.Connect(connection_id, &peer2, &h2)); 324 EXPECT_EQ(ConnectionManager::Result::FAILURE,
325 slave2.Connect(connection_id, &peer2, &h2));
323 EXPECT_EQ(kInvalidProcessIdentifier, peer2); 326 EXPECT_EQ(kInvalidProcessIdentifier, peer2);
324 EXPECT_FALSE(h2.is_valid()); 327 EXPECT_FALSE(h2.is_valid());
325 328
326 slave1.Shutdown(); 329 slave1.Shutdown();
327 slave2.Shutdown(); 330 slave2.Shutdown();
328 master.Shutdown(); 331 master.Shutdown();
329 } 332 }
330 333
331 // Tests that pending connections are removed on error. 334 // Tests that pending connections are removed on error.
332 TEST_F(ConnectionManagerTest, ErrorRemovePending) { 335 TEST_F(ConnectionManagerTest, ErrorRemovePending) {
(...skipping 21 matching lines...) Expand all
354 slave1.Shutdown(); 357 slave1.Shutdown();
355 358
356 // |OnSlaveDisconnect()| should be called. After it's called, this means that 359 // |OnSlaveDisconnect()| should be called. After it's called, this means that
357 // the disconnect has been detected and handled, including the removal of the 360 // the disconnect has been detected and handled, including the removal of the
358 // pending connection. 361 // pending connection.
359 master_process_delegate().RunUntilNotified(); 362 master_process_delegate().RunUntilNotified();
360 EXPECT_EQ(1u, master_process_delegate().on_slave_disconnect_calls()); 363 EXPECT_EQ(1u, master_process_delegate().on_slave_disconnect_calls());
361 364
362 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 365 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
363 embedder::ScopedPlatformHandle h2; 366 embedder::ScopedPlatformHandle h2;
364 EXPECT_FALSE(slave2.Connect(connection_id, &peer2, &h2)); 367 EXPECT_EQ(ConnectionManager::Result::FAILURE,
368 slave2.Connect(connection_id, &peer2, &h2));
365 EXPECT_EQ(kInvalidProcessIdentifier, peer2); 369 EXPECT_EQ(kInvalidProcessIdentifier, peer2);
366 EXPECT_FALSE(h2.is_valid()); 370 EXPECT_FALSE(h2.is_valid());
367 371
368 slave2.Shutdown(); 372 slave2.Shutdown();
369 master.Shutdown(); 373 master.Shutdown();
370 } 374 }
371 375
372 TEST_F(ConnectionManagerTest, ConnectSlaveToSelf) { 376 TEST_F(ConnectionManagerTest, ConnectSlaveToSelf) {
373 MasterConnectionManager master(platform_support()); 377 MasterConnectionManager master(platform_support());
374 master.Init(base::MessageLoop::current()->task_runner(), 378 master.Init(base::MessageLoop::current()->task_runner(),
375 &master_process_delegate()); 379 &master_process_delegate());
376 380
377 MockSlaveProcessDelegate slave_process_delegate; 381 MockSlaveProcessDelegate slave_process_delegate;
378 SlaveConnectionManager slave(platform_support()); 382 SlaveConnectionManager slave(platform_support());
379 ProcessIdentifier slave_id = 383 ProcessIdentifier slave_id =
380 ConnectSlave(&master, &slave_process_delegate, &slave, "slave"); 384 ConnectSlave(&master, &slave_process_delegate, &slave, "slave");
381 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); 385 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id));
382 386
383 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 387 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
384 EXPECT_TRUE(slave.AllowConnect(connection_id)); 388 EXPECT_TRUE(slave.AllowConnect(connection_id));
385 EXPECT_TRUE(slave.AllowConnect(connection_id)); 389 EXPECT_TRUE(slave.AllowConnect(connection_id));
386 390
387 // Currently, the connect-to-self case is signalled by the master not sending
388 // back a handle.
389 ProcessIdentifier peer1 = kInvalidProcessIdentifier; 391 ProcessIdentifier peer1 = kInvalidProcessIdentifier;
390 embedder::ScopedPlatformHandle h1; 392 embedder::ScopedPlatformHandle h1;
391 EXPECT_TRUE(slave.Connect(connection_id, &peer1, &h1)); 393 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_SAME_PROCESS,
394 slave.Connect(connection_id, &peer1, &h1));
392 EXPECT_EQ(slave_id, peer1); 395 EXPECT_EQ(slave_id, peer1);
393 EXPECT_FALSE(h1.is_valid()); 396 EXPECT_FALSE(h1.is_valid());
394 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 397 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
395 embedder::ScopedPlatformHandle h2; 398 embedder::ScopedPlatformHandle h2;
396 EXPECT_TRUE(slave.Connect(connection_id, &peer2, &h2)); 399 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_SAME_PROCESS,
400 slave.Connect(connection_id, &peer2, &h2));
397 EXPECT_EQ(slave_id, peer2); 401 EXPECT_EQ(slave_id, peer2);
398 EXPECT_FALSE(h2.is_valid()); 402 EXPECT_FALSE(h2.is_valid());
399 403
400 slave.Shutdown(); 404 slave.Shutdown();
401 master.Shutdown(); 405 master.Shutdown();
402 } 406 }
403 407
404 TEST_F(ConnectionManagerTest, ConnectSlavesTwice) { 408 TEST_F(ConnectionManagerTest, ConnectSlavesTwice) {
405 MasterConnectionManager master(platform_support()); 409 MasterConnectionManager master(platform_support());
406 master.Init(base::MessageLoop::current()->task_runner(), 410 master.Init(base::MessageLoop::current()->task_runner(),
(...skipping 11 matching lines...) Expand all
418 ConnectSlave(&master, &slave2_process_delegate, &slave2, "slave2"); 422 ConnectSlave(&master, &slave2_process_delegate, &slave2, "slave2");
419 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave2_id)); 423 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave2_id));
420 EXPECT_NE(slave1_id, slave2_id); 424 EXPECT_NE(slave1_id, slave2_id);
421 425
422 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 426 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
423 EXPECT_TRUE(slave1.AllowConnect(connection_id)); 427 EXPECT_TRUE(slave1.AllowConnect(connection_id));
424 EXPECT_TRUE(slave2.AllowConnect(connection_id)); 428 EXPECT_TRUE(slave2.AllowConnect(connection_id));
425 429
426 ProcessIdentifier peer1 = kInvalidProcessIdentifier; 430 ProcessIdentifier peer1 = kInvalidProcessIdentifier;
427 embedder::ScopedPlatformHandle h1; 431 embedder::ScopedPlatformHandle h1;
428 EXPECT_TRUE(slave1.Connect(connection_id, &peer1, &h1)); 432 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
433 slave1.Connect(connection_id, &peer1, &h1));
429 EXPECT_EQ(slave2_id, peer1); 434 EXPECT_EQ(slave2_id, peer1);
430 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 435 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
431 embedder::ScopedPlatformHandle h2; 436 embedder::ScopedPlatformHandle h2;
432 EXPECT_TRUE(slave2.Connect(connection_id, &peer2, &h2)); 437 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
438 slave2.Connect(connection_id, &peer2, &h2));
433 EXPECT_EQ(slave1_id, peer2); 439 EXPECT_EQ(slave1_id, peer2);
434 440
435 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); 441 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get()));
436 442
437 // Currently, the master doesn't detect the case of connecting a pair of 443 // TODO(vtl): Currently, the master doesn't detect the case of connecting a
438 // slaves that are already connected. (Doing so would require more careful 444 // pair of slaves that are already connected. (Doing so would require more
439 // tracking and is prone to races -- especially if we want slaves to be able 445 // careful tracking and is prone to races -- especially if we want slaves to
440 // to tear down no-longer-needed connections.) But the slaves should be able 446 // be able to tear down no-longer-needed connections.) But the slaves should
441 // to do the tracking themselves (using the peer process identifiers). 447 // be able to do the tracking themselves (using the peer process identifiers).
442 connection_id = master.GenerateConnectionIdentifier(); 448 connection_id = master.GenerateConnectionIdentifier();
443 EXPECT_TRUE(slave1.AllowConnect(connection_id)); 449 EXPECT_TRUE(slave1.AllowConnect(connection_id));
444 EXPECT_TRUE(slave2.AllowConnect(connection_id)); 450 EXPECT_TRUE(slave2.AllowConnect(connection_id));
445 451
446 h1.reset(); 452 h1.reset();
447 h2.reset(); 453 h2.reset();
454 // TODO(vtl): FIXME -- this will break when I implemented
455 // SUCCESS_CONNECT_REUSE_CONNECTION.
448 ProcessIdentifier second_peer2 = kInvalidProcessIdentifier; 456 ProcessIdentifier second_peer2 = kInvalidProcessIdentifier;
449 EXPECT_TRUE(slave2.Connect(connection_id, &second_peer2, &h2)); 457 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
458 slave2.Connect(connection_id, &second_peer2, &h2));
450 ProcessIdentifier second_peer1 = kInvalidProcessIdentifier; 459 ProcessIdentifier second_peer1 = kInvalidProcessIdentifier;
451 EXPECT_TRUE(slave1.Connect(connection_id, &second_peer1, &h1)); 460 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
461 slave1.Connect(connection_id, &second_peer1, &h1));
452 462
453 EXPECT_EQ(peer1, second_peer1); 463 EXPECT_EQ(peer1, second_peer1);
454 EXPECT_EQ(peer2, second_peer2); 464 EXPECT_EQ(peer2, second_peer2);
455 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); 465 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get()));
456 466
457 slave2.Shutdown(); 467 slave2.Shutdown();
458 slave1.Shutdown(); 468 slave1.Shutdown();
459 master.Shutdown(); 469 master.Shutdown();
460 } 470 }
461 471
462 TEST_F(ConnectionManagerTest, ConnectMasterToSlave) { 472 TEST_F(ConnectionManagerTest, ConnectMasterToSlave) {
463 MasterConnectionManager master(platform_support()); 473 MasterConnectionManager master(platform_support());
464 master.Init(base::MessageLoop::current()->task_runner(), 474 master.Init(base::MessageLoop::current()->task_runner(),
465 &master_process_delegate()); 475 &master_process_delegate());
466 476
467 MockSlaveProcessDelegate slave_process_delegate; 477 MockSlaveProcessDelegate slave_process_delegate;
468 SlaveConnectionManager slave(platform_support()); 478 SlaveConnectionManager slave(platform_support());
469 ProcessIdentifier slave_id = 479 ProcessIdentifier slave_id =
470 ConnectSlave(&master, &slave_process_delegate, &slave, "slave"); 480 ConnectSlave(&master, &slave_process_delegate, &slave, "slave");
471 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); 481 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id));
472 482
473 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 483 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
474 EXPECT_TRUE(master.AllowConnect(connection_id)); 484 EXPECT_TRUE(master.AllowConnect(connection_id));
475 EXPECT_TRUE(slave.AllowConnect(connection_id)); 485 EXPECT_TRUE(slave.AllowConnect(connection_id));
476 486
477 ProcessIdentifier master_peer = kInvalidProcessIdentifier; 487 ProcessIdentifier master_peer = kInvalidProcessIdentifier;
478 embedder::ScopedPlatformHandle master_h; 488 embedder::ScopedPlatformHandle master_h;
479 EXPECT_TRUE(master.Connect(connection_id, &master_peer, &master_h)); 489 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
490 master.Connect(connection_id, &master_peer, &master_h));
480 EXPECT_EQ(slave_id, master_peer); 491 EXPECT_EQ(slave_id, master_peer);
481 EXPECT_TRUE(master_h.is_valid()); 492 EXPECT_TRUE(master_h.is_valid());
482 ProcessIdentifier slave_peer = kInvalidProcessIdentifier; 493 ProcessIdentifier slave_peer = kInvalidProcessIdentifier;
483 embedder::ScopedPlatformHandle slave_h; 494 embedder::ScopedPlatformHandle slave_h;
484 EXPECT_TRUE(slave.Connect(connection_id, &slave_peer, &slave_h)); 495 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
496 slave.Connect(connection_id, &slave_peer, &slave_h));
485 EXPECT_EQ(kMasterProcessIdentifier, slave_peer); 497 EXPECT_EQ(kMasterProcessIdentifier, slave_peer);
486 EXPECT_TRUE(slave_h.is_valid()); 498 EXPECT_TRUE(slave_h.is_valid());
487 499
488 EXPECT_TRUE(ArePlatformHandlesConnected(master_h.get(), slave_h.get())); 500 EXPECT_TRUE(ArePlatformHandlesConnected(master_h.get(), slave_h.get()));
489 501
490 slave.Shutdown(); 502 slave.Shutdown();
491 master.Shutdown(); 503 master.Shutdown();
492 } 504 }
493 505
494 TEST_F(ConnectionManagerTest, ConnectMasterToSelf) { 506 TEST_F(ConnectionManagerTest, ConnectMasterToSelf) {
495 MasterConnectionManager master(platform_support()); 507 MasterConnectionManager master(platform_support());
496 master.Init(base::MessageLoop::current()->task_runner(), 508 master.Init(base::MessageLoop::current()->task_runner(),
497 &master_process_delegate()); 509 &master_process_delegate());
498 510
499 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 511 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
500 EXPECT_TRUE(master.AllowConnect(connection_id)); 512 EXPECT_TRUE(master.AllowConnect(connection_id));
501 EXPECT_TRUE(master.AllowConnect(connection_id)); 513 EXPECT_TRUE(master.AllowConnect(connection_id));
502 514
503 // Currently, the connect-to-self case is signalled by the master not sending
504 // back a handle.
505 ProcessIdentifier peer1 = kInvalidProcessIdentifier; 515 ProcessIdentifier peer1 = kInvalidProcessIdentifier;
506 embedder::ScopedPlatformHandle h1; 516 embedder::ScopedPlatformHandle h1;
507 EXPECT_TRUE(master.Connect(connection_id, &peer1, &h1)); 517 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_SAME_PROCESS,
518 master.Connect(connection_id, &peer1, &h1));
508 EXPECT_EQ(kMasterProcessIdentifier, peer1); 519 EXPECT_EQ(kMasterProcessIdentifier, peer1);
509 EXPECT_FALSE(h1.is_valid()); 520 EXPECT_FALSE(h1.is_valid());
510 ProcessIdentifier peer2 = kInvalidProcessIdentifier; 521 ProcessIdentifier peer2 = kInvalidProcessIdentifier;
511 embedder::ScopedPlatformHandle h2; 522 embedder::ScopedPlatformHandle h2;
512 EXPECT_TRUE(master.Connect(connection_id, &peer2, &h2)); 523 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_SAME_PROCESS,
524 master.Connect(connection_id, &peer2, &h2));
513 EXPECT_EQ(kMasterProcessIdentifier, peer2); 525 EXPECT_EQ(kMasterProcessIdentifier, peer2);
514 EXPECT_FALSE(h2.is_valid()); 526 EXPECT_FALSE(h2.is_valid());
515 527
516 EXPECT_EQ(peer1, peer2); 528 EXPECT_EQ(peer1, peer2);
517 529
518 master.Shutdown(); 530 master.Shutdown();
519 } 531 }
520 532
521 TEST_F(ConnectionManagerTest, MasterCancelConnect) { 533 TEST_F(ConnectionManagerTest, MasterCancelConnect) {
522 MasterConnectionManager master(platform_support()); 534 MasterConnectionManager master(platform_support());
523 master.Init(base::MessageLoop::current()->task_runner(), 535 master.Init(base::MessageLoop::current()->task_runner(),
524 &master_process_delegate()); 536 &master_process_delegate());
525 537
526 MockSlaveProcessDelegate slave_process_delegate; 538 MockSlaveProcessDelegate slave_process_delegate;
527 SlaveConnectionManager slave(platform_support()); 539 SlaveConnectionManager slave(platform_support());
528 ProcessIdentifier slave_id = 540 ProcessIdentifier slave_id =
529 ConnectSlave(&master, &slave_process_delegate, &slave, "slave"); 541 ConnectSlave(&master, &slave_process_delegate, &slave, "slave");
530 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); 542 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id));
531 543
532 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 544 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
533 EXPECT_TRUE(master.AllowConnect(connection_id)); 545 EXPECT_TRUE(master.AllowConnect(connection_id));
534 EXPECT_TRUE(slave.AllowConnect(connection_id)); 546 EXPECT_TRUE(slave.AllowConnect(connection_id));
535 547
536 EXPECT_TRUE(master.CancelConnect(connection_id)); 548 EXPECT_TRUE(master.CancelConnect(connection_id));
537 ProcessIdentifier peer = kInvalidProcessIdentifier; 549 ProcessIdentifier peer = kInvalidProcessIdentifier;
538 embedder::ScopedPlatformHandle h; 550 embedder::ScopedPlatformHandle h;
539 EXPECT_FALSE(slave.Connect(connection_id, &peer, &h)); 551 EXPECT_EQ(ConnectionManager::Result::FAILURE,
552 slave.Connect(connection_id, &peer, &h));
540 EXPECT_EQ(kInvalidProcessIdentifier, peer); 553 EXPECT_EQ(kInvalidProcessIdentifier, peer);
541 EXPECT_FALSE(h.is_valid()); 554 EXPECT_FALSE(h.is_valid());
542 555
543 slave.Shutdown(); 556 slave.Shutdown();
544 master.Shutdown(); 557 master.Shutdown();
545 } 558 }
546 559
547 TEST_F(ConnectionManagerTest, AddSlaveThenImmediateShutdown) { 560 TEST_F(ConnectionManagerTest, AddSlaveThenImmediateShutdown) {
548 MasterConnectionManager master(platform_support()); 561 MasterConnectionManager master(platform_support());
549 master.Init(base::MessageLoop::current()->task_runner(), 562 master.Init(base::MessageLoop::current()->task_runner(),
(...skipping 16 matching lines...) Expand all
566 579
567 embedder::PlatformChannelPair platform_channel_pair; 580 embedder::PlatformChannelPair platform_channel_pair;
568 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); 581 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier();
569 ProcessIdentifier slave_id = master.AddSlaveAndBootstrap( 582 ProcessIdentifier slave_id = master.AddSlaveAndBootstrap(
570 new TestSlaveInfo("slave"), platform_channel_pair.PassServerHandle(), 583 new TestSlaveInfo("slave"), platform_channel_pair.PassServerHandle(),
571 connection_id); 584 connection_id);
572 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); 585 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id));
573 586
574 embedder::ScopedPlatformHandle h1; 587 embedder::ScopedPlatformHandle h1;
575 ProcessIdentifier master_peer = kInvalidProcessIdentifier; 588 ProcessIdentifier master_peer = kInvalidProcessIdentifier;
576 EXPECT_TRUE(master.Connect(connection_id, &master_peer, &h1)); 589 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
590 master.Connect(connection_id, &master_peer, &h1));
577 EXPECT_EQ(slave_id, master_peer); 591 EXPECT_EQ(slave_id, master_peer);
578 EXPECT_TRUE(h1.is_valid()); 592 EXPECT_TRUE(h1.is_valid());
579 593
580 // We can delay creating/initializing |slave| for quite a while. 594 // We can delay creating/initializing |slave| for quite a while.
581 MockSlaveProcessDelegate slave_process_delegate; 595 MockSlaveProcessDelegate slave_process_delegate;
582 SlaveConnectionManager slave(platform_support()); 596 SlaveConnectionManager slave(platform_support());
583 slave.Init(base::MessageLoop::current()->task_runner(), 597 slave.Init(base::MessageLoop::current()->task_runner(),
584 &slave_process_delegate, platform_channel_pair.PassClientHandle()); 598 &slave_process_delegate, platform_channel_pair.PassClientHandle());
585 599
586 ProcessIdentifier slave_peer = kInvalidProcessIdentifier; 600 ProcessIdentifier slave_peer = kInvalidProcessIdentifier;
587 embedder::ScopedPlatformHandle h2; 601 embedder::ScopedPlatformHandle h2;
588 EXPECT_TRUE(slave.Connect(connection_id, &slave_peer, &h2)); 602 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION,
603 slave.Connect(connection_id, &slave_peer, &h2));
589 EXPECT_EQ(kMasterProcessIdentifier, slave_peer); 604 EXPECT_EQ(kMasterProcessIdentifier, slave_peer);
590 605
591 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); 606 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get()));
592 607
593 slave.Shutdown(); 608 slave.Shutdown();
594 master.Shutdown(); 609 master.Shutdown();
595 } 610 }
596 611
597 // TODO(vtl): More shutdown cases for |AddSlaveAndBootstrap()|? 612 // TODO(vtl): More shutdown cases for |AddSlaveAndBootstrap()|?
598 613
599 } // namespace 614 } // namespace
600 } // namespace system 615 } // namespace system
601 } // namespace mojo 616 } // namespace mojo
OLDNEW
« no previous file with comments | « third_party/mojo/src/mojo/edk/system/connection_manager.h ('k') | third_party/mojo/src/mojo/edk/system/core.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698