| 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/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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 &buffer_allocator_, | 131 &buffer_allocator_, |
| 132 &delegate_), | 132 &delegate_), |
| 133 serialized_packet_(creator_.NoPacket()) { | 133 serialized_packet_(creator_.NoPacket()) { |
| 134 creator_.set_connection_id_length(GetParam().connection_id_length); | 134 creator_.set_connection_id_length(GetParam().connection_id_length); |
| 135 | 135 |
| 136 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter()); | 136 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter()); |
| 137 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter()); | 137 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter()); |
| 138 client_framer_.set_visitor(&framer_visitor_); | 138 client_framer_.set_visitor(&framer_visitor_); |
| 139 client_framer_.set_received_entropy_calculator(&entropy_calculator_); | 139 client_framer_.set_received_entropy_calculator(&entropy_calculator_); |
| 140 server_framer_.set_visitor(&framer_visitor_); | 140 server_framer_.set_visitor(&framer_visitor_); |
| 141 // TODO(ianswett): Fix this test so it uses a non-null encrypter. | |
| 142 FLAGS_quic_never_write_unencrypted_data = false; | |
| 143 } | 141 } |
| 144 | 142 |
| 145 ~QuicPacketCreatorTest() override { | 143 ~QuicPacketCreatorTest() override { |
| 146 delete[] serialized_packet_.encrypted_buffer; | 144 delete[] serialized_packet_.encrypted_buffer; |
| 147 ClearSerializedPacket(&serialized_packet_); | 145 ClearSerializedPacket(&serialized_packet_); |
| 148 } | 146 } |
| 149 | 147 |
| 150 SerializedPacket SerializeAllFrames(const QuicFrames& frames) { | 148 SerializedPacket SerializeAllFrames(const QuicFrames& frames) { |
| 151 SerializedPacket packet = QuicPacketCreatorPeer::SerializeAllFrames( | 149 SerializedPacket packet = QuicPacketCreatorPeer::SerializeAllFrames( |
| 152 &creator_, frames, buffer_, kMaxPacketSize); | 150 &creator_, frames, buffer_, kMaxPacketSize); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 // length of truncated connection id. | 243 // length of truncated connection id. |
| 246 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, | 244 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, |
| 247 QuicPacketCreatorTest, | 245 QuicPacketCreatorTest, |
| 248 ::testing::ValuesIn(GetTestParams())); | 246 ::testing::ValuesIn(GetTestParams())); |
| 249 | 247 |
| 250 TEST_P(QuicPacketCreatorTest, SerializeFrames) { | 248 TEST_P(QuicPacketCreatorTest, SerializeFrames) { |
| 251 for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; ++i) { | 249 for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; ++i) { |
| 252 EncryptionLevel level = static_cast<EncryptionLevel>(i); | 250 EncryptionLevel level = static_cast<EncryptionLevel>(i); |
| 253 creator_.set_encryption_level(level); | 251 creator_.set_encryption_level(level); |
| 254 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); | 252 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 255 frames_.push_back( | 253 frames_.push_back(QuicFrame( |
| 256 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); | 254 new QuicStreamFrame(kCryptoStreamId, false, 0u, StringPiece()))); |
| 257 frames_.push_back( | 255 frames_.push_back(QuicFrame( |
| 258 QuicFrame(new QuicStreamFrame(0u, true, 0u, StringPiece()))); | 256 new QuicStreamFrame(kCryptoStreamId, true, 0u, StringPiece()))); |
| 259 SerializedPacket serialized = SerializeAllFrames(frames_); | 257 SerializedPacket serialized = SerializeAllFrames(frames_); |
| 260 EXPECT_EQ(level, serialized.encryption_level); | 258 EXPECT_EQ(level, serialized.encryption_level); |
| 261 delete frames_[0].ack_frame; | 259 delete frames_[0].ack_frame; |
| 262 delete frames_[1].stream_frame; | 260 delete frames_[1].stream_frame; |
| 263 delete frames_[2].stream_frame; | 261 delete frames_[2].stream_frame; |
| 264 frames_.clear(); | 262 frames_.clear(); |
| 265 | 263 |
| 266 { | 264 { |
| 267 InSequence s; | 265 InSequence s; |
| 268 EXPECT_CALL(framer_visitor_, OnPacket()); | 266 EXPECT_CALL(framer_visitor_, OnPacket()); |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 632 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 635 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); | 633 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); |
| 636 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 634 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 637 | 635 |
| 638 ProcessPacket(serialized); | 636 ProcessPacket(serialized); |
| 639 } | 637 } |
| 640 | 638 |
| 641 TEST_P(QuicPacketCreatorTest, ConsumeData) { | 639 TEST_P(QuicPacketCreatorTest, ConsumeData) { |
| 642 QuicFrame frame; | 640 QuicFrame frame; |
| 643 QuicIOVector io_vector(MakeIOVector("test")); | 641 QuicIOVector io_vector(MakeIOVector("test")); |
| 644 ASSERT_TRUE( | 642 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 645 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 643 false, &frame)); |
| 646 ASSERT_TRUE(frame.stream_frame); | 644 ASSERT_TRUE(frame.stream_frame); |
| 647 size_t consumed = frame.stream_frame->data_length; | 645 size_t consumed = frame.stream_frame->data_length; |
| 648 EXPECT_EQ(4u, consumed); | 646 EXPECT_EQ(4u, consumed); |
| 649 CheckStreamFrame(frame, 1u, "test", 0u, false); | 647 CheckStreamFrame(frame, 1u, "test", 0u, false); |
| 650 EXPECT_TRUE(creator_.HasPendingFrames()); | 648 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 651 } | 649 } |
| 652 | 650 |
| 653 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) { | 651 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) { |
| 654 QuicFrame frame; | 652 QuicFrame frame; |
| 655 QuicIOVector io_vector(MakeIOVector("test")); | 653 QuicIOVector io_vector(MakeIOVector("test")); |
| 656 ASSERT_TRUE( | 654 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 10u, true, |
| 657 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame)); | 655 false, &frame)); |
| 658 ASSERT_TRUE(frame.stream_frame); | 656 ASSERT_TRUE(frame.stream_frame); |
| 659 size_t consumed = frame.stream_frame->data_length; | 657 size_t consumed = frame.stream_frame->data_length; |
| 660 EXPECT_EQ(4u, consumed); | 658 EXPECT_EQ(4u, consumed); |
| 661 CheckStreamFrame(frame, 1u, "test", 10u, true); | 659 CheckStreamFrame(frame, 1u, "test", 10u, true); |
| 662 EXPECT_TRUE(creator_.HasPendingFrames()); | 660 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 663 } | 661 } |
| 664 | 662 |
| 665 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) { | 663 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) { |
| 666 QuicFrame frame; | 664 QuicFrame frame; |
| 667 QuicIOVector io_vector(nullptr, 0, 0); | 665 QuicIOVector io_vector(nullptr, 0, 0); |
| 668 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 666 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, true, |
| 667 false, &frame)); |
| 669 ASSERT_TRUE(frame.stream_frame); | 668 ASSERT_TRUE(frame.stream_frame); |
| 670 size_t consumed = frame.stream_frame->data_length; | 669 size_t consumed = frame.stream_frame->data_length; |
| 671 EXPECT_EQ(0u, consumed); | 670 EXPECT_EQ(0u, consumed); |
| 672 CheckStreamFrame(frame, 1u, string(), 0u, true); | 671 CheckStreamFrame(frame, 1u, string(), 0u, true); |
| 673 EXPECT_TRUE(creator_.HasPendingFrames()); | 672 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 674 } | 673 } |
| 675 | 674 |
| 676 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { | 675 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { |
| 676 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 677 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 677 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 678 GetEncryptionOverhead(); | 678 GetEncryptionOverhead(); |
| 679 for (size_t i = overhead; i < overhead + 100; ++i) { | 679 for (size_t i = overhead; i < overhead + 100; ++i) { |
| 680 creator_.SetMaxPacketLength(i); | 680 creator_.SetMaxPacketLength(i); |
| 681 const bool should_have_room = i > overhead + GetStreamFrameOverhead(); | 681 const bool should_have_room = i > overhead + GetStreamFrameOverhead(); |
| 682 ASSERT_EQ(should_have_room, | 682 ASSERT_EQ(should_have_room, |
| 683 creator_.HasRoomForStreamFrame(kClientDataStreamId1, kOffset)); | 683 creator_.HasRoomForStreamFrame(kClientDataStreamId1, kOffset)); |
| 684 if (should_have_room) { | 684 if (should_have_room) { |
| 685 QuicFrame frame; | 685 QuicFrame frame; |
| 686 QuicIOVector io_vector(MakeIOVector("testdata")); | 686 QuicIOVector io_vector(MakeIOVector("testdata")); |
| 687 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 687 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 688 .WillRepeatedly( | 688 .WillRepeatedly( |
| 689 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); | 689 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 690 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, | 690 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, |
| 691 kOffset, false, false, &frame)); | 691 kOffset, false, false, &frame)); |
| 692 ASSERT_TRUE(frame.stream_frame); | 692 ASSERT_TRUE(frame.stream_frame); |
| 693 size_t bytes_consumed = frame.stream_frame->data_length; | 693 size_t bytes_consumed = frame.stream_frame->data_length; |
| 694 EXPECT_LT(0u, bytes_consumed); | 694 EXPECT_LT(0u, bytes_consumed); |
| 695 creator_.Flush(); | 695 creator_.Flush(); |
| 696 } | 696 } |
| 697 } | 697 } |
| 698 } | 698 } |
| 699 | 699 |
| 700 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { | 700 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { |
| 701 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 701 // Compute the total overhead for a single frame in packet. | 702 // Compute the total overhead for a single frame in packet. |
| 702 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 703 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 703 GetEncryptionOverhead() + GetStreamFrameOverhead(); | 704 GetEncryptionOverhead() + GetStreamFrameOverhead(); |
| 704 size_t capacity = kDefaultMaxPacketSize - overhead; | 705 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 705 // Now, test various sizes around this size. | 706 // Now, test various sizes around this size. |
| 706 for (int delta = -5; delta <= 5; ++delta) { | 707 for (int delta = -5; delta <= 5; ++delta) { |
| 707 string data(capacity + delta, 'A'); | 708 string data(capacity + delta, 'A'); |
| 708 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 709 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 709 QuicFrame frame; | 710 QuicFrame frame; |
| 710 QuicIOVector io_vector(MakeIOVector(data)); | 711 QuicIOVector io_vector(MakeIOVector(data)); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 756 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 756 serialized_packet_.encrypted_length); | 757 serialized_packet_.encrypted_length); |
| 757 } else { | 758 } else { |
| 758 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); | 759 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); |
| 759 } | 760 } |
| 760 DeleteSerializedPacket(); | 761 DeleteSerializedPacket(); |
| 761 } | 762 } |
| 762 } | 763 } |
| 763 | 764 |
| 764 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { | 765 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { |
| 766 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 765 // Compute the total overhead for a single frame in packet. | 767 // Compute the total overhead for a single frame in packet. |
| 766 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 768 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 767 GetEncryptionOverhead() + GetStreamFrameOverhead(); | 769 GetEncryptionOverhead() + GetStreamFrameOverhead(); |
| 768 ASSERT_GT(kDefaultMaxPacketSize, overhead); | 770 ASSERT_GT(kDefaultMaxPacketSize, overhead); |
| 769 size_t capacity = kDefaultMaxPacketSize - overhead; | 771 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 770 // Now, test various sizes around this size. | 772 // Now, test various sizes around this size. |
| 771 for (int delta = -5; delta <= 5; ++delta) { | 773 for (int delta = -5; delta <= 5; ++delta) { |
| 772 string data(capacity + delta, 'A'); | 774 string data(capacity + delta, 'A'); |
| 773 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 775 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 774 | 776 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 909 creator_.UpdatePacketNumberLength( | 911 creator_.UpdatePacketNumberLength( |
| 910 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); | 912 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); |
| 911 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | 913 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 912 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 914 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 913 } | 915 } |
| 914 | 916 |
| 915 TEST_P(QuicPacketCreatorTest, SerializeFrame) { | 917 TEST_P(QuicPacketCreatorTest, SerializeFrame) { |
| 916 if (!GetParam().version_serialization) { | 918 if (!GetParam().version_serialization) { |
| 917 creator_.StopSendingVersion(); | 919 creator_.StopSendingVersion(); |
| 918 } | 920 } |
| 919 frames_.push_back( | 921 frames_.push_back(QuicFrame( |
| 920 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); | 922 new QuicStreamFrame(kCryptoStreamId, false, 0u, StringPiece()))); |
| 921 SerializedPacket serialized = SerializeAllFrames(frames_); | 923 SerializedPacket serialized = SerializeAllFrames(frames_); |
| 922 delete frames_[0].stream_frame; | 924 delete frames_[0].stream_frame; |
| 923 | 925 |
| 924 QuicPacketHeader header; | 926 QuicPacketHeader header; |
| 925 { | 927 { |
| 926 InSequence s; | 928 InSequence s; |
| 927 EXPECT_CALL(framer_visitor_, OnPacket()); | 929 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 928 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 930 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 929 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 931 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 930 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 932 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 948 client_framer_.version(), | 950 client_framer_.version(), |
| 949 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 951 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 950 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 952 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 951 !kIncludeDiversificationNonce, creator_.connection_id_length(), | 953 !kIncludeDiversificationNonce, creator_.connection_id_length(), |
| 952 PACKET_1BYTE_PACKET_NUMBER, &payload_length)); | 954 PACKET_1BYTE_PACKET_NUMBER, &payload_length)); |
| 953 QuicFrame frame; | 955 QuicFrame frame; |
| 954 const string too_long_payload(payload_length * 2, 'a'); | 956 const string too_long_payload(payload_length * 2, 'a'); |
| 955 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 957 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 956 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 958 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 957 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 959 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 958 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 960 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, true, |
| 961 false, &frame)); |
| 959 ASSERT_TRUE(frame.stream_frame); | 962 ASSERT_TRUE(frame.stream_frame); |
| 960 size_t consumed = frame.stream_frame->data_length; | 963 size_t consumed = frame.stream_frame->data_length; |
| 961 EXPECT_EQ(payload_length, consumed); | 964 EXPECT_EQ(payload_length, consumed); |
| 962 const string payload(payload_length, 'a'); | 965 const string payload(payload_length, 'a'); |
| 963 CheckStreamFrame(frame, 1u, payload, 0u, false); | 966 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 964 creator_.Flush(); | 967 creator_.Flush(); |
| 965 DeleteSerializedPacket(); | 968 DeleteSerializedPacket(); |
| 966 } | 969 } |
| 967 | 970 |
| 968 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { | 971 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 980 !kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER), | 983 !kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER), |
| 981 creator_.BytesFree()); | 984 creator_.BytesFree()); |
| 982 | 985 |
| 983 // Add a variety of frame types and then a padding frame. | 986 // Add a variety of frame types and then a padding frame. |
| 984 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 987 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 985 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 988 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 986 EXPECT_TRUE(creator_.HasPendingFrames()); | 989 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 987 | 990 |
| 988 QuicFrame frame; | 991 QuicFrame frame; |
| 989 QuicIOVector io_vector(MakeIOVector("test")); | 992 QuicIOVector io_vector(MakeIOVector("test")); |
| 990 ASSERT_TRUE( | 993 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 991 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 994 false, &frame)); |
| 992 ASSERT_TRUE(frame.stream_frame); | 995 ASSERT_TRUE(frame.stream_frame); |
| 993 size_t consumed = frame.stream_frame->data_length; | 996 size_t consumed = frame.stream_frame->data_length; |
| 994 EXPECT_EQ(4u, consumed); | 997 EXPECT_EQ(4u, consumed); |
| 995 EXPECT_TRUE(creator_.HasPendingFrames()); | 998 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 996 | 999 |
| 997 QuicPaddingFrame padding_frame; | 1000 QuicPaddingFrame padding_frame; |
| 998 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); | 1001 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); |
| 999 EXPECT_TRUE(creator_.HasPendingFrames()); | 1002 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1000 EXPECT_EQ(0u, creator_.BytesFree()); | 1003 EXPECT_EQ(0u, creator_.BytesFree()); |
| 1001 | 1004 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1025 | 1028 |
| 1026 TEST_P(QuicPacketCreatorTest, SerializeAndSendStreamFrame) { | 1029 TEST_P(QuicPacketCreatorTest, SerializeAndSendStreamFrame) { |
| 1027 if (!GetParam().version_serialization) { | 1030 if (!GetParam().version_serialization) { |
| 1028 creator_.StopSendingVersion(); | 1031 creator_.StopSendingVersion(); |
| 1029 } | 1032 } |
| 1030 EXPECT_FALSE(creator_.HasPendingFrames()); | 1033 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1031 | 1034 |
| 1032 QuicIOVector iov(MakeIOVector("test")); | 1035 QuicIOVector iov(MakeIOVector("test")); |
| 1033 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1036 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1034 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 1037 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1035 ALIGNAS(64) char encrypted_buffer[kMaxPacketSize]; | |
| 1036 size_t num_bytes_consumed; | 1038 size_t num_bytes_consumed; |
| 1037 creator_.CreateAndSerializeStreamFrame(kHeadersStreamId, iov, 0, 0, true, | 1039 creator_.CreateAndSerializeStreamFrame(kHeadersStreamId, iov, 0, 0, true, |
| 1038 nullptr, encrypted_buffer, | 1040 nullptr, &num_bytes_consumed); |
| 1039 kMaxPacketSize, &num_bytes_consumed); | |
| 1040 EXPECT_EQ(static_cast<size_t>(4), num_bytes_consumed); | 1041 EXPECT_EQ(static_cast<size_t>(4), num_bytes_consumed); |
| 1041 | 1042 |
| 1042 // Ensure the packet is successfully created. | 1043 // Ensure the packet is successfully created. |
| 1043 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | 1044 ASSERT_TRUE(serialized_packet_.encrypted_buffer); |
| 1044 ASSERT_FALSE(serialized_packet_.retransmittable_frames.empty()); | 1045 ASSERT_FALSE(serialized_packet_.retransmittable_frames.empty()); |
| 1045 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames; | 1046 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames; |
| 1046 ASSERT_EQ(1u, retransmittable.size()); | 1047 ASSERT_EQ(1u, retransmittable.size()); |
| 1047 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); | 1048 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); |
| 1048 ASSERT_TRUE(retransmittable[0].stream_frame); | 1049 ASSERT_TRUE(retransmittable[0].stream_frame); |
| 1049 DeleteSerializedPacket(); | 1050 DeleteSerializedPacket(); |
| 1050 | 1051 |
| 1051 EXPECT_FALSE(creator_.HasPendingFrames()); | 1052 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1052 } | 1053 } |
| 1053 | 1054 |
| 1054 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { | 1055 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { |
| 1056 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 1055 if (!GetParam().version_serialization) { | 1057 if (!GetParam().version_serialization) { |
| 1056 creator_.StopSendingVersion(); | 1058 creator_.StopSendingVersion(); |
| 1057 } | 1059 } |
| 1058 creator_.SetMaxPacketLength(kMaxPacketSize); | 1060 creator_.SetMaxPacketLength(kMaxPacketSize); |
| 1059 | 1061 |
| 1060 // Serialized length of ack frame with 2000 nack ranges should be limited by | 1062 // Serialized length of ack frame with 2000 nack ranges should be limited by |
| 1061 // the number of nack ranges that can be fit in an ack frame. | 1063 // the number of nack ranges that can be fit in an ack frame. |
| 1062 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 1064 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
| 1063 size_t frame_len = client_framer_.GetSerializedFrameLength( | 1065 size_t frame_len = client_framer_.GetSerializedFrameLength( |
| 1064 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, | 1066 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1134 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1133 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 1135 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1134 creator_.Flush(); | 1136 creator_.Flush(); |
| 1135 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | 1137 ASSERT_TRUE(serialized_packet_.encrypted_buffer); |
| 1136 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize( | 1138 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize( |
| 1137 serialized_packet_.encrypted_length)); | 1139 serialized_packet_.encrypted_length)); |
| 1138 DeleteSerializedPacket(); | 1140 DeleteSerializedPacket(); |
| 1139 } | 1141 } |
| 1140 | 1142 |
| 1141 TEST_P(QuicPacketCreatorTest, EntropyFlag) { | 1143 TEST_P(QuicPacketCreatorTest, EntropyFlag) { |
| 1142 frames_.push_back( | 1144 frames_.push_back(QuicFrame( |
| 1143 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); | 1145 new QuicStreamFrame(kCryptoStreamId, false, 0u, StringPiece()))); |
| 1144 | 1146 |
| 1145 for (int i = 0; i < 2; ++i) { | 1147 for (int i = 0; i < 2; ++i) { |
| 1146 for (int j = 0; j < 64; ++j) { | 1148 for (int j = 0; j < 64; ++j) { |
| 1147 SerializedPacket serialized = SerializeAllFrames(frames_); | 1149 SerializedPacket serialized = SerializeAllFrames(frames_); |
| 1148 // Verify both BoolSource and hash algorithm. | 1150 // Verify both BoolSource and hash algorithm. |
| 1149 bool expected_rand_bool = | 1151 bool expected_rand_bool = |
| 1150 (mock_random_.RandUint64() & (UINT64_C(1) << j)) != 0; | 1152 (mock_random_.RandUint64() & (UINT64_C(1) << j)) != 0; |
| 1151 bool observed_rand_bool = | 1153 bool observed_rand_bool = |
| 1152 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0; | 1154 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0; |
| 1153 uint8_t rest_of_hash = serialized.entropy_hash & ~(1 << ((j + 1) % 8)); | 1155 uint8_t rest_of_hash = serialized.entropy_hash & ~(1 << ((j + 1) % 8)); |
| 1154 EXPECT_EQ(expected_rand_bool, observed_rand_bool); | 1156 EXPECT_EQ(expected_rand_bool, observed_rand_bool); |
| 1155 EXPECT_EQ(0, rest_of_hash); | 1157 EXPECT_EQ(0, rest_of_hash); |
| 1156 } | 1158 } |
| 1157 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 1159 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
| 1158 mock_random_.ChangeValue(); | 1160 mock_random_.ChangeValue(); |
| 1159 } | 1161 } |
| 1160 | 1162 |
| 1161 delete frames_[0].stream_frame; | 1163 delete frames_[0].stream_frame; |
| 1162 } | 1164 } |
| 1163 | 1165 |
| 1164 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { | 1166 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { |
| 1165 // Current path is the default path. | 1167 // Current path is the default path. |
| 1166 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1168 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1167 EXPECT_EQ(0u, creator_.packet_number()); | 1169 EXPECT_EQ(0u, creator_.packet_number()); |
| 1168 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1170 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1169 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1171 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1170 // Add a stream frame to the creator. | 1172 // Add a stream frame to the creator. |
| 1171 QuicFrame frame; | 1173 QuicFrame frame; |
| 1172 QuicIOVector io_vector(MakeIOVector("test")); | 1174 QuicIOVector io_vector(MakeIOVector("test")); |
| 1173 ASSERT_TRUE( | 1175 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1174 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1176 false, &frame)); |
| 1175 ASSERT_TRUE(frame.stream_frame); | 1177 ASSERT_TRUE(frame.stream_frame); |
| 1176 size_t consumed = frame.stream_frame->data_length; | 1178 size_t consumed = frame.stream_frame->data_length; |
| 1177 EXPECT_EQ(4u, consumed); | 1179 EXPECT_EQ(4u, consumed); |
| 1178 EXPECT_TRUE(creator_.HasPendingFrames()); | 1180 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1179 EXPECT_EQ(0u, creator_.packet_number()); | 1181 EXPECT_EQ(0u, creator_.packet_number()); |
| 1180 | 1182 |
| 1181 // Change current path. | 1183 // Change current path. |
| 1182 QuicPathId kPathId1 = 1; | 1184 QuicPathId kPathId1 = 1; |
| 1183 EXPECT_QUIC_BUG(creator_.SetCurrentPath(kPathId1, 1, 0), | 1185 EXPECT_QUIC_BUG(creator_.SetCurrentPath(kPathId1, 1, 0), |
| 1184 "Unable to change paths when a packet is under construction"); | 1186 "Unable to change paths when a packet is under construction"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1195 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1197 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1196 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1198 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1197 | 1199 |
| 1198 // Change current path back. | 1200 // Change current path back. |
| 1199 creator_.SetCurrentPath(kDefaultPathId, 2, 1); | 1201 creator_.SetCurrentPath(kDefaultPathId, 2, 1); |
| 1200 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1202 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1201 EXPECT_EQ(1u, creator_.packet_number()); | 1203 EXPECT_EQ(1u, creator_.packet_number()); |
| 1202 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1204 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1203 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1205 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1204 // Add a stream frame to the creator. | 1206 // Add a stream frame to the creator. |
| 1205 ASSERT_TRUE( | 1207 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1206 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1208 false, &frame)); |
| 1207 ASSERT_TRUE(frame.stream_frame); | 1209 ASSERT_TRUE(frame.stream_frame); |
| 1208 consumed = frame.stream_frame->data_length; | 1210 consumed = frame.stream_frame->data_length; |
| 1209 EXPECT_EQ(4u, consumed); | 1211 EXPECT_EQ(4u, consumed); |
| 1210 EXPECT_TRUE(creator_.HasPendingFrames()); | 1212 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1211 | 1213 |
| 1212 // Does not change current path. | 1214 // Does not change current path. |
| 1213 creator_.SetCurrentPath(kDefaultPathId, 2, 0); | 1215 creator_.SetCurrentPath(kDefaultPathId, 2, 0); |
| 1214 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1216 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1215 EXPECT_TRUE(creator_.HasPendingFrames()); | 1217 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1216 EXPECT_EQ(1u, creator_.packet_number()); | 1218 EXPECT_EQ(1u, creator_.packet_number()); |
| 1217 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1219 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1218 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1220 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1219 } | 1221 } |
| 1220 | 1222 |
| 1221 TEST_P(QuicPacketCreatorTest, | 1223 TEST_P(QuicPacketCreatorTest, |
| 1222 SetCurrentPathAndUpdatePacketSequenceNumberLength) { | 1224 SetCurrentPathAndUpdatePacketSequenceNumberLength) { |
| 1223 FLAGS_quic_simple_packet_number_length_2 = false; | 1225 FLAGS_quic_simple_packet_number_length_2 = false; |
| 1224 // Current path is the default path. | 1226 // Current path is the default path. |
| 1225 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1227 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1226 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1228 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1227 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1229 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1228 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1230 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1229 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1231 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1230 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); | 1232 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); |
| 1231 // Add a stream frame to the creator and send the packet. | 1233 // Add a stream frame to the creator and send the packet. |
| 1232 QuicFrame frame; | 1234 QuicFrame frame; |
| 1233 QuicIOVector io_vector(MakeIOVector("test")); | 1235 QuicIOVector io_vector(MakeIOVector("test")); |
| 1234 ASSERT_TRUE( | 1236 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1235 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1237 false, &frame)); |
| 1236 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1238 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1237 .Times(1) | 1239 .Times(1) |
| 1238 .WillRepeatedly( | 1240 .WillRepeatedly( |
| 1239 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); | 1241 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 1240 creator_.Flush(); | 1242 creator_.Flush(); |
| 1241 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number()); | 1243 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number()); |
| 1242 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 1244 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 1243 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 1245 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 1244 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1246 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1245 | 1247 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1257 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1259 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1258 } | 1260 } |
| 1259 | 1261 |
| 1260 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { | 1262 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { |
| 1261 // Current path is the default path. | 1263 // Current path is the default path. |
| 1262 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1264 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1263 EXPECT_EQ(0u, creator_.packet_number()); | 1265 EXPECT_EQ(0u, creator_.packet_number()); |
| 1264 // Add a stream frame to the creator and flush the packet. | 1266 // Add a stream frame to the creator and flush the packet. |
| 1265 QuicFrame frame; | 1267 QuicFrame frame; |
| 1266 QuicIOVector io_vector(MakeIOVector("test")); | 1268 QuicIOVector io_vector(MakeIOVector("test")); |
| 1267 ASSERT_TRUE( | 1269 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1268 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1270 false, &frame)); |
| 1269 ASSERT_TRUE(frame.stream_frame); | 1271 ASSERT_TRUE(frame.stream_frame); |
| 1270 size_t consumed = frame.stream_frame->data_length; | 1272 size_t consumed = frame.stream_frame->data_length; |
| 1271 EXPECT_EQ(4u, consumed); | 1273 EXPECT_EQ(4u, consumed); |
| 1272 EXPECT_TRUE(creator_.HasPendingFrames()); | 1274 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1273 EXPECT_EQ(0u, creator_.packet_number()); | 1275 EXPECT_EQ(0u, creator_.packet_number()); |
| 1274 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1276 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1275 .WillRepeatedly( | 1277 .WillRepeatedly( |
| 1276 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 1278 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1277 creator_.Flush(); | 1279 creator_.Flush(); |
| 1278 EXPECT_FALSE(creator_.HasPendingFrames()); | 1280 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1279 EXPECT_EQ(1u, creator_.packet_number()); | 1281 EXPECT_EQ(1u, creator_.packet_number()); |
| 1280 // Verify serialized data packet's path id. | 1282 // Verify serialized data packet's path id. |
| 1281 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); | 1283 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); |
| 1282 DeleteSerializedPacket(); | 1284 DeleteSerializedPacket(); |
| 1283 | 1285 |
| 1284 // Change to path 1. | 1286 // Change to path 1. |
| 1285 QuicPathId kPathId1 = 1; | 1287 QuicPathId kPathId1 = 1; |
| 1286 creator_.SetCurrentPath(kPathId1, 1, 0); | 1288 creator_.SetCurrentPath(kPathId1, 1, 0); |
| 1287 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1289 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1288 EXPECT_FALSE(creator_.HasPendingFrames()); | 1290 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1289 EXPECT_EQ(0u, creator_.packet_number()); | 1291 EXPECT_EQ(0u, creator_.packet_number()); |
| 1290 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1292 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1291 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 1293 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1292 | 1294 |
| 1293 // Add a stream frame to the creator and flush the packet. | 1295 // Add a stream frame to the creator and flush the packet. |
| 1294 ASSERT_TRUE( | 1296 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1295 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1297 false, &frame)); |
| 1296 ASSERT_TRUE(frame.stream_frame); | 1298 ASSERT_TRUE(frame.stream_frame); |
| 1297 consumed = frame.stream_frame->data_length; | 1299 consumed = frame.stream_frame->data_length; |
| 1298 EXPECT_EQ(4u, consumed); | 1300 EXPECT_EQ(4u, consumed); |
| 1299 EXPECT_TRUE(creator_.HasPendingFrames()); | 1301 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1300 creator_.Flush(); | 1302 creator_.Flush(); |
| 1301 // Verify serialized data packet's path id. | 1303 // Verify serialized data packet's path id. |
| 1302 EXPECT_EQ(kPathId1, serialized_packet_.path_id); | 1304 EXPECT_EQ(kPathId1, serialized_packet_.path_id); |
| 1303 DeleteSerializedPacket(); | 1305 DeleteSerializedPacket(); |
| 1304 } | 1306 } |
| 1305 | 1307 |
| 1306 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { | 1308 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { |
| 1307 FLAGS_quic_never_write_unencrypted_data = true; | 1309 creator_.set_encryption_level(ENCRYPTION_NONE); |
| 1308 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); | 1310 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); |
| 1309 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1311 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
| 1310 StringPiece()); | 1312 StringPiece()); |
| 1311 EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1313 EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
| 1312 "Cannot send stream data without encryption."); | 1314 "Cannot send stream data without encryption."); |
| 1313 } | 1315 } |
| 1314 | 1316 |
| 1315 TEST_P(QuicPacketCreatorTest, ChloTooLarge) { | 1317 TEST_P(QuicPacketCreatorTest, ChloTooLarge) { |
| 1316 CryptoHandshakeMessage message; | 1318 CryptoHandshakeMessage message; |
| 1317 message.set_tag(kCHLO); | 1319 message.set_tag(kCHLO); |
| 1318 message.set_minimum_size(kMaxPacketSize); | 1320 message.set_minimum_size(kMaxPacketSize); |
| 1319 CryptoFramer framer; | 1321 CryptoFramer framer; |
| 1320 std::unique_ptr<QuicData> message_data; | 1322 std::unique_ptr<QuicData> message_data; |
| 1321 message_data.reset(framer.ConstructHandshakeMessage(message)); | 1323 message_data.reset(framer.ConstructHandshakeMessage(message)); |
| 1322 | 1324 |
| 1323 struct iovec iov; | 1325 struct iovec iov; |
| 1324 QuicIOVector data_iovec(::net::MakeIOVector( | 1326 QuicIOVector data_iovec(::net::MakeIOVector( |
| 1325 StringPiece(message_data->data(), message_data->length()), &iov)); | 1327 StringPiece(message_data->data(), message_data->length()), &iov)); |
| 1326 QuicFrame frame; | 1328 QuicFrame frame; |
| 1327 EXPECT_CALL(delegate_, | 1329 EXPECT_CALL(delegate_, |
| 1328 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); | 1330 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); |
| 1329 EXPECT_QUIC_BUG( | 1331 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u, |
| 1330 creator_.ConsumeData(1u, data_iovec, 0u, 0u, false, false, &frame), | 1332 false, false, &frame), |
| 1331 "Client hello won't fit in a single packet."); | 1333 "Client hello won't fit in a single packet."); |
| 1332 } | 1334 } |
| 1333 | 1335 |
| 1334 } // namespace | 1336 } // namespace |
| 1335 } // namespace test | 1337 } // namespace test |
| 1336 } // namespace net | 1338 } // namespace net |
| OLD | NEW |