OLD | NEW |
---|---|
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 20 matching lines...) Expand all Loading... | |
31 #include "webrtc/base/ssladapter.h" | 31 #include "webrtc/base/ssladapter.h" |
32 #include "webrtc/base/thread.h" | 32 #include "webrtc/base/thread.h" |
33 #include "webrtc/base/virtualsocketserver.h" | 33 #include "webrtc/base/virtualsocketserver.h" |
34 | 34 |
35 using cricket::kDefaultPortAllocatorFlags; | 35 using cricket::kDefaultPortAllocatorFlags; |
36 using cricket::kMinimumStepDelay; | 36 using cricket::kMinimumStepDelay; |
37 using cricket::kDefaultStepDelay; | 37 using cricket::kDefaultStepDelay; |
38 using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; | 38 using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; |
39 using cricket::ServerAddresses; | 39 using cricket::ServerAddresses; |
40 using cricket::MIN_PINGS_AT_WEAK_PING_INTERVAL; | 40 using cricket::MIN_PINGS_AT_WEAK_PING_INTERVAL; |
41 using cricket::MIN_PINGS_TO_STABILIZE; | |
41 using rtc::SocketAddress; | 42 using rtc::SocketAddress; |
42 | 43 |
43 static const int kDefaultTimeout = 1000; | 44 static const int kDefaultTimeout = 1000; |
44 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | | 45 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | |
45 cricket::PORTALLOCATOR_DISABLE_RELAY | | 46 cricket::PORTALLOCATOR_DISABLE_RELAY | |
46 cricket::PORTALLOCATOR_DISABLE_TCP; | 47 cricket::PORTALLOCATOR_DISABLE_TCP; |
47 // Addresses on the public internet. | 48 // Addresses on the public internet. |
48 static const SocketAddress kPublicAddrs[2] = | 49 static const SocketAddress kPublicAddrs[2] = |
49 { 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) }; |
50 // IPv6 Addresses on the public internet. | 51 // IPv6 Addresses on the public internet. |
(...skipping 2018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2069 | 2070 |
2070 // Low-priority connection becomes writable so that the other connection | 2071 // Low-priority connection becomes writable so that the other connection |
2071 // is not pruned. | 2072 // is not pruned. |
2072 conn1->ReceivedPingResponse(); | 2073 conn1->ReceivedPingResponse(); |
2073 EXPECT_TRUE_WAIT( | 2074 EXPECT_TRUE_WAIT( |
2074 conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL && | 2075 conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL && |
2075 conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, | 2076 conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, |
2076 kDefaultTimeout); | 2077 kDefaultTimeout); |
2077 } | 2078 } |
2078 | 2079 |
2080 TEST_F(P2PTransportChannelPingTest, TestInitialPingInterval) { | |
2081 rtc::ScopedFakeClock clock; | |
2082 | |
2083 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | |
2084 cricket::P2PTransportChannel ch("TestChannel", 1, &pa); | |
2085 PrepareChannel(&ch); | |
2086 ch.Connect(); | |
2087 ch.MaybeStartGathering(); | |
2088 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | |
2089 cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | |
2090 ASSERT_TRUE(conn != nullptr); | |
2091 | |
2092 int64_t start = clock.TimeNanos() / 1000000; | |
2093 // Wait for the connection to send MIN_PINGS_AT_WEAK_PING_INTERVAL pings. | |
2094 SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, | |
2095 kDefaultTimeout, clock); | |
2096 int64_t duration = clock.TimeNanos() / 1000000 - start; | |
2097 EXPECT_TRUE(duration >= 100 && duration <= 200); | |
Zhi Huang
2016/06/10 20:39:02
The duration is not expected to be exactly the sam
Zhi Huang
2016/06/20 17:18:17
We can get the exact ping interval for initial pin
| |
2098 } | |
2099 | |
2100 TEST_F(P2PTransportChannelPingTest, TestStabilizingPingInterval) { | |
2101 rtc::ScopedFakeClock clock; | |
2102 int stablilizing_timeout = 2000; | |
2103 | |
2104 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | |
2105 cricket::P2PTransportChannel ch("TestChannel", 1, &pa); | |
2106 PrepareChannel(&ch); | |
2107 ch.Connect(); | |
2108 ch.MaybeStartGathering(); | |
2109 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | |
2110 cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | |
2111 | |
2112 ASSERT_TRUE(conn != nullptr); | |
2113 // Wait for the connection to send MIN_PINGS_AT_WEAK_PING_INTERVAL pings. | |
2114 SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, | |
2115 kDefaultTimeout, clock); | |
2116 // The connection become strong but not stabilized. The ping interval is | |
2117 // expected to be STABLIZING_WRITABLE_CONNECTION_PING_INTERVAL. | |
2118 conn->ReceivedPingResponse(); | |
2119 int ping_sent_before = conn->num_pings_sent(); | |
2120 int64_t start = clock.TimeNanos() / 1000000; | |
2121 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, | |
2122 stablilizing_timeout, clock); | |
2123 int64_t duration = clock.TimeNanos() / 1000000 - start; | |
2124 EXPECT_TRUE(duration >= 900 && duration <= 1100); | |
2125 } | |
2126 | |
2127 TEST_F(P2PTransportChannelPingTest, TestStabilizedPingInterval) { | |
2128 rtc::ScopedFakeClock clock; | |
2129 int stabilized_timeout = 3000; | |
2130 | |
2131 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | |
2132 cricket::P2PTransportChannel ch("TestChannel", 1, &pa); | |
2133 PrepareChannel(&ch); | |
2134 ch.Connect(); | |
2135 ch.MaybeStartGathering(); | |
2136 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | |
2137 cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | |
2138 ASSERT_TRUE(conn != nullptr); | |
2139 | |
2140 // Wait for the connection to send MIN_PINGS_TO_STABILIZE pings to stablize. | |
2141 SIMULATED_WAIT(conn->num_pings_sent() > MIN_PINGS_TO_STABILIZE, | |
2142 kDefaultTimeout, clock); | |
2143 // The connection become writable and receiving. | |
2144 conn->ReceivedPingResponse(); | |
2145 int ping_sent_before = conn->num_pings_sent(); | |
2146 int64_t start = clock.TimeNanos() / 1000000; | |
2147 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, | |
2148 stabilized_timeout, clock); | |
2149 int64_t duration = clock.TimeNanos() / 1000000 - start; | |
2150 EXPECT_TRUE(duration >= 2500 && duration <= 2600); | |
2151 } | |
2152 | |
2153 // Verify that a stabilized connection will ping faster if a in-flight ping time | |
2154 // out. | |
2155 TEST_F(P2PTransportChannelPingTest, TestTimeoutPingInterval) { | |
2156 rtc::ScopedFakeClock clock; | |
2157 int stablilizing_timeout = 2000; | |
2158 | |
2159 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | |
2160 cricket::P2PTransportChannel ch("TestChannel", 1, &pa); | |
2161 PrepareChannel(&ch); | |
2162 ch.Connect(); | |
2163 ch.MaybeStartGathering(); | |
2164 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | |
2165 cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | |
2166 ASSERT_TRUE(conn != nullptr); | |
2167 | |
2168 // Wait for the connection to send MIN_PINGS_TO_STABILIZE pings to stablize. | |
2169 SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_TO_STABILIZE, | |
2170 kDefaultTimeout, clock); | |
2171 // The connection become writable and receiving. | |
2172 conn->ReceivedPingResponse(); | |
2173 | |
2174 // Create a in-flight ping. | |
2175 conn->Ping(clock.TimeNanos() / 1000000); | |
2176 int ping_sent_before = conn->num_pings_sent(); | |
2177 int64_t start = clock.TimeNanos() / 1000000; | |
2178 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, | |
2179 stablilizing_timeout, clock); | |
2180 int64_t duration = clock.TimeNanos() / 1000000 - start; | |
2181 EXPECT_TRUE(duration >= 900 && duration <= 1100); | |
2182 } | |
2183 | |
2079 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { | 2184 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { |
2080 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 2185 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
2081 cricket::P2PTransportChannel ch("trigger checks", 1, &pa); | 2186 cricket::P2PTransportChannel ch("trigger checks", 1, &pa); |
2082 PrepareChannel(&ch); | 2187 PrepareChannel(&ch); |
2083 ch.Connect(); | 2188 ch.Connect(); |
2084 ch.MaybeStartGathering(); | 2189 ch.MaybeStartGathering(); |
2085 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 2190 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); |
2086 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 2191 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); |
2087 | 2192 |
2088 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 2193 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2700 cricket::RelayServerConfig config(cricket::RELAY_TURN); | 2805 cricket::RelayServerConfig config(cricket::RELAY_TURN); |
2701 config.credentials = kRelayCredentials; | 2806 config.credentials = kRelayCredentials; |
2702 config.ports.push_back( | 2807 config.ports.push_back( |
2703 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); | 2808 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); |
2704 allocator_->AddTurnServer(config); | 2809 allocator_->AddTurnServer(config); |
2705 allocator_->set_step_delay(kMinimumStepDelay); | 2810 allocator_->set_step_delay(kMinimumStepDelay); |
2706 } | 2811 } |
2707 | 2812 |
2708 cricket::P2PTransportChannel& StartTransportChannel( | 2813 cricket::P2PTransportChannel& StartTransportChannel( |
2709 bool prioritize_most_likely_to_work, | 2814 bool prioritize_most_likely_to_work, |
2710 int max_strong_interval) { | 2815 int stable_writable_connection_ping_interval) { |
2711 channel_.reset( | 2816 channel_.reset( |
2712 new cricket::P2PTransportChannel("checks", 1, nullptr, allocator())); | 2817 new cricket::P2PTransportChannel("checks", 1, nullptr, allocator())); |
2713 cricket::IceConfig config = channel_->config(); | 2818 cricket::IceConfig config = channel_->config(); |
2714 config.prioritize_most_likely_candidate_pairs = | 2819 config.prioritize_most_likely_candidate_pairs = |
2715 prioritize_most_likely_to_work; | 2820 prioritize_most_likely_to_work; |
2716 config.max_strong_interval = max_strong_interval; | 2821 config.stable_writable_connection_ping_interval = |
2822 stable_writable_connection_ping_interval; | |
2717 channel_->SetIceConfig(config); | 2823 channel_->SetIceConfig(config); |
2718 PrepareChannel(channel_.get()); | 2824 PrepareChannel(channel_.get()); |
2719 channel_->Connect(); | 2825 channel_->Connect(); |
2720 channel_->MaybeStartGathering(); | 2826 channel_->MaybeStartGathering(); |
2721 return *channel_.get(); | 2827 return *channel_.get(); |
2722 } | 2828 } |
2723 | 2829 |
2724 cricket::BasicPortAllocator* allocator() { return allocator_.get(); } | 2830 cricket::BasicPortAllocator* allocator() { return allocator_.get(); } |
2725 cricket::TestTurnServer* turn_server() { return &turn_server_; } | 2831 cricket::TestTurnServer* turn_server() { return &turn_server_; } |
2726 | 2832 |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2915 | 3021 |
2916 // TCP Relay/Relay is the next. | 3022 // TCP Relay/Relay is the next. |
2917 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 3023 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, |
2918 cricket::RELAY_PORT_TYPE, | 3024 cricket::RELAY_PORT_TYPE, |
2919 cricket::TCP_PROTOCOL_NAME); | 3025 cricket::TCP_PROTOCOL_NAME); |
2920 | 3026 |
2921 // Finally, Local/Relay will be pinged. | 3027 // Finally, Local/Relay will be pinged. |
2922 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 3028 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, |
2923 cricket::RELAY_PORT_TYPE); | 3029 cricket::RELAY_PORT_TYPE); |
2924 } | 3030 } |
OLD | NEW |