| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/test_tools/quic_config_peer.h" | 9 #include "net/quic/test_tools/quic_config_peer.h" |
| 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( | 169 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( |
| 170 &manager_, new_sequence_number)); | 170 &manager_, new_sequence_number)); |
| 171 } | 171 } |
| 172 | 172 |
| 173 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 173 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 174 return CreatePacket(sequence_number, true); | 174 return CreatePacket(sequence_number, true); |
| 175 } | 175 } |
| 176 | 176 |
| 177 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 177 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
| 178 bool retransmittable) { | 178 bool retransmittable) { |
| 179 packets_.push_back(QuicPacket::NewDataPacket( | 179 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
| 180 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | |
| 181 PACKET_6BYTE_SEQUENCE_NUMBER)); | |
| 182 return SerializedPacket( | 180 return SerializedPacket( |
| 183 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u, | 181 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u, |
| 184 retransmittable ? new RetransmittableFrames() : nullptr); | 182 retransmittable ? new RetransmittableFrames() : nullptr); |
| 185 } | 183 } |
| 186 | 184 |
| 187 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 185 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 188 packets_.push_back(QuicPacket::NewFecPacket( | 186 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
| 189 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 187 SerializedPacket serialized(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 190 PACKET_6BYTE_SEQUENCE_NUMBER)); | 188 packets_.back(), 0u, nullptr); |
| 191 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 189 serialized.is_fec_packet = true; |
| 192 packets_.back(), 0u, nullptr); | 190 return serialized; |
| 193 } | 191 } |
| 194 | 192 |
| 195 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { | 193 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 196 EXPECT_CALL(*send_algorithm_, | 194 EXPECT_CALL(*send_algorithm_, |
| 197 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) | 195 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) |
| 198 .Times(1).WillOnce(Return(true)); | 196 .Times(1).WillOnce(Return(true)); |
| 199 SerializedPacket packet(CreateDataPacket(sequence_number)); | 197 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 200 manager_.OnPacketSent(&packet, 0, clock_.Now(), | 198 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 201 packet.packet->length(), NOT_RETRANSMISSION, | 199 packet.packet->length(), NOT_RETRANSMISSION, |
| 202 HAS_RETRANSMITTABLE_DATA); | 200 HAS_RETRANSMITTABLE_DATA); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 const QuicSentPacketManager::PendingRetransmission pending = | 247 const QuicSentPacketManager::PendingRetransmission pending = |
| 250 manager_.NextPendingRetransmission(); | 248 manager_.NextPendingRetransmission(); |
| 251 SerializedPacket packet( | 249 SerializedPacket packet( |
| 252 CreatePacket(retransmission_sequence_number, false)); | 250 CreatePacket(retransmission_sequence_number, false)); |
| 253 manager_.OnPacketSent(&packet, pending.sequence_number, clock_.Now(), | 251 manager_.OnPacketSent(&packet, pending.sequence_number, clock_.Now(), |
| 254 kDefaultLength, pending.transmission_type, | 252 kDefaultLength, pending.transmission_type, |
| 255 HAS_RETRANSMITTABLE_DATA); | 253 HAS_RETRANSMITTABLE_DATA); |
| 256 } | 254 } |
| 257 | 255 |
| 258 QuicSentPacketManager manager_; | 256 QuicSentPacketManager manager_; |
| 259 vector<QuicPacket*> packets_; | 257 vector<QuicEncryptedPacket*> packets_; |
| 260 MockClock clock_; | 258 MockClock clock_; |
| 261 QuicConnectionStats stats_; | 259 QuicConnectionStats stats_; |
| 262 MockSendAlgorithm* send_algorithm_; | 260 MockSendAlgorithm* send_algorithm_; |
| 263 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; | 261 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; |
| 264 }; | 262 }; |
| 265 | 263 |
| 266 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 264 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 267 VerifyUnackedPackets(nullptr, 0); | 265 VerifyUnackedPackets(nullptr, 0); |
| 268 SendDataPacket(1); | 266 SendDataPacket(1); |
| 269 | 267 |
| (...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1149 TEST_F(QuicSentPacketManagerTest, NewRetransmissionTimeout) { | 1147 TEST_F(QuicSentPacketManagerTest, NewRetransmissionTimeout) { |
| 1150 ValueRestore<bool> old_flag(&FLAGS_quic_use_new_rto, true); | 1148 ValueRestore<bool> old_flag(&FLAGS_quic_use_new_rto, true); |
| 1151 QuicConfig client_config; | 1149 QuicConfig client_config; |
| 1152 QuicTagVector options; | 1150 QuicTagVector options; |
| 1153 options.push_back(kNRTO); | 1151 options.push_back(kNRTO); |
| 1154 QuicSentPacketManagerPeer::SetIsServer(&manager_, false); | 1152 QuicSentPacketManagerPeer::SetIsServer(&manager_, false); |
| 1155 client_config.SetConnectionOptionsToSend(options); | 1153 client_config.SetConnectionOptionsToSend(options); |
| 1156 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1154 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1157 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | 1155 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
| 1158 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); | 1156 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); |
| 1157 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1158 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1159 manager_.SetFromConfig(client_config); | 1159 manager_.SetFromConfig(client_config); |
| 1160 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1160 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1161 | 1161 |
| 1162 // Send 100 packets. | 1162 // Send 100 packets. |
| 1163 const size_t kNumSentPackets = 100; | 1163 const size_t kNumSentPackets = 100; |
| 1164 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1164 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 1165 SendDataPacket(i); | 1165 SendDataPacket(i); |
| 1166 } | 1166 } |
| 1167 | 1167 |
| 1168 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); | 1168 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1716 } | 1716 } |
| 1717 | 1717 |
| 1718 TEST_F(QuicSentPacketManagerTest, NegotiateReceiveWindowFromOptions) { | 1718 TEST_F(QuicSentPacketManagerTest, NegotiateReceiveWindowFromOptions) { |
| 1719 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1719 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1720 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1720 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1721 | 1721 |
| 1722 // Try to set a size below the minimum and ensure it gets set to the min. | 1722 // Try to set a size below the minimum and ensure it gets set to the min. |
| 1723 QuicConfig client_config; | 1723 QuicConfig client_config; |
| 1724 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); | 1724 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); |
| 1725 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); | 1725 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); |
| 1726 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1727 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1726 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1728 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1727 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | 1729 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
| 1728 manager_.SetFromConfig(client_config); | 1730 manager_.SetFromConfig(client_config); |
| 1729 | 1731 |
| 1730 EXPECT_EQ(kMinSocketReceiveBuffer, | 1732 EXPECT_EQ(kMinSocketReceiveBuffer, |
| 1731 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1733 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1732 | 1734 |
| 1733 // Ensure the smaller send window only allows 16 packets to be sent. | 1735 // Ensure the smaller send window only allows 16 packets to be sent. |
| 1734 for (QuicPacketSequenceNumber i = 1; i <= 16; ++i) { | 1736 for (QuicPacketSequenceNumber i = 1; i <= 16; ++i) { |
| 1735 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( | 1737 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1793 | 1795 |
| 1794 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); | 1796 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); |
| 1795 manager_.ResumeConnectionState(cached_network_params); | 1797 manager_.ResumeConnectionState(cached_network_params); |
| 1796 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, | 1798 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, |
| 1797 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); | 1799 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); |
| 1798 } | 1800 } |
| 1799 | 1801 |
| 1800 } // namespace | 1802 } // namespace |
| 1801 } // namespace test | 1803 } // namespace test |
| 1802 } // namespace net | 1804 } // namespace net |
| OLD | NEW |