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

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

Issue 2369963004: Ping the premier connection on each network with higher priority. (Closed)
Patch Set: . Created 4 years, 2 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 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | 44 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN |
45 cricket::PORTALLOCATOR_DISABLE_RELAY | 45 cricket::PORTALLOCATOR_DISABLE_RELAY |
46 cricket::PORTALLOCATOR_DISABLE_TCP; 46 cricket::PORTALLOCATOR_DISABLE_TCP;
47 static const int LOW_RTT = 20; 47 static const int LOW_RTT = 20;
48 // Addresses on the public internet. 48 // Addresses on the public internet.
49 static const SocketAddress kPublicAddrs[2] = 49 static const SocketAddress kPublicAddrs[2] =
50 { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; 50 { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) };
51 // IPv6 Addresses on the public internet. 51 // IPv6 Addresses on the public internet.
52 static const SocketAddress kIPv6PublicAddrs[2] = { 52 static const SocketAddress kIPv6PublicAddrs[2] = {
53 SocketAddress("2400:4030:1:2c00:be30:abcd:efab:cdef", 0), 53 SocketAddress("2400:4030:1:2c00:be30:abcd:efab:cdef", 0),
54 SocketAddress("2620:0:1000:1b03:2e41:38ff:fea6:f2a4", 0) 54 SocketAddress("2600:0:1000:1b03:2e41:38ff:fea6:f2a4", 0)};
55 };
56 // For configuring multihomed clients. 55 // For configuring multihomed clients.
57 static const SocketAddress kAlternateAddrs[2] = { 56 static const SocketAddress kAlternateAddrs[2] = {
58 SocketAddress("101.101.101.101", 0), SocketAddress("202.202.202.202", 0)}; 57 SocketAddress("101.101.101.101", 0), SocketAddress("202.202.202.202", 0)};
58 static const SocketAddress kIPv6AlternateAddrs[2] = {
59 SocketAddress("2401:4030:1:2c00:be30:abcd:efab:cdef", 0),
60 SocketAddress("2601:0:1000:1b03:2e41:38ff:fea6:f2a4", 0)};
59 // Addresses for HTTP proxy servers. 61 // Addresses for HTTP proxy servers.
60 static const SocketAddress kHttpsProxyAddrs[2] = 62 static const SocketAddress kHttpsProxyAddrs[2] =
61 { SocketAddress("11.11.11.1", 443), SocketAddress("22.22.22.1", 443) }; 63 { SocketAddress("11.11.11.1", 443), SocketAddress("22.22.22.1", 443) };
62 // Addresses for SOCKS proxy servers. 64 // Addresses for SOCKS proxy servers.
63 static const SocketAddress kSocksProxyAddrs[2] = 65 static const SocketAddress kSocksProxyAddrs[2] =
64 { SocketAddress("11.11.11.1", 1080), SocketAddress("22.22.22.1", 1080) }; 66 { SocketAddress("11.11.11.1", 1080), SocketAddress("22.22.22.1", 1080) };
65 // Internal addresses for NAT boxes. 67 // Internal addresses for NAT boxes.
66 static const SocketAddress kNatAddrs[2] = 68 static const SocketAddress kNatAddrs[2] =
67 { SocketAddress("192.168.1.1", 0), SocketAddress("192.168.2.1", 0) }; 69 { SocketAddress("192.168.1.1", 0), SocketAddress("192.168.2.1", 0) };
68 // Private addresses inside the NAT private networks. 70 // Private addresses inside the NAT private networks.
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 408
407 Endpoint* GetEndpoint(int endpoint) { 409 Endpoint* GetEndpoint(int endpoint) {
408 if (endpoint == 0) { 410 if (endpoint == 0) {
409 return &ep1_; 411 return &ep1_;
410 } else if (endpoint == 1) { 412 } else if (endpoint == 1) {
411 return &ep2_; 413 return &ep2_;
412 } else { 414 } else {
413 return NULL; 415 return NULL;
414 } 416 }
415 } 417 }
416 PortAllocator* GetAllocator(int endpoint) { 418 BasicPortAllocator* GetAllocator(int endpoint) {
417 return GetEndpoint(endpoint)->allocator_.get(); 419 return GetEndpoint(endpoint)->allocator_.get();
418 } 420 }
419 void AddAddress(int endpoint, const SocketAddress& addr) { 421 void AddAddress(int endpoint, const SocketAddress& addr) {
420 GetEndpoint(endpoint)->network_manager_.AddInterface(addr); 422 GetEndpoint(endpoint)->network_manager_.AddInterface(addr);
421 } 423 }
422 void AddAddress(int endpoint, 424 void AddAddress(int endpoint,
423 const SocketAddress& addr, 425 const SocketAddress& addr,
424 const std::string& ifname, 426 const std::string& ifname,
425 rtc::AdapterType adapter_type) { 427 rtc::AdapterType adapter_type) {
426 GetEndpoint(endpoint)->network_manager_.AddInterface(addr, ifname, 428 GetEndpoint(endpoint)->network_manager_.AddInterface(addr, ifname,
(...skipping 1550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 3000, clock); 1979 3000, clock);
1978 EXPECT_TRUE( 1980 EXPECT_TRUE(
1979 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1981 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1980 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1982 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1981 EXPECT_TRUE( 1983 EXPECT_TRUE(
1982 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1984 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1983 1985
1984 DestroyChannels(); 1986 DestroyChannels();
1985 } 1987 }
1986 1988
1989 // Test that we can quickly switch links if an interface goes down when
1990 // there are many connections.
1991 TEST_F(P2PTransportChannelMultihomedTest, TestFailoverWithManyConnections) {
1992 test_turn_server()->AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
1993 cricket::RelayServerConfig turn_server(cricket::RELAY_TURN);
1994 turn_server.credentials = kRelayCredentials;
1995 turn_server.ports.push_back(
1996 cricket::ProtocolAddress(kTurnTcpIntAddr, cricket::PROTO_TCP, false));
1997 GetAllocator(0)->AddTurnServer(turn_server);
1998 GetAllocator(1)->AddTurnServer(turn_server);
1999 // Enable IPv6
2000 SetAllocatorFlags(0, PORTALLOCATOR_ENABLE_IPV6);
2001 SetAllocatorFlags(1, PORTALLOCATOR_ENABLE_IPV6);
2002 int delay = kMinimumStepDelay;
Taylor Brandstetter 2016/10/04 02:08:10 nit: Why is this variable needed?
honghaiz3 2016/10/20 23:47:58 Removed
2003 SetAllocationStepDelay(0, delay);
2004 SetAllocationStepDelay(1, delay);
2005
2006 auto& wifi = kPublicAddrs;
2007 auto& cellular = kAlternateAddrs;
2008 auto& wifiIpv6 = kIPv6PublicAddrs;
2009 auto& cellularIpv6 = kIPv6AlternateAddrs;
2010 AddAddress(0, wifi[0], "wifi0", rtc::ADAPTER_TYPE_WIFI);
2011 AddAddress(0, wifiIpv6[0], "wifi0", rtc::ADAPTER_TYPE_WIFI);
2012 AddAddress(0, cellular[0], "cellular0", rtc::ADAPTER_TYPE_CELLULAR);
2013 AddAddress(0, cellularIpv6[0], "cellular0", rtc::ADAPTER_TYPE_CELLULAR);
2014 AddAddress(1, wifi[1], "wifi1", rtc::ADAPTER_TYPE_WIFI);
2015 AddAddress(1, wifiIpv6[1], "wifi1", rtc::ADAPTER_TYPE_WIFI);
2016 AddAddress(1, cellular[1], "cellular1", rtc::ADAPTER_TYPE_CELLULAR);
2017 AddAddress(1, cellularIpv6[1], "cellular1", rtc::ADAPTER_TYPE_CELLULAR);
2018
2019 // Set smaller delay on the TCP TURN server so that TCP TURN candidates
2020 // will be created in time.
2021 virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 1);
2022 virtual_socket_server()->SetDelayOnAddress(kTurnUdpExtAddr, 1);
2023 virtual_socket_server()->set_delay_mean(100);
2024 virtual_socket_server()->set_delay_stddev(100);
honghaiz3 2016/10/03 21:28:33 The random delay is needed so that the test may fa
Taylor Brandstetter 2016/10/04 02:08:10 If the test will only fail randomly, then if a reg
honghaiz3 2016/10/20 23:47:58 I Find a way to remove the randomness by using lon
2025 virtual_socket_server()->UpdateDelayDistribution();
2026
2027 // Make the receiving timeout shorter for testing.
2028 IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY);
2029 // Create channels and let them go writable, as usual.
2030 CreateChannels(config, config, true /* ice_renomination */);
2031 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
2032 ep2_ch1()->receiving() && ep2_ch1()->writable(),
2033 3000);
Taylor Brandstetter 2016/10/04 02:08:10 Can you use a constant instead of 3000?
honghaiz3 2016/10/20 23:47:58 Done.
2034 EXPECT_TRUE_WAIT(
2035 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() &&
2036 LocalCandidate(ep1_ch1())->address().EqualIPs(wifiIpv6[0]) &&
2037 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifiIpv6[1]),
2038 3000);
2039
2040 // Blackhole any traffic to or from the wifi on endpoint 1.
2041 LOG(LS_INFO) << "Failing over...";
Taylor Brandstetter 2016/10/04 02:08:10 Is this log still necessary?
honghaiz3 2016/10/20 23:47:58 This log is informational. The similar log is also
2042 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, wifi[0]);
2043 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, wifiIpv6[0]);
2044
2045 // The selected connections may switch, so keep references to them.
2046 const Connection* selected_connection1 = ep1_ch1()->selected_connection();
2047 const Connection* selected_connection2 = ep2_ch1()->selected_connection();
2048 EXPECT_TRUE_WAIT(
2049 !selected_connection1->receiving() && !selected_connection2->receiving(),
2050 3000);
2051
2052 // It should switch over to use the cellular IPv6 addr on endpoint 1 before
2053 // it timed out on writing.
2054 EXPECT_TRUE_WAIT(
2055 ep1_ch1()->selected_connection()->receiving() &&
2056 ep2_ch1()->selected_connection()->receiving() &&
2057 RemoteCandidate(ep2_ch1())->address().EqualIPs(cellularIpv6[0]) &&
2058 LocalCandidate(ep1_ch1())->address().EqualIPs(cellularIpv6[0]),
2059 3000);
2060
2061 DestroyChannels();
2062 }
2063
1987 // Test that when the controlling side switches the selected connection, 2064 // Test that when the controlling side switches the selected connection,
1988 // the nomination of the selected connection on the controlled side will 2065 // the nomination of the selected connection on the controlled side will
1989 // increase. 2066 // increase.
1990 TEST_F(P2PTransportChannelMultihomedTest, TestIceRenomination) { 2067 TEST_F(P2PTransportChannelMultihomedTest, TestIceRenomination) {
1991 rtc::ScopedFakeClock clock; 2068 rtc::ScopedFakeClock clock;
1992 // Adding alternate address will make sure |kPublicAddrs| has the higher 2069 // Adding alternate address will make sure |kPublicAddrs| has the higher
1993 // priority than others. This is due to FakeNetwork::AddInterface method. 2070 // priority than others. This is due to FakeNetwork::AddInterface method.
1994 AddAddress(0, kAlternateAddrs[0]); 2071 AddAddress(0, kAlternateAddrs[0]);
1995 AddAddress(0, kPublicAddrs[0]); 2072 AddAddress(0, kPublicAddrs[0]);
1996 AddAddress(1, kPublicAddrs[1]); 2073 AddAddress(1, kPublicAddrs[1]);
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after
4000 4077
4001 // TCP Relay/Relay is the next. 4078 // TCP Relay/Relay is the next.
4002 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, 4079 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE,
4003 TCP_PROTOCOL_NAME); 4080 TCP_PROTOCOL_NAME);
4004 4081
4005 // Finally, Local/Relay will be pinged. 4082 // Finally, Local/Relay will be pinged.
4006 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); 4083 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE);
4007 } 4084 }
4008 4085
4009 } // namespace cricket { 4086 } // namespace cricket {
OLDNEW
« webrtc/p2p/base/p2ptransportchannel.cc ('K') | « webrtc/p2p/base/p2ptransportchannel.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698