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

Side by Side Diff: webrtc/p2p/base/p2ptransportchannel_unittest.cc

Issue 1455033004: Ping backup connection at a slower rate (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 "TESTICEPWD00000000000003"}; 94 "TESTICEPWD00000000000003"};
95 95
96 static const uint64_t kTiebreaker1 = 11111; 96 static const uint64_t kTiebreaker1 = 11111;
97 static const uint64_t kTiebreaker2 = 22222; 97 static const uint64_t kTiebreaker2 = 22222;
98 98
99 enum { 99 enum {
100 MSG_CANDIDATE 100 MSG_CANDIDATE
101 }; 101 };
102 102
103 static cricket::IceConfig CreateIceConfig(int receiving_timeout_ms, 103 static cricket::IceConfig CreateIceConfig(int receiving_timeout_ms,
104 bool gather_continually) { 104 bool gather_continually,
105 int backup_ping_interval = -1) {
105 cricket::IceConfig config; 106 cricket::IceConfig config;
106 config.receiving_timeout_ms = receiving_timeout_ms; 107 config.receiving_timeout_ms = receiving_timeout_ms;
107 config.gather_continually = gather_continually; 108 config.gather_continually = gather_continually;
109 config.backup_connection_ping_interval = backup_ping_interval;
108 return config; 110 return config;
109 } 111 }
110 112
111 // This test simulates 2 P2P endpoints that want to establish connectivity 113 // This test simulates 2 P2P endpoints that want to establish connectivity
112 // with each other over various network topologies and conditions, which can be 114 // with each other over various network topologies and conditions, which can be
113 // specified in each individial test. 115 // specified in each individial test.
114 // A virtual network (via VirtualSocketServer) along with virtual firewalls and 116 // A virtual network (via VirtualSocketServer) along with virtual firewalls and
115 // NATs (via Firewall/NATSocketServer) are used to simulate the various network 117 // NATs (via Firewall/NATSocketServer) are used to simulate the various network
116 // conditions. We can configure the IP addresses of the endpoints, 118 // conditions. We can configure the IP addresses of the endpoints,
117 // block various types of connectivity, or add arbitrary levels of NAT. 119 // block various types of connectivity, or add arbitrary levels of NAT.
(...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 ep2_ch1()->best_connection()->receiving(), 1000); 1643 ep2_ch1()->best_connection()->receiving(), 1000);
1642 EXPECT_TRUE( 1644 EXPECT_TRUE(
1643 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1645 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1644 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1646 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1645 EXPECT_TRUE( 1647 EXPECT_TRUE(
1646 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1648 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1647 1649
1648 DestroyChannels(); 1650 DestroyChannels();
1649 } 1651 }
1650 1652
1653 // Test that the backup connection is pinged at a rate no faster than
1654 // what was configured.
1655 TEST_F(P2PTransportChannelMultihomedTest, TestPingBackupConnectionRate) {
1656 AddAddress(0, kPublicAddrs[0]);
1657 // Adding alternate address will make sure |kPublicAddrs| has the higher
1658 // priority than others. This is due to FakeNetwork::AddInterface method.
1659 AddAddress(1, kAlternateAddrs[1]);
1660 AddAddress(1, kPublicAddrs[1]);
1661
1662 // Use only local ports for simplicity.
1663 SetAllocatorFlags(0, kOnlyLocalPorts);
1664 SetAllocatorFlags(1, kOnlyLocalPorts);
1665
1666 // Create channels and let them go writable, as usual.
1667 CreateChannels(1);
1668 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1669 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1670 1000, 1000);
1671 int backup_ping_interval = 2000;
1672 ep2_ch1()->SetIceConfig(CreateIceConfig(2000, false, backup_ping_interval));
1673 // After the state becomes COMPLETED, the backup connection will be pinged
1674 // once every |backup_ping_interval| milliseconds.
1675 ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == cricket::STATE_COMPLETED, 1000);
1676 const std::vector<cricket::Connection*>& connections =
1677 ep2_ch1()->connections();
1678 ASSERT_EQ(2U, connections.size());
1679 cricket::Connection* backup_conn = connections[1];
1680 EXPECT_TRUE_WAIT(backup_conn->writable(), 3000);
1681 uint32_t last_ping_response_ms = backup_conn->last_ping_response_received();
1682 EXPECT_TRUE_WAIT(
1683 last_ping_response_ms < backup_conn->last_ping_response_received(), 5000);
1684 int time_elapsed =
1685 backup_conn->last_ping_response_received() - last_ping_response_ms;
1686 LOG(LS_INFO) << "Time elapsed: " << time_elapsed;
1687 EXPECT_GE(time_elapsed, backup_ping_interval);
1688 }
1689
1651 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) { 1690 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) {
1652 AddAddress(0, kAlternateAddrs[0]); 1691 AddAddress(0, kAlternateAddrs[0]);
1653 AddAddress(0, kPublicAddrs[0]); 1692 AddAddress(0, kPublicAddrs[0]);
1654 AddAddress(1, kPublicAddrs[1]); 1693 AddAddress(1, kPublicAddrs[1]);
1655 // Create channels and let them go writable, as usual. 1694 // Create channels and let them go writable, as usual.
1656 CreateChannels(1); 1695 CreateChannels(1);
1657 1696
1658 // Both transport channels will reach STATE_COMPLETED quickly. 1697 // Both transport channels will reach STATE_COMPLETED quickly.
1659 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, 1698 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED,
1660 ep1_ch1()->GetState(), 1000); 1699 ep1_ch1()->GetState(), 1000);
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
2134 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2173 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2135 ASSERT_TRUE(conn1 != nullptr); 2174 ASSERT_TRUE(conn1 != nullptr);
2136 ASSERT_TRUE(conn2 != nullptr); 2175 ASSERT_TRUE(conn2 != nullptr);
2137 // Now there are two connections, so the transport channel is connecting. 2176 // Now there are two connections, so the transport channel is connecting.
2138 EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState()); 2177 EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState());
2139 // |conn1| becomes writable and receiving; it then should prune |conn2|. 2178 // |conn1| becomes writable and receiving; it then should prune |conn2|.
2140 conn1->ReceivedPingResponse(); 2179 conn1->ReceivedPingResponse();
2141 EXPECT_TRUE_WAIT(conn2->pruned(), 1000); 2180 EXPECT_TRUE_WAIT(conn2->pruned(), 1000);
2142 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); 2181 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState());
2143 conn1->Prune(); // All connections are pruned. 2182 conn1->Prune(); // All connections are pruned.
2144 EXPECT_EQ(cricket::TransportChannelState::STATE_FAILED, ch.GetState()); 2183 // Need to wait until the channel state is updated.
2184 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_FAILED, ch.GetState(),
2185 1000);
2145 } 2186 }
2146 2187
2147 // Test that when a low-priority connection is pruned, it is not deleted 2188 // Test that when a low-priority connection is pruned, it is not deleted
2148 // right away, and it can become active and be pruned again. 2189 // right away, and it can become active and be pruned again.
2149 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) { 2190 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) {
2150 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2191 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2151 cricket::P2PTransportChannel ch("test channel", 1, nullptr, &pa); 2192 cricket::P2PTransportChannel ch("test channel", 1, nullptr, &pa);
2152 PrepareChannel(&ch); 2193 PrepareChannel(&ch);
2153 ch.SetIceConfig(CreateIceConfig(1000, false)); 2194 ch.SetIceConfig(CreateIceConfig(1000, false));
2154 ch.Connect(); 2195 ch.Connect();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 // It should stop getting ports after a new connection becomes strongly 2279 // It should stop getting ports after a new connection becomes strongly
2239 // connected. 2280 // connected.
2240 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); 2281 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]);
2241 ch.MaybeStartGathering(); 2282 ch.MaybeStartGathering();
2242 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 100)); 2283 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 100));
2243 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2284 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2244 ASSERT_TRUE(conn2 != nullptr); 2285 ASSERT_TRUE(conn2 != nullptr);
2245 conn2->ReceivedPingResponse(); // Becomes writable and receiving 2286 conn2->ReceivedPingResponse(); // Becomes writable and receiving
2246 EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); 2287 EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts());
2247 } 2288 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698