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

Side by Side Diff: net/quic/congestion_control/rtt_stats_test.cc

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/congestion_control/rtt_stats.h" 5 #include "net/quic/congestion_control/rtt_stats.h"
6 6
7 #include <vector>
8
7 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "net/test/scoped_mock_log.h"
8 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
9 12
13 using logging::LOG_WARNING;
14 using std::vector;
15 using testing::HasSubstr;
16 using testing::Message;
17 using testing::_;
18
10 namespace net { 19 namespace net {
11 namespace test { 20 namespace test {
12 21
13 class RttStatsPeer { 22 class RttStatsPeer {
14 public: 23 public:
15 static QuicTime::Delta GetHalfWindowRtt(const RttStats* rtt_stats) { 24 static QuicTime::Delta GetHalfWindowRtt(const RttStats* rtt_stats) {
16 return rtt_stats->half_window_rtt_.rtt; 25 return rtt_stats->half_window_rtt_.rtt;
17 } 26 }
18 27
19 static QuicTime::Delta GetQuarterWindowRtt(const RttStats* rtt_stats) { 28 static QuicTime::Delta GetQuarterWindowRtt(const RttStats* rtt_stats) {
20 return rtt_stats->quarter_window_rtt_.rtt; 29 return rtt_stats->quarter_window_rtt_.rtt;
21 } 30 }
22 }; 31 };
23 32
24 class RttStatsTest : public ::testing::Test { 33 class RttStatsTest : public ::testing::Test {
25 protected: 34 protected:
26 RttStats rtt_stats_; 35 RttStats rtt_stats_;
27 }; 36 };
28 37
29 TEST_F(RttStatsTest, DefaultsBeforeUpdate) { 38 TEST_F(RttStatsTest, DefaultsBeforeUpdate) {
30 EXPECT_LT(0u, rtt_stats_.initial_rtt_us()); 39 EXPECT_LT(0u, rtt_stats_.initial_rtt_us());
31 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()), 40 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()),
32 rtt_stats_.MinRtt()); 41 rtt_stats_.MinRtt());
33 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()), 42 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()),
34 rtt_stats_.SmoothedRtt()); 43 rtt_stats_.SmoothedRtt());
35 } 44 }
36 45
46 TEST_F(RttStatsTest, SmoothedRtt) {
47 // Verify that ack_delay is corrected for in Smoothed RTT.
48 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300),
49 QuicTime::Delta::FromMilliseconds(100),
50 QuicTime::Zero());
51 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
52 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt());
53 // Verify that effective RTT of zero does not change Smoothed RTT.
54 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
55 QuicTime::Delta::FromMilliseconds(200),
56 QuicTime::Zero());
57 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
58 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt());
59 // Verify that large erroneous ack_delay does not change Smoothed RTT.
60 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
61 QuicTime::Delta::FromMilliseconds(300),
62 QuicTime::Zero());
63 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
64 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt());
65 }
66
37 TEST_F(RttStatsTest, MinRtt) { 67 TEST_F(RttStatsTest, MinRtt) {
38 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), 68 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
39 QuicTime::Delta::Zero(), 69 QuicTime::Delta::Zero(),
40 QuicTime::Zero()); 70 QuicTime::Zero());
41 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.MinRtt()); 71 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.MinRtt());
42 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), 72 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
43 rtt_stats_.recent_min_rtt()); 73 rtt_stats_.recent_min_rtt());
44 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10), 74 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
45 QuicTime::Delta::Zero(), 75 QuicTime::Delta::Zero(),
46 QuicTime::Zero().Add( 76 QuicTime::Zero().Add(
(...skipping 11 matching lines...) Expand all
58 QuicTime::Zero().Add( 88 QuicTime::Zero().Add(
59 QuicTime::Delta::FromMilliseconds(30))); 89 QuicTime::Delta::FromMilliseconds(30)));
60 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 90 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt());
61 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 91 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
62 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 92 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
63 QuicTime::Delta::Zero(), 93 QuicTime::Delta::Zero(),
64 QuicTime::Zero().Add( 94 QuicTime::Zero().Add(
65 QuicTime::Delta::FromMilliseconds(40))); 95 QuicTime::Delta::FromMilliseconds(40)));
66 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 96 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt());
67 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 97 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
98 // Verify that ack_delay does not go into recording of min_rtt_.
99 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(7),
100 QuicTime::Delta::FromMilliseconds(2),
101 QuicTime::Zero().Add(
102 QuicTime::Delta::FromMilliseconds(50)));
103 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.MinRtt());
104 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.recent_min_rtt());
68 } 105 }
69 106
70 TEST_F(RttStatsTest, RecentMinRtt) { 107 TEST_F(RttStatsTest, RecentMinRtt) {
71 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10), 108 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
72 QuicTime::Delta::Zero(), 109 QuicTime::Delta::Zero(),
73 QuicTime::Zero()); 110 QuicTime::Zero());
74 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 111 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt());
75 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 112 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
76 113
77 rtt_stats_.SampleNewRecentMinRtt(4); 114 rtt_stats_.SampleNewRecentMinRtt(4);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 EXPECT_EQ(initial_rtt.Multiply(0.875), rtt_stats_.mean_deviation()); 219 EXPECT_EQ(initial_rtt.Multiply(0.875), rtt_stats_.mean_deviation());
183 220
184 // Now go back down to 5ms and expire the smoothed metrics, and ensure the 221 // Now go back down to 5ms and expire the smoothed metrics, and ensure the
185 // mean deviation increases to 15ms. 222 // mean deviation increases to 15ms.
186 QuicTime::Delta half_rtt = initial_rtt.Multiply(0.5); 223 QuicTime::Delta half_rtt = initial_rtt.Multiply(0.5);
187 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 224 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
188 EXPECT_GT(doubled_rtt, rtt_stats_.SmoothedRtt()); 225 EXPECT_GT(doubled_rtt, rtt_stats_.SmoothedRtt());
189 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation()); 226 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation());
190 } 227 }
191 228
229 TEST_F(RttStatsTest, UpdateRttWithBadSendDeltas) {
230 // Make sure we ignore bad RTTs.
231 ScopedMockLog log;
232
233 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10);
234 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
235 EXPECT_EQ(initial_rtt, rtt_stats_.MinRtt());
236 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt());
237 EXPECT_EQ(initial_rtt, rtt_stats_.SmoothedRtt());
238
239 vector<QuicTime::Delta> bad_send_deltas;
240 bad_send_deltas.push_back(QuicTime::Delta::Zero());
241 bad_send_deltas.push_back(QuicTime::Delta::Infinite());
242 bad_send_deltas.push_back(QuicTime::Delta::FromMicroseconds(-1000));
243 log.StartCapturingLogs();
244
245 for (QuicTime::Delta bad_send_delta : bad_send_deltas) {
246 SCOPED_TRACE(Message() << "bad_send_delta = "
247 << bad_send_delta.ToMicroseconds());
248 EXPECT_CALL(log, Log(LOG_WARNING, _, _, _, HasSubstr("Ignoring")));
249 rtt_stats_.UpdateRtt(bad_send_delta,
250 QuicTime::Delta::Zero(),
251 QuicTime::Zero());
252 EXPECT_EQ(initial_rtt, rtt_stats_.MinRtt());
253 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt());
254 EXPECT_EQ(initial_rtt, rtt_stats_.SmoothedRtt());
255 }
256 }
257
192 } // namespace test 258 } // namespace test
193 } // namespace net 259 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/rtt_stats.cc ('k') | net/quic/congestion_control/send_algorithm_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698