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

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

Issue 312553003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/pacing_sender.h" 5 #include "net/quic/congestion_control/pacing_sender.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "net/quic/quic_protocol.h" 9 #include "net/quic/quic_protocol.h"
10 #include "net/quic/test_tools/mock_clock.h" 10 #include "net/quic/test_tools/mock_clock.h"
(...skipping 20 matching lines...) Expand all
31 QuicTime::Delta::FromMilliseconds(1))) { 31 QuicTime::Delta::FromMilliseconds(1))) {
32 // Pick arbitrary time. 32 // Pick arbitrary time.
33 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(9)); 33 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(9));
34 } 34 }
35 35
36 virtual ~PacingSenderTest() {} 36 virtual ~PacingSenderTest() {}
37 37
38 void CheckPacketIsSentImmediately() { 38 void CheckPacketIsSentImmediately() {
39 // In order for the packet to be sendable, the underlying sender must 39 // In order for the packet to be sendable, the underlying sender must
40 // permit it to be sent immediately. 40 // permit it to be sent immediately.
41 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), 41 for (int i = 0; i < 2; ++i) {
42 kBytesInFlight, 42 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(),
43 HAS_RETRANSMITTABLE_DATA)) 43 kBytesInFlight,
44 .WillOnce(Return(zero_time_)); 44 HAS_RETRANSMITTABLE_DATA))
45 // Verify that the packet can be sent immediately. 45 .WillOnce(Return(zero_time_));
46 EXPECT_EQ(zero_time_, 46 // Verify that the packet can be sent immediately.
47 pacing_sender_->TimeUntilSend(clock_.Now(), 47 EXPECT_EQ(zero_time_,
48 kBytesInFlight, 48 pacing_sender_->TimeUntilSend(clock_.Now(),
49 HAS_RETRANSMITTABLE_DATA)); 49 kBytesInFlight,
50 HAS_RETRANSMITTABLE_DATA));
51 }
50 52
51 // Actually send the packet. 53 // Actually send the packet.
52 EXPECT_CALL(*mock_sender_, 54 EXPECT_CALL(*mock_sender_,
53 OnPacketSent(clock_.Now(), kBytesInFlight, sequence_number_, 55 OnPacketSent(clock_.Now(), kBytesInFlight, sequence_number_,
54 kMaxPacketSize, HAS_RETRANSMITTABLE_DATA)); 56 kMaxPacketSize, HAS_RETRANSMITTABLE_DATA));
55 pacing_sender_->OnPacketSent(clock_.Now(), kBytesInFlight, 57 pacing_sender_->OnPacketSent(clock_.Now(), kBytesInFlight,
56 sequence_number_++, kMaxPacketSize, 58 sequence_number_++, kMaxPacketSize,
57 HAS_RETRANSMITTABLE_DATA); 59 HAS_RETRANSMITTABLE_DATA);
58 } 60 }
59 61
(...skipping 15 matching lines...) Expand all
75 OnPacketSent(clock_.Now(), 0, sequence_number_, 77 OnPacketSent(clock_.Now(), 0, sequence_number_,
76 kMaxPacketSize, NO_RETRANSMITTABLE_DATA)); 78 kMaxPacketSize, NO_RETRANSMITTABLE_DATA));
77 pacing_sender_->OnPacketSent(clock_.Now(), 0, 79 pacing_sender_->OnPacketSent(clock_.Now(), 0,
78 sequence_number_++, kMaxPacketSize, 80 sequence_number_++, kMaxPacketSize,
79 NO_RETRANSMITTABLE_DATA); 81 NO_RETRANSMITTABLE_DATA);
80 } 82 }
81 83
82 void CheckPacketIsDelayed(QuicTime::Delta delay) { 84 void CheckPacketIsDelayed(QuicTime::Delta delay) {
83 // In order for the packet to be sendable, the underlying sender must 85 // In order for the packet to be sendable, the underlying sender must
84 // permit it to be sent immediately. 86 // permit it to be sent immediately.
85 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), 87 for (int i = 0; i < 2; ++i) {
86 kBytesInFlight, 88 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(),
87 HAS_RETRANSMITTABLE_DATA)) 89 kBytesInFlight,
88 .WillOnce(Return(zero_time_)); 90 HAS_RETRANSMITTABLE_DATA))
89 // Verify that the packet is delayed. 91 .WillOnce(Return(zero_time_));
90 EXPECT_EQ(delay.ToMicroseconds(), 92 // Verify that the packet is delayed.
91 pacing_sender_->TimeUntilSend( 93 EXPECT_EQ(delay.ToMicroseconds(),
92 clock_.Now(), kBytesInFlight, 94 pacing_sender_->TimeUntilSend(
93 HAS_RETRANSMITTABLE_DATA).ToMicroseconds()); 95 clock_.Now(), kBytesInFlight,
96 HAS_RETRANSMITTABLE_DATA).ToMicroseconds());
97 }
94 } 98 }
95 99
96 const QuicTime::Delta zero_time_; 100 const QuicTime::Delta zero_time_;
97 const QuicTime::Delta infinite_time_; 101 const QuicTime::Delta infinite_time_;
98 MockClock clock_; 102 MockClock clock_;
99 QuicPacketSequenceNumber sequence_number_; 103 QuicPacketSequenceNumber sequence_number_;
100 StrictMock<MockSendAlgorithm>* mock_sender_; 104 StrictMock<MockSendAlgorithm>* mock_sender_;
101 scoped_ptr<PacingSender> pacing_sender_; 105 scoped_ptr<PacingSender> pacing_sender_;
102 }; 106 };
103 107
104 TEST_F(PacingSenderTest, NoSend) { 108 TEST_F(PacingSenderTest, NoSend) {
105 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), 109 for (int i = 0; i < 2; ++i) {
106 kBytesInFlight, 110 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(),
107 HAS_RETRANSMITTABLE_DATA)) 111 kBytesInFlight,
108 .WillOnce(Return(infinite_time_)); 112 HAS_RETRANSMITTABLE_DATA))
109 EXPECT_EQ(infinite_time_, 113 .WillOnce(Return(infinite_time_));
110 pacing_sender_->TimeUntilSend(clock_.Now(), 114 EXPECT_EQ(infinite_time_,
111 kBytesInFlight, 115 pacing_sender_->TimeUntilSend(clock_.Now(),
112 HAS_RETRANSMITTABLE_DATA)); 116 kBytesInFlight,
117 HAS_RETRANSMITTABLE_DATA));
118 }
113 } 119 }
114 120
115 TEST_F(PacingSenderTest, SendNow) { 121 TEST_F(PacingSenderTest, SendNow) {
116 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), 122 for (int i = 0; i < 2; ++i) {
117 kBytesInFlight, 123 EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(),
118 HAS_RETRANSMITTABLE_DATA)) 124 kBytesInFlight,
119 .WillOnce(Return(zero_time_)); 125 HAS_RETRANSMITTABLE_DATA))
120 EXPECT_EQ(zero_time_, 126 .WillOnce(Return(zero_time_));
121 pacing_sender_->TimeUntilSend(clock_.Now(), 127 EXPECT_EQ(zero_time_,
122 kBytesInFlight, 128 pacing_sender_->TimeUntilSend(clock_.Now(),
123 HAS_RETRANSMITTABLE_DATA)); 129 kBytesInFlight,
130 HAS_RETRANSMITTABLE_DATA));
131 }
124 } 132 }
125 133
126 TEST_F(PacingSenderTest, VariousSending) { 134 TEST_F(PacingSenderTest, VariousSending) {
127 // Configure bandwith of 1 packet per 2 ms, for which the pacing rate 135 // Configure bandwith of 1 packet per 2 ms, for which the pacing rate
128 // will be 1 packet per 1 ms. 136 // will be 1 packet per 1 ms.
129 EXPECT_CALL(*mock_sender_, BandwidthEstimate()) 137 EXPECT_CALL(*mock_sender_, BandwidthEstimate())
130 .WillRepeatedly(Return(QuicBandwidth::FromBytesAndTimeDelta( 138 .WillRepeatedly(Return(QuicBandwidth::FromBytesAndTimeDelta(
131 kMaxPacketSize, QuicTime::Delta::FromMilliseconds(2)))); 139 kMaxPacketSize, QuicTime::Delta::FromMilliseconds(2))));
132 140
133 // Send a whole pile of packets, and verify that they are not paced. 141 // Send a whole pile of packets, and verify that they are not paced.
(...skipping 22 matching lines...) Expand all
156 CheckAckIsSentImmediately(); 164 CheckAckIsSentImmediately();
157 165
158 // Wake up late. 166 // Wake up late.
159 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(4)); 167 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(4));
160 CheckPacketIsSentImmediately(); 168 CheckPacketIsSentImmediately();
161 CheckPacketIsSentImmediately(); 169 CheckPacketIsSentImmediately();
162 CheckPacketIsSentImmediately(); 170 CheckPacketIsSentImmediately();
163 CheckPacketIsSentImmediately(); 171 CheckPacketIsSentImmediately();
164 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); 172 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2));
165 173
174 // Wake up really late.
175 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8));
176 CheckPacketIsSentImmediately();
177 CheckPacketIsSentImmediately();
178 CheckPacketIsSentImmediately();
179 CheckPacketIsSentImmediately();
180 CheckPacketIsSentImmediately();
181 CheckPacketIsSentImmediately();
182 CheckPacketIsSentImmediately();
183 CheckPacketIsSentImmediately();
184 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2));
185
186 // Wake up really late again, but application pause partway through.
187 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8));
188 CheckPacketIsSentImmediately();
189 CheckPacketIsSentImmediately();
190 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
191 CheckPacketIsSentImmediately();
192 CheckPacketIsSentImmediately();
193 CheckPacketIsSentImmediately();
194 CheckPacketIsSentImmediately();
195 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2));
196
166 // Wake up too early. 197 // Wake up too early.
167 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); 198 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2));
168 199
169 // Wake up early, but after enough time has passed to permit a send. 200 // Wake up early, but after enough time has passed to permit a send.
170 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 201 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
171 CheckPacketIsSentImmediately(); 202 CheckPacketIsSentImmediately();
172 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); 203 CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2));
173 } 204 }
174 205
175 } // namespace test 206 } // namespace test
176 } // namespace net 207 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/pacing_sender.cc ('k') | net/quic/crypto/crypto_handshake_message.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698