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

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

Issue 2325803002: Deprecate FLAGS_quic_never_write_unencrypted_data now that the unit tests all pass. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_packet_creator.cc ('k') | net/quic/core/quic_packet_generator_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/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
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
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
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
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
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
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
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames; 1046 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames;
1044 ASSERT_EQ(1u, retransmittable.size()); 1047 ASSERT_EQ(1u, retransmittable.size());
1045 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); 1048 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type);
1046 ASSERT_TRUE(retransmittable[0].stream_frame); 1049 ASSERT_TRUE(retransmittable[0].stream_frame);
1047 DeleteSerializedPacket(); 1050 DeleteSerializedPacket();
1048 1051
1049 EXPECT_FALSE(creator_.HasPendingFrames()); 1052 EXPECT_FALSE(creator_.HasPendingFrames());
1050 } 1053 }
1051 1054
1052 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { 1055 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) {
1056 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
1053 if (!GetParam().version_serialization) { 1057 if (!GetParam().version_serialization) {
1054 creator_.StopSendingVersion(); 1058 creator_.StopSendingVersion();
1055 } 1059 }
1056 creator_.SetMaxPacketLength(kMaxPacketSize); 1060 creator_.SetMaxPacketLength(kMaxPacketSize);
1057 1061
1058 // 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
1059 // 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.
1060 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); 1064 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
1061 size_t frame_len = client_framer_.GetSerializedFrameLength( 1065 size_t frame_len = client_framer_.GetSerializedFrameLength(
1062 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
1130 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 1134 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1131 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 1135 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1132 creator_.Flush(); 1136 creator_.Flush();
1133 ASSERT_TRUE(serialized_packet_.encrypted_buffer); 1137 ASSERT_TRUE(serialized_packet_.encrypted_buffer);
1134 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize( 1138 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize(
1135 serialized_packet_.encrypted_length)); 1139 serialized_packet_.encrypted_length));
1136 DeleteSerializedPacket(); 1140 DeleteSerializedPacket();
1137 } 1141 }
1138 1142
1139 TEST_P(QuicPacketCreatorTest, EntropyFlag) { 1143 TEST_P(QuicPacketCreatorTest, EntropyFlag) {
1140 frames_.push_back( 1144 frames_.push_back(QuicFrame(
1141 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); 1145 new QuicStreamFrame(kCryptoStreamId, false, 0u, StringPiece())));
1142 1146
1143 for (int i = 0; i < 2; ++i) { 1147 for (int i = 0; i < 2; ++i) {
1144 for (int j = 0; j < 64; ++j) { 1148 for (int j = 0; j < 64; ++j) {
1145 SerializedPacket serialized = SerializeAllFrames(frames_); 1149 SerializedPacket serialized = SerializeAllFrames(frames_);
1146 // Verify both BoolSource and hash algorithm. 1150 // Verify both BoolSource and hash algorithm.
1147 bool expected_rand_bool = 1151 bool expected_rand_bool =
1148 (mock_random_.RandUint64() & (UINT64_C(1) << j)) != 0; 1152 (mock_random_.RandUint64() & (UINT64_C(1) << j)) != 0;
1149 bool observed_rand_bool = 1153 bool observed_rand_bool =
1150 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0; 1154 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0;
1151 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));
1152 EXPECT_EQ(expected_rand_bool, observed_rand_bool); 1156 EXPECT_EQ(expected_rand_bool, observed_rand_bool);
1153 EXPECT_EQ(0, rest_of_hash); 1157 EXPECT_EQ(0, rest_of_hash);
1154 } 1158 }
1155 // 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.
1156 mock_random_.ChangeValue(); 1160 mock_random_.ChangeValue();
1157 } 1161 }
1158 1162
1159 delete frames_[0].stream_frame; 1163 delete frames_[0].stream_frame;
1160 } 1164 }
1161 1165
1162 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { 1166 TEST_P(QuicPacketCreatorTest, SetCurrentPath) {
1163 // Current path is the default path. 1167 // Current path is the default path.
1164 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1168 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1165 EXPECT_EQ(0u, creator_.packet_number()); 1169 EXPECT_EQ(0u, creator_.packet_number());
1166 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1170 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1167 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1171 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1168 // Add a stream frame to the creator. 1172 // Add a stream frame to the creator.
1169 QuicFrame frame; 1173 QuicFrame frame;
1170 QuicIOVector io_vector(MakeIOVector("test")); 1174 QuicIOVector io_vector(MakeIOVector("test"));
1171 ASSERT_TRUE( 1175 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
1172 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); 1176 false, &frame));
1173 ASSERT_TRUE(frame.stream_frame); 1177 ASSERT_TRUE(frame.stream_frame);
1174 size_t consumed = frame.stream_frame->data_length; 1178 size_t consumed = frame.stream_frame->data_length;
1175 EXPECT_EQ(4u, consumed); 1179 EXPECT_EQ(4u, consumed);
1176 EXPECT_TRUE(creator_.HasPendingFrames()); 1180 EXPECT_TRUE(creator_.HasPendingFrames());
1177 EXPECT_EQ(0u, creator_.packet_number()); 1181 EXPECT_EQ(0u, creator_.packet_number());
1178 1182
1179 // Change current path. 1183 // Change current path.
1180 QuicPathId kPathId1 = 1; 1184 QuicPathId kPathId1 = 1;
1181 EXPECT_QUIC_BUG(creator_.SetCurrentPath(kPathId1, 1, 0), 1185 EXPECT_QUIC_BUG(creator_.SetCurrentPath(kPathId1, 1, 0),
1182 "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
1193 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1197 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1194 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1198 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1195 1199
1196 // Change current path back. 1200 // Change current path back.
1197 creator_.SetCurrentPath(kDefaultPathId, 2, 1); 1201 creator_.SetCurrentPath(kDefaultPathId, 2, 1);
1198 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1202 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1199 EXPECT_EQ(1u, creator_.packet_number()); 1203 EXPECT_EQ(1u, creator_.packet_number());
1200 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1204 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1201 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1205 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1202 // Add a stream frame to the creator. 1206 // Add a stream frame to the creator.
1203 ASSERT_TRUE( 1207 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
1204 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); 1208 false, &frame));
1205 ASSERT_TRUE(frame.stream_frame); 1209 ASSERT_TRUE(frame.stream_frame);
1206 consumed = frame.stream_frame->data_length; 1210 consumed = frame.stream_frame->data_length;
1207 EXPECT_EQ(4u, consumed); 1211 EXPECT_EQ(4u, consumed);
1208 EXPECT_TRUE(creator_.HasPendingFrames()); 1212 EXPECT_TRUE(creator_.HasPendingFrames());
1209 1213
1210 // Does not change current path. 1214 // Does not change current path.
1211 creator_.SetCurrentPath(kDefaultPathId, 2, 0); 1215 creator_.SetCurrentPath(kDefaultPathId, 2, 0);
1212 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1216 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1213 EXPECT_TRUE(creator_.HasPendingFrames()); 1217 EXPECT_TRUE(creator_.HasPendingFrames());
1214 EXPECT_EQ(1u, creator_.packet_number()); 1218 EXPECT_EQ(1u, creator_.packet_number());
1215 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1219 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1216 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1220 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1217 } 1221 }
1218 1222
1219 TEST_P(QuicPacketCreatorTest, 1223 TEST_P(QuicPacketCreatorTest,
1220 SetCurrentPathAndUpdatePacketSequenceNumberLength) { 1224 SetCurrentPathAndUpdatePacketSequenceNumberLength) {
1221 FLAGS_quic_simple_packet_number_length_2 = false; 1225 FLAGS_quic_simple_packet_number_length_2 = false;
1222 // Current path is the default path. 1226 // Current path is the default path.
1223 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1227 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1224 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1228 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1225 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1229 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1226 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1230 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1227 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); 1231 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_));
1228 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); 1232 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2);
1229 // Add a stream frame to the creator and send the packet. 1233 // Add a stream frame to the creator and send the packet.
1230 QuicFrame frame; 1234 QuicFrame frame;
1231 QuicIOVector io_vector(MakeIOVector("test")); 1235 QuicIOVector io_vector(MakeIOVector("test"));
1232 ASSERT_TRUE( 1236 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
1233 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); 1237 false, &frame));
1234 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 1238 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1235 .Times(1) 1239 .Times(1)
1236 .WillRepeatedly( 1240 .WillRepeatedly(
1237 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); 1241 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
1238 creator_.Flush(); 1242 creator_.Flush();
1239 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number()); 1243 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number());
1240 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); 1244 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize);
1241 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, 1245 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER,
1242 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); 1246 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_));
1243 1247
(...skipping 11 matching lines...) Expand all
1255 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); 1259 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_));
1256 } 1260 }
1257 1261
1258 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { 1262 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) {
1259 // Current path is the default path. 1263 // Current path is the default path.
1260 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1264 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1261 EXPECT_EQ(0u, creator_.packet_number()); 1265 EXPECT_EQ(0u, creator_.packet_number());
1262 // Add a stream frame to the creator and flush the packet. 1266 // Add a stream frame to the creator and flush the packet.
1263 QuicFrame frame; 1267 QuicFrame frame;
1264 QuicIOVector io_vector(MakeIOVector("test")); 1268 QuicIOVector io_vector(MakeIOVector("test"));
1265 ASSERT_TRUE( 1269 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
1266 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); 1270 false, &frame));
1267 ASSERT_TRUE(frame.stream_frame); 1271 ASSERT_TRUE(frame.stream_frame);
1268 size_t consumed = frame.stream_frame->data_length; 1272 size_t consumed = frame.stream_frame->data_length;
1269 EXPECT_EQ(4u, consumed); 1273 EXPECT_EQ(4u, consumed);
1270 EXPECT_TRUE(creator_.HasPendingFrames()); 1274 EXPECT_TRUE(creator_.HasPendingFrames());
1271 EXPECT_EQ(0u, creator_.packet_number()); 1275 EXPECT_EQ(0u, creator_.packet_number());
1272 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 1276 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1273 .WillRepeatedly( 1277 .WillRepeatedly(
1274 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); 1278 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1275 creator_.Flush(); 1279 creator_.Flush();
1276 EXPECT_FALSE(creator_.HasPendingFrames()); 1280 EXPECT_FALSE(creator_.HasPendingFrames());
1277 EXPECT_EQ(1u, creator_.packet_number()); 1281 EXPECT_EQ(1u, creator_.packet_number());
1278 // Verify serialized data packet's path id. 1282 // Verify serialized data packet's path id.
1279 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); 1283 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id);
1280 DeleteSerializedPacket(); 1284 DeleteSerializedPacket();
1281 1285
1282 // Change to path 1. 1286 // Change to path 1.
1283 QuicPathId kPathId1 = 1; 1287 QuicPathId kPathId1 = 1;
1284 creator_.SetCurrentPath(kPathId1, 1, 0); 1288 creator_.SetCurrentPath(kPathId1, 1, 0);
1285 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 1289 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
1286 EXPECT_FALSE(creator_.HasPendingFrames()); 1290 EXPECT_FALSE(creator_.HasPendingFrames());
1287 EXPECT_EQ(0u, creator_.packet_number()); 1291 EXPECT_EQ(0u, creator_.packet_number());
1288 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1292 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1289 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 1293 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
1290 1294
1291 // Add a stream frame to the creator and flush the packet. 1295 // Add a stream frame to the creator and flush the packet.
1292 ASSERT_TRUE( 1296 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
1293 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); 1297 false, &frame));
1294 ASSERT_TRUE(frame.stream_frame); 1298 ASSERT_TRUE(frame.stream_frame);
1295 consumed = frame.stream_frame->data_length; 1299 consumed = frame.stream_frame->data_length;
1296 EXPECT_EQ(4u, consumed); 1300 EXPECT_EQ(4u, consumed);
1297 EXPECT_TRUE(creator_.HasPendingFrames()); 1301 EXPECT_TRUE(creator_.HasPendingFrames());
1298 creator_.Flush(); 1302 creator_.Flush();
1299 // Verify serialized data packet's path id. 1303 // Verify serialized data packet's path id.
1300 EXPECT_EQ(kPathId1, serialized_packet_.path_id); 1304 EXPECT_EQ(kPathId1, serialized_packet_.path_id);
1301 DeleteSerializedPacket(); 1305 DeleteSerializedPacket();
1302 } 1306 }
1303 1307
1304 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { 1308 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) {
1305 FLAGS_quic_never_write_unencrypted_data = true; 1309 creator_.set_encryption_level(ENCRYPTION_NONE);
1306 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); 1310 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _));
1307 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, 1311 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u,
1308 StringPiece()); 1312 StringPiece());
1309 EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(&stream_frame)), 1313 EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(&stream_frame)),
1310 "Cannot send stream data without encryption."); 1314 "Cannot send stream data without encryption.");
1311 } 1315 }
1312 1316
1313 TEST_P(QuicPacketCreatorTest, ChloTooLarge) { 1317 TEST_P(QuicPacketCreatorTest, ChloTooLarge) {
1314 CryptoHandshakeMessage message; 1318 CryptoHandshakeMessage message;
1315 message.set_tag(kCHLO); 1319 message.set_tag(kCHLO);
1316 message.set_minimum_size(kMaxPacketSize); 1320 message.set_minimum_size(kMaxPacketSize);
1317 CryptoFramer framer; 1321 CryptoFramer framer;
1318 std::unique_ptr<QuicData> message_data; 1322 std::unique_ptr<QuicData> message_data;
1319 message_data.reset(framer.ConstructHandshakeMessage(message)); 1323 message_data.reset(framer.ConstructHandshakeMessage(message));
1320 1324
1321 struct iovec iov; 1325 struct iovec iov;
1322 QuicIOVector data_iovec(::net::MakeIOVector( 1326 QuicIOVector data_iovec(::net::MakeIOVector(
1323 StringPiece(message_data->data(), message_data->length()), &iov)); 1327 StringPiece(message_data->data(), message_data->length()), &iov));
1324 QuicFrame frame; 1328 QuicFrame frame;
1325 EXPECT_CALL(delegate_, 1329 EXPECT_CALL(delegate_,
1326 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); 1330 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _));
1327 EXPECT_QUIC_BUG( 1331 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u,
1328 creator_.ConsumeData(1u, data_iovec, 0u, 0u, false, false, &frame), 1332 false, false, &frame),
1329 "Client hello won't fit in a single packet."); 1333 "Client hello won't fit in a single packet.");
1330 } 1334 }
1331 1335
1332 } // namespace 1336 } // namespace
1333 } // namespace test 1337 } // namespace test
1334 } // namespace net 1338 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_packet_creator.cc ('k') | net/quic/core/quic_packet_generator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698