| 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 <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 } | 55 } |
| 56 | 56 |
| 57 QuicVersion version; | 57 QuicVersion version; |
| 58 QuicConnectionIdLength connection_id_length; | 58 QuicConnectionIdLength connection_id_length; |
| 59 bool version_serialization; | 59 bool version_serialization; |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 // Constructs various test permutations. | 62 // Constructs various test permutations. |
| 63 vector<TestParams> GetTestParams() { | 63 vector<TestParams> GetTestParams() { |
| 64 vector<TestParams> params; | 64 vector<TestParams> params; |
| 65 QuicConnectionIdLength max = PACKET_8BYTE_CONNECTION_ID; | 65 constexpr QuicConnectionIdLength kMax = PACKET_8BYTE_CONNECTION_ID; |
| 66 QuicVersionVector all_supported_versions = QuicSupportedVersions(); | 66 QuicVersionVector all_supported_versions = QuicSupportedVersions(); |
| 67 for (size_t i = 0; i < all_supported_versions.size(); ++i) { | 67 for (size_t i = 0; i < all_supported_versions.size(); ++i) { |
| 68 params.push_back(TestParams(all_supported_versions[i], true, max)); | 68 params.push_back(TestParams(all_supported_versions[i], true, kMax)); |
| 69 params.push_back(TestParams(all_supported_versions[i], false, max)); | 69 params.push_back(TestParams(all_supported_versions[i], false, kMax)); |
| 70 } | 70 } |
| 71 params.push_back( | 71 params.push_back( |
| 72 TestParams(all_supported_versions[0], true, PACKET_0BYTE_CONNECTION_ID)); | 72 TestParams(all_supported_versions[0], true, PACKET_0BYTE_CONNECTION_ID)); |
| 73 params.push_back( | 73 params.push_back(TestParams(all_supported_versions[0], true, kMax)); |
| 74 TestParams(all_supported_versions[0], true, PACKET_1BYTE_CONNECTION_ID)); | |
| 75 params.push_back( | |
| 76 TestParams(all_supported_versions[0], true, PACKET_4BYTE_CONNECTION_ID)); | |
| 77 params.push_back(TestParams(all_supported_versions[0], true, max)); | |
| 78 return params; | 74 return params; |
| 79 } | 75 } |
| 80 | 76 |
| 81 class MockDelegate : public QuicPacketCreator::DelegateInterface { | 77 class MockDelegate : public QuicPacketCreator::DelegateInterface { |
| 82 public: | 78 public: |
| 83 MockDelegate() {} | 79 MockDelegate() {} |
| 84 ~MockDelegate() override {} | 80 ~MockDelegate() override {} |
| 85 | 81 |
| 86 MOCK_METHOD1(OnSerializedPacket, void(SerializedPacket* packet)); | 82 MOCK_METHOD1(OnSerializedPacket, void(SerializedPacket* packet)); |
| 87 MOCK_METHOD3(OnUnrecoverableError, | 83 MOCK_METHOD3(OnUnrecoverableError, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 frame.stream_frame->frame_length)); | 174 frame.stream_frame->frame_length)); |
| 179 EXPECT_EQ(offset, frame.stream_frame->offset); | 175 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 180 EXPECT_EQ(fin, frame.stream_frame->fin); | 176 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 181 } | 177 } |
| 182 | 178 |
| 183 // Returns the number of bytes consumed by the header of packet, including | 179 // Returns the number of bytes consumed by the header of packet, including |
| 184 // the version. | 180 // the version. |
| 185 size_t GetPacketHeaderOverhead() { | 181 size_t GetPacketHeaderOverhead() { |
| 186 return GetPacketHeaderSize( | 182 return GetPacketHeaderSize( |
| 187 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, | 183 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, |
| 184 !kIncludeDiversificationNonce, |
| 188 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 189 } | 186 } |
| 190 | 187 |
| 191 // Returns the number of bytes of overhead that will be added to a packet | 188 // Returns the number of bytes of overhead that will be added to a packet |
| 192 // of maximum length. | 189 // of maximum length. |
| 193 size_t GetEncryptionOverhead() { | 190 size_t GetEncryptionOverhead() { |
| 194 return creator_.max_packet_length() - | 191 return creator_.max_packet_length() - |
| 195 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 192 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 196 } | 193 } |
| 197 | 194 |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) { | 809 TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) { |
| 813 if (!GetParam().version_serialization) { | 810 if (!GetParam().version_serialization) { |
| 814 creator_.StopSendingVersion(); | 811 creator_.StopSendingVersion(); |
| 815 } | 812 } |
| 816 // A string larger than fits into a frame. | 813 // A string larger than fits into a frame. |
| 817 size_t payload_length; | 814 size_t payload_length; |
| 818 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( | 815 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( |
| 819 client_framer_.version(), | 816 client_framer_.version(), |
| 820 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 817 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 821 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 818 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 822 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, | 819 !kIncludeDiversificationNonce, creator_.connection_id_length(), |
| 823 &payload_length)); | 820 PACKET_1BYTE_PACKET_NUMBER, &payload_length)); |
| 824 QuicFrame frame; | 821 QuicFrame frame; |
| 825 const string too_long_payload(payload_length * 2, 'a'); | 822 const string too_long_payload(payload_length * 2, 'a'); |
| 826 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 823 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 827 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 824 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 828 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 825 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 829 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 826 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 830 ASSERT_TRUE(frame.stream_frame); | 827 ASSERT_TRUE(frame.stream_frame); |
| 831 size_t consumed = frame.stream_frame->frame_length; | 828 size_t consumed = frame.stream_frame->frame_length; |
| 832 EXPECT_EQ(payload_length, consumed); | 829 EXPECT_EQ(payload_length, consumed); |
| 833 const string payload(payload_length, 'a'); | 830 const string payload(payload_length, 'a'); |
| 834 CheckStreamFrame(frame, 1u, payload, 0u, false); | 831 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 835 creator_.Flush(); | 832 creator_.Flush(); |
| 836 DeleteSerializedPacket(); | 833 DeleteSerializedPacket(); |
| 837 } | 834 } |
| 838 | 835 |
| 839 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { | 836 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
| 840 if (!GetParam().version_serialization) { | 837 if (!GetParam().version_serialization) { |
| 841 creator_.StopSendingVersion(); | 838 creator_.StopSendingVersion(); |
| 842 } | 839 } |
| 843 const size_t max_plaintext_size = | 840 const size_t max_plaintext_size = |
| 844 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 841 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 845 EXPECT_FALSE(creator_.HasPendingFrames()); | 842 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 846 EXPECT_EQ(max_plaintext_size - | 843 EXPECT_EQ(max_plaintext_size - |
| 847 GetPacketHeaderSize( | 844 GetPacketHeaderSize( |
| 848 creator_.connection_id_length(), | 845 creator_.connection_id_length(), |
| 849 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 846 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 850 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 847 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 851 PACKET_1BYTE_PACKET_NUMBER), | 848 !kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER), |
| 852 creator_.BytesFree()); | 849 creator_.BytesFree()); |
| 853 | 850 |
| 854 // Add a variety of frame types and then a padding frame. | 851 // Add a variety of frame types and then a padding frame. |
| 855 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 852 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 856 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 853 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 857 EXPECT_TRUE(creator_.HasPendingFrames()); | 854 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 858 | 855 |
| 859 QuicFrame frame; | 856 QuicFrame frame; |
| 860 QuicIOVector io_vector(MakeIOVector("test")); | 857 QuicIOVector io_vector(MakeIOVector("test")); |
| 861 ASSERT_TRUE( | 858 ASSERT_TRUE( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 882 ASSERT_EQ(1u, retransmittable.size()); | 879 ASSERT_EQ(1u, retransmittable.size()); |
| 883 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); | 880 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); |
| 884 ASSERT_TRUE(retransmittable[0].stream_frame); | 881 ASSERT_TRUE(retransmittable[0].stream_frame); |
| 885 DeleteSerializedPacket(); | 882 DeleteSerializedPacket(); |
| 886 | 883 |
| 887 EXPECT_FALSE(creator_.HasPendingFrames()); | 884 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 888 EXPECT_EQ(max_plaintext_size - | 885 EXPECT_EQ(max_plaintext_size - |
| 889 GetPacketHeaderSize( | 886 GetPacketHeaderSize( |
| 890 creator_.connection_id_length(), | 887 creator_.connection_id_length(), |
| 891 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 888 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 892 /*include_path_id=*/false, PACKET_1BYTE_PACKET_NUMBER), | 889 /*include_path_id=*/false, !kIncludeDiversificationNonce, |
| 890 PACKET_1BYTE_PACKET_NUMBER), |
| 893 creator_.BytesFree()); | 891 creator_.BytesFree()); |
| 894 } | 892 } |
| 895 | 893 |
| 896 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { | 894 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { |
| 897 if (!GetParam().version_serialization) { | 895 if (!GetParam().version_serialization) { |
| 898 creator_.StopSendingVersion(); | 896 creator_.StopSendingVersion(); |
| 899 } | 897 } |
| 900 creator_.SetMaxPacketLength(kMaxPacketSize); | 898 creator_.SetMaxPacketLength(kMaxPacketSize); |
| 901 | 899 |
| 902 // Serialized length of ack frame with 2000 nack ranges should be limited by | 900 // Serialized length of ack frame with 2000 nack ranges should be limited by |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); | 1140 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); |
| 1143 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1141 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
| 1144 StringPiece()); | 1142 StringPiece()); |
| 1145 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1143 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
| 1146 "Cannot send stream data without encryption."); | 1144 "Cannot send stream data without encryption."); |
| 1147 } | 1145 } |
| 1148 | 1146 |
| 1149 } // namespace | 1147 } // namespace |
| 1150 } // namespace test | 1148 } // namespace test |
| 1151 } // namespace net | 1149 } // namespace net |
| OLD | NEW |