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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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) 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 28 matching lines...) Expand all
39 IsHandshake handshake)); 39 IsHandshake handshake));
40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); 40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*());
41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); 41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*());
42 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*()); 42 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*());
43 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); 43 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet));
44 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); 44 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool));
45 45
46 void SetCanWriteAnything() { 46 void SetCanWriteAnything() {
47 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) 47 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _))
48 .WillRepeatedly(Return(true)); 48 .WillRepeatedly(Return(true));
49 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, 49 EXPECT_CALL(
50 NO_RETRANSMITTABLE_DATA, _)) 50 *this,
51 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _))
51 .WillRepeatedly(Return(true)); 52 .WillRepeatedly(Return(true));
52 } 53 }
53 54
54 void SetCanNotWrite() { 55 void SetCanNotWrite() {
55 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) 56 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _))
56 .WillRepeatedly(Return(false)); 57 .WillRepeatedly(Return(false));
57 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, 58 EXPECT_CALL(
58 NO_RETRANSMITTABLE_DATA, _)) 59 *this,
60 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _))
59 .WillRepeatedly(Return(false)); 61 .WillRepeatedly(Return(false));
60 } 62 }
61 63
62 // Use this when only ack and feedback frames should be allowed to be written. 64 // Use this when only ack and feedback frames should be allowed to be written.
63 void SetCanWriteOnlyNonRetransmittable() { 65 void SetCanWriteOnlyNonRetransmittable() {
64 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) 66 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _))
65 .WillRepeatedly(Return(false)); 67 .WillRepeatedly(Return(false));
66 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, 68 EXPECT_CALL(
67 NO_RETRANSMITTABLE_DATA, _)) 69 *this,
70 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _))
68 .WillRepeatedly(Return(true)); 71 .WillRepeatedly(Return(true));
69 } 72 }
70 73
71 private: 74 private:
72 DISALLOW_COPY_AND_ASSIGN(MockDelegate); 75 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
73 }; 76 };
74 77
75 // Simple struct for describing the contents of a packet. 78 // Simple struct for describing the contents of a packet.
76 // Useful in conjunction with a SimpleQuicFrame for validating 79 // Useful in conjunction with a SimpleQuicFrame for validating
77 // that a packet contains the expected frames. 80 // that a packet contains the expected frames.
78 struct PacketContents { 81 struct PacketContents {
79 PacketContents() 82 PacketContents()
80 : num_ack_frames(0), 83 : num_ack_frames(0),
81 num_connection_close_frames(0), 84 num_connection_close_frames(0),
82 num_feedback_frames(0), 85 num_feedback_frames(0),
83 num_goaway_frames(0), 86 num_goaway_frames(0),
84 num_rst_stream_frames(0), 87 num_rst_stream_frames(0),
85 num_stop_waiting_frames(0), 88 num_stop_waiting_frames(0),
86 num_stream_frames(0), 89 num_stream_frames(0),
87 fec_group(0) { 90 fec_group(0) {}
88 }
89 91
90 size_t num_ack_frames; 92 size_t num_ack_frames;
91 size_t num_connection_close_frames; 93 size_t num_connection_close_frames;
92 size_t num_feedback_frames; 94 size_t num_feedback_frames;
93 size_t num_goaway_frames; 95 size_t num_goaway_frames;
94 size_t num_rst_stream_frames; 96 size_t num_rst_stream_frames;
95 size_t num_stop_waiting_frames; 97 size_t num_stop_waiting_frames;
96 size_t num_stream_frames; 98 size_t num_stream_frames;
97 99
98 QuicFecGroupNumber fec_group; 100 QuicFecGroupNumber fec_group;
99 }; 101 };
100 102
101 } // namespace 103 } // namespace
102 104
103 class QuicPacketGeneratorTest : public ::testing::Test { 105 class QuicPacketGeneratorTest : public ::testing::Test {
104 protected: 106 protected:
105 QuicPacketGeneratorTest() 107 QuicPacketGeneratorTest()
106 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), 108 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
107 creator_(42, &framer_, &random_, false), 109 creator_(42, &framer_, &random_, false),
108 generator_(&delegate_, NULL, &creator_), 110 generator_(&delegate_, NULL, &creator_),
109 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 111 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
110 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 112 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
111 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 113 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
112 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 114 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
113 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) { 115 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) {}
114 }
115 116
116 ~QuicPacketGeneratorTest() { 117 ~QuicPacketGeneratorTest() {
117 delete packet_.packet; 118 delete packet_.packet;
118 delete packet_.retransmittable_frames; 119 delete packet_.retransmittable_frames;
119 delete packet2_.packet; 120 delete packet2_.packet;
120 delete packet2_.retransmittable_frames; 121 delete packet2_.retransmittable_frames;
121 delete packet3_.packet; 122 delete packet3_.packet;
122 delete packet3_.retransmittable_frames; 123 delete packet3_.retransmittable_frames;
123 delete packet4_.packet; 124 delete packet4_.packet;
124 delete packet4_.retransmittable_frames; 125 delete packet4_.retransmittable_frames;
(...skipping 23 matching lines...) Expand all
148 QuicRstStreamFrame* CreateRstStreamFrame() { 149 QuicRstStreamFrame* CreateRstStreamFrame() {
149 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); 150 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0);
150 } 151 }
151 152
152 QuicGoAwayFrame* CreateGoAwayFrame() { 153 QuicGoAwayFrame* CreateGoAwayFrame() {
153 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); 154 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string());
154 } 155 }
155 156
156 void CheckPacketContains(const PacketContents& contents, 157 void CheckPacketContains(const PacketContents& contents,
157 const SerializedPacket& packet) { 158 const SerializedPacket& packet) {
158 size_t num_retransmittable_frames = contents.num_connection_close_frames + 159 size_t num_retransmittable_frames =
159 contents.num_goaway_frames + contents.num_rst_stream_frames + 160 contents.num_connection_close_frames + contents.num_goaway_frames +
160 contents.num_stream_frames; 161 contents.num_rst_stream_frames + contents.num_stream_frames;
161 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + 162 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames +
162 contents.num_stop_waiting_frames + num_retransmittable_frames; 163 contents.num_stop_waiting_frames +
164 num_retransmittable_frames;
163 165
164 if (num_retransmittable_frames == 0) { 166 if (num_retransmittable_frames == 0) {
165 ASSERT_TRUE(packet.retransmittable_frames == NULL); 167 ASSERT_TRUE(packet.retransmittable_frames == NULL);
166 } else { 168 } else {
167 ASSERT_TRUE(packet.retransmittable_frames != NULL); 169 ASSERT_TRUE(packet.retransmittable_frames != NULL);
168 EXPECT_EQ(num_retransmittable_frames, 170 EXPECT_EQ(num_retransmittable_frames,
169 packet.retransmittable_frames->frames().size()); 171 packet.retransmittable_frames->frames().size());
170 } 172 }
171 173
172 ASSERT_TRUE(packet.packet != NULL); 174 ASSERT_TRUE(packet.packet != NULL);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 SerializedPacket packet3_; 227 SerializedPacket packet3_;
226 SerializedPacket packet4_; 228 SerializedPacket packet4_;
227 SerializedPacket packet5_; 229 SerializedPacket packet5_;
228 230
229 private: 231 private:
230 scoped_ptr<char[]> data_array_; 232 scoped_ptr<char[]> data_array_;
231 }; 233 };
232 234
233 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface { 235 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface {
234 public: 236 public:
235 MOCK_METHOD1(OnFrameAddedToPacket, 237 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&));
236 void(const QuicFrame&));
237 }; 238 };
238 239
239 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { 240 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) {
240 delegate_.SetCanNotWrite(); 241 delegate_.SetCanNotWrite();
241 242
242 generator_.SetShouldSendAck(false, false); 243 generator_.SetShouldSendAck(false, false);
243 EXPECT_TRUE(generator_.HasQueuedFrames()); 244 EXPECT_TRUE(generator_.HasQueuedFrames());
244 } 245 }
245 246
246 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { 247 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) {
247 StrictMock<MockDebugDelegate> debug_delegate; 248 StrictMock<MockDebugDelegate> debug_delegate;
248 249
249 generator_.set_debug_delegate(&debug_delegate); 250 generator_.set_debug_delegate(&debug_delegate);
250 delegate_.SetCanWriteOnlyNonRetransmittable(); 251 delegate_.SetCanWriteOnlyNonRetransmittable();
251 generator_.StartBatchOperations(); 252 generator_.StartBatchOperations();
252 253
253 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 254 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
254 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); 255 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1);
255 256
256 generator_.SetShouldSendAck(false, false); 257 generator_.SetShouldSendAck(false, false);
257 EXPECT_TRUE(generator_.HasQueuedFrames()); 258 EXPECT_TRUE(generator_.HasQueuedFrames());
258 } 259 }
259 260
260 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { 261 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) {
261 delegate_.SetCanWriteOnlyNonRetransmittable(); 262 delegate_.SetCanWriteOnlyNonRetransmittable();
262 263
263 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 264 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
264 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 265 EXPECT_CALL(delegate_, OnSerializedPacket(_))
265 DoAll(SaveArg<0>(&packet_), Return(true))); 266 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
266 267
267 generator_.SetShouldSendAck(false, false); 268 generator_.SetShouldSendAck(false, false);
268 EXPECT_FALSE(generator_.HasQueuedFrames()); 269 EXPECT_FALSE(generator_.HasQueuedFrames());
269 270
270 PacketContents contents; 271 PacketContents contents;
271 contents.num_ack_frames = 1; 272 contents.num_ack_frames = 1;
272 CheckPacketContains(contents, packet_); 273 CheckPacketContains(contents, packet_);
273 } 274 }
274 275
275 TEST_F(QuicPacketGeneratorTest, 276 TEST_F(QuicPacketGeneratorTest,
276 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { 277 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) {
277 delegate_.SetCanWriteOnlyNonRetransmittable(); 278 delegate_.SetCanWriteOnlyNonRetransmittable();
278 generator_.StartBatchOperations(); 279 generator_.StartBatchOperations();
279 280
280 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 281 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
281 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 282 EXPECT_CALL(delegate_, CreateFeedbackFrame())
282 Return(CreateFeedbackFrame())); 283 .WillOnce(Return(CreateFeedbackFrame()));
283 284
284 generator_.SetShouldSendAck(true, false); 285 generator_.SetShouldSendAck(true, false);
285 EXPECT_TRUE(generator_.HasQueuedFrames()); 286 EXPECT_TRUE(generator_.HasQueuedFrames());
286 } 287 }
287 288
288 TEST_F(QuicPacketGeneratorTest, 289 TEST_F(QuicPacketGeneratorTest,
289 ShouldSendAckWithFeedback_WritableAndShouldFlush) { 290 ShouldSendAckWithFeedback_WritableAndShouldFlush) {
290 delegate_.SetCanWriteOnlyNonRetransmittable(); 291 delegate_.SetCanWriteOnlyNonRetransmittable();
291 292
292 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 293 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
293 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 294 EXPECT_CALL(delegate_, CreateFeedbackFrame())
294 Return(CreateFeedbackFrame())); 295 .WillOnce(Return(CreateFeedbackFrame()));
295 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( 296 EXPECT_CALL(delegate_, CreateStopWaitingFrame())
296 Return(CreateStopWaitingFrame())); 297 .WillOnce(Return(CreateStopWaitingFrame()));
297 298
298 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 299 EXPECT_CALL(delegate_, OnSerializedPacket(_))
299 DoAll(SaveArg<0>(&packet_), Return(true))); 300 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
300 301
301 generator_.SetShouldSendAck(true, true); 302 generator_.SetShouldSendAck(true, true);
302 EXPECT_FALSE(generator_.HasQueuedFrames()); 303 EXPECT_FALSE(generator_.HasQueuedFrames());
303 304
304 PacketContents contents; 305 PacketContents contents;
305 contents.num_ack_frames = 1; 306 contents.num_ack_frames = 1;
306 contents.num_feedback_frames = 1; 307 contents.num_feedback_frames = 1;
307 contents.num_stop_waiting_frames = 1; 308 contents.num_stop_waiting_frames = 1;
308 CheckPacketContains(contents, packet_); 309 CheckPacketContains(contents, packet_);
309 } 310 }
(...skipping 22 matching lines...) Expand all
332 333
333 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) { 334 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) {
334 delegate_.SetCanNotWrite(); 335 delegate_.SetCanNotWrite();
335 generator_.StartBatchOperations(); 336 generator_.StartBatchOperations();
336 337
337 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 338 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
338 EXPECT_TRUE(generator_.HasQueuedFrames()); 339 EXPECT_TRUE(generator_.HasQueuedFrames());
339 generator_.FinishBatchOperations(); 340 generator_.FinishBatchOperations();
340 EXPECT_TRUE(generator_.HasQueuedFrames()); 341 EXPECT_TRUE(generator_.HasQueuedFrames());
341 342
342 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 343 EXPECT_CALL(delegate_, OnSerializedPacket(_))
343 DoAll(SaveArg<0>(&packet_), Return(true))); 344 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
344 generator_.FlushAllQueuedFrames(); 345 generator_.FlushAllQueuedFrames();
345 EXPECT_FALSE(generator_.HasQueuedFrames()); 346 EXPECT_FALSE(generator_.HasQueuedFrames());
346 347
347 PacketContents contents; 348 PacketContents contents;
348 contents.num_rst_stream_frames = 1; 349 contents.num_rst_stream_frames = 1;
349 CheckPacketContains(contents, packet_); 350 CheckPacketContains(contents, packet_);
350 } 351 }
351 352
352 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { 353 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) {
353 delegate_.SetCanWriteAnything(); 354 delegate_.SetCanWriteAnything();
354 355
355 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 356 EXPECT_CALL(delegate_, OnSerializedPacket(_))
356 DoAll(SaveArg<0>(&packet_), Return(true))); 357 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
357 358
358 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 359 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
359 EXPECT_FALSE(generator_.HasQueuedFrames()); 360 EXPECT_FALSE(generator_.HasQueuedFrames());
360 361
361 PacketContents contents; 362 PacketContents contents;
362 contents.num_rst_stream_frames = 1; 363 contents.num_rst_stream_frames = 1;
363 CheckPacketContains(contents, packet_); 364 CheckPacketContains(contents, packet_);
364 } 365 }
365 366
366 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 367 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
367 delegate_.SetCanNotWrite(); 368 delegate_.SetCanNotWrite();
368 369
369 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 370 QuicConsumedData consumed =
370 true, NULL); 371 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL);
371 EXPECT_EQ(0u, consumed.bytes_consumed); 372 EXPECT_EQ(0u, consumed.bytes_consumed);
372 EXPECT_FALSE(consumed.fin_consumed); 373 EXPECT_FALSE(consumed.fin_consumed);
373 EXPECT_FALSE(generator_.HasQueuedFrames()); 374 EXPECT_FALSE(generator_.HasQueuedFrames());
374 } 375 }
375 376
376 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { 377 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
377 delegate_.SetCanWriteAnything(); 378 delegate_.SetCanWriteAnything();
378 generator_.StartBatchOperations(); 379 generator_.StartBatchOperations();
379 380
380 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 381 QuicConsumedData consumed =
381 true, NULL); 382 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL);
382 EXPECT_EQ(3u, consumed.bytes_consumed); 383 EXPECT_EQ(3u, consumed.bytes_consumed);
383 EXPECT_TRUE(consumed.fin_consumed); 384 EXPECT_TRUE(consumed.fin_consumed);
384 EXPECT_TRUE(generator_.HasQueuedFrames()); 385 EXPECT_TRUE(generator_.HasQueuedFrames());
385 } 386 }
386 387
387 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 388 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
388 delegate_.SetCanWriteAnything(); 389 delegate_.SetCanWriteAnything();
389 390
390 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 391 EXPECT_CALL(delegate_, OnSerializedPacket(_))
391 DoAll(SaveArg<0>(&packet_), Return(true))); 392 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
392 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 393 QuicConsumedData consumed =
393 true, NULL); 394 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL);
394 EXPECT_EQ(3u, consumed.bytes_consumed); 395 EXPECT_EQ(3u, consumed.bytes_consumed);
395 EXPECT_TRUE(consumed.fin_consumed); 396 EXPECT_TRUE(consumed.fin_consumed);
396 EXPECT_FALSE(generator_.HasQueuedFrames()); 397 EXPECT_FALSE(generator_.HasQueuedFrames());
397 398
398 PacketContents contents; 399 PacketContents contents;
399 contents.num_stream_frames = 1; 400 contents.num_stream_frames = 1;
400 CheckPacketContains(contents, packet_); 401 CheckPacketContains(contents, packet_);
401 } 402 }
402 403
403 TEST_F(QuicPacketGeneratorTest, 404 TEST_F(QuicPacketGeneratorTest,
404 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { 405 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) {
405 delegate_.SetCanWriteAnything(); 406 delegate_.SetCanWriteAnything();
406 generator_.StartBatchOperations(); 407 generator_.StartBatchOperations();
407 408
408 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); 409 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL);
409 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, 410 QuicConsumedData consumed =
410 false, NULL); 411 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL);
411 EXPECT_EQ(4u, consumed.bytes_consumed); 412 EXPECT_EQ(4u, consumed.bytes_consumed);
412 EXPECT_FALSE(consumed.fin_consumed); 413 EXPECT_FALSE(consumed.fin_consumed);
413 EXPECT_TRUE(generator_.HasQueuedFrames()); 414 EXPECT_TRUE(generator_.HasQueuedFrames());
414 } 415 }
415 416
416 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { 417 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
417 delegate_.SetCanWriteAnything(); 418 delegate_.SetCanWriteAnything();
418 generator_.StartBatchOperations(); 419 generator_.StartBatchOperations();
419 420
420 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); 421 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL);
421 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, 422 QuicConsumedData consumed =
422 false, NULL); 423 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL);
423 EXPECT_EQ(4u, consumed.bytes_consumed); 424 EXPECT_EQ(4u, consumed.bytes_consumed);
424 EXPECT_FALSE(consumed.fin_consumed); 425 EXPECT_FALSE(consumed.fin_consumed);
425 EXPECT_TRUE(generator_.HasQueuedFrames()); 426 EXPECT_TRUE(generator_.HasQueuedFrames());
426 427
427 // Now both frames will be flushed out. 428 // Now both frames will be flushed out.
428 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 429 EXPECT_CALL(delegate_, OnSerializedPacket(_))
429 DoAll(SaveArg<0>(&packet_), Return(true))); 430 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
430 generator_.FinishBatchOperations(); 431 generator_.FinishBatchOperations();
431 EXPECT_FALSE(generator_.HasQueuedFrames()); 432 EXPECT_FALSE(generator_.HasQueuedFrames());
432 433
433 PacketContents contents; 434 PacketContents contents;
434 contents.num_stream_frames = 2; 435 contents.num_stream_frames = 2;
435 CheckPacketContains(contents, packet_); 436 CheckPacketContains(contents, packet_);
436 } 437 }
437 438
438 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 439 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
439 delegate_.SetCanWriteAnything(); 440 delegate_.SetCanWriteAnything();
440 441
441 // Send FEC every two packets. 442 // Send FEC every two packets.
442 creator_.options()->max_packets_per_fec_group = 2; 443 creator_.options()->max_packets_per_fec_group = 2;
443 444
444 { 445 {
445 InSequence dummy; 446 InSequence dummy;
446 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 447 EXPECT_CALL(delegate_, OnSerializedPacket(_))
447 DoAll(SaveArg<0>(&packet_), Return(true))); 448 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
448 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 449 EXPECT_CALL(delegate_, OnSerializedPacket(_))
449 DoAll(SaveArg<0>(&packet2_), Return(true))); 450 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true)));
450 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 451 EXPECT_CALL(delegate_, OnSerializedPacket(_))
451 DoAll(SaveArg<0>(&packet3_), Return(true))); 452 .WillOnce(DoAll(SaveArg<0>(&packet3_), Return(true)));
452 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 453 EXPECT_CALL(delegate_, OnSerializedPacket(_))
453 DoAll(SaveArg<0>(&packet4_), Return(true))); 454 .WillOnce(DoAll(SaveArg<0>(&packet4_), Return(true)));
454 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 455 EXPECT_CALL(delegate_, OnSerializedPacket(_))
455 DoAll(SaveArg<0>(&packet5_), Return(true))); 456 .WillOnce(DoAll(SaveArg<0>(&packet5_), Return(true)));
456 } 457 }
457 458
458 // Send enough data to create 3 packets: two full and one partial. 459 // Send enough data to create 3 packets: two full and one partial.
459 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 460 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
460 QuicConsumedData consumed = 461 QuicConsumedData consumed =
461 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 462 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL);
462 EXPECT_EQ(data_len, consumed.bytes_consumed); 463 EXPECT_EQ(data_len, consumed.bytes_consumed);
463 EXPECT_TRUE(consumed.fin_consumed); 464 EXPECT_TRUE(consumed.fin_consumed);
464 EXPECT_FALSE(generator_.HasQueuedFrames()); 465 EXPECT_FALSE(generator_.HasQueuedFrames());
465 466
466 CheckPacketHasSingleStreamFrame(packet_); 467 CheckPacketHasSingleStreamFrame(packet_);
467 CheckPacketHasSingleStreamFrame(packet2_); 468 CheckPacketHasSingleStreamFrame(packet2_);
468 CheckPacketIsFec(packet3_, 1); 469 CheckPacketIsFec(packet3_, 1);
469 470
470 CheckPacketHasSingleStreamFrame(packet4_); 471 CheckPacketHasSingleStreamFrame(packet4_);
471 CheckPacketIsFec(packet5_, 4); 472 CheckPacketIsFec(packet5_, 4);
472 } 473 }
473 474
474 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 475 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
475 delegate_.SetCanWriteAnything(); 476 delegate_.SetCanWriteAnything();
476 477
477 // Send FEC every six packets. 478 // Send FEC every six packets.
478 creator_.options()->max_packets_per_fec_group = 6; 479 creator_.options()->max_packets_per_fec_group = 6;
479 480
480 { 481 {
481 InSequence dummy; 482 InSequence dummy;
482 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 483 EXPECT_CALL(delegate_, OnSerializedPacket(_))
483 DoAll(SaveArg<0>(&packet_), Return(true))); 484 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
484 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 485 EXPECT_CALL(delegate_, OnSerializedPacket(_))
485 DoAll(SaveArg<0>(&packet2_), Return(true))); 486 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true)));
486 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 487 EXPECT_CALL(delegate_, OnSerializedPacket(_))
487 DoAll(SaveArg<0>(&packet3_), Return(true))); 488 .WillOnce(DoAll(SaveArg<0>(&packet3_), Return(true)));
488 } 489 }
489 490
490 // Send enough data to create 2 packets: one full and one partial. 491 // Send enough data to create 2 packets: one full and one partial.
491 size_t data_len = 1 * kDefaultMaxPacketSize + 100; 492 size_t data_len = 1 * kDefaultMaxPacketSize + 100;
492 QuicConsumedData consumed = 493 QuicConsumedData consumed =
493 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 494 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL);
494 EXPECT_EQ(data_len, consumed.bytes_consumed); 495 EXPECT_EQ(data_len, consumed.bytes_consumed);
495 EXPECT_TRUE(consumed.fin_consumed); 496 EXPECT_TRUE(consumed.fin_consumed);
496 EXPECT_FALSE(generator_.HasQueuedFrames()); 497 EXPECT_FALSE(generator_.HasQueuedFrames());
497 498
498 CheckPacketHasSingleStreamFrame(packet_); 499 CheckPacketHasSingleStreamFrame(packet_);
499 CheckPacketHasSingleStreamFrame(packet2_); 500 CheckPacketHasSingleStreamFrame(packet2_);
500 CheckPacketIsFec(packet3_, 1); 501 CheckPacketIsFec(packet3_, 1);
501 } 502 }
502 503
503 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 504 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
504 // Set the packet size be enough for two stream frames with 0 stream offset, 505 // Set the packet size be enough for two stream frames with 0 stream offset,
505 // but not enough for a stream frame of 0 offset and one with non-zero offset. 506 // but not enough for a stream frame of 0 offset and one with non-zero offset.
506 creator_.options()->max_packet_length = 507 creator_.options()->max_packet_length =
507 NullEncrypter().GetCiphertextSize(0) + 508 NullEncrypter().GetCiphertextSize(0) +
508 GetPacketHeaderSize(creator_.options()->send_connection_id_length, 509 GetPacketHeaderSize(creator_.options()->send_connection_id_length,
509 true, 510 true,
510 creator_.options()->send_sequence_number_length, 511 creator_.options()->send_sequence_number_length,
511 NOT_IN_FEC_GROUP) + 512 NOT_IN_FEC_GROUP) +
512 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger 513 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger
513 // than the GetMinStreamFrameSize. 514 // than the GetMinStreamFrameSize.
514 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, false, 515 QuicFramer::GetMinStreamFrameSize(
515 NOT_IN_FEC_GROUP) + 3 + 516 framer_.version(), 1, 0, false, NOT_IN_FEC_GROUP) +
516 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, true, 517 3 + QuicFramer::GetMinStreamFrameSize(
517 NOT_IN_FEC_GROUP) + 1; 518 framer_.version(), 1, 0, true, NOT_IN_FEC_GROUP) +
519 1;
518 delegate_.SetCanWriteAnything(); 520 delegate_.SetCanWriteAnything();
519 { 521 {
520 InSequence dummy; 522 InSequence dummy;
521 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 523 EXPECT_CALL(delegate_, OnSerializedPacket(_))
522 DoAll(SaveArg<0>(&packet_), Return(true))); 524 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
523 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 525 EXPECT_CALL(delegate_, OnSerializedPacket(_))
524 DoAll(SaveArg<0>(&packet2_), Return(true))); 526 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true)));
525 } 527 }
526 generator_.StartBatchOperations(); 528 generator_.StartBatchOperations();
527 // Queue enough data to prevent a stream frame with a non-zero offset from 529 // Queue enough data to prevent a stream frame with a non-zero offset from
528 // fitting. 530 // fitting.
529 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 0, 531 QuicConsumedData consumed =
530 false, NULL); 532 generator_.ConsumeData(1, MakeIOVector("foo"), 0, false, NULL);
531 EXPECT_EQ(3u, consumed.bytes_consumed); 533 EXPECT_EQ(3u, consumed.bytes_consumed);
532 EXPECT_FALSE(consumed.fin_consumed); 534 EXPECT_FALSE(consumed.fin_consumed);
533 EXPECT_TRUE(generator_.HasQueuedFrames()); 535 EXPECT_TRUE(generator_.HasQueuedFrames());
534 536
535 // This frame will not fit with the existing frame, causing the queued frame 537 // This frame will not fit with the existing frame, causing the queued frame
536 // to be serialized, and it will not fit with another frame like it, so it is 538 // to be serialized, and it will not fit with another frame like it, so it is
537 // serialized by itself. 539 // serialized by itself.
538 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true, NULL); 540 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true, NULL);
539 EXPECT_EQ(3u, consumed.bytes_consumed); 541 EXPECT_EQ(3u, consumed.bytes_consumed);
540 EXPECT_TRUE(consumed.fin_consumed); 542 EXPECT_TRUE(consumed.fin_consumed);
(...skipping 12 matching lines...) Expand all
553 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 555 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
554 EXPECT_TRUE(generator_.HasQueuedFrames()); 556 EXPECT_TRUE(generator_.HasQueuedFrames());
555 557
556 delegate_.SetCanWriteAnything(); 558 delegate_.SetCanWriteAnything();
557 559
558 generator_.StartBatchOperations(); 560 generator_.StartBatchOperations();
559 561
560 // When the first write operation is invoked, the ack and feedback 562 // When the first write operation is invoked, the ack and feedback
561 // frames will be returned. 563 // frames will be returned.
562 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 564 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
563 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 565 EXPECT_CALL(delegate_, CreateFeedbackFrame())
564 Return(CreateFeedbackFrame())); 566 .WillOnce(Return(CreateFeedbackFrame()));
565 567
566 // Send some data and a control frame 568 // Send some data and a control frame
567 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); 569 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL);
568 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 570 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
569 571
570 // All five frames will be flushed out in a single packet. 572 // All five frames will be flushed out in a single packet.
571 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 573 EXPECT_CALL(delegate_, OnSerializedPacket(_))
572 DoAll(SaveArg<0>(&packet_), Return(true))); 574 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
573 generator_.FinishBatchOperations(); 575 generator_.FinishBatchOperations();
574 EXPECT_FALSE(generator_.HasQueuedFrames()); 576 EXPECT_FALSE(generator_.HasQueuedFrames());
575 577
576 PacketContents contents; 578 PacketContents contents;
577 contents.num_ack_frames = 1; 579 contents.num_ack_frames = 1;
578 contents.num_goaway_frames = 1; 580 contents.num_goaway_frames = 1;
579 contents.num_feedback_frames = 1; 581 contents.num_feedback_frames = 1;
580 contents.num_rst_stream_frames = 1; 582 contents.num_rst_stream_frames = 1;
581 contents.num_stream_frames = 1; 583 contents.num_stream_frames = 1;
582 CheckPacketContains(contents, packet_); 584 CheckPacketContains(contents, packet_);
583 } 585 }
584 586
585 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { 587 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) {
586 delegate_.SetCanNotWrite(); 588 delegate_.SetCanNotWrite();
587 589
588 generator_.SetShouldSendAck(true, false); 590 generator_.SetShouldSendAck(true, false);
589 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 591 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
590 EXPECT_TRUE(generator_.HasQueuedFrames()); 592 EXPECT_TRUE(generator_.HasQueuedFrames());
591 593
592 delegate_.SetCanWriteAnything(); 594 delegate_.SetCanWriteAnything();
593 595
594 generator_.StartBatchOperations(); 596 generator_.StartBatchOperations();
595 597
596 // When the first write operation is invoked, the ack and feedback 598 // When the first write operation is invoked, the ack and feedback
597 // frames will be returned. 599 // frames will be returned.
598 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 600 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
599 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 601 EXPECT_CALL(delegate_, CreateFeedbackFrame())
600 Return(CreateFeedbackFrame())); 602 .WillOnce(Return(CreateFeedbackFrame()));
601 603
602 { 604 {
603 InSequence dummy; 605 InSequence dummy;
604 // All five frames will be flushed out in a single packet 606 // All five frames will be flushed out in a single packet
605 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 607 EXPECT_CALL(delegate_, OnSerializedPacket(_))
606 DoAll(SaveArg<0>(&packet_), Return(true))); 608 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true)));
607 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 609 EXPECT_CALL(delegate_, OnSerializedPacket(_))
608 DoAll(SaveArg<0>(&packet2_), Return(true))); 610 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true)));
609 } 611 }
610 612
611 // Send enough data to exceed one packet 613 // Send enough data to exceed one packet
612 size_t data_len = kDefaultMaxPacketSize + 100; 614 size_t data_len = kDefaultMaxPacketSize + 100;
613 QuicConsumedData consumed = 615 QuicConsumedData consumed =
614 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 616 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL);
615 EXPECT_EQ(data_len, consumed.bytes_consumed); 617 EXPECT_EQ(data_len, consumed.bytes_consumed);
616 EXPECT_TRUE(consumed.fin_consumed); 618 EXPECT_TRUE(consumed.fin_consumed);
617 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 619 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
618 620
(...skipping 10 matching lines...) Expand all
629 631
630 // The second should have the remainder of the stream data. 632 // The second should have the remainder of the stream data.
631 PacketContents contents2; 633 PacketContents contents2;
632 contents2.num_goaway_frames = 1; 634 contents2.num_goaway_frames = 1;
633 contents2.num_stream_frames = 1; 635 contents2.num_stream_frames = 1;
634 CheckPacketContains(contents2, packet2_); 636 CheckPacketContains(contents2, packet2_);
635 } 637 }
636 638
637 } // namespace test 639 } // namespace test
638 } // namespace net 640 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698