Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc |
diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc |
index 68543a5f39ed3af006541bfdcdd747c84a2d5df9..4a8b10f880cee53a18a98c107f42319c86d7f3a9 100644 |
--- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc |
+++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc |
@@ -38,6 +38,7 @@ using cricket::kDefaultStepDelay; |
using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; |
using cricket::ServerAddresses; |
using cricket::MIN_PINGS_AT_WEAK_PING_INTERVAL; |
+using cricket::MIN_PINGS_TO_STABILIZE; |
using rtc::SocketAddress; |
static const int kDefaultTimeout = 1000; |
@@ -2076,6 +2077,110 @@ TEST_F(P2PTransportChannelPingTest, TestAllConnectionsPingedSufficiently) { |
kDefaultTimeout); |
} |
+TEST_F(P2PTransportChannelPingTest, TestInitialPingInterval) { |
+ rtc::ScopedFakeClock clock; |
+ |
+ cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
+ cricket::P2PTransportChannel ch("TestChannel", 1, &pa); |
+ PrepareChannel(&ch); |
+ ch.Connect(); |
+ ch.MaybeStartGathering(); |
+ ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); |
+ cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
+ ASSERT_TRUE(conn != nullptr); |
+ |
+ int64_t start = clock.TimeNanos() / 1000000; |
+ // Wait for the connection to send MIN_PINGS_AT_WEAK_PING_INTERVAL pings. |
+ SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, |
+ kDefaultTimeout, clock); |
+ int64_t duration = clock.TimeNanos() / 1000000 - start; |
+ 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
|
+} |
+ |
+TEST_F(P2PTransportChannelPingTest, TestStabilizingPingInterval) { |
+ rtc::ScopedFakeClock clock; |
+ int stablilizing_timeout = 2000; |
+ |
+ cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
+ cricket::P2PTransportChannel ch("TestChannel", 1, &pa); |
+ PrepareChannel(&ch); |
+ ch.Connect(); |
+ ch.MaybeStartGathering(); |
+ ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); |
+ cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
+ |
+ ASSERT_TRUE(conn != nullptr); |
+ // Wait for the connection to send MIN_PINGS_AT_WEAK_PING_INTERVAL pings. |
+ SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, |
+ kDefaultTimeout, clock); |
+ // The connection become strong but not stabilized. The ping interval is |
+ // expected to be STABLIZING_WRITABLE_CONNECTION_PING_INTERVAL. |
+ conn->ReceivedPingResponse(); |
+ int ping_sent_before = conn->num_pings_sent(); |
+ int64_t start = clock.TimeNanos() / 1000000; |
+ SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, |
+ stablilizing_timeout, clock); |
+ int64_t duration = clock.TimeNanos() / 1000000 - start; |
+ EXPECT_TRUE(duration >= 900 && duration <= 1100); |
+} |
+ |
+TEST_F(P2PTransportChannelPingTest, TestStabilizedPingInterval) { |
+ rtc::ScopedFakeClock clock; |
+ int stabilized_timeout = 3000; |
+ |
+ cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
+ cricket::P2PTransportChannel ch("TestChannel", 1, &pa); |
+ PrepareChannel(&ch); |
+ ch.Connect(); |
+ ch.MaybeStartGathering(); |
+ ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); |
+ cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
+ ASSERT_TRUE(conn != nullptr); |
+ |
+ // Wait for the connection to send MIN_PINGS_TO_STABILIZE pings to stablize. |
+ SIMULATED_WAIT(conn->num_pings_sent() > MIN_PINGS_TO_STABILIZE, |
+ kDefaultTimeout, clock); |
+ // The connection become writable and receiving. |
+ conn->ReceivedPingResponse(); |
+ int ping_sent_before = conn->num_pings_sent(); |
+ int64_t start = clock.TimeNanos() / 1000000; |
+ SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, |
+ stabilized_timeout, clock); |
+ int64_t duration = clock.TimeNanos() / 1000000 - start; |
+ EXPECT_TRUE(duration >= 2500 && duration <= 2600); |
+} |
+ |
+// Verify that a stabilized connection will ping faster if a in-flight ping time |
+// out. |
+TEST_F(P2PTransportChannelPingTest, TestTimeoutPingInterval) { |
+ rtc::ScopedFakeClock clock; |
+ int stablilizing_timeout = 2000; |
+ |
+ cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
+ cricket::P2PTransportChannel ch("TestChannel", 1, &pa); |
+ PrepareChannel(&ch); |
+ ch.Connect(); |
+ ch.MaybeStartGathering(); |
+ ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); |
+ cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
+ ASSERT_TRUE(conn != nullptr); |
+ |
+ // Wait for the connection to send MIN_PINGS_TO_STABILIZE pings to stablize. |
+ SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_TO_STABILIZE, |
+ kDefaultTimeout, clock); |
+ // The connection become writable and receiving. |
+ conn->ReceivedPingResponse(); |
+ |
+ // Create a in-flight ping. |
+ conn->Ping(clock.TimeNanos() / 1000000); |
+ int ping_sent_before = conn->num_pings_sent(); |
+ int64_t start = clock.TimeNanos() / 1000000; |
+ SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, |
+ stablilizing_timeout, clock); |
+ int64_t duration = clock.TimeNanos() / 1000000 - start; |
+ EXPECT_TRUE(duration >= 900 && duration <= 1100); |
+} |
+ |
TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { |
cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
cricket::P2PTransportChannel ch("trigger checks", 1, &pa); |
@@ -2707,13 +2812,14 @@ class P2PTransportChannelMostLikelyToWorkFirstTest |
cricket::P2PTransportChannel& StartTransportChannel( |
bool prioritize_most_likely_to_work, |
- int max_strong_interval) { |
+ int stable_writable_connection_ping_interval) { |
channel_.reset( |
new cricket::P2PTransportChannel("checks", 1, nullptr, allocator())); |
cricket::IceConfig config = channel_->config(); |
config.prioritize_most_likely_candidate_pairs = |
prioritize_most_likely_to_work; |
- config.max_strong_interval = max_strong_interval; |
+ config.stable_writable_connection_ping_interval = |
+ stable_writable_connection_ping_interval; |
channel_->SetIceConfig(config); |
PrepareChannel(channel_.get()); |
channel_->Connect(); |