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 |