| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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 | 
| OLD | NEW | 
|---|