| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) | 139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) |
| 140 << " packets[" << i << "]:" << packets[i]; | 140 << " packets[" << i << "]:" << packets[i]; |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 | 143 |
| 144 void ExpectAck(QuicPacketNumber largest_observed) { | 144 void ExpectAck(QuicPacketNumber largest_observed) { |
| 145 EXPECT_CALL( | 145 EXPECT_CALL( |
| 146 *send_algorithm_, | 146 *send_algorithm_, |
| 147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), | 147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), |
| 148 IsEmpty())); | 148 IsEmpty())); |
| 149 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 149 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 150 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 151 } | 150 } |
| 152 | 151 |
| 153 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) { | 152 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) { |
| 154 EXPECT_CALL(*send_algorithm_, | 153 EXPECT_CALL(*send_algorithm_, |
| 155 OnCongestionEvent(true, _, IsEmpty(), IsEmpty())); | 154 OnCongestionEvent(true, _, IsEmpty(), IsEmpty())); |
| 156 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 155 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 157 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 158 } | 156 } |
| 159 | 157 |
| 160 void ExpectAckAndLoss(bool rtt_updated, | 158 void ExpectAckAndLoss(bool rtt_updated, |
| 161 QuicPacketNumber largest_observed, | 159 QuicPacketNumber largest_observed, |
| 162 QuicPacketNumber lost_packet) { | 160 QuicPacketNumber lost_packet) { |
| 163 EXPECT_CALL(*send_algorithm_, | 161 EXPECT_CALL(*send_algorithm_, |
| 164 OnCongestionEvent(rtt_updated, _, | 162 OnCongestionEvent(rtt_updated, _, |
| 165 ElementsAre(Pair(largest_observed, _)), | 163 ElementsAre(Pair(largest_observed, _)), |
| 166 ElementsAre(Pair(lost_packet, _)))); | 164 ElementsAre(Pair(lost_packet, _)))); |
| 167 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 165 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 168 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 169 } | 166 } |
| 170 | 167 |
| 171 // |packets_acked| and |packets_lost| should be in packet number order. | 168 // |packets_acked| and |packets_lost| should be in packet number order. |
| 172 void ExpectAcksAndLosses(bool rtt_updated, | 169 void ExpectAcksAndLosses(bool rtt_updated, |
| 173 QuicPacketNumber* packets_acked, | 170 QuicPacketNumber* packets_acked, |
| 174 size_t num_packets_acked, | 171 size_t num_packets_acked, |
| 175 QuicPacketNumber* packets_lost, | 172 QuicPacketNumber* packets_lost, |
| 176 size_t num_packets_lost) { | 173 size_t num_packets_lost) { |
| 177 vector<QuicPacketNumber> ack_vector; | 174 vector<QuicPacketNumber> ack_vector; |
| 178 for (size_t i = 0; i < num_packets_acked; ++i) { | 175 for (size_t i = 0; i < num_packets_acked; ++i) { |
| 179 ack_vector.push_back(packets_acked[i]); | 176 ack_vector.push_back(packets_acked[i]); |
| 180 } | 177 } |
| 181 vector<QuicPacketNumber> lost_vector; | 178 vector<QuicPacketNumber> lost_vector; |
| 182 for (size_t i = 0; i < num_packets_lost; ++i) { | 179 for (size_t i = 0; i < num_packets_lost; ++i) { |
| 183 lost_vector.push_back(packets_lost[i]); | 180 lost_vector.push_back(packets_lost[i]); |
| 184 } | 181 } |
| 185 EXPECT_CALL( | 182 EXPECT_CALL( |
| 186 *send_algorithm_, | 183 *send_algorithm_, |
| 187 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector), | 184 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector), |
| 188 Pointwise(KeyEq(), lost_vector))); | 185 Pointwise(KeyEq(), lost_vector))); |
| 189 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()) | 186 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()) |
| 190 .Times(AnyNumber()); | 187 .Times(AnyNumber()); |
| 191 EXPECT_CALL(*network_change_visitor_, OnRttChange()).Times(AnyNumber()); | |
| 192 } | 188 } |
| 193 | 189 |
| 194 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 190 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 195 QuicPacketNumber new_packet_number) { | 191 QuicPacketNumber new_packet_number) { |
| 196 RetransmitAndSendPacket(old_packet_number, new_packet_number, | 192 RetransmitAndSendPacket(old_packet_number, new_packet_number, |
| 197 TLP_RETRANSMISSION); | 193 TLP_RETRANSMISSION); |
| 198 } | 194 } |
| 199 | 195 |
| 200 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 196 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 201 QuicPacketNumber new_packet_number, | 197 QuicPacketNumber new_packet_number, |
| 202 TransmissionType transmission_type) { | 198 TransmissionType transmission_type) { |
| 203 QuicSentPacketManagerPeer::MarkForRetransmission( | 199 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 204 &manager_, old_packet_number, transmission_type); | 200 &manager_, old_packet_number, transmission_type); |
| 205 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 201 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 206 PendingRetransmission next_retransmission = | 202 PendingRetransmission next_retransmission = |
| 207 manager_.NextPendingRetransmission(); | 203 manager_.NextPendingRetransmission(); |
| 208 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); | 204 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); |
| 209 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); | 205 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); |
| 210 | 206 |
| 211 EXPECT_CALL(*send_algorithm_, | 207 EXPECT_CALL(*send_algorithm_, |
| 212 OnPacketSent(_, BytesInFlight(), new_packet_number, | 208 OnPacketSent(_, BytesInFlight(), new_packet_number, |
| 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 209 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 214 .WillOnce(Return(true)); | 210 .WillOnce(Return(true)); |
| 215 SerializedPacket packet(CreatePacket(new_packet_number, false)); | 211 SerializedPacket packet(CreatePacket(new_packet_number, false)); |
| 216 manager_.OnPacketSent(&packet, old_packet_number, clock_.Now(), | 212 manager_.OnPacketSent(&packet, packet.path_id, old_packet_number, |
| 217 transmission_type, HAS_RETRANSMITTABLE_DATA); | 213 clock_.Now(), transmission_type, |
| 214 HAS_RETRANSMITTABLE_DATA); |
| 218 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, | 215 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, |
| 219 new_packet_number)); | 216 new_packet_number)); |
| 220 } | 217 } |
| 221 | 218 |
| 222 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { | 219 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { |
| 223 return CreatePacket(packet_number, true); | 220 return CreatePacket(packet_number, true); |
| 224 } | 221 } |
| 225 | 222 |
| 226 SerializedPacket CreatePacket(QuicPacketNumber packet_number, | 223 SerializedPacket CreatePacket(QuicPacketNumber packet_number, |
| 227 bool retransmittable) { | 224 bool retransmittable) { |
| 228 SerializedPacket packet(kDefaultPathId, packet_number, | 225 SerializedPacket packet(kDefaultPathId, packet_number, |
| 229 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, | 226 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, |
| 230 0u, false, false); | 227 0u, false, false); |
| 231 if (retransmittable) { | 228 if (retransmittable) { |
| 232 packet.retransmittable_frames.push_back( | 229 packet.retransmittable_frames.push_back( |
| 233 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); | 230 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); |
| 234 } | 231 } |
| 235 return packet; | 232 return packet; |
| 236 } | 233 } |
| 237 | 234 |
| 238 void SendDataPacket(QuicPacketNumber packet_number) { | 235 void SendDataPacket(QuicPacketNumber packet_number) { |
| 239 EXPECT_CALL(*send_algorithm_, | 236 EXPECT_CALL(*send_algorithm_, |
| 240 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) | 237 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) |
| 241 .Times(1) | 238 .Times(1) |
| 242 .WillOnce(Return(true)); | 239 .WillOnce(Return(true)); |
| 243 SerializedPacket packet(CreateDataPacket(packet_number)); | 240 SerializedPacket packet(CreateDataPacket(packet_number)); |
| 244 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 241 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 245 HAS_RETRANSMITTABLE_DATA); | 242 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 246 } | 243 } |
| 247 | 244 |
| 248 void SendCryptoPacket(QuicPacketNumber packet_number) { | 245 void SendCryptoPacket(QuicPacketNumber packet_number) { |
| 249 EXPECT_CALL(*send_algorithm_, | 246 EXPECT_CALL(*send_algorithm_, |
| 250 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, | 247 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, |
| 251 HAS_RETRANSMITTABLE_DATA)) | 248 HAS_RETRANSMITTABLE_DATA)) |
| 252 .Times(1) | 249 .Times(1) |
| 253 .WillOnce(Return(true)); | 250 .WillOnce(Return(true)); |
| 254 SerializedPacket packet(CreateDataPacket(packet_number)); | 251 SerializedPacket packet(CreateDataPacket(packet_number)); |
| 255 packet.retransmittable_frames.push_back( | 252 packet.retransmittable_frames.push_back( |
| 256 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece()))); | 253 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece()))); |
| 257 packet.has_crypto_handshake = IS_HANDSHAKE; | 254 packet.has_crypto_handshake = IS_HANDSHAKE; |
| 258 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 255 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 259 HAS_RETRANSMITTABLE_DATA); | 256 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 260 } | 257 } |
| 261 | 258 |
| 262 void SendAckPacket(QuicPacketNumber packet_number) { | 259 void SendAckPacket(QuicPacketNumber packet_number) { |
| 263 EXPECT_CALL(*send_algorithm_, | 260 EXPECT_CALL(*send_algorithm_, |
| 264 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, | 261 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, |
| 265 NO_RETRANSMITTABLE_DATA)) | 262 NO_RETRANSMITTABLE_DATA)) |
| 266 .Times(1) | 263 .Times(1) |
| 267 .WillOnce(Return(false)); | 264 .WillOnce(Return(false)); |
| 268 SerializedPacket packet(CreatePacket(packet_number, false)); | 265 SerializedPacket packet(CreatePacket(packet_number, false)); |
| 269 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 266 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 270 NO_RETRANSMITTABLE_DATA); | 267 NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); |
| 271 } | 268 } |
| 272 | 269 |
| 273 // Based on QuicConnection's WritePendingRetransmissions. | 270 // Based on QuicConnection's WritePendingRetransmissions. |
| 274 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) { | 271 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) { |
| 275 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 272 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 276 EXPECT_CALL(*send_algorithm_, | 273 EXPECT_CALL(*send_algorithm_, |
| 277 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength, | 274 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength, |
| 278 HAS_RETRANSMITTABLE_DATA)) | 275 HAS_RETRANSMITTABLE_DATA)) |
| 279 .Times(1) | 276 .Times(1) |
| 280 .WillOnce(Return(true)); | 277 .WillOnce(Return(true)); |
| 281 const PendingRetransmission pending = manager_.NextPendingRetransmission(); | 278 const PendingRetransmission pending = manager_.NextPendingRetransmission(); |
| 282 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); | 279 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); |
| 283 manager_.OnPacketSent(&packet, pending.packet_number, clock_.Now(), | 280 manager_.OnPacketSent(&packet, pending.path_id, pending.packet_number, |
| 284 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); | 281 clock_.Now(), pending.transmission_type, |
| 282 HAS_RETRANSMITTABLE_DATA); |
| 285 } | 283 } |
| 286 | 284 |
| 287 // Initialize a frame acknowledging all packets up to largest_observed. | 285 // Initialize a frame acknowledging all packets up to largest_observed. |
| 288 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { | 286 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { |
| 289 QuicAckFrame frame(MakeAckFrame(largest_observed)); | 287 QuicAckFrame frame(MakeAckFrame(largest_observed)); |
| 290 frame.missing = GetParam().missing; | 288 frame.missing = GetParam().missing; |
| 291 if (!GetParam().missing) { | 289 if (!GetParam().missing) { |
| 292 if (largest_observed > 0) { | 290 if (largest_observed > 0) { |
| 293 frame.packets.Add(1, largest_observed + 1); | 291 frame.packets.Add(1, largest_observed + 1); |
| 294 } | 292 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 455 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 458 } | 456 } |
| 459 | 457 |
| 460 TEST_P(QuicSentPacketManagerTest, | 458 TEST_P(QuicSentPacketManagerTest, |
| 461 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { | 459 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { |
| 462 SendDataPacket(1); | 460 SendDataPacket(1); |
| 463 RetransmitAndSendPacket(1, 2); | 461 RetransmitAndSendPacket(1, 2); |
| 464 | 462 |
| 465 // Fire the RTO, which will mark 2 for retransmission (but will not send it). | 463 // Fire the RTO, which will mark 2 for retransmission (but will not send it). |
| 466 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 464 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 467 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 465 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 468 manager_.OnRetransmissionTimeout(); | 466 manager_.OnRetransmissionTimeout(); |
| 469 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 467 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 470 | 468 |
| 471 // Ack 1 but not 2, before 2 is able to be sent. | 469 // Ack 1 but not 2, before 2 is able to be sent. |
| 472 // Since 1 has been retransmitted, it has already been lost, and so the | 470 // Since 1 has been retransmitted, it has already been lost, and so the |
| 473 // send algorithm is not informed that it has been ACK'd. | 471 // send algorithm is not informed that it has been ACK'd. |
| 474 QuicAckFrame ack_frame = InitAckFrame(1); | 472 QuicAckFrame ack_frame = InitAckFrame(1); |
| 475 ExpectUpdatedRtt(1); | 473 ExpectUpdatedRtt(1); |
| 476 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); | 474 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); |
| 477 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 475 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. | 817 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. |
| 820 EXPECT_EQ(102 * kDefaultLength, | 818 EXPECT_EQ(102 * kDefaultLength, |
| 821 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 819 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
| 822 | 820 |
| 823 RetransmitNextPacket(103); | 821 RetransmitNextPacket(103); |
| 824 QuicAckFrame ack_frame = InitAckFrame(103); | 822 QuicAckFrame ack_frame = InitAckFrame(103); |
| 825 NackPackets(0, 103, &ack_frame); | 823 NackPackets(0, 103, &ack_frame); |
| 826 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 824 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 827 EXPECT_CALL(*send_algorithm_, | 825 EXPECT_CALL(*send_algorithm_, |
| 828 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _)); | 826 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _)); |
| 829 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 827 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 830 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 831 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 828 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 832 // All packets before 103 should be lost. | 829 // All packets before 103 should be lost. |
| 833 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 830 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
| 834 } | 831 } |
| 835 | 832 |
| 836 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { | 833 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { |
| 837 // Send 2 crypto packets and 3 data packets. | 834 // Send 2 crypto packets and 3 data packets. |
| 838 const size_t kNumSentCryptoPackets = 2; | 835 const size_t kNumSentCryptoPackets = 2; |
| 839 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 836 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 840 SendCryptoPacket(i); | 837 SendCryptoPacket(i); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1040 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1044 | 1041 |
| 1045 // Ack a retransmission. | 1042 // Ack a retransmission. |
| 1046 QuicAckFrame ack_frame = InitAckFrame(102); | 1043 QuicAckFrame ack_frame = InitAckFrame(102); |
| 1047 NackPackets(0, 102, &ack_frame); | 1044 NackPackets(0, 102, &ack_frame); |
| 1048 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 1045 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 1049 // Ensure no packets are lost. | 1046 // Ensure no packets are lost. |
| 1050 EXPECT_CALL(*send_algorithm_, | 1047 EXPECT_CALL(*send_algorithm_, |
| 1051 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), | 1048 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), |
| 1052 /*lost_packets=*/IsEmpty())); | 1049 /*lost_packets=*/IsEmpty())); |
| 1053 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1050 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1054 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1055 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1051 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1056 // RTO's use loss detection instead of immediately declaring retransmitted | 1052 // RTO's use loss detection instead of immediately declaring retransmitted |
| 1057 // packets lost. | 1053 // packets lost. |
| 1058 for (int i = 1; i <= 99; ++i) { | 1054 for (int i = 1; i <= 99; ++i) { |
| 1059 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); | 1055 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); |
| 1060 } | 1056 } |
| 1061 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1057 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1062 } | 1058 } |
| 1063 | 1059 |
| 1064 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { | 1060 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { |
| 1065 QuicConfig client_config; | 1061 QuicConfig client_config; |
| 1066 QuicTagVector options; | 1062 QuicTagVector options; |
| 1067 options.push_back(kNRTO); | 1063 options.push_back(kNRTO); |
| 1068 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1064 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1069 client_config.SetConnectionOptionsToSend(options); | 1065 client_config.SetConnectionOptionsToSend(options); |
| 1070 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1066 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1071 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1072 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1067 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1073 EXPECT_CALL(*send_algorithm_, PacingRate()) | 1068 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1074 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1069 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1075 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1070 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1076 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1071 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1077 manager_.SetFromConfig(client_config); | 1072 manager_.SetFromConfig(client_config); |
| 1078 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1073 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1079 | 1074 |
| 1080 // Send 100 packets. | 1075 // Send 100 packets. |
| 1081 const size_t kNumSentPackets = 100; | 1076 const size_t kNumSentPackets = 100; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1093 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1088 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1094 | 1089 |
| 1095 // Ack a retransmission and expect no call to OnRetransmissionTimeout. | 1090 // Ack a retransmission and expect no call to OnRetransmissionTimeout. |
| 1096 QuicAckFrame ack_frame = InitAckFrame(102); | 1091 QuicAckFrame ack_frame = InitAckFrame(102); |
| 1097 NackPackets(0, 102, &ack_frame); | 1092 NackPackets(0, 102, &ack_frame); |
| 1098 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 1093 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 1099 // This will include packets in the lost packet map. | 1094 // This will include packets in the lost packet map. |
| 1100 EXPECT_CALL(*send_algorithm_, | 1095 EXPECT_CALL(*send_algorithm_, |
| 1101 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), | 1096 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), |
| 1102 /*lost_packets=*/Not(IsEmpty()))); | 1097 /*lost_packets=*/Not(IsEmpty()))); |
| 1103 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1098 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1104 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1105 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1099 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1106 } | 1100 } |
| 1107 | 1101 |
| 1108 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { | 1102 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { |
| 1109 // Send 1 packet. | 1103 // Send 1 packet. |
| 1110 SendDataPacket(1); | 1104 SendDataPacket(1); |
| 1111 | 1105 |
| 1112 manager_.OnRetransmissionTimeout(); | 1106 manager_.OnRetransmissionTimeout(); |
| 1113 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1107 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1114 EXPECT_EQ(kDefaultLength, | 1108 EXPECT_EQ(kDefaultLength, |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 | 1377 |
| 1384 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { | 1378 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { |
| 1385 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) | 1379 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1386 ->GetLossDetectionType()); | 1380 ->GetLossDetectionType()); |
| 1387 | 1381 |
| 1388 QuicConfig config; | 1382 QuicConfig config; |
| 1389 QuicTagVector options; | 1383 QuicTagVector options; |
| 1390 options.push_back(kTIME); | 1384 options.push_back(kTIME); |
| 1391 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1385 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1392 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1386 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1393 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1387 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1394 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1395 manager_.SetFromConfig(config); | 1388 manager_.SetFromConfig(config); |
| 1396 | 1389 |
| 1397 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) | 1390 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1398 ->GetLossDetectionType()); | 1391 ->GetLossDetectionType()); |
| 1399 } | 1392 } |
| 1400 | 1393 |
| 1401 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { | 1394 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { |
| 1402 FLAGS_quic_allow_bbr = true; | 1395 FLAGS_quic_allow_bbr = true; |
| 1403 QuicConfig config; | 1396 QuicConfig config; |
| 1404 QuicTagVector options; | 1397 QuicTagVector options; |
| 1405 | 1398 |
| 1406 options.push_back(kRENO); | 1399 options.push_back(kRENO); |
| 1407 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1400 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1408 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1401 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1409 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1410 manager_.SetFromConfig(config); | 1402 manager_.SetFromConfig(config); |
| 1411 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1403 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1412 ->GetCongestionControlType()); | 1404 ->GetCongestionControlType()); |
| 1413 | 1405 |
| 1414 // TODO(rtenneti): Enable the following code after BBR code is checked in. | 1406 // TODO(rtenneti): Enable the following code after BBR code is checked in. |
| 1415 #if 0 | 1407 #if 0 |
| 1416 options.clear(); | 1408 options.clear(); |
| 1417 options.push_back(kTBBR); | 1409 options.push_back(kTBBR); |
| 1418 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1410 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1419 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1411 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1420 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1421 manager_.SetFromConfig(config); | 1412 manager_.SetFromConfig(config); |
| 1422 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( | 1413 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( |
| 1423 manager_)->GetCongestionControlType()); | 1414 manager_)->GetCongestionControlType()); |
| 1424 #endif | 1415 #endif |
| 1425 | 1416 |
| 1426 options.clear(); | 1417 options.clear(); |
| 1427 options.push_back(kBYTE); | 1418 options.push_back(kBYTE); |
| 1428 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1419 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1429 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1420 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1430 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1431 manager_.SetFromConfig(config); | 1421 manager_.SetFromConfig(config); |
| 1432 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1422 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1433 ->GetCongestionControlType()); | 1423 ->GetCongestionControlType()); |
| 1434 | 1424 |
| 1435 options.clear(); | 1425 options.clear(); |
| 1436 options.push_back(kRENO); | 1426 options.push_back(kRENO); |
| 1437 options.push_back(kBYTE); | 1427 options.push_back(kBYTE); |
| 1438 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1428 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1439 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1429 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1440 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1441 manager_.SetFromConfig(config); | 1430 manager_.SetFromConfig(config); |
| 1442 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1431 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1443 ->GetCongestionControlType()); | 1432 ->GetCongestionControlType()); |
| 1444 } | 1433 } |
| 1445 | 1434 |
| 1446 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { | 1435 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { |
| 1447 QuicConfig config; | 1436 QuicConfig config; |
| 1448 QuicTagVector options; | 1437 QuicTagVector options; |
| 1449 | 1438 |
| 1450 options.push_back(k1CON); | 1439 options.push_back(k1CON); |
| 1451 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1440 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1452 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1441 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1453 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1454 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); | 1442 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); |
| 1455 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1443 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1456 manager_.SetFromConfig(config); | 1444 manager_.SetFromConfig(config); |
| 1457 | 1445 |
| 1458 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1446 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1459 QuicConfig client_config; | 1447 QuicConfig client_config; |
| 1460 client_config.SetConnectionOptionsToSend(options); | 1448 client_config.SetConnectionOptionsToSend(options); |
| 1461 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1449 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1462 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1463 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); | 1450 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); |
| 1464 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1451 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1465 manager_.SetFromConfig(client_config); | 1452 manager_.SetFromConfig(client_config); |
| 1466 } | 1453 } |
| 1467 | 1454 |
| 1468 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { | 1455 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { |
| 1469 // By default, changing the number of open streams does nothing. | 1456 // By default, changing the number of open streams does nothing. |
| 1470 manager_.SetNumOpenStreams(5); | 1457 manager_.SetNumOpenStreams(5); |
| 1471 | 1458 |
| 1472 QuicConfig config; | 1459 QuicConfig config; |
| 1473 QuicTagVector options; | 1460 QuicTagVector options; |
| 1474 | 1461 |
| 1475 options.push_back(kNCON); | 1462 options.push_back(kNCON); |
| 1476 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1463 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1477 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1464 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1478 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1479 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1465 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1480 manager_.SetFromConfig(config); | 1466 manager_.SetFromConfig(config); |
| 1481 | 1467 |
| 1482 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); | 1468 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); |
| 1483 manager_.SetNumOpenStreams(5); | 1469 manager_.SetNumOpenStreams(5); |
| 1484 } | 1470 } |
| 1485 | 1471 |
| 1486 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { | 1472 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { |
| 1487 QuicConfig config; | 1473 QuicConfig config; |
| 1488 QuicTagVector options; | 1474 QuicTagVector options; |
| 1489 | 1475 |
| 1490 options.push_back(kNTLP); | 1476 options.push_back(kNTLP); |
| 1491 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1477 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1492 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1478 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1493 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1494 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1479 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1495 manager_.SetFromConfig(config); | 1480 manager_.SetFromConfig(config); |
| 1496 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); | 1481 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); |
| 1497 } | 1482 } |
| 1498 | 1483 |
| 1499 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { | 1484 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { |
| 1500 QuicConfig client_config; | 1485 QuicConfig client_config; |
| 1501 QuicTagVector options; | 1486 QuicTagVector options; |
| 1502 | 1487 |
| 1503 options.push_back(kNTLP); | 1488 options.push_back(kNTLP); |
| 1504 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1489 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1505 client_config.SetConnectionOptionsToSend(options); | 1490 client_config.SetConnectionOptionsToSend(options); |
| 1506 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1491 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1507 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1508 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1492 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1509 manager_.SetFromConfig(client_config); | 1493 manager_.SetFromConfig(client_config); |
| 1510 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); | 1494 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); |
| 1511 } | 1495 } |
| 1512 | 1496 |
| 1513 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { | 1497 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { |
| 1514 QuicConfig config; | 1498 QuicConfig config; |
| 1515 QuicTagVector options; | 1499 QuicTagVector options; |
| 1516 | 1500 |
| 1517 options.push_back(kTLPR); | 1501 options.push_back(kTLPR); |
| 1518 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1502 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1519 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1503 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1520 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1521 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1504 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1522 manager_.SetFromConfig(config); | 1505 manager_.SetFromConfig(config); |
| 1523 EXPECT_TRUE( | 1506 EXPECT_TRUE( |
| 1524 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); | 1507 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); |
| 1525 } | 1508 } |
| 1526 | 1509 |
| 1527 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { | 1510 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { |
| 1528 QuicConfig client_config; | 1511 QuicConfig client_config; |
| 1529 QuicTagVector options; | 1512 QuicTagVector options; |
| 1530 | 1513 |
| 1531 options.push_back(kTLPR); | 1514 options.push_back(kTLPR); |
| 1532 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1515 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1533 client_config.SetConnectionOptionsToSend(options); | 1516 client_config.SetConnectionOptionsToSend(options); |
| 1534 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1517 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1535 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1536 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1518 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1537 manager_.SetFromConfig(client_config); | 1519 manager_.SetFromConfig(client_config); |
| 1538 EXPECT_TRUE( | 1520 EXPECT_TRUE( |
| 1539 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); | 1521 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); |
| 1540 } | 1522 } |
| 1541 | 1523 |
| 1542 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { | 1524 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { |
| 1543 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1525 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1544 QuicConfig config; | 1526 QuicConfig config; |
| 1545 QuicTagVector options; | 1527 QuicTagVector options; |
| 1546 | 1528 |
| 1547 options.push_back(kNRTO); | 1529 options.push_back(kNRTO); |
| 1548 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1530 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1549 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1531 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1550 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1551 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1532 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1552 manager_.SetFromConfig(config); | 1533 manager_.SetFromConfig(config); |
| 1553 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1534 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1554 } | 1535 } |
| 1555 | 1536 |
| 1556 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { | 1537 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { |
| 1557 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1538 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1558 QuicConfig client_config; | 1539 QuicConfig client_config; |
| 1559 QuicTagVector options; | 1540 QuicTagVector options; |
| 1560 | 1541 |
| 1561 options.push_back(kNRTO); | 1542 options.push_back(kNRTO); |
| 1562 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1543 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1563 client_config.SetConnectionOptionsToSend(options); | 1544 client_config.SetConnectionOptionsToSend(options); |
| 1564 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1545 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1565 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1566 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1546 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1567 manager_.SetFromConfig(client_config); | 1547 manager_.SetFromConfig(client_config); |
| 1568 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1548 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1569 } | 1549 } |
| 1570 | 1550 |
| 1571 TEST_P(QuicSentPacketManagerTest, | 1551 TEST_P(QuicSentPacketManagerTest, |
| 1572 NegotiateConservativeReceiveWindowFromOptions) { | 1552 NegotiateConservativeReceiveWindowFromOptions) { |
| 1573 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1553 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1574 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1554 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1575 | 1555 |
| 1576 // Try to set a size below the minimum and ensure it gets set to the min. | 1556 // Try to set a size below the minimum and ensure it gets set to the min. |
| 1577 QuicConfig client_config; | 1557 QuicConfig client_config; |
| 1578 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); | 1558 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); |
| 1579 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1559 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1580 EXPECT_CALL(*send_algorithm_, | 1560 EXPECT_CALL(*send_algorithm_, |
| 1581 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6)); | 1561 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6)); |
| 1582 EXPECT_CALL(*send_algorithm_, PacingRate()) | 1562 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1583 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1563 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1584 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1564 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1585 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1565 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1586 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1566 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1587 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1588 manager_.SetFromConfig(client_config); | 1567 manager_.SetFromConfig(client_config); |
| 1589 | 1568 |
| 1590 EXPECT_EQ(kMinSocketReceiveBuffer, | 1569 EXPECT_EQ(kMinSocketReceiveBuffer, |
| 1591 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1570 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1592 | 1571 |
| 1593 // Ensure the smaller send window only allows 16 packets to be sent. | 1572 // Ensure the smaller send window only allows 16 packets to be sent. |
| 1594 for (QuicPacketNumber i = 1; i <= 16; ++i) { | 1573 for (QuicPacketNumber i = 1; i <= 16; ++i) { |
| 1595 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1574 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1596 .WillOnce(Return(QuicTime::Delta::Zero())); | 1575 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1597 EXPECT_EQ(QuicTime::Delta::Zero(), | 1576 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1598 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1577 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1599 EXPECT_CALL(*send_algorithm_, | 1578 EXPECT_CALL(*send_algorithm_, |
| 1600 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1579 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1601 HAS_RETRANSMITTABLE_DATA)) | 1580 HAS_RETRANSMITTABLE_DATA)) |
| 1602 .WillOnce(Return(true)); | 1581 .WillOnce(Return(true)); |
| 1603 SerializedPacket packet(CreatePacket(i, true)); | 1582 SerializedPacket packet(CreatePacket(i, true)); |
| 1604 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1583 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1605 HAS_RETRANSMITTABLE_DATA); | 1584 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1606 } | 1585 } |
| 1607 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1586 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1608 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1587 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1609 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1588 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1610 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1589 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1611 } | 1590 } |
| 1612 | 1591 |
| 1613 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { | 1592 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { |
| 1614 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1593 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1615 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1594 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1616 | 1595 |
| 1617 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. | 1596 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. |
| 1618 for (QuicPacketNumber i = 1; i <= 244; ++i) { | 1597 for (QuicPacketNumber i = 1; i <= 244; ++i) { |
| 1619 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1598 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1620 .WillOnce(Return(QuicTime::Delta::Zero())); | 1599 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1621 EXPECT_EQ(QuicTime::Delta::Zero(), | 1600 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1622 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1601 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1623 EXPECT_CALL(*send_algorithm_, | 1602 EXPECT_CALL(*send_algorithm_, |
| 1624 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1603 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1625 HAS_RETRANSMITTABLE_DATA)) | 1604 HAS_RETRANSMITTABLE_DATA)) |
| 1626 .WillOnce(Return(true)); | 1605 .WillOnce(Return(true)); |
| 1627 SerializedPacket packet(CreatePacket(i, true)); | 1606 SerializedPacket packet(CreatePacket(i, true)); |
| 1628 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1607 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1629 HAS_RETRANSMITTABLE_DATA); | 1608 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1630 } | 1609 } |
| 1631 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1610 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1632 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1611 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1633 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1612 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1634 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1613 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1635 } | 1614 } |
| 1636 | 1615 |
| 1637 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1616 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1638 uint32_t initial_rtt_us = 325000; | 1617 uint32_t initial_rtt_us = 325000; |
| 1639 EXPECT_NE(initial_rtt_us, | 1618 EXPECT_NE(initial_rtt_us, |
| 1640 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1619 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1641 | 1620 |
| 1642 QuicConfig config; | 1621 QuicConfig config; |
| 1643 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); | 1622 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); |
| 1644 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1623 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1645 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1624 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1646 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1647 manager_.SetFromConfig(config); | 1625 manager_.SetFromConfig(config); |
| 1648 | 1626 |
| 1649 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1627 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1650 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); | 1628 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); |
| 1651 } | 1629 } |
| 1652 | 1630 |
| 1653 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { | 1631 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { |
| 1654 // The sent packet manager should use the RTT from CachedNetworkParameters if | 1632 // The sent packet manager should use the RTT from CachedNetworkParameters if |
| 1655 // it is provided. | 1633 // it is provided. |
| 1656 const int kRttMs = 1234; | 1634 const int kRttMs = 1234; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1714 manager_.OnConnectionMigration(PORT_CHANGE); | 1692 manager_.OnConnectionMigration(PORT_CHANGE); |
| 1715 | 1693 |
| 1716 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1694 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1717 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1695 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1718 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1696 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1719 } | 1697 } |
| 1720 | 1698 |
| 1721 } // namespace | 1699 } // namespace |
| 1722 } // namespace test | 1700 } // namespace test |
| 1723 } // namespace net | 1701 } // namespace net |
| OLD | NEW |