OLD | NEW |
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 "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/crypto/null_encrypter.h" | 8 #include "net/quic/crypto/null_encrypter.h" |
9 #include "net/quic/crypto/quic_decrypter.h" | 9 #include "net/quic/crypto/quic_decrypter.h" |
10 #include "net/quic/crypto/quic_encrypter.h" | 10 #include "net/quic/crypto/quic_encrypter.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 data_("foo"), | 82 data_("foo"), |
83 creator_(connection_id_, &client_framer_, &mock_random_) { | 83 creator_(connection_id_, &client_framer_, &mock_random_) { |
84 creator_.set_connection_id_length(GetParam().connection_id_length); | 84 creator_.set_connection_id_length(GetParam().connection_id_length); |
85 client_framer_.set_visitor(&framer_visitor_); | 85 client_framer_.set_visitor(&framer_visitor_); |
86 client_framer_.set_received_entropy_calculator(&entropy_calculator_); | 86 client_framer_.set_received_entropy_calculator(&entropy_calculator_); |
87 server_framer_.set_visitor(&framer_visitor_); | 87 server_framer_.set_visitor(&framer_visitor_); |
88 } | 88 } |
89 | 89 |
90 ~QuicPacketCreatorTest() override {} | 90 ~QuicPacketCreatorTest() override {} |
91 | 91 |
92 void ProcessPacket(QuicPacket* packet) { | 92 void ProcessPacket(QuicEncryptedPacket* encrypted) { |
93 scoped_ptr<QuicEncryptedPacket> encrypted( | |
94 server_framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number_, | |
95 *packet)); | |
96 server_framer_.ProcessPacket(*encrypted); | 93 server_framer_.ProcessPacket(*encrypted); |
97 } | 94 } |
98 | 95 |
99 void CheckStreamFrame(const QuicFrame& frame, | 96 void CheckStreamFrame(const QuicFrame& frame, |
100 QuicStreamId stream_id, | 97 QuicStreamId stream_id, |
101 const string& data, | 98 const string& data, |
102 QuicStreamOffset offset, | 99 QuicStreamOffset offset, |
103 bool fin) { | 100 bool fin) { |
104 EXPECT_EQ(STREAM_FRAME, frame.type); | 101 EXPECT_EQ(STREAM_FRAME, frame.type); |
105 ASSERT_TRUE(frame.stream_frame); | 102 ASSERT_TRUE(frame.stream_frame); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 delete serialized.packet; | 431 delete serialized.packet; |
435 } | 432 } |
436 | 433 |
437 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 434 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
438 // If the original packet sequence number length, the current sequence number | 435 // If the original packet sequence number length, the current sequence number |
439 // length, and the configured send sequence number length are different, the | 436 // length, and the configured send sequence number length are different, the |
440 // retransmit must sent with the original length and the others do not change. | 437 // retransmit must sent with the original length and the others do not change. |
441 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); | 438 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); |
442 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_, | 439 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_, |
443 PACKET_2BYTE_SEQUENCE_NUMBER); | 440 PACKET_2BYTE_SEQUENCE_NUMBER); |
444 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 441 QuicStreamFrame* stream_frame = |
| 442 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, IOVector()); |
| 443 RetransmittableFrames frames; |
| 444 frames.set_encryption_level(ENCRYPTION_NONE); |
| 445 frames.AddStreamFrame(stream_frame); |
445 SerializedPacket serialized = | 446 SerializedPacket serialized = |
446 creator_.ReserializeAllFrames(frames_, PACKET_1BYTE_SEQUENCE_NUMBER); | 447 creator_.ReserializeAllFrames(frames, PACKET_1BYTE_SEQUENCE_NUMBER); |
447 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, | 448 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, |
448 creator_.next_sequence_number_length()); | 449 creator_.next_sequence_number_length()); |
449 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, | 450 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, |
450 QuicPacketCreatorPeer::GetSequenceNumberLength(&creator_)); | 451 QuicPacketCreatorPeer::GetSequenceNumberLength(&creator_)); |
451 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 452 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
452 delete frames_[0].stream_frame; | |
453 | 453 |
454 { | 454 { |
455 InSequence s; | 455 InSequence s; |
456 EXPECT_CALL(framer_visitor_, OnPacket()); | 456 EXPECT_CALL(framer_visitor_, OnPacket()); |
457 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 457 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
458 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 458 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
459 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 459 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
460 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 460 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
461 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 461 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
462 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 462 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
463 } | 463 } |
464 ProcessPacket(serialized.packet); | 464 ProcessPacket(serialized.packet); |
465 delete serialized.packet; | 465 delete serialized.packet; |
466 } | 466 } |
467 | 467 |
468 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { | 468 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { |
469 scoped_ptr<QuicStreamFrame> stream_frame( | 469 QuicStreamFrame* stream_frame = |
470 new QuicStreamFrame(kCryptoStreamId, /*fin=*/ false, /*offset=*/ 0, | 470 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, /*offset=*/0, |
471 MakeIOVector("fake handshake message data"))); | 471 MakeIOVector("fake handshake message data")); |
472 frames_.push_back(QuicFrame(stream_frame.get())); | 472 RetransmittableFrames frames; |
473 SerializedPacket serialized = | 473 frames.set_encryption_level(ENCRYPTION_NONE); |
474 creator_.ReserializeAllFrames(frames_, | 474 frames.AddStreamFrame(stream_frame); |
475 creator_.next_sequence_number_length()); | 475 SerializedPacket serialized = creator_.ReserializeAllFrames( |
476 | 476 frames, creator_.next_sequence_number_length()); |
477 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 477 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
478 serialized.packet->length()); | |
479 delete serialized.packet; | 478 delete serialized.packet; |
480 } | 479 } |
481 | 480 |
482 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { | 481 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
483 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 482 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
484 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 483 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
485 size_t capacity = kDefaultMaxPacketSize - overhead; | 484 size_t capacity = kDefaultMaxPacketSize - overhead; |
486 for (int delta = -5; delta <= 0; ++delta) { | 485 for (int delta = -5; delta <= 0; ++delta) { |
487 string data(capacity + delta, 'A'); | 486 string data(capacity + delta, 'A'); |
488 size_t bytes_free = 0 - delta; | 487 size_t bytes_free = 0 - delta; |
489 | 488 |
490 scoped_ptr<QuicStreamFrame> stream_frame( | 489 QuicStreamFrame* stream_frame = new QuicStreamFrame( |
491 new QuicStreamFrame(kCryptoStreamId, /*fin=*/ false, kOffset, | 490 kCryptoStreamId, /*fin=*/false, kOffset, MakeIOVector(data)); |
492 MakeIOVector(data))); | 491 RetransmittableFrames frames; |
493 frames_.push_back(QuicFrame(stream_frame.get())); | 492 frames.set_encryption_level(ENCRYPTION_NONE); |
494 SerializedPacket serialized = | 493 frames.AddStreamFrame(stream_frame); |
495 creator_.ReserializeAllFrames(frames_, | 494 SerializedPacket serialized = creator_.ReserializeAllFrames( |
496 creator_.next_sequence_number_length()); | 495 frames, creator_.next_sequence_number_length()); |
497 | 496 |
498 // If there is not enough space in the packet to fit a padding frame | 497 // If there is not enough space in the packet to fit a padding frame |
499 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 498 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
500 // will not be padded. | 499 // will not be padded. |
501 if (bytes_free < 3) { | 500 if (bytes_free < 3) { |
502 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) | 501 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
503 - bytes_free, serialized.packet->length()); | 502 serialized.packet->length()); |
504 } else { | 503 } else { |
505 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 504 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
506 serialized.packet->length()); | |
507 } | 505 } |
508 | 506 |
509 delete serialized.packet; | 507 delete serialized.packet; |
510 frames_.clear(); | 508 frames_.clear(); |
511 } | 509 } |
512 } | 510 } |
513 | 511 |
514 TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) { | 512 TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) { |
515 QuicConnectionCloseFrame frame; | 513 QuicConnectionCloseFrame frame; |
516 frame.error_code = QUIC_NO_ERROR; | 514 frame.error_code = QUIC_NO_ERROR; |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 size_t bytes_consumed = creator_.CreateStreamFrame( | 731 size_t bytes_consumed = creator_.CreateStreamFrame( |
734 kCryptoStreamId, MakeIOVector(data), kOffset, false, &frame); | 732 kCryptoStreamId, MakeIOVector(data), kOffset, false, &frame); |
735 EXPECT_LT(0u, bytes_consumed); | 733 EXPECT_LT(0u, bytes_consumed); |
736 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 734 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
737 SerializedPacket serialized_packet = creator_.SerializePacket(); | 735 SerializedPacket serialized_packet = creator_.SerializePacket(); |
738 ASSERT_TRUE(serialized_packet.packet); | 736 ASSERT_TRUE(serialized_packet.packet); |
739 // If there is not enough space in the packet to fit a padding frame | 737 // If there is not enough space in the packet to fit a padding frame |
740 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 738 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
741 // will not be padded. | 739 // will not be padded. |
742 if (bytes_free < 3) { | 740 if (bytes_free < 3) { |
743 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) | 741 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
744 - bytes_free, serialized_packet.packet->length()); | 742 serialized_packet.packet->length()); |
745 } else { | 743 } else { |
746 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 744 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); |
747 serialized_packet.packet->length()); | |
748 } | 745 } |
749 delete serialized_packet.packet; | 746 delete serialized_packet.packet; |
750 delete serialized_packet.retransmittable_frames; | 747 delete serialized_packet.retransmittable_frames; |
751 } | 748 } |
752 } | 749 } |
753 | 750 |
754 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { | 751 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { |
755 // Compute the total overhead for a single frame in packet. | 752 // Compute the total overhead for a single frame in packet. |
756 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 753 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
757 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 754 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
758 ASSERT_GT(kDefaultMaxPacketSize, overhead); | 755 ASSERT_GT(kDefaultMaxPacketSize, overhead); |
759 size_t capacity = kDefaultMaxPacketSize - overhead; | 756 size_t capacity = kDefaultMaxPacketSize - overhead; |
760 // Now, test various sizes around this size. | 757 // Now, test various sizes around this size. |
761 for (int delta = -5; delta <= 5; ++delta) { | 758 for (int delta = -5; delta <= 5; ++delta) { |
762 string data(capacity + delta, 'A'); | 759 string data(capacity + delta, 'A'); |
763 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 760 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
764 | 761 |
765 QuicFrame frame; | 762 QuicFrame frame; |
766 size_t bytes_consumed = creator_.CreateStreamFrame( | 763 size_t bytes_consumed = creator_.CreateStreamFrame( |
767 kClientDataStreamId1, MakeIOVector(data), kOffset, false, &frame); | 764 kClientDataStreamId1, MakeIOVector(data), kOffset, false, &frame); |
768 EXPECT_LT(0u, bytes_consumed); | 765 EXPECT_LT(0u, bytes_consumed); |
769 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 766 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
770 SerializedPacket serialized_packet = creator_.SerializePacket(); | 767 SerializedPacket serialized_packet = creator_.SerializePacket(); |
771 ASSERT_TRUE(serialized_packet.packet); | 768 ASSERT_TRUE(serialized_packet.packet); |
772 if (bytes_free > 0) { | 769 if (bytes_free > 0) { |
773 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) | 770 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
774 - bytes_free, serialized_packet.packet->length()); | 771 serialized_packet.packet->length()); |
775 } else { | 772 } else { |
776 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 773 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); |
777 serialized_packet.packet->length()); | |
778 } | 774 } |
779 delete serialized_packet.packet; | 775 delete serialized_packet.packet; |
780 delete serialized_packet.retransmittable_frames; | 776 delete serialized_packet.retransmittable_frames; |
781 } | 777 } |
782 } | 778 } |
783 | 779 |
784 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { | 780 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { |
785 QuicFramerPeer::SetIsServer(&client_framer_, true); | 781 QuicFramerPeer::SetIsServer(&client_framer_, true); |
786 QuicVersionVector versions; | 782 QuicVersionVector versions; |
787 versions.push_back(test::QuicVersionMax()); | 783 versions.push_back(test::QuicVersionMax()); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 PACKET_1BYTE_SEQUENCE_NUMBER, | 945 PACKET_1BYTE_SEQUENCE_NUMBER, |
950 NOT_IN_FEC_GROUP), | 946 NOT_IN_FEC_GROUP), |
951 creator_.BytesFree()); | 947 creator_.BytesFree()); |
952 } | 948 } |
953 | 949 |
954 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { | 950 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { |
955 if (!GetParam().version_serialization) { | 951 if (!GetParam().version_serialization) { |
956 creator_.StopSendingVersion(); | 952 creator_.StopSendingVersion(); |
957 } | 953 } |
958 creator_.set_max_packet_length(kMaxPacketSize); | 954 creator_.set_max_packet_length(kMaxPacketSize); |
959 const size_t max_plaintext_size = | |
960 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | |
961 | 955 |
962 // Serialized length of ack frame with 2000 nack ranges should be limited by | 956 // Serialized length of ack frame with 2000 nack ranges should be limited by |
963 // the number of nack ranges that can be fit in an ack frame. | 957 // the number of nack ranges that can be fit in an ack frame. |
964 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 958 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
965 size_t frame_len = client_framer_.GetSerializedFrameLength( | 959 size_t frame_len = client_framer_.GetSerializedFrameLength( |
966 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, | 960 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
967 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); | 961 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); |
968 EXPECT_GT(creator_.BytesFree(), frame_len); | 962 EXPECT_GT(creator_.BytesFree(), frame_len); |
969 EXPECT_GT(max_plaintext_size, creator_.PacketSize()); | 963 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
970 | 964 |
971 // Add ack frame to creator. | 965 // Add ack frame to creator. |
972 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 966 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
973 EXPECT_TRUE(creator_.HasPendingFrames()); | 967 EXPECT_TRUE(creator_.HasPendingFrames()); |
974 EXPECT_GT(max_plaintext_size, creator_.PacketSize()); | 968 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
975 EXPECT_LT(0u, creator_.BytesFree()); | 969 EXPECT_LT(0u, creator_.BytesFree()); |
976 | 970 |
977 // Make sure that an additional stream frame can be added to the packet. | 971 // Make sure that an additional stream frame can be added to the packet. |
978 QuicFrame stream_frame; | 972 QuicFrame stream_frame; |
979 size_t consumed = creator_.CreateStreamFrame( | 973 size_t consumed = creator_.CreateStreamFrame( |
980 2u, MakeIOVector("test"), 0u, false, &stream_frame); | 974 2u, MakeIOVector("test"), 0u, false, &stream_frame); |
981 EXPECT_EQ(4u, consumed); | 975 EXPECT_EQ(4u, consumed); |
982 ASSERT_TRUE(stream_frame.stream_frame); | 976 ASSERT_TRUE(stream_frame.stream_frame); |
983 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame)); | 977 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame)); |
984 EXPECT_TRUE(creator_.HasPendingFrames()); | 978 EXPECT_TRUE(creator_.HasPendingFrames()); |
985 | 979 |
986 // Ensure the packet is successfully created, and the packet size estimate | 980 // Ensure the packet is successfully created, and the packet size estimate |
987 // matches the serialized packet length. | 981 // matches the serialized packet length. |
988 EXPECT_CALL(entropy_calculator_, | 982 EXPECT_CALL(entropy_calculator_, |
989 EntropyHash(_)).WillOnce(testing::Return(0)); | 983 EntropyHash(_)).WillOnce(testing::Return(0)); |
990 size_t est_packet_size = creator_.PacketSize(); | 984 size_t est_packet_size = creator_.PacketSize(); |
991 SerializedPacket serialized = creator_.SerializePacket(); | 985 SerializedPacket serialized = creator_.SerializePacket(); |
992 ASSERT_TRUE(serialized.packet); | 986 ASSERT_TRUE(serialized.packet); |
993 EXPECT_EQ(est_packet_size, serialized.packet->length()); | 987 EXPECT_EQ(est_packet_size, |
| 988 client_framer_.GetMaxPlaintextSize(serialized.packet->length())); |
994 delete serialized.retransmittable_frames; | 989 delete serialized.retransmittable_frames; |
995 delete serialized.packet; | 990 delete serialized.packet; |
996 } | 991 } |
997 | 992 |
998 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { | 993 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { |
999 if (!GetParam().version_serialization) { | 994 if (!GetParam().version_serialization) { |
1000 creator_.StopSendingVersion(); | 995 creator_.StopSendingVersion(); |
1001 } | 996 } |
1002 creator_.set_max_packet_length(500u); | 997 creator_.set_max_packet_length(500u); |
1003 | 998 |
1004 const size_t max_plaintext_size = | 999 const size_t max_plaintext_size = |
1005 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 1000 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
1006 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); | 1001 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); |
1007 | 1002 |
1008 // Serialized length of ack frame with 2000 nack ranges should be limited by | 1003 // Serialized length of ack frame with 2000 nack ranges should be limited by |
1009 // the packet size. | 1004 // the packet size. |
1010 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 1005 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
1011 size_t frame_len = client_framer_.GetSerializedFrameLength( | 1006 size_t frame_len = client_framer_.GetSerializedFrameLength( |
1012 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, | 1007 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
1013 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); | 1008 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); |
1014 EXPECT_EQ(creator_.BytesFree(), frame_len); | 1009 EXPECT_EQ(creator_.BytesFree(), frame_len); |
1015 | 1010 |
1016 // Add ack frame to creator. | 1011 // Add ack frame to creator. |
1017 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1012 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
1018 EXPECT_TRUE(creator_.HasPendingFrames()); | 1013 EXPECT_TRUE(creator_.HasPendingFrames()); |
1019 EXPECT_EQ(max_plaintext_size, creator_.PacketSize()); | 1014 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), |
| 1015 creator_.PacketSize()); |
1020 EXPECT_EQ(0u, creator_.BytesFree()); | 1016 EXPECT_EQ(0u, creator_.BytesFree()); |
1021 | 1017 |
1022 // Ensure the packet is successfully created, and the packet size estimate | 1018 // Ensure the packet is successfully created, and the packet size estimate |
1023 // may not match the serialized packet length. | 1019 // may not match the serialized packet length. |
1024 EXPECT_CALL(entropy_calculator_, | 1020 EXPECT_CALL(entropy_calculator_, |
1025 EntropyHash(_)).WillOnce(Return(0)); | 1021 EntropyHash(_)).WillOnce(Return(0)); |
1026 size_t est_packet_size = creator_.PacketSize(); | 1022 size_t est_packet_size = creator_.PacketSize(); |
1027 SerializedPacket serialized = creator_.SerializePacket(); | 1023 SerializedPacket serialized = creator_.SerializePacket(); |
1028 ASSERT_TRUE(serialized.packet); | 1024 ASSERT_TRUE(serialized.packet); |
1029 EXPECT_GE(est_packet_size, serialized.packet->length()); | 1025 EXPECT_GE(est_packet_size, |
| 1026 client_framer_.GetMaxPlaintextSize(serialized.packet->length())); |
1030 delete serialized.packet; | 1027 delete serialized.packet; |
1031 } | 1028 } |
1032 | 1029 |
1033 | 1030 |
1034 TEST_P(QuicPacketCreatorTest, EntropyFlag) { | 1031 TEST_P(QuicPacketCreatorTest, EntropyFlag) { |
1035 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 1032 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
1036 | 1033 |
1037 for (int i = 0; i < 2; ++i) { | 1034 for (int i = 0; i < 2; ++i) { |
1038 for (int j = 0; j < 64; ++j) { | 1035 for (int j = 0; j < 64; ++j) { |
1039 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 1036 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
(...skipping 10 matching lines...) Expand all Loading... |
1050 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 1047 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
1051 mock_random_.ChangeValue(); | 1048 mock_random_.ChangeValue(); |
1052 } | 1049 } |
1053 | 1050 |
1054 delete frames_[0].stream_frame; | 1051 delete frames_[0].stream_frame; |
1055 } | 1052 } |
1056 | 1053 |
1057 } // namespace | 1054 } // namespace |
1058 } // namespace test | 1055 } // namespace test |
1059 } // namespace net | 1056 } // namespace net |
OLD | NEW |