Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include <stdio.h> | 5 #include <stdio.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 683 EXPECT_TRUE(node0.CanShutdownCleanly(false)); | 683 EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| 684 EXPECT_TRUE(node1.CanShutdownCleanly(false)); | 684 EXPECT_TRUE(node1.CanShutdownCleanly(false)); |
| 685 } | 685 } |
| 686 | 686 |
| 687 TEST_F(PortsTest, SendUninitialized) { | 687 TEST_F(PortsTest, SendUninitialized) { |
| 688 NodeName node0_name(0, 1); | 688 NodeName node0_name(0, 1); |
| 689 TestNodeDelegate node0_delegate(node0_name); | 689 TestNodeDelegate node0_delegate(node0_name); |
| 690 Node node0(node0_name, &node0_delegate); | 690 Node node0(node0_name, &node0_delegate); |
| 691 node_map[0] = &node0; | 691 node_map[0] = &node0; |
| 692 | 692 |
| 693 NodeName node1_name(1, 1); | 693 PortRef x0; |
| 694 TestNodeDelegate node1_delegate(node1_name); | |
| 695 Node node1(node1_name, &node1_delegate); | |
| 696 node_map[1] = &node1; | |
| 697 | |
| 698 // Begin to setup a pipe between node0 and node1, but don't initialize either | |
| 699 // endpoint. | |
| 700 PortRef x0, x1; | |
| 701 EXPECT_EQ(OK, node0.CreateUninitializedPort(&x0)); | 694 EXPECT_EQ(OK, node0.CreateUninitializedPort(&x0)); |
| 702 EXPECT_EQ(OK, node1.CreateUninitializedPort(&x1)); | |
| 703 | |
| 704 node0_delegate.set_save_messages(true); | |
| 705 node1_delegate.set_save_messages(true); | |
| 706 | |
| 707 // Send a message on each port and expect neither to arrive yet. | |
| 708 | |
| 709 EXPECT_EQ(ERROR_PORT_STATE_UNEXPECTED, | 695 EXPECT_EQ(ERROR_PORT_STATE_UNEXPECTED, |
| 710 SendStringMessage(&node0, x0, "oops")); | 696 SendStringMessage(&node0, x0, "oops")); |
| 711 EXPECT_EQ(ERROR_PORT_STATE_UNEXPECTED, | |
| 712 SendStringMessage(&node1, x1, "oh well")); | |
| 713 | |
| 714 EXPECT_EQ(OK, node0.ClosePort(x0)); | 697 EXPECT_EQ(OK, node0.ClosePort(x0)); |
| 715 EXPECT_EQ(OK, node1.ClosePort(x1)); | |
| 716 | |
| 717 EXPECT_TRUE(node0.CanShutdownCleanly(false)); | 698 EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| 718 EXPECT_TRUE(node1.CanShutdownCleanly(false)); | |
| 719 } | 699 } |
| 720 | 700 |
| 721 TEST_F(PortsTest, SendFailure) { | 701 TEST_F(PortsTest, SendFailure) { |
| 722 NodeName node0_name(0, 1); | 702 NodeName node0_name(0, 1); |
| 723 TestNodeDelegate node0_delegate(node0_name); | 703 TestNodeDelegate node0_delegate(node0_name); |
| 724 Node node0(node0_name, &node0_delegate); | 704 Node node0(node0_name, &node0_delegate); |
| 725 node_map[0] = &node0; | 705 node_map[0] = &node0; |
| 726 | 706 |
| 727 node0_delegate.set_save_messages(true); | 707 node0_delegate.set_save_messages(true); |
| 728 | 708 |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1061 EXPECT_FALSE(status.has_messages); | 1041 EXPECT_FALSE(status.has_messages); |
| 1062 EXPECT_TRUE(status.peer_closed); | 1042 EXPECT_TRUE(status.peer_closed); |
| 1063 | 1043 |
| 1064 node0.ClosePort(E); | 1044 node0.ClosePort(E); |
| 1065 | 1045 |
| 1066 PumpTasks(); | 1046 PumpTasks(); |
| 1067 | 1047 |
| 1068 EXPECT_TRUE(node0.CanShutdownCleanly(false)); | 1048 EXPECT_TRUE(node0.CanShutdownCleanly(false)); |
| 1069 } | 1049 } |
| 1070 | 1050 |
| 1051 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
| |
| 1052 NodeName node0_name(0, 1); | |
| 1053 TestNodeDelegate node0_delegate(node0_name); | |
| 1054 Node node0(node0_name, &node0_delegate); | |
| 1055 node_map[0] = &node0; | |
| 1056 | |
| 1057 NodeName node1_name(1, 1); | |
| 1058 TestNodeDelegate node1_delegate(node1_name); | |
| 1059 Node node1(node1_name, &node1_delegate); | |
| 1060 node_map[1] = &node1; | |
| 1061 | |
| 1062 // Setup two independent port pairs, A-B on node0 and C-D on node1. | |
| 1063 PortRef A, B, C, D; | |
| 1064 EXPECT_EQ(OK, node0.CreatePortPair(&A, &B)); | |
| 1065 EXPECT_EQ(OK, node1.CreatePortPair(&C, &D)); | |
| 1066 | |
| 1067 node0_delegate.set_read_messages(false); | |
| 1068 node1_delegate.set_save_messages(true); | |
| 1069 | |
| 1070 // Write a message on A. | |
| 1071 EXPECT_EQ(OK, SendStringMessage(&node0, A, "hey")); | |
| 1072 | |
| 1073 PumpTasks(); | |
| 1074 | |
| 1075 // Initiate a merge between B and C. | |
| 1076 EXPECT_EQ(OK, node0.MergePorts(B, node1_name, C.name())); | |
| 1077 | |
| 1078 PumpTasks(); | |
| 1079 | |
| 1080 // Expect only two receiving ports to be left after pumping tasks. | |
| 1081 EXPECT_TRUE(node0.CanShutdownCleanly(true)); | |
| 1082 EXPECT_TRUE(node1.CanShutdownCleanly(true)); | |
| 1083 | |
| 1084 // Expect D to have received the message sent on A. | |
| 1085 ScopedMessage message; | |
| 1086 ASSERT_TRUE(node1_delegate.GetSavedMessage(&message)); | |
| 1087 EXPECT_EQ(0, strcmp("hey", ToString(message))); | |
| 1088 | |
| 1089 EXPECT_EQ(OK, node0.ClosePort(A)); | |
| 1090 EXPECT_EQ(OK, node1.ClosePort(D)); | |
| 1091 | |
| 1092 // No more ports should be open. | |
| 1093 EXPECT_TRUE(node0.CanShutdownCleanly(false)); | |
| 1094 EXPECT_TRUE(node1.CanShutdownCleanly(false)); | |
| 1095 } | |
| 1096 | |
| 1071 } // namespace test | 1097 } // namespace test |
| 1072 } // namespace ports | 1098 } // namespace ports |
| 1073 } // namespace edk | 1099 } // namespace edk |
| 1074 } // namespace mojo | 1100 } // namespace mojo |
| OLD | NEW |