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 |