Chromium Code Reviews| Index: mojo/edk/system/ports/ports_unittest.cc |
| diff --git a/mojo/edk/system/ports/ports_unittest.cc b/mojo/edk/system/ports/ports_unittest.cc |
| index 95e2a630af8195044fcffdc8b92cb149f1b5c6ea..60246ad81e95ef13ad7c06a3016ca6ad805f5b5d 100644 |
| --- a/mojo/edk/system/ports/ports_unittest.cc |
| +++ b/mojo/edk/system/ports/ports_unittest.cc |
| @@ -690,32 +690,12 @@ TEST_F(PortsTest, SendUninitialized) { |
| Node node0(node0_name, &node0_delegate); |
| node_map[0] = &node0; |
| - NodeName node1_name(1, 1); |
| - TestNodeDelegate node1_delegate(node1_name); |
| - Node node1(node1_name, &node1_delegate); |
| - node_map[1] = &node1; |
| - |
| - // Begin to setup a pipe between node0 and node1, but don't initialize either |
| - // endpoint. |
| - PortRef x0, x1; |
| + PortRef x0; |
| EXPECT_EQ(OK, node0.CreateUninitializedPort(&x0)); |
| - EXPECT_EQ(OK, node1.CreateUninitializedPort(&x1)); |
| - |
| - node0_delegate.set_save_messages(true); |
| - node1_delegate.set_save_messages(true); |
| - |
| - // Send a message on each port and expect neither to arrive yet. |
| - |
| EXPECT_EQ(ERROR_PORT_STATE_UNEXPECTED, |
| SendStringMessage(&node0, x0, "oops")); |
| - EXPECT_EQ(ERROR_PORT_STATE_UNEXPECTED, |
| - SendStringMessage(&node1, x1, "oh well")); |
| - |
| EXPECT_EQ(OK, node0.ClosePort(x0)); |
| - EXPECT_EQ(OK, node1.ClosePort(x1)); |
| - |
| EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| - EXPECT_TRUE(node1.CanShutdownCleanly(false)); |
| } |
| TEST_F(PortsTest, SendFailure) { |
| @@ -1068,6 +1048,52 @@ TEST_F(PortsTest, SendWithClosedPeerSent) { |
| EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| } |
| +TEST_F(PortsTest, MergePorts1) { |
|
darin (slow to review)
2016/02/05 17:46:45
any other cases worth testing here? like error cas
Ken Rockot(use gerrit already)
2016/02/05 19:43:05
several new tests added
|
| + NodeName node0_name(0, 1); |
| + TestNodeDelegate node0_delegate(node0_name); |
| + Node node0(node0_name, &node0_delegate); |
| + node_map[0] = &node0; |
| + |
| + NodeName node1_name(1, 1); |
| + TestNodeDelegate node1_delegate(node1_name); |
| + Node node1(node1_name, &node1_delegate); |
| + node_map[1] = &node1; |
| + |
| + // Setup two independent port pairs, A-B on node0 and C-D on node1. |
| + PortRef A, B, C, D; |
| + EXPECT_EQ(OK, node0.CreatePortPair(&A, &B)); |
| + EXPECT_EQ(OK, node1.CreatePortPair(&C, &D)); |
| + |
| + node0_delegate.set_read_messages(false); |
| + node1_delegate.set_save_messages(true); |
| + |
| + // Write a message on A. |
| + EXPECT_EQ(OK, SendStringMessage(&node0, A, "hey")); |
| + |
| + PumpTasks(); |
| + |
| + // Initiate a merge between B and C. |
| + EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name())); |
| + |
| + PumpTasks(); |
| + |
| + // Expect only two receiving ports to be left after pumping tasks. |
| + EXPECT_TRUE(node0.CanShutdownCleanly(true)); |
| + EXPECT_TRUE(node1.CanShutdownCleanly(true)); |
| + |
| + // Expect D to have received the message sent on A. |
| + ScopedMessage message; |
| + ASSERT_TRUE(node1_delegate.GetSavedMessage(&message)); |
| + EXPECT_EQ(0, strcmp("hey", ToString(message))); |
| + |
| + EXPECT_EQ(OK, node0.ClosePort(A)); |
| + EXPECT_EQ(OK, node1.ClosePort(D)); |
| + |
| + // No more ports should be open. |
| + EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| + EXPECT_TRUE(node1.CanShutdownCleanly(false)); |
| +} |
| + |
| } // namespace test |
| } // namespace ports |
| } // namespace edk |