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

Side by Side Diff: net/quic/quic_connection_helper_test.cc

Issue 12806002: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor comment fix Created 7 years, 9 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
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_connection_logger.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/quic_connection_helper.h" 5 #include "net/quic/quic_connection_helper.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/quic/crypto/quic_decrypter.h" 10 #include "net/quic/crypto/quic_decrypter.h"
(...skipping 12 matching lines...) Expand all
23 namespace test { 23 namespace test {
24 24
25 const char kData[] = "foo"; 25 const char kData[] = "foo";
26 const bool kHasData = true; 26 const bool kHasData = true;
27 27
28 class TestConnection : public QuicConnection { 28 class TestConnection : public QuicConnection {
29 public: 29 public:
30 TestConnection(QuicGuid guid, 30 TestConnection(QuicGuid guid,
31 IPEndPoint address, 31 IPEndPoint address,
32 QuicConnectionHelper* helper) 32 QuicConnectionHelper* helper)
33 : QuicConnection(guid, address, helper) { 33 : QuicConnection(guid, address, helper, false) {
34 } 34 }
35 35
36 void SendAck() { 36 void SendAck() {
37 QuicConnectionPeer::SendAck(this); 37 QuicConnectionPeer::SendAck(this);
38 } 38 }
39 39
40 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { 40 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) {
41 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); 41 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm);
42 } 42 }
43 43
(...skipping 10 matching lines...) Expand all
54 packet(packet) { 54 packet(packet) {
55 } 55 }
56 IoMode mode; 56 IoMode mode;
57 QuicEncryptedPacket* packet; 57 QuicEncryptedPacket* packet;
58 }; 58 };
59 59
60 QuicConnectionHelperTest() 60 QuicConnectionHelperTest()
61 : guid_(2), 61 : guid_(2),
62 framer_(kQuicVersion1, 62 framer_(kQuicVersion1,
63 QuicDecrypter::Create(kNULL), 63 QuicDecrypter::Create(kNULL),
64 QuicEncrypter::Create(kNULL)), 64 QuicEncrypter::Create(kNULL),
65 creator_(guid_, &framer_, QuicRandom::GetInstance()), 65 false),
66 net_log_(BoundNetLog()), 66 net_log_(BoundNetLog()),
67 frame_(1, false, 0, kData) { 67 frame_(1, false, 0, kData) {
68 Initialize(); 68 Initialize();
69 } 69 }
70 70
71 ~QuicConnectionHelperTest() { 71 ~QuicConnectionHelperTest() {
72 for (size_t i = 0; i < writes_.size(); i++) { 72 for (size_t i = 0; i < writes_.size(); i++) {
73 delete writes_[i].packet; 73 delete writes_[i].packet;
74 } 74 }
75 } 75 }
(...skipping 24 matching lines...) Expand all
100 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(), 100 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(),
101 writes_.size())); 101 writes_.size()));
102 102
103 MockUDPClientSocket* socket = 103 MockUDPClientSocket* socket =
104 new MockUDPClientSocket(socket_data_.get(), net_log_.net_log()); 104 new MockUDPClientSocket(socket_data_.get(), net_log_.net_log());
105 socket->Connect(IPEndPoint()); 105 socket->Connect(IPEndPoint());
106 runner_ = new TestTaskRunner(&clock_); 106 runner_ = new TestTaskRunner(&clock_);
107 helper_.reset(new QuicConnectionHelper(runner_.get(), &clock_, 107 helper_.reset(new QuicConnectionHelper(runner_.get(), &clock_,
108 &random_generator_, socket)); 108 &random_generator_, socket));
109 send_algorithm_ = new testing::StrictMock<MockSendAlgorithm>(); 109 send_algorithm_ = new testing::StrictMock<MockSendAlgorithm>();
110 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)). 110 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).
111 WillRepeatedly(testing::Return(QuicTime::Delta::Zero())); 111 WillRepeatedly(testing::Return(QuicTime::Delta::Zero()));
112 connection_.reset(new TestConnection(guid_, IPEndPoint(), helper_.get())); 112 connection_.reset(new TestConnection(guid_, IPEndPoint(), helper_.get()));
113 connection_->set_visitor(&visitor_); 113 connection_->set_visitor(&visitor_);
114 connection_->SetSendAlgorithm(send_algorithm_); 114 connection_->SetSendAlgorithm(send_algorithm_);
115 } 115 }
116 116
117 // Returns a newly created packet to send kData on stream 1. 117 // Returns a newly created packet to send kData on stream 1.
118 QuicEncryptedPacket* ConstructDataPacket( 118 QuicEncryptedPacket* ConstructDataPacket(
119 QuicPacketSequenceNumber sequence_number) { 119 QuicPacketSequenceNumber sequence_number) {
120 InitializeHeader(sequence_number); 120 InitializeHeader(sequence_number);
121 121
122 return ConstructPacket(header_, QuicFrame(&frame_)); 122 return ConstructPacket(header_, QuicFrame(&frame_));
123 } 123 }
124 124
125 // Returns a newly created packet to send kData on stream 1. 125 // Returns a newly created packet to send kData on stream 1.
126 QuicPacket* ConstructRawDataPacket( 126 QuicPacket* ConstructRawDataPacket(
127 QuicPacketSequenceNumber sequence_number) { 127 QuicPacketSequenceNumber sequence_number) {
128 InitializeHeader(sequence_number); 128 InitializeHeader(sequence_number);
129 129
130 QuicFrames frames; 130 QuicFrames frames;
131 frames.push_back(QuicFrame(&frame_)); 131 frames.push_back(QuicFrame(&frame_));
132 return framer_.ConstructFrameDataPacket(header_, frames).packet; 132 return framer_.ConstructFrameDataPacket(header_, frames).packet;
133 } 133 }
134 134
135 // Returns a newly created packet to send ack data. 135 // Returns a newly created packet to send ack data.
136 QuicEncryptedPacket* ConstructAckPacket( 136 QuicEncryptedPacket* ConstructAckPacket(
137 QuicPacketSequenceNumber sequence_number) { 137 QuicPacketSequenceNumber sequence_number) {
138 InitializeHeader(sequence_number); 138 InitializeHeader(sequence_number);
139 139
140 QuicAckFrame ack(0, sequence_number); 140 QuicAckFrame ack(0, QuicTime::Zero(), sequence_number);
141 ack.sent_info.entropy_hash = 0; 141 ack.sent_info.entropy_hash = 0;
142 ack.received_info.entropy_hash = 0; 142 ack.received_info.entropy_hash = 0;
143 143
144 QuicCongestionFeedbackFrame feedback; 144 QuicCongestionFeedbackFrame feedback;
145 feedback.type = kTCP; 145 feedback.type = kTCP;
146 feedback.tcp.accumulated_number_of_lost_packets = 0; 146 feedback.tcp.accumulated_number_of_lost_packets = 0;
147 feedback.tcp.receive_window = 16000 << 4; 147 feedback.tcp.receive_window = 16000 << 4;
148 148
149 QuicFrames frames; 149 QuicFrames frames;
150 frames.push_back(QuicFrame(&ack)); 150 frames.push_back(QuicFrame(&ack));
151 frames.push_back(QuicFrame(&feedback)); 151 frames.push_back(QuicFrame(&feedback));
152 scoped_ptr<QuicPacket> packet( 152 scoped_ptr<QuicPacket> packet(
153 framer_.ConstructFrameDataPacket(header_, frames).packet); 153 framer_.ConstructFrameDataPacket(header_, frames).packet);
154 return framer_.EncryptPacket(header_.packet_sequence_number, *packet); 154 return framer_.EncryptPacket(header_.packet_sequence_number, *packet);
155 } 155 }
156 156
157 // Returns a newly created packet to send a connection close frame. 157 // Returns a newly created packet to send a connection close frame.
158 QuicEncryptedPacket* ConstructClosePacket( 158 QuicEncryptedPacket* ConstructClosePacket(
159 QuicPacketSequenceNumber sequence_number, 159 QuicPacketSequenceNumber sequence_number,
160 QuicPacketSequenceNumber least_waiting) { 160 QuicPacketSequenceNumber least_waiting) {
161 InitializeHeader(sequence_number); 161 InitializeHeader(sequence_number);
162 162
163 QuicFrames frames; 163 QuicFrames frames;
164 QuicAckFrame ack(0, least_waiting + 1); 164 QuicAckFrame ack(0, QuicTime::Zero(), least_waiting + 1);
165 ack.sent_info.entropy_hash = 0; 165 ack.sent_info.entropy_hash = 0;
166 ack.received_info.entropy_hash = 0; 166 ack.received_info.entropy_hash = 0;
167 QuicConnectionCloseFrame close; 167 QuicConnectionCloseFrame close;
168 close.error_code = QUIC_CONNECTION_TIMED_OUT; 168 close.error_code = QUIC_CONNECTION_TIMED_OUT;
169 close.ack_frame = ack; 169 close.ack_frame = ack;
170 170
171 return ConstructPacket(header_, QuicFrame(&close)); 171 return ConstructPacket(header_, QuicFrame(&close));
172 } 172 }
173 173
174 testing::StrictMock<MockSendAlgorithm>* send_algorithm_; 174 testing::StrictMock<MockSendAlgorithm>* send_algorithm_;
175 scoped_refptr<TestTaskRunner> runner_; 175 scoped_refptr<TestTaskRunner> runner_;
176 scoped_ptr<QuicConnectionHelper> helper_; 176 scoped_ptr<QuicConnectionHelper> helper_;
177 scoped_array<MockWrite> mock_writes_; 177 scoped_array<MockWrite> mock_writes_;
178 MockClock clock_; 178 MockClock clock_;
179 MockRandom random_generator_; 179 MockRandom random_generator_;
180 scoped_ptr<TestConnection> connection_; 180 scoped_ptr<TestConnection> connection_;
181 testing::StrictMock<MockConnectionVisitor> visitor_; 181 testing::StrictMock<MockConnectionVisitor> visitor_;
182 182
183 private: 183 private:
184 void InitializeHeader(QuicPacketSequenceNumber sequence_number) { 184 void InitializeHeader(QuicPacketSequenceNumber sequence_number) {
185 header_.public_header.guid = guid_; 185 header_.public_header.guid = guid_;
186 header_.public_header.reset_flag = false; 186 header_.public_header.reset_flag = false;
187 header_.public_header.version_flag = false; 187 header_.public_header.version_flag = true;
188 header_.packet_sequence_number = sequence_number; 188 header_.packet_sequence_number = sequence_number;
189 header_.entropy_flag = false; 189 header_.entropy_flag = false;
190 header_.fec_entropy_flag = false; 190 header_.fec_entropy_flag = false;
191 header_.fec_flag = false; 191 header_.fec_flag = false;
192 header_.fec_group = 0; 192 header_.fec_group = 0;
193 } 193 }
194 194
195 QuicEncryptedPacket* ConstructPacket(const QuicPacketHeader& header, 195 QuicEncryptedPacket* ConstructPacket(const QuicPacketHeader& header,
196 const QuicFrame& frame) { 196 const QuicFrame& frame) {
197 QuicFrames frames; 197 QuicFrames frames;
198 frames.push_back(frame); 198 frames.push_back(frame);
199 scoped_ptr<QuicPacket> packet( 199 scoped_ptr<QuicPacket> packet(
200 framer_.ConstructFrameDataPacket(header_, frames).packet); 200 framer_.ConstructFrameDataPacket(header_, frames).packet);
201 return framer_.EncryptPacket(header_.packet_sequence_number, *packet); 201 return framer_.EncryptPacket(header_.packet_sequence_number, *packet);
202 } 202 }
203 203
204 QuicGuid guid_; 204 QuicGuid guid_;
205 QuicFramer framer_; 205 QuicFramer framer_;
206 QuicPacketCreator creator_;
207 QuicPacketHeader header_; 206 QuicPacketHeader header_;
208 BoundNetLog net_log_; 207 BoundNetLog net_log_;
209 QuicStreamFrame frame_; 208 QuicStreamFrame frame_;
210 scoped_ptr<StaticSocketDataProvider> socket_data_; 209 scoped_ptr<StaticSocketDataProvider> socket_data_;
211 std::vector<PacketToWrite> writes_; 210 std::vector<PacketToWrite> writes_;
212 }; 211 };
213 212
214 TEST_F(QuicConnectionHelperTest, GetClock) { 213 TEST_F(QuicConnectionHelperTest, GetClock) {
215 EXPECT_EQ(&clock_, helper_->GetClock()); 214 EXPECT_EQ(&clock_, helper_->GetClock());
216 } 215 }
(...skipping 25 matching lines...) Expand all
242 ASSERT_EQ(1u, runner_->GetPostedTasks().size()); 241 ASSERT_EQ(1u, runner_->GetPostedTasks().size());
243 242
244 QuicTime::Delta delta(QuicTime::Delta::FromMilliseconds(10)); 243 QuicTime::Delta delta(QuicTime::Delta::FromMilliseconds(10));
245 helper_->SetAckAlarm(delta); 244 helper_->SetAckAlarm(delta);
246 245
247 // Verify that the ack alarm task has been posted. 246 // Verify that the ack alarm task has been posted.
248 ASSERT_EQ(2u, runner_->GetPostedTasks().size()); 247 ASSERT_EQ(2u, runner_->GetPostedTasks().size());
249 EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()), 248 EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()),
250 runner_->GetPostedTasks()[1].delay); 249 runner_->GetPostedTasks()[1].delay);
251 250
252 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, !kHasData)); 251 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
253 runner_->RunNextTask(); 252 runner_->RunNextTask();
254 EXPECT_EQ(QuicTime::Zero().Add(delta), clock_.ApproximateNow()); 253 EXPECT_EQ(QuicTime::Zero().Add(delta), clock_.ApproximateNow());
255 } 254 }
256 255
257 TEST_F(QuicConnectionHelperTest, ClearAckAlarm) { 256 TEST_F(QuicConnectionHelperTest, ClearAckAlarm) {
258 Initialize(); 257 Initialize();
259 258
260 // Verify that the timeout alarm task has been posted. 259 // Verify that the timeout alarm task has been posted.
261 ASSERT_EQ(1u, runner_->GetPostedTasks().size()); 260 ASSERT_EQ(1u, runner_->GetPostedTasks().size());
262 261
(...skipping 23 matching lines...) Expand all
286 ASSERT_EQ(2u, runner_->GetPostedTasks().size()); 285 ASSERT_EQ(2u, runner_->GetPostedTasks().size());
287 286
288 // The task will execute at delta1, but will not send and ack, 287 // The task will execute at delta1, but will not send and ack,
289 // but it will reschedule itself for delta2 288 // but it will reschedule itself for delta2
290 runner_->RunNextTask(); 289 runner_->RunNextTask();
291 EXPECT_EQ(QuicTime::Zero().Add(delta1), clock_.ApproximateNow()); 290 EXPECT_EQ(QuicTime::Zero().Add(delta1), clock_.ApproximateNow());
292 291
293 // Verify that the ack alarm task has been re-posted. 292 // Verify that the ack alarm task has been re-posted.
294 ASSERT_EQ(2u, runner_->GetPostedTasks().size()); 293 ASSERT_EQ(2u, runner_->GetPostedTasks().size());
295 294
296 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, !kHasData)); 295 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
297 runner_->RunNextTask(); 296 runner_->RunNextTask();
298 EXPECT_EQ(QuicTime::Zero().Add(delta2), clock_.ApproximateNow()); 297 EXPECT_EQ(QuicTime::Zero().Add(delta2), clock_.ApproximateNow());
299 } 298 }
300 299
301 TEST_F(QuicConnectionHelperTest, TestRetransmission) { 300 TEST_F(QuicConnectionHelperTest, TestRetransmission) {
302 AddWrite(SYNCHRONOUS, ConstructDataPacket(1)); 301 AddWrite(SYNCHRONOUS, ConstructDataPacket(1));
303 AddWrite(SYNCHRONOUS, ConstructDataPacket(2)); 302 AddWrite(SYNCHRONOUS, ConstructDataPacket(2));
304 Initialize(); 303 Initialize();
305 304
306 QuicTime::Delta kDefaultRetransmissionTime = 305 QuicTime::Delta kDefaultRetransmissionTime =
307 QuicTime::Delta::FromMilliseconds(500); 306 QuicTime::Delta::FromMilliseconds(500);
308 QuicTime start = clock_.ApproximateNow(); 307 QuicTime start = clock_.ApproximateNow();
309 308
310 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, kHasData)); 309 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
310 EXPECT_CALL(*send_algorithm_, AbandoningPacket(1, _));
311 // Send a packet. 311 // Send a packet.
312 connection_->SendStreamData(1, kData, 0, false); 312 connection_->SendStreamData(1, kData, 0, false);
313 EXPECT_CALL(*send_algorithm_, SentPacket(_, 2, _, true, kHasData)); 313 EXPECT_CALL(*send_algorithm_, SentPacket(_, 2, _, true));
314 // Since no ack was received, the retransmission alarm will fire and 314 // Since no ack was received, the retransmission alarm will fire and
315 // retransmit it. 315 // retransmit it.
316 runner_->RunNextTask(); 316 runner_->RunNextTask();
317 317
318 EXPECT_EQ(kDefaultRetransmissionTime, 318 EXPECT_EQ(kDefaultRetransmissionTime,
319 clock_.ApproximateNow().Subtract(start)); 319 clock_.ApproximateNow().Subtract(start));
320 EXPECT_TRUE(AtEof()); 320 EXPECT_TRUE(AtEof());
321 } 321 }
322 322
323 TEST_F(QuicConnectionHelperTest, InitialTimeout) { 323 TEST_F(QuicConnectionHelperTest, InitialTimeout) {
324 AddWrite(SYNCHRONOUS, ConstructClosePacket(1, 0)); 324 AddWrite(SYNCHRONOUS, ConstructClosePacket(1, 0));
325 Initialize(); 325 Initialize();
326 326
327 // Verify that a single task was posted. 327 // Verify that a single task was posted.
328 ASSERT_EQ(1u, runner_->GetPostedTasks().size()); 328 ASSERT_EQ(1u, runner_->GetPostedTasks().size());
329 EXPECT_EQ(base::TimeDelta::FromMicroseconds(kDefaultTimeoutUs), 329 EXPECT_EQ(base::TimeDelta::FromMicroseconds(kDefaultTimeoutUs),
330 runner_->GetPostedTasks().front().delay); 330 runner_->GetPostedTasks().front().delay);
331 331
332 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, !kHasData)); 332 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
333 // After we run the next task, we should close the connection. 333 // After we run the next task, we should close the connection.
334 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); 334 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false));
335 335
336 runner_->RunNextTask(); 336 runner_->RunNextTask();
337 EXPECT_EQ(QuicTime::FromMicroseconds(kDefaultTimeoutUs), 337 EXPECT_EQ(QuicTime::FromMicroseconds(kDefaultTimeoutUs),
338 clock_.ApproximateNow()); 338 clock_.ApproximateNow());
339 EXPECT_FALSE(connection_->connected()); 339 EXPECT_FALSE(connection_->connected());
340 EXPECT_TRUE(AtEof()); 340 EXPECT_TRUE(AtEof());
341 } 341 }
342 342
(...skipping 24 matching lines...) Expand all
367 AddWrite(SYNCHRONOUS, ConstructAckPacket(1)); 367 AddWrite(SYNCHRONOUS, ConstructAckPacket(1));
368 AddWrite(SYNCHRONOUS, ConstructClosePacket(2, 1)); 368 AddWrite(SYNCHRONOUS, ConstructClosePacket(2, 1));
369 Initialize(); 369 Initialize();
370 370
371 EXPECT_TRUE(connection_->connected()); 371 EXPECT_TRUE(connection_->connected());
372 EXPECT_EQ(0u, clock_.ApproximateNow().ToMicroseconds()); 372 EXPECT_EQ(0u, clock_.ApproximateNow().ToMicroseconds());
373 373
374 // When we send a packet, the timeout will change to 5000 + kDefaultTimeout. 374 // When we send a packet, the timeout will change to 5000 + kDefaultTimeout.
375 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(5000)); 375 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(5000));
376 EXPECT_EQ(5000u, clock_.ApproximateNow().ToMicroseconds()); 376 EXPECT_EQ(5000u, clock_.ApproximateNow().ToMicroseconds());
377 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, !kHasData)); 377 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
378 378
379 // Send an ack so we don't set the retransmission alarm. 379 // Send an ack so we don't set the retransmission alarm.
380 connection_->SendAck(); 380 connection_->SendAck();
381 381
382 // The original alarm will fire. We should not time out because we had a 382 // The original alarm will fire. We should not time out because we had a
383 // network event at t=5000. The alarm will reregister. 383 // network event at t=5000. The alarm will reregister.
384 runner_->RunNextTask(); 384 runner_->RunNextTask();
385 385
386 EXPECT_EQ(QuicTime::FromMicroseconds(kDefaultTimeoutUs), 386 EXPECT_EQ(QuicTime::FromMicroseconds(kDefaultTimeoutUs),
387 clock_.ApproximateNow()); 387 clock_.ApproximateNow());
388 EXPECT_TRUE(connection_->connected()); 388 EXPECT_TRUE(connection_->connected());
389 389
390 // This time, we should time out. 390 // This time, we should time out.
391 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); 391 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false));
392 EXPECT_CALL(*send_algorithm_, SentPacket(_, 2, _, false, !kHasData)); 392 EXPECT_CALL(*send_algorithm_, SentPacket(_, 2, _, false));
393 runner_->RunNextTask(); 393 runner_->RunNextTask();
394 EXPECT_EQ(kDefaultTimeoutUs + 5000, clock_.ApproximateNow().ToMicroseconds()); 394 EXPECT_EQ(kDefaultTimeoutUs + 5000, clock_.ApproximateNow().ToMicroseconds());
395 EXPECT_FALSE(connection_->connected()); 395 EXPECT_FALSE(connection_->connected());
396 EXPECT_TRUE(AtEof()); 396 EXPECT_TRUE(AtEof());
397 } 397 }
398 398
399 TEST_F(QuicConnectionHelperTest, SendSchedulerDelayThenSend) { 399 TEST_F(QuicConnectionHelperTest, SendSchedulerDelayThenSend) {
400 AddWrite(SYNCHRONOUS, ConstructDataPacket(1)); 400 AddWrite(SYNCHRONOUS, ConstructDataPacket(1));
401 Initialize(); 401 Initialize();
402 402
403 // Test that if we send a packet with a delay, it ends up queued. 403 // Test that if we send a packet with a delay, it ends up queued.
404 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, false)).WillOnce( 404 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, false, _)).WillOnce(
405 testing::Return(QuicTime::Delta::FromMicroseconds(1))); 405 testing::Return(QuicTime::Delta::FromMicroseconds(1)));
406 406
407 QuicPacket* packet = ConstructRawDataPacket(1); 407 QuicPacket* packet = ConstructRawDataPacket(1);
408 connection_->SendOrQueuePacket(1, packet, 0, kHasData); 408 connection_->SendOrQueuePacket(1, packet, 0, kHasData);
409 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false, kHasData)); 409 EXPECT_CALL(*send_algorithm_, SentPacket(_, 1, _, false));
410 EXPECT_EQ(1u, connection_->NumQueuedPackets()); 410 EXPECT_EQ(1u, connection_->NumQueuedPackets());
411 411
412 // Advance the clock to fire the alarm, and configure the scheduler 412 // Advance the clock to fire the alarm, and configure the scheduler
413 // to permit the packet to be sent. 413 // to permit the packet to be sent.
414 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, false)).WillOnce( 414 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, false, _)).WillRepeatedly(
415 testing::Return(QuicTime::Delta::Zero())); 415 testing::Return(QuicTime::Delta::Zero()));
416 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(testing::Return(true)); 416 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(testing::Return(true));
417 runner_->RunNextTask(); 417 runner_->RunNextTask();
418 EXPECT_EQ(0u, connection_->NumQueuedPackets()); 418 EXPECT_EQ(0u, connection_->NumQueuedPackets());
419 EXPECT_TRUE(AtEof()); 419 EXPECT_TRUE(AtEof());
420 } 420 }
421 421
422 } // namespace test 422 } // namespace test
423 } // namespace net 423 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_connection_logger.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698