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

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

Issue 1918953003: Landing Recent QUIC changes until 4/22/2016 14:55 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Deleted SpdyFramerTests missed while mergeing 120451808 Created 4 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
« no previous file with comments | « net/quic/quic_packet_creator.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_creator.h" 5 #include "net/quic/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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 true); 199 true);
200 } 200 }
201 201
202 QuicIOVector MakeIOVector(StringPiece s) { 202 QuicIOVector MakeIOVector(StringPiece s) {
203 return ::net::MakeIOVector(s, &iov_); 203 return ::net::MakeIOVector(s, &iov_);
204 } 204 }
205 205
206 PendingRetransmission CreateRetransmission( 206 PendingRetransmission CreateRetransmission(
207 const QuicFrames& retransmittable_frames, 207 const QuicFrames& retransmittable_frames,
208 bool has_crypto_handshake, 208 bool has_crypto_handshake,
209 bool needs_padding, 209 int num_padding_bytes,
210 EncryptionLevel encryption_level, 210 EncryptionLevel encryption_level,
211 QuicPacketNumberLength packet_number_length) { 211 QuicPacketNumberLength packet_number_length) {
212 return PendingRetransmission(1u, 1u, NOT_RETRANSMISSION, 212 return PendingRetransmission(1u, 1u, NOT_RETRANSMISSION,
213 retransmittable_frames, has_crypto_handshake, 213 retransmittable_frames, has_crypto_handshake,
214 needs_padding, encryption_level, 214 num_padding_bytes, encryption_level,
215 packet_number_length); 215 packet_number_length);
216 } 216 }
217 217
218 static const QuicStreamOffset kOffset = 1u; 218 static const QuicStreamOffset kOffset = 1u;
219 219
220 char buffer_[kMaxPacketSize]; 220 char buffer_[kMaxPacketSize];
221 QuicFrames frames_; 221 QuicFrames frames_;
222 QuicFramer server_framer_; 222 QuicFramer server_framer_;
223 QuicFramer client_framer_; 223 QuicFramer client_framer_;
224 StrictMock<MockFramerVisitor> framer_visitor_; 224 StrictMock<MockFramerVisitor> framer_visitor_;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, 409 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
410 PACKET_4BYTE_PACKET_NUMBER); 410 PACKET_4BYTE_PACKET_NUMBER);
411 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, 411 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_,
412 PACKET_2BYTE_PACKET_NUMBER); 412 PACKET_2BYTE_PACKET_NUMBER);
413 QuicStreamFrame* stream_frame = 413 QuicStreamFrame* stream_frame =
414 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); 414 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece());
415 QuicFrames frames; 415 QuicFrames frames;
416 frames.push_back(QuicFrame(stream_frame)); 416 frames.push_back(QuicFrame(stream_frame));
417 char buffer[kMaxPacketSize]; 417 char buffer[kMaxPacketSize];
418 PendingRetransmission retransmission(CreateRetransmission( 418 PendingRetransmission retransmission(CreateRetransmission(
419 frames, true /* has_crypto_handshake */, true /* needs padding */, 419 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
420 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); 420 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER));
421 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 421 EXPECT_CALL(delegate_, OnSerializedPacket(_))
422 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 422 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
423 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 423 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
424 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, 424 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
425 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); 425 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_));
426 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, 426 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER,
427 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 427 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
428 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 428 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
429 serialized_packet_.packet_number_length); 429 serialized_packet_.packet_number_length);
430 430
431 { 431 {
432 InSequence s; 432 InSequence s;
433 EXPECT_CALL(framer_visitor_, OnPacket()); 433 EXPECT_CALL(framer_visitor_, OnPacket());
434 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 434 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
435 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 435 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
436 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 436 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
437 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 437 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
438 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 438 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
439 EXPECT_CALL(framer_visitor_, OnPaddingFrame(_));
439 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 440 EXPECT_CALL(framer_visitor_, OnPacketComplete());
440 } 441 }
441 ProcessPacket(serialized_packet_); 442 ProcessPacket(serialized_packet_);
442 delete stream_frame; 443 delete stream_frame;
443 } 444 }
444 445
445 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) { 446 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) {
446 QuicStreamFrame* stream_frame = 447 QuicStreamFrame* stream_frame =
447 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); 448 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece());
448 QuicFrames frames; 449 QuicFrames frames;
449 frames.push_back(QuicFrame(stream_frame)); 450 frames.push_back(QuicFrame(stream_frame));
450 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); 451 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
451 char buffer[kMaxPacketSize]; 452 char buffer[kMaxPacketSize];
452 PendingRetransmission retransmission(CreateRetransmission( 453 PendingRetransmission retransmission(CreateRetransmission(
453 frames, true /* has_crypto_handshake */, true /* needs padding */, 454 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
454 ENCRYPTION_NONE, 455 ENCRYPTION_NONE,
455 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); 456 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
456 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 457 EXPECT_CALL(delegate_, OnSerializedPacket(_))
457 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 458 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
458 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 459 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
459 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level); 460 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level);
460 delete stream_frame; 461 delete stream_frame;
461 } 462 }
462 463
463 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) { 464 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) {
464 QuicStreamFrame* stream_frame = 465 QuicStreamFrame* stream_frame =
465 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece()); 466 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece());
466 QuicFrames frames; 467 QuicFrames frames;
467 frames.push_back(QuicFrame(stream_frame)); 468 frames.push_back(QuicFrame(stream_frame));
468 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); 469 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
469 char buffer[kMaxPacketSize]; 470 char buffer[kMaxPacketSize];
470 PendingRetransmission retransmission(CreateRetransmission( 471 PendingRetransmission retransmission(CreateRetransmission(
471 frames, false /* has_crypto_handshake */, false /* needs padding */, 472 frames, false /* has_crypto_handshake */, 0 /* no padding */,
472 ENCRYPTION_NONE, 473 ENCRYPTION_NONE,
473 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); 474 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
474 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 475 EXPECT_CALL(delegate_, OnSerializedPacket(_))
475 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 476 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
476 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 477 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
477 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level); 478 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level);
478 delete stream_frame; 479 delete stream_frame;
479 } 480 }
480 481
481 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { 482 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) {
482 QuicFrame frame; 483 QuicFrame frame;
483 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); 484 QuicIOVector io_vector(MakeIOVector("fake handshake message data"));
484 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, 485 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
485 io_vector, 0u, 0u, false, &frame); 486 io_vector, 0u, 0u, false, &frame);
486 QuicFrames frames; 487 QuicFrames frames;
487 frames.push_back(frame); 488 frames.push_back(frame);
488 char buffer[kMaxPacketSize]; 489 char buffer[kMaxPacketSize];
489 PendingRetransmission retransmission(CreateRetransmission( 490 PendingRetransmission retransmission(CreateRetransmission(
490 frames, true /* has_crypto_handshake */, true /* needs padding */, 491 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
491 ENCRYPTION_NONE, 492 ENCRYPTION_NONE,
492 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); 493 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
493 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 494 EXPECT_CALL(delegate_, OnSerializedPacket(_))
494 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 495 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
495 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 496 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
496 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); 497 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length);
497 delete frame.stream_frame; 498 delete frame.stream_frame;
498 } 499 }
499 500
501 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSpecifiedPadding) {
502 QuicFrame frame;
503 QuicIOVector io_vector(MakeIOVector("fake message data"));
504 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
505 io_vector, 0u, 0u, false, &frame);
506
507 const int kNumPaddingBytes1 = 4;
508 int packet_size = 0;
509 {
510 QuicFrames frames;
511 frames.push_back(frame);
512 char buffer[kMaxPacketSize];
513 PendingRetransmission retransmission(CreateRetransmission(
514 frames, false /* has_crypto_handshake */,
515 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE,
516 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
517 EXPECT_CALL(delegate_, OnSerializedPacket(_))
518 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
519 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
520 packet_size = serialized_packet_.encrypted_length;
521 }
522
523 const int kNumPaddingBytes2 = 44;
524 QuicFrames frames;
525 frames.push_back(frame);
526 char buffer[kMaxPacketSize];
527 PendingRetransmission retransmission(CreateRetransmission(
528 frames, false /* has_crypto_handshake */,
529 kNumPaddingBytes2 /* padding bytes */, ENCRYPTION_NONE,
530 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
531 EXPECT_CALL(delegate_, OnSerializedPacket(_))
532 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
533 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
534
535 EXPECT_EQ(packet_size + kNumPaddingBytes2 - kNumPaddingBytes1,
536 serialized_packet_.encrypted_length);
537 delete frame.stream_frame;
538 }
539
500 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { 540 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) {
501 const size_t overhead = GetPacketHeaderOverhead() + GetEncryptionOverhead() + 541 const size_t overhead = GetPacketHeaderOverhead() + GetEncryptionOverhead() +
502 GetStreamFrameOverhead(); 542 GetStreamFrameOverhead();
503 size_t capacity = kDefaultMaxPacketSize - overhead; 543 size_t capacity = kDefaultMaxPacketSize - overhead;
504 for (int delta = -5; delta <= 0; ++delta) { 544 for (int delta = -5; delta <= 0; ++delta) {
505 string data(capacity + delta, 'A'); 545 string data(capacity + delta, 'A');
506 size_t bytes_free = 0 - delta; 546 size_t bytes_free = 0 - delta;
507 547
508 QuicFrame frame; 548 QuicFrame frame;
509 QuicIOVector io_vector(MakeIOVector(data)); 549 QuicIOVector io_vector(MakeIOVector(data));
510 UniqueStreamBuffer stream_buffer; 550 UniqueStreamBuffer stream_buffer;
511 QuicPacketCreatorPeer::CreateStreamFrame( 551 QuicPacketCreatorPeer::CreateStreamFrame(
512 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame); 552 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame);
513 QuicFrames frames; 553 QuicFrames frames;
514 frames.push_back(frame); 554 frames.push_back(frame);
515 char buffer[kMaxPacketSize]; 555 char buffer[kMaxPacketSize];
516 PendingRetransmission retransmission(CreateRetransmission( 556 PendingRetransmission retransmission(CreateRetransmission(
517 frames, true /* has_crypto_handshake */, true /* needs padding */, 557 frames, true /* has_crypto_handshake */, -1 /* needs full padding */,
518 ENCRYPTION_NONE, 558 ENCRYPTION_NONE,
519 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); 559 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)));
520 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 560 EXPECT_CALL(delegate_, OnSerializedPacket(_))
521 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 561 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
522 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); 562 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
523 563
524 // If there is not enough space in the packet to fit a padding frame 564 // If there is not enough space in the packet to fit a padding frame
525 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 565 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
526 // will not be padded. 566 // will not be padded.
527 if (bytes_free < 3) { 567 if (bytes_free < 3) {
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); 1180 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _));
1141 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, 1181 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u,
1142 StringPiece()); 1182 StringPiece());
1143 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), 1183 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)),
1144 "Cannot send stream data without encryption."); 1184 "Cannot send stream data without encryption.");
1145 } 1185 }
1146 1186
1147 } // namespace 1187 } // namespace
1148 } // namespace test 1188 } // namespace test
1149 } // namespace net 1189 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698