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

Side by Side Diff: net/quic/core/quic_packet_creator_test.cc

Issue 2547583002: Landing Recent QUIC changes until Fri Nov 18 23:21:04 2016 +0000 (Closed)
Patch Set: Remove explicit HTTP/2 enum usage Created 4 years 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
« no previous file with comments | « net/quic/core/quic_packet_creator.cc ('k') | net/quic/core/quic_packet_generator.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/core/quic_packet_creator.h" 5 #include "net/quic/core/quic_packet_creator.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 // frame, assuming it is the last frame in the packet 190 // frame, assuming it is the last frame in the packet
191 size_t GetStreamFrameOverhead() { 191 size_t GetStreamFrameOverhead() {
192 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset, 192 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset,
193 true); 193 true);
194 } 194 }
195 195
196 QuicIOVector MakeIOVector(StringPiece s) { 196 QuicIOVector MakeIOVector(StringPiece s) {
197 return ::net::test::MakeIOVector(s, &iov_); 197 return ::net::test::MakeIOVector(s, &iov_);
198 } 198 }
199 199
200 PendingRetransmission CreateRetransmission( 200 QuicPendingRetransmission CreateRetransmission(
201 const QuicFrames& retransmittable_frames, 201 const QuicFrames& retransmittable_frames,
202 bool has_crypto_handshake, 202 bool has_crypto_handshake,
203 int num_padding_bytes, 203 int num_padding_bytes,
204 EncryptionLevel encryption_level, 204 EncryptionLevel encryption_level,
205 QuicPacketNumberLength packet_number_length) { 205 QuicPacketNumberLength packet_number_length) {
206 return PendingRetransmission(1u, 1u, NOT_RETRANSMISSION, 206 return QuicPendingRetransmission(1u, 1u, NOT_RETRANSMISSION,
207 retransmittable_frames, has_crypto_handshake, 207 retransmittable_frames,
208 num_padding_bytes, encryption_level, 208 has_crypto_handshake, num_padding_bytes,
209 packet_number_length); 209 encryption_level, packet_number_length);
210 } 210 }
211 211
212 static const QuicStreamOffset kOffset = 1u; 212 static const QuicStreamOffset kOffset = 1u;
213 213
214 QuicFlagSaver flags_; // Save/restore all QUIC flag values. 214 QuicFlagSaver flags_; // Save/restore all QUIC flag values.
215 char buffer_[kMaxPacketSize]; 215 char buffer_[kMaxPacketSize];
216 QuicFrames frames_; 216 QuicFrames frames_;
217 QuicFramer server_framer_; 217 QuicFramer server_framer_;
218 QuicFramer client_framer_; 218 QuicFramer client_framer_;
219 StrictMock<MockFramerVisitor> framer_visitor_; 219 StrictMock<MockFramerVisitor> framer_visitor_;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 // If the original packet number length, the current packet number 269 // If the original packet number length, the current packet number
270 // length, and the configured send packet number length are different, the 270 // length, and the configured send packet number length are different, the
271 // retransmit must sent with the original length and the others do not change. 271 // retransmit must sent with the original length and the others do not change.
272 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, 272 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_,
273 PACKET_2BYTE_PACKET_NUMBER); 273 PACKET_2BYTE_PACKET_NUMBER);
274 QuicStreamFrame* stream_frame = 274 QuicStreamFrame* stream_frame =
275 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); 275 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece());
276 QuicFrames frames; 276 QuicFrames frames;
277 frames.push_back(QuicFrame(stream_frame)); 277 frames.push_back(QuicFrame(stream_frame));
278 char buffer[kMaxPacketSize]; 278 char buffer[kMaxPacketSize];
279 PendingRetransmission retransmission(CreateRetransmission( 279 QuicPendingRetransmission retransmission(CreateRetransmission(
280 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, 280 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
281 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); 281 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER));
282 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 282 EXPECT_CALL(delegate_, OnSerializedPacket(_))
283 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 283 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
284 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 284 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
285 // The packet number length is updated after every packet is sent, 285 // The packet number length is updated after every packet is sent,
286 // so there is no need to restore the old length after sending. 286 // so there is no need to restore the old length after sending.
287 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 287 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
288 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 288 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
289 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 289 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
(...skipping 14 matching lines...) Expand all
304 delete stream_frame; 304 delete stream_frame;
305 } 305 }
306 306
307 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) { 307 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) {
308 QuicStreamFrame* stream_frame = 308 QuicStreamFrame* stream_frame =
309 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); 309 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece());
310 QuicFrames frames; 310 QuicFrames frames;
311 frames.push_back(QuicFrame(stream_frame)); 311 frames.push_back(QuicFrame(stream_frame));
312 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); 312 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
313 char buffer[kMaxPacketSize]; 313 char buffer[kMaxPacketSize];
314 PendingRetransmission retransmission(CreateRetransmission( 314 QuicPendingRetransmission retransmission(CreateRetransmission(
315 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, 315 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
316 ENCRYPTION_NONE, 316 ENCRYPTION_NONE,
317 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 317 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
318 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 318 EXPECT_CALL(delegate_, OnSerializedPacket(_))
319 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 319 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
320 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 320 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
321 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level); 321 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level);
322 delete stream_frame; 322 delete stream_frame;
323 } 323 }
324 324
325 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) { 325 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) {
326 QuicStreamFrame* stream_frame = 326 QuicStreamFrame* stream_frame =
327 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece()); 327 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece());
328 QuicFrames frames; 328 QuicFrames frames;
329 frames.push_back(QuicFrame(stream_frame)); 329 frames.push_back(QuicFrame(stream_frame));
330 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); 330 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
331 char buffer[kMaxPacketSize]; 331 char buffer[kMaxPacketSize];
332 PendingRetransmission retransmission(CreateRetransmission( 332 QuicPendingRetransmission retransmission(CreateRetransmission(
333 frames, false /* has_crypto_handshake */, 0 /* no padding */, 333 frames, false /* has_crypto_handshake */, 0 /* no padding */,
334 ENCRYPTION_NONE, 334 ENCRYPTION_NONE,
335 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 335 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
336 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 336 EXPECT_CALL(delegate_, OnSerializedPacket(_))
337 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 337 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
338 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 338 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
339 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level); 339 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level);
340 delete stream_frame; 340 delete stream_frame;
341 } 341 }
342 342
343 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) { 343 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) {
344 QuicFrame frame; 344 QuicFrame frame;
345 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); 345 QuicIOVector io_vector(MakeIOVector("fake handshake message data"));
346 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, 346 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
347 io_vector, 0u, 0u, false, &frame); 347 io_vector, 0u, 0u, false, &frame);
348 QuicFrames frames; 348 QuicFrames frames;
349 frames.push_back(frame); 349 frames.push_back(frame);
350 char buffer[kMaxPacketSize]; 350 char buffer[kMaxPacketSize];
351 PendingRetransmission retransmission(CreateRetransmission( 351 QuicPendingRetransmission retransmission(CreateRetransmission(
352 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, 352 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
353 ENCRYPTION_NONE, 353 ENCRYPTION_NONE,
354 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 354 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
355 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 355 EXPECT_CALL(delegate_, OnSerializedPacket(_))
356 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 356 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
357 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 357 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
358 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); 358 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length);
359 delete frame.stream_frame; 359 delete frame.stream_frame;
360 } 360 }
361 361
362 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSpecifiedPadding) { 362 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSpecifiedPadding) {
363 QuicFrame frame; 363 QuicFrame frame;
364 QuicIOVector io_vector(MakeIOVector("fake message data")); 364 QuicIOVector io_vector(MakeIOVector("fake message data"));
365 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, 365 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
366 io_vector, 0u, 0u, false, &frame); 366 io_vector, 0u, 0u, false, &frame);
367 367
368 const int kNumPaddingBytes1 = 4; 368 const int kNumPaddingBytes1 = 4;
369 int packet_size = 0; 369 int packet_size = 0;
370 { 370 {
371 QuicFrames frames; 371 QuicFrames frames;
372 frames.push_back(frame); 372 frames.push_back(frame);
373 char buffer[kMaxPacketSize]; 373 char buffer[kMaxPacketSize];
374 PendingRetransmission retransmission(CreateRetransmission( 374 QuicPendingRetransmission retransmission(CreateRetransmission(
375 frames, false /* has_crypto_handshake */, 375 frames, false /* has_crypto_handshake */,
376 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE, 376 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE,
377 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 377 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
378 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 378 EXPECT_CALL(delegate_, OnSerializedPacket(_))
379 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 379 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
380 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 380 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
381 packet_size = serialized_packet_.encrypted_length; 381 packet_size = serialized_packet_.encrypted_length;
382 } 382 }
383 383
384 const int kNumPaddingBytes2 = 44; 384 const int kNumPaddingBytes2 = 44;
385 QuicFrames frames; 385 QuicFrames frames;
386 frames.push_back(frame); 386 frames.push_back(frame);
387 char buffer[kMaxPacketSize]; 387 char buffer[kMaxPacketSize];
388 PendingRetransmission retransmission(CreateRetransmission( 388 QuicPendingRetransmission retransmission(CreateRetransmission(
389 frames, false /* has_crypto_handshake */, 389 frames, false /* has_crypto_handshake */,
390 kNumPaddingBytes2 /* padding bytes */, ENCRYPTION_NONE, 390 kNumPaddingBytes2 /* padding bytes */, ENCRYPTION_NONE,
391 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 391 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
392 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 392 EXPECT_CALL(delegate_, OnSerializedPacket(_))
393 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 393 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
394 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 394 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
395 395
396 EXPECT_EQ(packet_size + kNumPaddingBytes2 - kNumPaddingBytes1, 396 EXPECT_EQ(packet_size + kNumPaddingBytes2 - kNumPaddingBytes1,
397 serialized_packet_.encrypted_length); 397 serialized_packet_.encrypted_length);
398 delete frame.stream_frame; 398 delete frame.stream_frame;
399 } 399 }
400 400
401 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { 401 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) {
402 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + 402 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) +
403 GetEncryptionOverhead() + GetStreamFrameOverhead(); 403 GetEncryptionOverhead() + GetStreamFrameOverhead();
404 size_t capacity = kDefaultMaxPacketSize - overhead; 404 size_t capacity = kDefaultMaxPacketSize - overhead;
405 for (int delta = -5; delta <= 0; ++delta) { 405 for (int delta = -5; delta <= 0; ++delta) {
406 string data(capacity + delta, 'A'); 406 string data(capacity + delta, 'A');
407 size_t bytes_free = 0 - delta; 407 size_t bytes_free = 0 - delta;
408 408
409 QuicFrame frame; 409 QuicFrame frame;
410 QuicIOVector io_vector(MakeIOVector(data)); 410 QuicIOVector io_vector(MakeIOVector(data));
411 QuicPacketCreatorPeer::CreateStreamFrame( 411 QuicPacketCreatorPeer::CreateStreamFrame(
412 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame); 412 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame);
413 QuicFrames frames; 413 QuicFrames frames;
414 frames.push_back(frame); 414 frames.push_back(frame);
415 char buffer[kMaxPacketSize]; 415 char buffer[kMaxPacketSize];
416 PendingRetransmission retransmission(CreateRetransmission( 416 QuicPendingRetransmission retransmission(CreateRetransmission(
417 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, 417 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
418 ENCRYPTION_NONE, 418 ENCRYPTION_NONE,
419 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); 419 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)));
420 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 420 EXPECT_CALL(delegate_, OnSerializedPacket(_))
421 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 421 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
422 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 422 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
423 423
424 // If there is not enough space in the packet to fit a padding frame 424 // If there is not enough space in the packet to fit a padding frame
425 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 425 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
426 // will not be padded. 426 // will not be padded.
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 EXPECT_CALL(delegate_, 950 EXPECT_CALL(delegate_,
951 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); 951 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _));
952 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u, 952 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u,
953 false, false, &frame), 953 false, false, &frame),
954 "Client hello won't fit in a single packet."); 954 "Client hello won't fit in a single packet.");
955 } 955 }
956 956
957 } // namespace 957 } // namespace
958 } // namespace test 958 } // namespace test
959 } // namespace net 959 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_packet_creator.cc ('k') | net/quic/core/quic_packet_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698