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

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

Issue 20227003: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Land Recent QUIC changes Created 7 years, 5 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_packet_generator.cc ('k') | net/quic/quic_protocol.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_packet_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "net/quic/crypto/crypto_protocol.h" 9 #include "net/quic/crypto/crypto_protocol.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
(...skipping 21 matching lines...) Expand all
32 MockDelegate() {} 32 MockDelegate() {}
33 virtual ~MockDelegate() {} 33 virtual ~MockDelegate() {}
34 34
35 MOCK_METHOD2(CanWrite, bool(Retransmission retransmission, 35 MOCK_METHOD2(CanWrite, bool(Retransmission retransmission,
36 HasRetransmittableData retransmittable)); 36 HasRetransmittableData retransmittable));
37 37
38 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); 38 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*());
39 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); 39 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*());
40 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); 40 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet));
41 41
42 void SetCanWrite(bool can_write) { 42 void SetCanWriteAnything() {
43 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, _)) 43 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, _))
44 .WillRepeatedly(Return(can_write)); 44 .WillRepeatedly(Return(true));
45 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA))
46 .WillRepeatedly(Return(true));
47 }
48
49 void SetCanNotWrite() {
50 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, _))
51 .WillRepeatedly(Return(false));
52 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA))
53 .WillRepeatedly(Return(false));
54 }
55
56 // Use this when only ack and feedback frames should be allowed to be written.
57 void SetCanWriteOnlyNonRetransmittable() {
58 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, _))
59 .WillRepeatedly(Return(false));
60 EXPECT_CALL(*this, CanWrite(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA))
61 .WillRepeatedly(Return(true));
45 } 62 }
46 63
47 private: 64 private:
48 DISALLOW_COPY_AND_ASSIGN(MockDelegate); 65 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
49 }; 66 };
50 67
51 // Simple struct for describing the contents of a packet. 68 // Simple struct for describing the contents of a packet.
52 // Useful in conjunction with a SimpleQuicFrame for validating 69 // Useful in conjunction with a SimpleQuicFrame for validating
53 // that a packet contains the expected frames. 70 // that a packet contains the expected frames.
54 struct PacketContents { 71 struct PacketContents {
(...skipping 15 matching lines...) Expand all
70 size_t num_stream_frames; 87 size_t num_stream_frames;
71 88
72 QuicFecGroupNumber fec_group; 89 QuicFecGroupNumber fec_group;
73 }; 90 };
74 91
75 } // namespace 92 } // namespace
76 93
77 class QuicPacketGeneratorTest : public ::testing::Test { 94 class QuicPacketGeneratorTest : public ::testing::Test {
78 protected: 95 protected:
79 QuicPacketGeneratorTest() 96 QuicPacketGeneratorTest()
80 : framer_(kQuicVersion1, QuicTime::Zero(), false), 97 : framer_(QuicVersionMax(), QuicTime::Zero(), false),
81 creator_(42, &framer_, &random_, false), 98 creator_(42, &framer_, &random_, false),
82 generator_(&delegate_, NULL, &creator_), 99 generator_(&delegate_, NULL, &creator_),
83 packet_(0, NULL, 0, NULL), 100 packet_(0, NULL, 0, NULL),
84 packet2_(0, NULL, 0, NULL), 101 packet2_(0, NULL, 0, NULL),
85 packet3_(0, NULL, 0, NULL), 102 packet3_(0, NULL, 0, NULL),
86 packet4_(0, NULL, 0, NULL), 103 packet4_(0, NULL, 0, NULL),
87 packet5_(0, NULL, 0, NULL) { 104 packet5_(0, NULL, 0, NULL) {
88 } 105 }
89 106
90 ~QuicPacketGeneratorTest() { 107 ~QuicPacketGeneratorTest() {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 SerializedPacket packet2_; 204 SerializedPacket packet2_;
188 SerializedPacket packet3_; 205 SerializedPacket packet3_;
189 SerializedPacket packet4_; 206 SerializedPacket packet4_;
190 SerializedPacket packet5_; 207 SerializedPacket packet5_;
191 208
192 private: 209 private:
193 scoped_ptr<char[]> data_array_; 210 scoped_ptr<char[]> data_array_;
194 }; 211 };
195 212
196 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { 213 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) {
197 delegate_.SetCanWrite(false); 214 delegate_.SetCanNotWrite();
198 215
199 generator_.SetShouldSendAck(false); 216 generator_.SetShouldSendAck(false);
200 EXPECT_TRUE(generator_.HasQueuedFrames()); 217 EXPECT_TRUE(generator_.HasQueuedFrames());
201 } 218 }
202 219
203 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { 220 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) {
204 delegate_.SetCanWrite(true); 221 delegate_.SetCanWriteOnlyNonRetransmittable();
205 generator_.StartBatchOperations(); 222 generator_.StartBatchOperations();
206 223
207 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 224 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
208 225
209 generator_.SetShouldSendAck(false); 226 generator_.SetShouldSendAck(false);
210 EXPECT_TRUE(generator_.HasQueuedFrames()); 227 EXPECT_TRUE(generator_.HasQueuedFrames());
211 } 228 }
212 229
213 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { 230 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) {
214 delegate_.SetCanWrite(true); 231 delegate_.SetCanWriteOnlyNonRetransmittable();
215 232
216 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 233 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
217 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 234 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
218 DoAll(SaveArg<0>(&packet_), Return(true))); 235 DoAll(SaveArg<0>(&packet_), Return(true)));
219 236
220 generator_.SetShouldSendAck(false); 237 generator_.SetShouldSendAck(false);
221 EXPECT_FALSE(generator_.HasQueuedFrames()); 238 EXPECT_FALSE(generator_.HasQueuedFrames());
222 239
223 PacketContents contents; 240 PacketContents contents;
224 contents.num_ack_frames = 1; 241 contents.num_ack_frames = 1;
225 CheckPacketContains(contents, packet_); 242 CheckPacketContains(contents, packet_);
226 } 243 }
227 244
228 TEST_F(QuicPacketGeneratorTest, 245 TEST_F(QuicPacketGeneratorTest,
229 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { 246 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) {
230 delegate_.SetCanWrite(true); 247 delegate_.SetCanWriteOnlyNonRetransmittable();
231 generator_.StartBatchOperations(); 248 generator_.StartBatchOperations();
232 249
233 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 250 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
234 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 251 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
235 Return(CreateFeedbackFrame())); 252 Return(CreateFeedbackFrame()));
236 253
237 generator_.SetShouldSendAck(true); 254 generator_.SetShouldSendAck(true);
238 EXPECT_TRUE(generator_.HasQueuedFrames()); 255 EXPECT_TRUE(generator_.HasQueuedFrames());
239 } 256 }
240 257
241 TEST_F(QuicPacketGeneratorTest, 258 TEST_F(QuicPacketGeneratorTest,
242 ShouldSendAckWithFeedback_WritableAndShouldFlush) { 259 ShouldSendAckWithFeedback_WritableAndShouldFlush) {
243 delegate_.SetCanWrite(true); 260 delegate_.SetCanWriteOnlyNonRetransmittable();
244 261
245 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 262 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
246 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 263 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
247 Return(CreateFeedbackFrame())); 264 Return(CreateFeedbackFrame()));
248 265
249 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 266 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
250 DoAll(SaveArg<0>(&packet_), Return(true))); 267 DoAll(SaveArg<0>(&packet_), Return(true)));
251 268
252 generator_.SetShouldSendAck(true); 269 generator_.SetShouldSendAck(true);
253 EXPECT_FALSE(generator_.HasQueuedFrames()); 270 EXPECT_FALSE(generator_.HasQueuedFrames());
254 271
255 PacketContents contents; 272 PacketContents contents;
256 contents.num_ack_frames = 1; 273 contents.num_ack_frames = 1;
257 contents.num_feedback_frames = 1; 274 contents.num_feedback_frames = 1;
258 CheckPacketContains(contents, packet_); 275 CheckPacketContains(contents, packet_);
259 } 276 }
260 277
261 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { 278 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) {
262 delegate_.SetCanWrite(false); 279 delegate_.SetCanNotWrite();
280
281 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
282 EXPECT_TRUE(generator_.HasQueuedFrames());
283 }
284
285 TEST_F(QuicPacketGeneratorTest, AddControlFrame_OnlyAckWritable) {
286 delegate_.SetCanWriteOnlyNonRetransmittable();
263 287
264 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 288 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
265 EXPECT_TRUE(generator_.HasQueuedFrames()); 289 EXPECT_TRUE(generator_.HasQueuedFrames());
266 } 290 }
267 291
268 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) { 292 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) {
269 delegate_.SetCanWrite(true); 293 delegate_.SetCanWriteAnything();
270 generator_.StartBatchOperations(); 294 generator_.StartBatchOperations();
271 295
272 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 296 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
273 EXPECT_TRUE(generator_.HasQueuedFrames()); 297 EXPECT_TRUE(generator_.HasQueuedFrames());
274 } 298 }
275 299
276 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { 300 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) {
277 delegate_.SetCanWrite(true); 301 delegate_.SetCanWriteAnything();
278 302
279 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 303 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
280 DoAll(SaveArg<0>(&packet_), Return(true))); 304 DoAll(SaveArg<0>(&packet_), Return(true)));
281 305
282 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 306 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
283 EXPECT_FALSE(generator_.HasQueuedFrames()); 307 EXPECT_FALSE(generator_.HasQueuedFrames());
284 308
285 PacketContents contents; 309 PacketContents contents;
286 contents.num_rst_stream_frames = 1; 310 contents.num_rst_stream_frames = 1;
287 CheckPacketContains(contents, packet_); 311 CheckPacketContains(contents, packet_);
288 } 312 }
289 313
290 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 314 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
291 delegate_.SetCanWrite(false); 315 delegate_.SetCanNotWrite();
292 316
293 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); 317 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true);
294 EXPECT_EQ(0u, consumed.bytes_consumed); 318 EXPECT_EQ(0u, consumed.bytes_consumed);
295 EXPECT_FALSE(consumed.fin_consumed); 319 EXPECT_FALSE(consumed.fin_consumed);
296 EXPECT_FALSE(generator_.HasQueuedFrames()); 320 EXPECT_FALSE(generator_.HasQueuedFrames());
297 } 321 }
298 322
299 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { 323 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
300 delegate_.SetCanWrite(true); 324 delegate_.SetCanWriteAnything();
301 generator_.StartBatchOperations(); 325 generator_.StartBatchOperations();
302 326
303 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); 327 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true);
304 EXPECT_EQ(3u, consumed.bytes_consumed); 328 EXPECT_EQ(3u, consumed.bytes_consumed);
305 EXPECT_TRUE(consumed.fin_consumed); 329 EXPECT_TRUE(consumed.fin_consumed);
306 EXPECT_TRUE(generator_.HasQueuedFrames()); 330 EXPECT_TRUE(generator_.HasQueuedFrames());
307 } 331 }
308 332
309 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 333 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
310 delegate_.SetCanWrite(true); 334 delegate_.SetCanWriteAnything();
311 335
312 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 336 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
313 DoAll(SaveArg<0>(&packet_), Return(true))); 337 DoAll(SaveArg<0>(&packet_), Return(true)));
314 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); 338 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true);
315 EXPECT_EQ(3u, consumed.bytes_consumed); 339 EXPECT_EQ(3u, consumed.bytes_consumed);
316 EXPECT_TRUE(consumed.fin_consumed); 340 EXPECT_TRUE(consumed.fin_consumed);
317 EXPECT_FALSE(generator_.HasQueuedFrames()); 341 EXPECT_FALSE(generator_.HasQueuedFrames());
318 342
319 PacketContents contents; 343 PacketContents contents;
320 contents.num_stream_frames = 1; 344 contents.num_stream_frames = 1;
321 CheckPacketContains(contents, packet_); 345 CheckPacketContains(contents, packet_);
322 } 346 }
323 347
324 TEST_F(QuicPacketGeneratorTest, 348 TEST_F(QuicPacketGeneratorTest,
325 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { 349 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) {
326 delegate_.SetCanWrite(true); 350 delegate_.SetCanWriteAnything();
327 generator_.StartBatchOperations(); 351 generator_.StartBatchOperations();
328 352
329 generator_.ConsumeData(1, "foo", 2, true); 353 generator_.ConsumeData(1, "foo", 2, true);
330 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); 354 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false);
331 EXPECT_EQ(4u, consumed.bytes_consumed); 355 EXPECT_EQ(4u, consumed.bytes_consumed);
332 EXPECT_FALSE(consumed.fin_consumed); 356 EXPECT_FALSE(consumed.fin_consumed);
333 EXPECT_TRUE(generator_.HasQueuedFrames()); 357 EXPECT_TRUE(generator_.HasQueuedFrames());
334 } 358 }
335 359
336 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { 360 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
337 delegate_.SetCanWrite(true); 361 delegate_.SetCanWriteAnything();
338 generator_.StartBatchOperations(); 362 generator_.StartBatchOperations();
339 363
340 generator_.ConsumeData(1, "foo", 2, true); 364 generator_.ConsumeData(1, "foo", 2, true);
341 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); 365 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false);
342 EXPECT_EQ(4u, consumed.bytes_consumed); 366 EXPECT_EQ(4u, consumed.bytes_consumed);
343 EXPECT_FALSE(consumed.fin_consumed); 367 EXPECT_FALSE(consumed.fin_consumed);
344 EXPECT_TRUE(generator_.HasQueuedFrames()); 368 EXPECT_TRUE(generator_.HasQueuedFrames());
345 369
346 // Now both frames will be flushed out. 370 // Now both frames will be flushed out.
347 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 371 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
348 DoAll(SaveArg<0>(&packet_), Return(true))); 372 DoAll(SaveArg<0>(&packet_), Return(true)));
349 generator_.FinishBatchOperations(); 373 generator_.FinishBatchOperations();
350 EXPECT_FALSE(generator_.HasQueuedFrames()); 374 EXPECT_FALSE(generator_.HasQueuedFrames());
351 375
352 PacketContents contents; 376 PacketContents contents;
353 contents.num_stream_frames = 2; 377 contents.num_stream_frames = 2;
354 CheckPacketContains(contents, packet_); 378 CheckPacketContains(contents, packet_);
355 } 379 }
356 380
357 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 381 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
358 delegate_.SetCanWrite(true); 382 delegate_.SetCanWriteAnything();
359 383
360 // Send FEC every two packets. 384 // Send FEC every two packets.
361 creator_.options()->max_packets_per_fec_group = 2; 385 creator_.options()->max_packets_per_fec_group = 2;
362 386
363 { 387 {
364 InSequence dummy; 388 InSequence dummy;
365 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 389 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
366 DoAll(SaveArg<0>(&packet_), Return(true))); 390 DoAll(SaveArg<0>(&packet_), Return(true)));
367 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 391 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
368 DoAll(SaveArg<0>(&packet2_), Return(true))); 392 DoAll(SaveArg<0>(&packet2_), Return(true)));
(...skipping 15 matching lines...) Expand all
384 408
385 CheckPacketHasSingleStreamFrame(packet_); 409 CheckPacketHasSingleStreamFrame(packet_);
386 CheckPacketHasSingleStreamFrame(packet2_); 410 CheckPacketHasSingleStreamFrame(packet2_);
387 CheckPacketIsFec(packet3_, 1); 411 CheckPacketIsFec(packet3_, 1);
388 412
389 CheckPacketHasSingleStreamFrame(packet4_); 413 CheckPacketHasSingleStreamFrame(packet4_);
390 CheckPacketIsFec(packet5_, 4); 414 CheckPacketIsFec(packet5_, 4);
391 } 415 }
392 416
393 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 417 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
394 delegate_.SetCanWrite(true); 418 delegate_.SetCanWriteAnything();
395 419
396 // Send FEC every six packets. 420 // Send FEC every six packets.
397 creator_.options()->max_packets_per_fec_group = 6; 421 creator_.options()->max_packets_per_fec_group = 6;
398 422
399 { 423 {
400 InSequence dummy; 424 InSequence dummy;
401 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 425 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
402 DoAll(SaveArg<0>(&packet_), Return(true))); 426 DoAll(SaveArg<0>(&packet_), Return(true)));
403 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 427 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
404 DoAll(SaveArg<0>(&packet2_), Return(true))); 428 DoAll(SaveArg<0>(&packet2_), Return(true)));
405 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 429 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
406 DoAll(SaveArg<0>(&packet3_), Return(true))); 430 DoAll(SaveArg<0>(&packet3_), Return(true)));
407 } 431 }
408 432
409 // Send enough data to create 2 packets: one full and one partial. 433 // Send enough data to create 2 packets: one full and one partial.
410 size_t data_len = 1 * kMaxPacketSize + 100; 434 size_t data_len = 1 * kMaxPacketSize + 100;
411 QuicConsumedData consumed = 435 QuicConsumedData consumed =
412 generator_.ConsumeData(3, CreateData(data_len), 0, true); 436 generator_.ConsumeData(3, CreateData(data_len), 0, true);
413 EXPECT_EQ(data_len, consumed.bytes_consumed); 437 EXPECT_EQ(data_len, consumed.bytes_consumed);
414 EXPECT_TRUE(consumed.fin_consumed); 438 EXPECT_TRUE(consumed.fin_consumed);
415 EXPECT_FALSE(generator_.HasQueuedFrames()); 439 EXPECT_FALSE(generator_.HasQueuedFrames());
416 440
417 CheckPacketHasSingleStreamFrame(packet_); 441 CheckPacketHasSingleStreamFrame(packet_);
418 CheckPacketHasSingleStreamFrame(packet2_); 442 CheckPacketHasSingleStreamFrame(packet2_);
419 CheckPacketIsFec(packet3_, 1); 443 CheckPacketIsFec(packet3_, 1);
420 } 444 }
421 445
422 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 446 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
423 delegate_.SetCanWrite(false); 447 delegate_.SetCanNotWrite();
424 448
425 generator_.SetShouldSendAck(true); 449 generator_.SetShouldSendAck(true);
426 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 450 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
427 EXPECT_TRUE(generator_.HasQueuedFrames()); 451 EXPECT_TRUE(generator_.HasQueuedFrames());
428 452
429 delegate_.SetCanWrite(true); 453 delegate_.SetCanWriteAnything();
430 454
431 generator_.StartBatchOperations(); 455 generator_.StartBatchOperations();
432 456
433 // When the first write operation is invoked, the ack and feedback 457 // When the first write operation is invoked, the ack and feedback
434 // frames will be returned. 458 // frames will be returned.
435 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 459 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
436 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 460 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
437 Return(CreateFeedbackFrame())); 461 Return(CreateFeedbackFrame()));
438 462
439 // Send some data and a control frame 463 // Send some data and a control frame
440 generator_.ConsumeData(3, "quux", 7, false); 464 generator_.ConsumeData(3, "quux", 7, false);
441 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 465 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
442 466
443 // All five frames will be flushed out in a single packet. 467 // All five frames will be flushed out in a single packet.
444 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 468 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
445 DoAll(SaveArg<0>(&packet_), Return(true))); 469 DoAll(SaveArg<0>(&packet_), Return(true)));
446 generator_.FinishBatchOperations(); 470 generator_.FinishBatchOperations();
447 EXPECT_FALSE(generator_.HasQueuedFrames()); 471 EXPECT_FALSE(generator_.HasQueuedFrames());
448 472
449 PacketContents contents; 473 PacketContents contents;
450 contents.num_ack_frames = 1; 474 contents.num_ack_frames = 1;
451 contents.num_goaway_frames = 1; 475 contents.num_goaway_frames = 1;
452 contents.num_feedback_frames = 1; 476 contents.num_feedback_frames = 1;
453 contents.num_rst_stream_frames = 1; 477 contents.num_rst_stream_frames = 1;
454 contents.num_stream_frames = 1; 478 contents.num_stream_frames = 1;
455 CheckPacketContains(contents, packet_); 479 CheckPacketContains(contents, packet_);
456 } 480 }
457 481
458 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { 482 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) {
459 delegate_.SetCanWrite(false); 483 delegate_.SetCanNotWrite();
460 484
461 generator_.SetShouldSendAck(true); 485 generator_.SetShouldSendAck(true);
462 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 486 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
463 EXPECT_TRUE(generator_.HasQueuedFrames()); 487 EXPECT_TRUE(generator_.HasQueuedFrames());
464 488
465 delegate_.SetCanWrite(true); 489 delegate_.SetCanWriteAnything();
466 490
467 generator_.StartBatchOperations(); 491 generator_.StartBatchOperations();
468 492
469 // When the first write operation is invoked, the ack and feedback 493 // When the first write operation is invoked, the ack and feedback
470 // frames will be returned. 494 // frames will be returned.
471 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 495 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
472 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 496 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
473 Return(CreateFeedbackFrame())); 497 Return(CreateFeedbackFrame()));
474 498
475 { 499 {
(...skipping 26 matching lines...) Expand all
502 526
503 // The second should have the remainder of the stream data. 527 // The second should have the remainder of the stream data.
504 PacketContents contents2; 528 PacketContents contents2;
505 contents2.num_goaway_frames = 1; 529 contents2.num_goaway_frames = 1;
506 contents2.num_stream_frames = 1; 530 contents2.num_stream_frames = 1;
507 CheckPacketContains(contents2, packet2_); 531 CheckPacketContains(contents2, packet2_);
508 } 532 }
509 533
510 } // namespace test 534 } // namespace test
511 } // namespace net 535 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698