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

Unified Diff: mojo/edk/system/ports/ports_unittest.cc

Issue 1678333003: Revert of [mojo-edk] Simplify multiprocess pipe bootstrap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/ports/node.cc ('k') | mojo/edk/system/remote_message_pipe_bootstrap.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1bdca3ff8cb65cd96ebbe9f9f0244d366c968da7..95e2a630af8195044fcffdc8b92cb149f1b5c6ea 100644
--- a/mojo/edk/system/ports/ports_unittest.cc
+++ b/mojo/edk/system/ports/ports_unittest.cc
@@ -690,12 +690,32 @@
Node node0(node0_name, &node0_delegate);
node_map[0] = &node0;
- PortRef x0;
+ 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;
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_TRUE(node0.CanShutdownCleanly(false));
+ EXPECT_EQ(OK, node1.ClosePort(x1));
+
+ EXPECT_TRUE(node0.CanShutdownCleanly(false));
+ EXPECT_TRUE(node1.CanShutdownCleanly(false));
}
TEST_F(PortsTest, SendFailure) {
@@ -1048,322 +1068,6 @@
EXPECT_TRUE(node0.CanShutdownCleanly(false));
}
-TEST_F(PortsTest, MergePorts) {
- 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));
-}
-
-TEST_F(PortsTest, MergePortWithClosedPeer1) {
- // This tests that the right thing happens when initiating a merge on a port
- // whose peer has already been closed.
-
- 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();
-
- // Close A.
- EXPECT_EQ(OK, node0.ClosePort(A));
-
- // Initiate a merge between B and C.
- EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name()));
-
- PumpTasks();
-
- // Expect only one receiving port to be left after pumping tasks.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- 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, node1.ClosePort(D));
-
- // No more ports should be open.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-}
-
-TEST_F(PortsTest, MergePortWithClosedPeer2) {
- // This tests that the right thing happens when merging into a port whose peer
- // has already been closed.
-
- 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_save_messages(true);
- node1_delegate.set_read_messages(false);
-
- // Write a message on D.
- EXPECT_EQ(OK, SendStringMessage(&node0, D, "hey"));
-
- PumpTasks();
-
- // Close D.
- EXPECT_EQ(OK, node1.ClosePort(D));
-
- // Initiate a merge between B and C.
- EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name()));
-
- PumpTasks();
-
- // Expect only one receiving port to be left after pumping tasks.
- EXPECT_TRUE(node0.CanShutdownCleanly(true));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-
- // Expect A to have received the message sent on D.
- ScopedMessage message;
- ASSERT_TRUE(node0_delegate.GetSavedMessage(&message));
- EXPECT_EQ(0, strcmp("hey", ToString(message)));
-
- EXPECT_EQ(OK, node0.ClosePort(A));
-
- // No more ports should be open.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-}
-
-TEST_F(PortsTest, MergePortsWithClosedPeers) {
- // This tests that no residual ports are left behind if two ports are merged
- // when both of their peers have been closed.
-
- 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_save_messages(true);
- node1_delegate.set_read_messages(false);
-
- // Close A and D.
- EXPECT_EQ(OK, node0.ClosePort(A));
- EXPECT_EQ(OK, node1.ClosePort(D));
-
- PumpTasks();
-
- // Initiate a merge between B and C.
- EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name()));
-
- PumpTasks();
-
- // Expect everything to have gone away.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-}
-
-TEST_F(PortsTest, MergePortsWithMovedPeers) {
- // This tests that no ports can be merged successfully even if their peers
- // are moved around.
-
- 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;
-
- node0_delegate.set_save_messages(true);
- node1_delegate.set_read_messages(false);
-
- // 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));
-
- // Set up another pair X-Y for moving ports on node0.
- PortRef X, Y;
- EXPECT_EQ(OK, node0.CreatePortPair(&X, &Y));
-
- ScopedMessage message;
-
- // Move A to new port E.
- EXPECT_EQ(OK, SendStringMessageWithPort(&node0, X, "foo", A));
- ASSERT_TRUE(node0_delegate.GetSavedMessage(&message));
- ASSERT_EQ(1u, message->num_ports());
- PortRef E;
- ASSERT_EQ(OK, node0.GetPort(message->ports()[0], &E));
-
- EXPECT_EQ(OK, node0.ClosePort(X));
- EXPECT_EQ(OK, node0.ClosePort(Y));
-
- node0_delegate.set_read_messages(false);
-
- // Write messages on E and D.
- EXPECT_EQ(OK, SendStringMessage(&node0, E, "hey"));
- EXPECT_EQ(OK, SendStringMessage(&node1, D, "hi"));
-
- // Initiate a merge between B and C.
- EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name()));
-
- node0_delegate.set_read_messages(true);
- node1_delegate.set_read_messages(true);
- node1_delegate.set_save_messages(true);
-
- PumpTasks();
-
- // Expect to receive D's message on E and E's message on D.
- ASSERT_TRUE(node0_delegate.GetSavedMessage(&message));
- EXPECT_EQ(0, strcmp("hi", ToString(message)));
- ASSERT_TRUE(node1_delegate.GetSavedMessage(&message));
- EXPECT_EQ(0, strcmp("hey", ToString(message)));
-
- // Close E and D.
- EXPECT_EQ(OK, node0.ClosePort(E));
- EXPECT_EQ(OK, node1.ClosePort(D));
-
- PumpTasks();
-
- // Expect everything to have gone away.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-}
-
-
-TEST_F(PortsTest, MergePortsFailsGracefully) {
- // This tests that the system remains in a well-defined state if something
- // goes wrong during port merge.
-
- 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));
-
- PumpTasks();
-
- // Initiate a merge between B and C.
- EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name()));
-
- // Move C to a new port E. This is dumb and nobody should do it, but it's
- // possible. MergePorts will fail as a result because C won't be in a
- // receiving state when the event arrives at node1, so B should be closed.
- ScopedMessage message;
- PortRef X, Y;
- EXPECT_EQ(OK, node1.CreatePortPair(&X, &Y));
- node1_delegate.set_save_messages(true);
- EXPECT_EQ(OK, SendStringMessageWithPort(&node1, X, "foo", C));
- ASSERT_TRUE(node1_delegate.GetSavedMessage(&message));
- ASSERT_EQ(1u, message->num_ports());
- PortRef E;
- ASSERT_EQ(OK, node1.GetPort(message->ports()[0], &E));
- EXPECT_EQ(OK, node1.ClosePort(X));
- EXPECT_EQ(OK, node1.ClosePort(Y));
-
- // C goes away as a result of normal proxy removal.
- PumpTasks();
-
- EXPECT_EQ(ERROR_PORT_UNKNOWN, node1.GetPort(C.name(), &C));
-
- // B should have been closed cleanly.
- EXPECT_EQ(ERROR_PORT_UNKNOWN, node0.GetPort(B.name(), &B));
-
- // Close A, D, and E.
- EXPECT_EQ(OK, node0.ClosePort(A));
- EXPECT_EQ(OK, node1.ClosePort(D));
- EXPECT_EQ(OK, node1.ClosePort(E));
-
- PumpTasks();
-
- // Expect everything to have gone away.
- EXPECT_TRUE(node0.CanShutdownCleanly(false));
- EXPECT_TRUE(node1.CanShutdownCleanly(false));
-}
-
} // namespace test
} // namespace ports
} // namespace edk
« no previous file with comments | « mojo/edk/system/ports/node.cc ('k') | mojo/edk/system/remote_message_pipe_bootstrap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698