| 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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 191 |
| 192 // Connects the given |slave| (with the given |slave_process_delegate|) to the | 192 // Connects the given |slave| (with the given |slave_process_delegate|) to the |
| 193 // given master, creating and using a |TestSlaveInfo| with the given | 193 // given master, creating and using a |TestSlaveInfo| with the given |
| 194 // |slave_name|, and returns the process identifier for the slave. | 194 // |slave_name|, and returns the process identifier for the slave. |
| 195 ProcessIdentifier ConnectSlave( | 195 ProcessIdentifier ConnectSlave( |
| 196 MasterConnectionManager* master, | 196 MasterConnectionManager* master, |
| 197 embedder::SlaveProcessDelegate* slave_process_delegate, | 197 embedder::SlaveProcessDelegate* slave_process_delegate, |
| 198 SlaveConnectionManager* slave, | 198 SlaveConnectionManager* slave, |
| 199 const std::string& slave_name) { | 199 const std::string& slave_name) { |
| 200 embedder::PlatformChannelPair platform_channel_pair; | 200 embedder::PlatformChannelPair platform_channel_pair; |
| 201 ProcessIdentifier slave_process_identifier = | 201 ProcessIdentifier slave_process_identifier = master->AddSlave( |
| 202 master->AddSlave(new TestSlaveInfo(slave_name), | 202 new TestSlaveInfo(slave_name), platform_channel_pair.handle0.Pass()); |
| 203 platform_channel_pair.PassServerHandle()); | |
| 204 slave->Init(task_runner().Clone(), slave_process_delegate, | 203 slave->Init(task_runner().Clone(), slave_process_delegate, |
| 205 platform_channel_pair.PassClientHandle()); | 204 platform_channel_pair.handle1.Pass()); |
| 206 return slave_process_identifier; | 205 return slave_process_identifier; |
| 207 } | 206 } |
| 208 | 207 |
| 209 private: | 208 private: |
| 210 embedder::SimplePlatformSupport platform_support_; | 209 embedder::SimplePlatformSupport platform_support_; |
| 211 std::unique_ptr<MessageLoop> message_loop_; | 210 std::unique_ptr<MessageLoop> message_loop_; |
| 212 MockMasterProcessDelegate master_process_delegate_; | 211 MockMasterProcessDelegate master_process_delegate_; |
| 213 | 212 |
| 214 MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionManagerTest); | 213 MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionManagerTest); |
| 215 }; | 214 }; |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 } | 644 } |
| 646 | 645 |
| 647 TEST_F(ConnectionManagerTest, AddSlaveThenImmediateShutdown) { | 646 TEST_F(ConnectionManagerTest, AddSlaveThenImmediateShutdown) { |
| 648 MasterConnectionManager master(platform_support()); | 647 MasterConnectionManager master(platform_support()); |
| 649 master.Init(task_runner().Clone(), &master_process_delegate()); | 648 master.Init(task_runner().Clone(), &master_process_delegate()); |
| 650 | 649 |
| 651 MockSlaveProcessDelegate slave_process_delegate; | 650 MockSlaveProcessDelegate slave_process_delegate; |
| 652 SlaveConnectionManager slave(platform_support()); | 651 SlaveConnectionManager slave(platform_support()); |
| 653 embedder::PlatformChannelPair platform_channel_pair; | 652 embedder::PlatformChannelPair platform_channel_pair; |
| 654 ProcessIdentifier slave_id = master.AddSlave( | 653 ProcessIdentifier slave_id = master.AddSlave( |
| 655 new TestSlaveInfo("slave"), platform_channel_pair.PassServerHandle()); | 654 new TestSlaveInfo("slave"), platform_channel_pair.handle0.Pass()); |
| 656 master.Shutdown(); | 655 master.Shutdown(); |
| 657 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); | 656 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); |
| 658 // Since we never initialized |slave|, we don't have to shut it down. | 657 // Since we never initialized |slave|, we don't have to shut it down. |
| 659 } | 658 } |
| 660 | 659 |
| 661 TEST_F(ConnectionManagerTest, AddSlaveAndBootstrap) { | 660 TEST_F(ConnectionManagerTest, AddSlaveAndBootstrap) { |
| 662 MasterConnectionManager master(platform_support()); | 661 MasterConnectionManager master(platform_support()); |
| 663 master.Init(task_runner().Clone(), &master_process_delegate()); | 662 master.Init(task_runner().Clone(), &master_process_delegate()); |
| 664 | 663 |
| 665 embedder::PlatformChannelPair platform_channel_pair; | 664 embedder::PlatformChannelPair platform_channel_pair; |
| 666 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); | 665 ConnectionIdentifier connection_id = master.GenerateConnectionIdentifier(); |
| 667 ProcessIdentifier slave_id = master.AddSlaveAndBootstrap( | 666 ProcessIdentifier slave_id = master.AddSlaveAndBootstrap( |
| 668 new TestSlaveInfo("slave"), platform_channel_pair.PassServerHandle(), | 667 new TestSlaveInfo("slave"), platform_channel_pair.handle0.Pass(), |
| 669 connection_id); | 668 connection_id); |
| 670 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); | 669 EXPECT_TRUE(IsValidSlaveProcessIdentifier(slave_id)); |
| 671 | 670 |
| 672 ScopedPlatformHandle h1; | 671 ScopedPlatformHandle h1; |
| 673 ProcessIdentifier master_peer = kInvalidProcessIdentifier; | 672 ProcessIdentifier master_peer = kInvalidProcessIdentifier; |
| 674 bool is_first = false; | 673 bool is_first = false; |
| 675 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION, | 674 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION, |
| 676 master.Connect(connection_id, &master_peer, &is_first, &h1)); | 675 master.Connect(connection_id, &master_peer, &is_first, &h1)); |
| 677 EXPECT_EQ(slave_id, master_peer); | 676 EXPECT_EQ(slave_id, master_peer); |
| 678 EXPECT_TRUE(is_first); | 677 EXPECT_TRUE(is_first); |
| 679 EXPECT_TRUE(h1.is_valid()); | 678 EXPECT_TRUE(h1.is_valid()); |
| 680 | 679 |
| 681 // We can delay creating/initializing |slave| for quite a while. | 680 // We can delay creating/initializing |slave| for quite a while. |
| 682 MockSlaveProcessDelegate slave_process_delegate; | 681 MockSlaveProcessDelegate slave_process_delegate; |
| 683 SlaveConnectionManager slave(platform_support()); | 682 SlaveConnectionManager slave(platform_support()); |
| 684 slave.Init(task_runner().Clone(), &slave_process_delegate, | 683 slave.Init(task_runner().Clone(), &slave_process_delegate, |
| 685 platform_channel_pair.PassClientHandle()); | 684 platform_channel_pair.handle1.Pass()); |
| 686 | 685 |
| 687 ProcessIdentifier slave_peer = kInvalidProcessIdentifier; | 686 ProcessIdentifier slave_peer = kInvalidProcessIdentifier; |
| 688 ScopedPlatformHandle h2; | 687 ScopedPlatformHandle h2; |
| 689 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION, | 688 EXPECT_EQ(ConnectionManager::Result::SUCCESS_CONNECT_NEW_CONNECTION, |
| 690 slave.Connect(connection_id, &slave_peer, &is_first, &h2)); | 689 slave.Connect(connection_id, &slave_peer, &is_first, &h2)); |
| 691 EXPECT_EQ(kMasterProcessIdentifier, slave_peer); | 690 EXPECT_EQ(kMasterProcessIdentifier, slave_peer); |
| 692 EXPECT_FALSE(is_first); | 691 EXPECT_FALSE(is_first); |
| 693 | 692 |
| 694 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); | 693 EXPECT_TRUE(ArePlatformHandlesConnected(h1.get(), h2.get())); |
| 695 | 694 |
| 696 slave.Shutdown(); | 695 slave.Shutdown(); |
| 697 master.Shutdown(); | 696 master.Shutdown(); |
| 698 } | 697 } |
| 699 | 698 |
| 700 // TODO(vtl): More shutdown cases for |AddSlaveAndBootstrap()|? | 699 // TODO(vtl): More shutdown cases for |AddSlaveAndBootstrap()|? |
| 701 | 700 |
| 702 } // namespace | 701 } // namespace |
| 703 } // namespace system | 702 } // namespace system |
| 704 } // namespace mojo | 703 } // namespace mojo |
| OLD | NEW |