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 |