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

Unified Diff: webrtc/p2p/base/dtlstransportchannel_unittest.cc

Issue 1981463002: Change initial DTLS retransmission timer from 1 second to 50ms. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing typo in comment. Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/timeutils.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/dtlstransportchannel_unittest.cc
diff --git a/webrtc/p2p/base/dtlstransportchannel_unittest.cc b/webrtc/p2p/base/dtlstransportchannel_unittest.cc
index 486b51aec9788a0cc4d9bd8805ffb33f44482a3c..705df2d95f0d6e28a37a1e38f63feaf087969b68 100644
--- a/webrtc/p2p/base/dtlstransportchannel_unittest.cc
+++ b/webrtc/p2p/base/dtlstransportchannel_unittest.cc
@@ -22,10 +22,10 @@
#include "webrtc/base/sslstreamadapter.h"
#include "webrtc/base/stringutils.h"
-#define MAYBE_SKIP_TEST(feature) \
- if (!(rtc::SSLStreamAdapter::feature())) { \
- LOG(LS_INFO) << "Feature disabled... skipping"; \
- return; \
+#define MAYBE_SKIP_TEST(feature) \
+ if (!(rtc::SSLStreamAdapter::feature())) { \
+ LOG(LS_INFO) << #feature " feature disabled... skipping"; \
+ return; \
}
static const char kIceUfrag1[] = "TESTICEUFRAG0001";
@@ -413,7 +413,8 @@ class DtlsTestClient : public sigslot::has_slots<> {
rtc::SentPacket sent_packet_;
};
-
+// Note that this test always uses a FakeClock, due to the |fake_clock_| member
+// variable.
class DtlsTransportChannelTest : public testing::Test {
public:
DtlsTransportChannelTest()
@@ -561,6 +562,7 @@ class DtlsTransportChannelTest : public testing::Test {
}
protected:
+ rtc::ScopedFakeClock fake_clock_;
DtlsTestClient client1_;
DtlsTestClient client2_;
int channel_ct_;
@@ -974,3 +976,45 @@ TEST_F(DtlsTransportChannelTest,
kTimeout);
EXPECT_EQ(1, client1_.received_dtls_client_hellos());
}
+
+// Test that packets are retransmitted according to the expected schedule.
+// Each time a timeout occurs, the retransmission timer should be doubled up to
+// 60 seconds. The timer defaults to 1 second, but for WebRTC we should be
+// initializing it to 50ms.
+TEST_F(DtlsTransportChannelTest, TestRetransmissionSchedule) {
+ MAYBE_SKIP_TEST(HaveDtls);
+ // We can only change the retransmission schedule with a recently-added
+ // BoringSSL API. Skip the test if not built with BoringSSL.
+ MAYBE_SKIP_TEST(IsBoringSsl);
+
+ PrepareDtls(true, true, rtc::KT_DEFAULT);
+ // Exchange transport descriptions.
+ Negotiate(cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTIVE);
+
+ // Make client2_ writable, but not client1_.
+ // This means client1_ will send DTLS client hellos but get no response.
+ EXPECT_TRUE(client2_.Connect(&client1_, true));
+ EXPECT_TRUE_WAIT(client2_.all_raw_channels_writable(), kTimeout);
+
+ // Wait for the first client hello to be sent.
+ EXPECT_EQ_WAIT(1, client1_.received_dtls_client_hellos(), kTimeout);
+ EXPECT_FALSE(client1_.all_raw_channels_writable());
+
+ static int timeout_schedule_ms[] = {50, 100, 200, 400, 800, 1600,
+ 3200, 6400, 12800, 25600, 51200, 60000};
+
+ int expected_hellos = 1;
+ for (size_t i = 0;
+ i < (sizeof(timeout_schedule_ms) / sizeof(timeout_schedule_ms[0]));
+ ++i) {
+ // For each expected retransmission time, advance the fake clock a
+ // millisecond before the expected time and verify that no unexpected
+ // retransmissions were sent. Then advance it the final millisecond and
+ // verify that the expected retransmission was sent.
+ fake_clock_.AdvanceTime(
+ rtc::TimeDelta::FromMilliseconds(timeout_schedule_ms[i] - 1));
+ EXPECT_EQ(expected_hellos, client1_.received_dtls_client_hellos());
+ fake_clock_.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1));
+ EXPECT_EQ(++expected_hellos, client1_.received_dtls_client_hellos());
+ }
+}
« no previous file with comments | « webrtc/base/timeutils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698