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 |