| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/crypto/null_encrypter.h" | 8 #include "net/quic/crypto/null_encrypter.h" |
| 9 #include "net/quic/crypto/quic_decrypter.h" | 9 #include "net/quic/crypto/quic_decrypter.h" |
| 10 #include "net/quic/crypto/quic_encrypter.h" | 10 #include "net/quic/crypto/quic_encrypter.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 MockEntropyCalculator entropy_calculator_; | 144 MockEntropyCalculator entropy_calculator_; |
| 145 }; | 145 }; |
| 146 | 146 |
| 147 // Run all packet creator tests with all supported versions of QUIC, and with | 147 // Run all packet creator tests with all supported versions of QUIC, and with |
| 148 // and without version in the packet header. | 148 // and without version in the packet header. |
| 149 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, | 149 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, |
| 150 QuicPacketCreatorTest, | 150 QuicPacketCreatorTest, |
| 151 ::testing::ValuesIn(GetTestParams())); | 151 ::testing::ValuesIn(GetTestParams())); |
| 152 | 152 |
| 153 TEST_P(QuicPacketCreatorTest, SerializeFrames) { | 153 TEST_P(QuicPacketCreatorTest, SerializeFrames) { |
| 154 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 154 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 155 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 155 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
| 156 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); | 156 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); |
| 157 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 157 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
| 158 delete frames_[0].ack_frame; | 158 delete frames_[0].ack_frame; |
| 159 delete frames_[1].stream_frame; | 159 delete frames_[1].stream_frame; |
| 160 delete frames_[2].stream_frame; | 160 delete frames_[2].stream_frame; |
| 161 | 161 |
| 162 { | 162 { |
| 163 InSequence s; | 163 InSequence s; |
| 164 EXPECT_CALL(framer_visitor_, OnPacket()); | 164 EXPECT_CALL(framer_visitor_, OnPacket()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 216 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 217 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 217 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 218 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 218 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
| 219 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 219 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 220 } | 220 } |
| 221 ProcessPacket(serialized.packet); | 221 ProcessPacket(serialized.packet); |
| 222 delete serialized.packet; | 222 delete serialized.packet; |
| 223 } | 223 } |
| 224 | 224 |
| 225 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { | 225 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { |
| 226 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 226 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 227 creator_.AddSavedFrame(frames_[0]); | 227 creator_.AddSavedFrame(frames_[0]); |
| 228 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); | 228 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); |
| 229 SerializedPacket serialized = creator_.SerializePacket(); | 229 SerializedPacket serialized = creator_.SerializePacket(); |
| 230 // The sequence number length will not change mid-packet. | 230 // The sequence number length will not change mid-packet. |
| 231 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 231 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
| 232 | 232 |
| 233 { | 233 { |
| 234 InSequence s; | 234 InSequence s; |
| 235 EXPECT_CALL(framer_visitor_, OnPacket()); | 235 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 236 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 236 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 257 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 257 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 258 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 258 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 259 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 259 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 260 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 260 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 261 } | 261 } |
| 262 ProcessPacket(serialized.packet); | 262 ProcessPacket(serialized.packet); |
| 263 delete serialized.packet; | 263 delete serialized.packet; |
| 264 } | 264 } |
| 265 | 265 |
| 266 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { | 266 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { |
| 267 if (GetParam().version <= QUIC_VERSION_15) { | |
| 268 return; | |
| 269 } | |
| 270 // Changing the sequence number length with queued frames in the creator | 267 // Changing the sequence number length with queued frames in the creator |
| 271 // should hold the change until after any currently queued frames are | 268 // should hold the change until after any currently queued frames are |
| 272 // serialized. | 269 // serialized. |
| 273 | 270 |
| 274 // Packet 1. | 271 // Packet 1. |
| 275 // Queue a frame in the creator. | 272 // Queue a frame in the creator. |
| 276 EXPECT_FALSE(creator_.HasPendingFrames()); | 273 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 277 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))); | 274 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); |
| 278 creator_.AddSavedFrame(ack_frame); | 275 creator_.AddSavedFrame(ack_frame); |
| 279 | 276 |
| 280 // Now change sequence number length. | 277 // Now change sequence number length. |
| 281 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); | 278 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); |
| 282 | 279 |
| 283 // Add a STOP_WAITING frame since it contains a packet sequence number, | 280 // Add a STOP_WAITING frame since it contains a packet sequence number, |
| 284 // whose length should be 1. | 281 // whose length should be 1. |
| 285 QuicStopWaitingFrame stop_waiting_frame; | 282 QuicStopWaitingFrame stop_waiting_frame; |
| 286 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); | 283 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); |
| 287 EXPECT_TRUE(creator_.HasPendingFrames()); | 284 EXPECT_TRUE(creator_.HasPendingFrames()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 // Test goal is to test the following sequence (P1 => generate Packet 1): | 343 // Test goal is to test the following sequence (P1 => generate Packet 1): |
| 347 // P1 <change seq num length> P2 FEC, | 344 // P1 <change seq num length> P2 FEC, |
| 348 // and we expect that sequence number length should not change until the end | 345 // and we expect that sequence number length should not change until the end |
| 349 // of the open FEC group. | 346 // of the open FEC group. |
| 350 | 347 |
| 351 // Enable FEC protection, and send FEC packet every 6 packets. | 348 // Enable FEC protection, and send FEC packet every 6 packets. |
| 352 EXPECT_TRUE(SwitchFecProtectionOn(6)); | 349 EXPECT_TRUE(SwitchFecProtectionOn(6)); |
| 353 // Should return false since we do not have enough packets in the FEC group to | 350 // Should return false since we do not have enough packets in the FEC group to |
| 354 // trigger an FEC packet. | 351 // trigger an FEC packet. |
| 355 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); | 352 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 356 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 353 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 357 | 354 |
| 358 // Generate Packet 1. | 355 // Generate Packet 1. |
| 359 creator_.AddSavedFrame(frames_[0]); | 356 creator_.AddSavedFrame(frames_[0]); |
| 360 // Change the sequence number length mid-FEC group and it should not change. | 357 // Change the sequence number length mid-FEC group and it should not change. |
| 361 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); | 358 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER); |
| 362 SerializedPacket serialized = creator_.SerializePacket(); | 359 SerializedPacket serialized = creator_.SerializePacket(); |
| 363 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 360 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
| 364 | 361 |
| 365 { | 362 { |
| 366 InSequence s; | 363 InSequence s; |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 861 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 865 EXPECT_FALSE(creator_.HasPendingFrames()); | 862 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 866 EXPECT_EQ(max_plaintext_size - | 863 EXPECT_EQ(max_plaintext_size - |
| 867 GetPacketHeaderSize( | 864 GetPacketHeaderSize( |
| 868 creator_.connection_id_length(), | 865 creator_.connection_id_length(), |
| 869 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 866 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 870 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 867 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 871 creator_.BytesFree()); | 868 creator_.BytesFree()); |
| 872 | 869 |
| 873 // Add a variety of frame types and then a padding frame. | 870 // Add a variety of frame types and then a padding frame. |
| 874 QuicAckFrame ack_frame(MakeAckFrame(0u, 0u)); | 871 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 875 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 872 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 876 EXPECT_TRUE(creator_.HasPendingFrames()); | 873 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 877 | 874 |
| 878 QuicCongestionFeedbackFrame congestion_feedback; | 875 QuicCongestionFeedbackFrame congestion_feedback; |
| 879 congestion_feedback.type = kFixRate; | 876 congestion_feedback.type = kFixRate; |
| 880 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback))); | 877 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback))); |
| 881 EXPECT_TRUE(creator_.HasPendingFrames()); | 878 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 882 | 879 |
| 883 QuicFrame frame; | 880 QuicFrame frame; |
| 884 size_t consumed = creator_.CreateStreamFrame( | 881 size_t consumed = creator_.CreateStreamFrame( |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 1012 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
| 1016 mock_random_.ChangeValue(); | 1013 mock_random_.ChangeValue(); |
| 1017 } | 1014 } |
| 1018 | 1015 |
| 1019 delete frames_[0].stream_frame; | 1016 delete frames_[0].stream_frame; |
| 1020 } | 1017 } |
| 1021 | 1018 |
| 1022 } // namespace | 1019 } // namespace |
| 1023 } // namespace test | 1020 } // namespace test |
| 1024 } // namespace net | 1021 } // namespace net |
| OLD | NEW |