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

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

Issue 2515613002: deprecate FLAGS_quic_disable_pre_34 (Closed)
Patch Set: Created 4 years, 1 month 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.h » ('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
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "net/quic/core/crypto/null_encrypter.h" 13 #include "net/quic/core/crypto/null_encrypter.h"
14 #include "net/quic/core/crypto/quic_decrypter.h" 14 #include "net/quic/core/crypto/quic_decrypter.h"
15 #include "net/quic/core/crypto/quic_encrypter.h" 15 #include "net/quic/core/crypto/quic_encrypter.h"
16 #include "net/quic/core/quic_flags.h" 16 #include "net/quic/core/quic_flags.h"
17 #include "net/quic/core/quic_simple_buffer_allocator.h" 17 #include "net/quic/core/quic_simple_buffer_allocator.h"
18 #include "net/quic/core/quic_utils.h" 18 #include "net/quic/core/quic_utils.h"
19 #include "net/quic/test_tools/mock_random.h"
20 #include "net/quic/test_tools/quic_framer_peer.h" 19 #include "net/quic/test_tools/quic_framer_peer.h"
21 #include "net/quic/test_tools/quic_packet_creator_peer.h" 20 #include "net/quic/test_tools/quic_packet_creator_peer.h"
22 #include "net/quic/test_tools/quic_test_utils.h" 21 #include "net/quic/test_tools/quic_test_utils.h"
23 #include "net/test/gtest_util.h" 22 #include "net/test/gtest_util.h"
24 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
25 24
26 using base::StringPiece; 25 using base::StringPiece;
27 using std::ostream; 26 using std::ostream;
28 using std::string; 27 using std::string;
29 using testing::DoAll; 28 using testing::DoAll;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 : server_framer_(SupportedVersions(GetParam().version), 118 : server_framer_(SupportedVersions(GetParam().version),
120 QuicTime::Zero(), 119 QuicTime::Zero(),
121 Perspective::IS_SERVER), 120 Perspective::IS_SERVER),
122 client_framer_(SupportedVersions(GetParam().version), 121 client_framer_(SupportedVersions(GetParam().version),
123 QuicTime::Zero(), 122 QuicTime::Zero(),
124 Perspective::IS_CLIENT), 123 Perspective::IS_CLIENT),
125 connection_id_(2), 124 connection_id_(2),
126 data_("foo"), 125 data_("foo"),
127 creator_(connection_id_, 126 creator_(connection_id_,
128 &client_framer_, 127 &client_framer_,
129 &mock_random_,
130 &buffer_allocator_, 128 &buffer_allocator_,
131 &delegate_), 129 &delegate_),
132 serialized_packet_(creator_.NoPacket()) { 130 serialized_packet_(creator_.NoPacket()) {
133 creator_.set_connection_id_length(GetParam().connection_id_length); 131 creator_.set_connection_id_length(GetParam().connection_id_length);
134 132
135 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter()); 133 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter());
136 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter()); 134 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter());
137 client_framer_.set_visitor(&framer_visitor_); 135 client_framer_.set_visitor(&framer_visitor_);
138 client_framer_.set_received_entropy_calculator(&entropy_calculator_);
139 server_framer_.set_visitor(&framer_visitor_); 136 server_framer_.set_visitor(&framer_visitor_);
140 } 137 }
141 138
142 ~QuicPacketCreatorTest() override { 139 ~QuicPacketCreatorTest() override {
143 delete[] serialized_packet_.encrypted_buffer; 140 delete[] serialized_packet_.encrypted_buffer;
144 ClearSerializedPacket(&serialized_packet_); 141 ClearSerializedPacket(&serialized_packet_);
145 } 142 }
146 143
147 SerializedPacket SerializeAllFrames(const QuicFrames& frames) { 144 SerializedPacket SerializeAllFrames(const QuicFrames& frames) {
148 SerializedPacket packet = QuicPacketCreatorPeer::SerializeAllFrames( 145 SerializedPacket packet = QuicPacketCreatorPeer::SerializeAllFrames(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 QuicFlagSaver flags_; // Save/restore all QUIC flag values. 213 QuicFlagSaver flags_; // Save/restore all QUIC flag values.
217 char buffer_[kMaxPacketSize]; 214 char buffer_[kMaxPacketSize];
218 QuicFrames frames_; 215 QuicFrames frames_;
219 QuicFramer server_framer_; 216 QuicFramer server_framer_;
220 QuicFramer client_framer_; 217 QuicFramer client_framer_;
221 StrictMock<MockFramerVisitor> framer_visitor_; 218 StrictMock<MockFramerVisitor> framer_visitor_;
222 StrictMock<MockDelegate> delegate_; 219 StrictMock<MockDelegate> delegate_;
223 QuicConnectionId connection_id_; 220 QuicConnectionId connection_id_;
224 string data_; 221 string data_;
225 struct iovec iov_; 222 struct iovec iov_;
226 MockRandom mock_random_;
227 SimpleBufferAllocator buffer_allocator_; 223 SimpleBufferAllocator buffer_allocator_;
228 QuicPacketCreator creator_; 224 QuicPacketCreator creator_;
229 MockEntropyCalculator entropy_calculator_;
230 SerializedPacket serialized_packet_; 225 SerializedPacket serialized_packet_;
231 }; 226 };
232 227
233 // Run all packet creator tests with all supported versions of QUIC, and with 228 // Run all packet creator tests with all supported versions of QUIC, and with
234 // and without version in the packet header, as well as doing a run for each 229 // and without version in the packet header, as well as doing a run for each
235 // length of truncated connection id. 230 // length of truncated connection id.
236 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, 231 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests,
237 QuicPacketCreatorTest, 232 QuicPacketCreatorTest,
238 ::testing::ValuesIn(GetTestParams())); 233 ::testing::ValuesIn(GetTestParams()));
239 234
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 ASSERT_FALSE(serialized_packet_.retransmittable_frames.empty()); 815 ASSERT_FALSE(serialized_packet_.retransmittable_frames.empty());
821 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames; 816 const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames;
822 ASSERT_EQ(1u, retransmittable.size()); 817 ASSERT_EQ(1u, retransmittable.size());
823 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); 818 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type);
824 ASSERT_TRUE(retransmittable[0].stream_frame); 819 ASSERT_TRUE(retransmittable[0].stream_frame);
825 DeleteSerializedPacket(); 820 DeleteSerializedPacket();
826 821
827 EXPECT_FALSE(creator_.HasPendingFrames()); 822 EXPECT_FALSE(creator_.HasPendingFrames());
828 } 823 }
829 824
830 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) {
831 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
832 if (!GetParam().version_serialization) {
833 creator_.StopSendingVersion();
834 }
835 creator_.SetMaxPacketLength(kMaxPacketSize);
836
837 // Serialized length of ack frame with 2000 nack ranges should be limited by
838 // the number of nack ranges that can be fit in an ack frame.
839 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
840 size_t frame_len = client_framer_.GetSerializedFrameLength(
841 QuicFrame(&ack_frame), creator_.BytesFree(), true, true,
842 PACKET_1BYTE_PACKET_NUMBER);
843 EXPECT_GT(creator_.BytesFree(), frame_len);
844 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
845
846 // Add ack frame to creator.
847 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
848 EXPECT_TRUE(creator_.HasPendingFrames());
849 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
850 EXPECT_LT(0u, creator_.BytesFree());
851
852 // Make sure that an additional stream frame can be added to the packet.
853 QuicFrame frame;
854 QuicIOVector io_vector(MakeIOVector("test"));
855 ASSERT_TRUE(
856 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame));
857 ASSERT_TRUE(frame.stream_frame);
858 size_t consumed = frame.stream_frame->data_length;
859 EXPECT_EQ(4u, consumed);
860 EXPECT_TRUE(creator_.HasPendingFrames());
861
862 // Ensure the packet is successfully created, and the packet size estimate
863 // matches the serialized packet length.
864 if (GetParam().version <= QUIC_VERSION_33) {
865 EXPECT_CALL(entropy_calculator_, EntropyHash(_))
866 .WillOnce(testing::Return(0));
867 }
868 EXPECT_CALL(delegate_, OnSerializedPacket(_))
869 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
870 size_t est_packet_size = creator_.PacketSize();
871 creator_.Flush();
872 ASSERT_TRUE(serialized_packet_.encrypted_buffer);
873 EXPECT_EQ(est_packet_size, client_framer_.GetMaxPlaintextSize(
874 serialized_packet_.encrypted_length));
875 DeleteSerializedPacket();
876 }
877
878 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) {
879 if (!GetParam().version_serialization) {
880 creator_.StopSendingVersion();
881 }
882 creator_.SetMaxPacketLength(500u);
883
884 const size_t max_plaintext_size =
885 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
886 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree());
887
888 // Serialized length of ack frame with 2000 nack ranges should be limited by
889 // the packet size.
890 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
891 size_t frame_len = client_framer_.GetSerializedFrameLength(
892 QuicFrame(&ack_frame), creator_.BytesFree(), true, true,
893 PACKET_1BYTE_PACKET_NUMBER);
894 EXPECT_EQ(creator_.BytesFree(), frame_len);
895
896 // Add ack frame to creator.
897 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
898 EXPECT_TRUE(creator_.HasPendingFrames());
899 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()),
900 creator_.PacketSize());
901 EXPECT_EQ(0u, creator_.BytesFree());
902
903 // Ensure the packet is successfully created, and the packet size estimate
904 // may not match the serialized packet length.
905 if (GetParam().version <= QUIC_VERSION_33) {
906 EXPECT_CALL(entropy_calculator_, EntropyHash(_)).WillOnce(Return(0));
907 }
908 size_t est_packet_size = creator_.PacketSize();
909 EXPECT_CALL(delegate_, OnSerializedPacket(_))
910 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
911 creator_.Flush();
912 ASSERT_TRUE(serialized_packet_.encrypted_buffer);
913 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize(
914 serialized_packet_.encrypted_length));
915 DeleteSerializedPacket();
916 }
917
918 TEST_P(QuicPacketCreatorTest, EntropyFlag) {
919 frames_.push_back(QuicFrame(
920 new QuicStreamFrame(kCryptoStreamId, false, 0u, StringPiece())));
921
922 for (int i = 0; i < 2; ++i) {
923 for (int j = 0; j < 64; ++j) {
924 SerializedPacket serialized = SerializeAllFrames(frames_);
925 // Verify both BoolSource and hash algorithm.
926 bool expected_rand_bool =
927 (mock_random_.RandUint64() & (UINT64_C(1) << j)) != 0;
928 bool observed_rand_bool =
929 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0;
930 uint8_t rest_of_hash = serialized.entropy_hash & ~(1 << ((j + 1) % 8));
931 EXPECT_EQ(expected_rand_bool, observed_rand_bool);
932 EXPECT_EQ(0, rest_of_hash);
933 }
934 // After 64 calls, BoolSource will refresh the bucket - make sure it does.
935 mock_random_.ChangeValue();
936 }
937
938 delete frames_[0].stream_frame;
939 }
940
941 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { 825 TEST_P(QuicPacketCreatorTest, SetCurrentPath) {
942 // Current path is the default path. 826 // Current path is the default path.
943 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); 827 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_));
944 EXPECT_EQ(0u, creator_.packet_number()); 828 EXPECT_EQ(0u, creator_.packet_number());
945 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 829 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
946 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); 830 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
947 // Add a stream frame to the creator. 831 // Add a stream frame to the creator.
948 QuicFrame frame; 832 QuicFrame frame;
949 QuicIOVector io_vector(MakeIOVector("test")); 833 QuicIOVector io_vector(MakeIOVector("test"));
950 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, 834 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false,
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 EXPECT_CALL(delegate_, 949 EXPECT_CALL(delegate_,
1066 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); 950 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _));
1067 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u, 951 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u,
1068 false, false, &frame), 952 false, false, &frame),
1069 "Client hello won't fit in a single packet."); 953 "Client hello won't fit in a single packet.");
1070 } 954 }
1071 955
1072 } // namespace 956 } // namespace
1073 } // namespace test 957 } // namespace test
1074 } // namespace net 958 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_packet_creator.cc ('k') | net/quic/core/quic_packet_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698