| 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/test_tools/quic_config_peer.h" | 8 #include "net/quic/test_tools/quic_config_peer.h" |
| 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 QuicSentPacketManagerTest() | 25 QuicSentPacketManagerTest() |
| 26 : manager_(true, &clock_, &stats_, kFixRate, kNack), | 26 : manager_(true, &clock_, &stats_, kFixRate, kNack), |
| 27 send_algorithm_(new StrictMock<MockSendAlgorithm>) { | 27 send_algorithm_(new StrictMock<MockSendAlgorithm>) { |
| 28 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); | 28 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); |
| 29 // Disable tail loss probes for most tests. | 29 // Disable tail loss probes for most tests. |
| 30 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 30 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
| 31 // Advance the time 1s so the send times are never QuicTime::Zero. | 31 // Advance the time 1s so the send times are never QuicTime::Zero. |
| 32 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 32 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| 33 } | 33 } |
| 34 | 34 |
| 35 virtual ~QuicSentPacketManagerTest() { | 35 virtual ~QuicSentPacketManagerTest() { STLDeleteElements(&packets_); } |
| 36 STLDeleteElements(&packets_); | |
| 37 } | |
| 38 | 36 |
| 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 37 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
| 40 size_t num_packets) { | 38 size_t num_packets) { |
| 41 if (num_packets == 0) { | 39 if (num_packets == 0) { |
| 42 EXPECT_FALSE(manager_.HasUnackedPackets()); | 40 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 43 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 41 EXPECT_EQ( |
| 44 &manager_)); | 42 0u, |
| 43 QuicSentPacketManagerPeer::GetNumRetransmittablePackets(&manager_)); |
| 45 return; | 44 return; |
| 46 } | 45 } |
| 47 | 46 |
| 48 EXPECT_TRUE(manager_.HasUnackedPackets()); | 47 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 48 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
| 50 for (size_t i = 0; i < num_packets; ++i) { | 49 for (size_t i = 0; i < num_packets; ++i) { |
| 51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 50 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
| 52 } | 51 } |
| 53 } | 52 } |
| 54 | 53 |
| 55 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, | 54 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, |
| 56 size_t num_packets) { | 55 size_t num_packets) { |
| 57 SequenceNumberSet unacked = | 56 SequenceNumberSet unacked = |
| 58 QuicSentPacketManagerPeer::GetUnackedPackets(&manager_); | 57 QuicSentPacketManagerPeer::GetUnackedPackets(&manager_); |
| 59 for (size_t i = 0; i < num_packets; ++i) { | 58 for (size_t i = 0; i < num_packets; ++i) { |
| 60 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; | 59 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; |
| 61 } | 60 } |
| 62 size_t num_retransmittable = 0; | 61 size_t num_retransmittable = 0; |
| 63 for (SequenceNumberSet::const_iterator it = unacked.begin(); | 62 for (SequenceNumberSet::const_iterator it = unacked.begin(); |
| 64 it != unacked.end(); ++it) { | 63 it != unacked.end(); |
| 64 ++it) { |
| 65 if (manager_.HasRetransmittableFrames(*it)) { | 65 if (manager_.HasRetransmittableFrames(*it)) { |
| 66 ++num_retransmittable; | 66 ++num_retransmittable; |
| 67 } | 67 } |
| 68 } | 68 } |
| 69 EXPECT_EQ(num_packets, | 69 EXPECT_EQ( |
| 70 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 70 num_packets, |
| 71 &manager_)); | 71 QuicSentPacketManagerPeer::GetNumRetransmittablePackets(&manager_)); |
| 72 EXPECT_EQ(num_packets, num_retransmittable); | 72 EXPECT_EQ(num_packets, num_retransmittable); |
| 73 } | 73 } |
| 74 | 74 |
| 75 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, | 75 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, |
| 76 QuicPacketSequenceNumber new_sequence_number) { | 76 QuicPacketSequenceNumber new_sequence_number) { |
| 77 QuicSentPacketManagerPeer::MarkForRetransmission( | 77 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 78 &manager_, old_sequence_number, LOSS_RETRANSMISSION); | 78 &manager_, old_sequence_number, LOSS_RETRANSMISSION); |
| 79 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 79 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 80 QuicSentPacketManager::PendingRetransmission next_retransmission = | 80 QuicSentPacketManager::PendingRetransmission next_retransmission = |
| 81 manager_.NextPendingRetransmission(); | 81 manager_.NextPendingRetransmission(); |
| 82 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); | 82 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); |
| 83 EXPECT_EQ(LOSS_RETRANSMISSION, | 83 EXPECT_EQ(LOSS_RETRANSMISSION, next_retransmission.transmission_type); |
| 84 next_retransmission.transmission_type); | |
| 85 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); | 84 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); |
| 86 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( | 85 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( |
| 87 &manager_, new_sequence_number)); | 86 &manager_, new_sequence_number)); |
| 88 } | 87 } |
| 89 | 88 |
| 90 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number, | 89 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number, |
| 91 QuicPacketSequenceNumber new_sequence_number) { | 90 QuicPacketSequenceNumber new_sequence_number) { |
| 92 RetransmitPacket(old_sequence_number, new_sequence_number); | 91 RetransmitPacket(old_sequence_number, new_sequence_number); |
| 93 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, new_sequence_number, _, _)) | 92 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, new_sequence_number, _, _)) |
| 94 .WillOnce(Return(true)); | 93 .WillOnce(Return(true)); |
| 95 manager_.OnPacketSent(new_sequence_number, | 94 manager_.OnPacketSent(new_sequence_number, |
| 96 clock_.Now(), | 95 clock_.Now(), |
| 97 1000, | 96 1000, |
| 98 LOSS_RETRANSMISSION, | 97 LOSS_RETRANSMISSION, |
| 99 HAS_RETRANSMITTABLE_DATA); | 98 HAS_RETRANSMITTABLE_DATA); |
| 100 } | 99 } |
| 101 | 100 |
| 102 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 101 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 103 return CreatePacket(sequence_number, true); | 102 return CreatePacket(sequence_number, true); |
| 104 } | 103 } |
| 105 | 104 |
| 106 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 105 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
| 107 bool retransmittable) { | 106 bool retransmittable) { |
| 108 packets_.push_back(QuicPacket::NewDataPacket( | 107 packets_.push_back(QuicPacket::NewDataPacket(NULL, |
| 109 NULL, 1000, false, PACKET_8BYTE_CONNECTION_ID, false, | 108 1000, |
| 110 PACKET_6BYTE_SEQUENCE_NUMBER)); | 109 false, |
| 110 PACKET_8BYTE_CONNECTION_ID, |
| 111 false, |
| 112 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 111 return SerializedPacket( | 113 return SerializedPacket( |
| 112 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 114 sequence_number, |
| 113 packets_.back(), 0u, | 115 PACKET_6BYTE_SEQUENCE_NUMBER, |
| 116 packets_.back(), |
| 117 0u, |
| 114 retransmittable ? new RetransmittableFrames() : NULL); | 118 retransmittable ? new RetransmittableFrames() : NULL); |
| 115 } | 119 } |
| 116 | 120 |
| 117 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 121 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 118 packets_.push_back(QuicPacket::NewFecPacket( | 122 packets_.push_back(QuicPacket::NewFecPacket(NULL, |
| 119 NULL, 1000, false, PACKET_8BYTE_CONNECTION_ID, false, | 123 1000, |
| 120 PACKET_6BYTE_SEQUENCE_NUMBER)); | 124 false, |
| 121 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 125 PACKET_8BYTE_CONNECTION_ID, |
| 122 packets_.back(), 0u, NULL); | 126 false, |
| 127 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 128 return SerializedPacket(sequence_number, |
| 129 PACKET_6BYTE_SEQUENCE_NUMBER, |
| 130 packets_.back(), |
| 131 0u, |
| 132 NULL); |
| 123 } | 133 } |
| 124 | 134 |
| 125 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { | 135 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 126 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) | 136 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) |
| 127 .Times(1).WillOnce(Return(true)); | 137 .Times(1) |
| 138 .WillOnce(Return(true)); |
| 128 SerializedPacket packet(CreateDataPacket(sequence_number)); | 139 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 129 manager_.OnSerializedPacket(packet); | 140 manager_.OnSerializedPacket(packet); |
| 130 manager_.OnPacketSent(sequence_number, clock_.Now(), | 141 manager_.OnPacketSent(sequence_number, |
| 131 packet.packet->length(), NOT_RETRANSMISSION, | 142 clock_.Now(), |
| 143 packet.packet->length(), |
| 144 NOT_RETRANSMISSION, |
| 132 HAS_RETRANSMITTABLE_DATA); | 145 HAS_RETRANSMITTABLE_DATA); |
| 133 } | 146 } |
| 134 | 147 |
| 135 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { | 148 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { |
| 136 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) | 149 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) |
| 137 .Times(1).WillOnce(Return(true)); | 150 .Times(1) |
| 151 .WillOnce(Return(true)); |
| 138 SerializedPacket packet(CreateDataPacket(sequence_number)); | 152 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 139 packet.retransmittable_frames->AddStreamFrame( | 153 packet.retransmittable_frames->AddStreamFrame( |
| 140 new QuicStreamFrame(1, false, 0, IOVector())); | 154 new QuicStreamFrame(1, false, 0, IOVector())); |
| 141 manager_.OnSerializedPacket(packet); | 155 manager_.OnSerializedPacket(packet); |
| 142 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | 156 manager_.OnPacketSent(sequence_number, |
| 143 packet.packet->length(), NOT_RETRANSMISSION, | 157 clock_.ApproximateNow(), |
| 158 packet.packet->length(), |
| 159 NOT_RETRANSMISSION, |
| 144 HAS_RETRANSMITTABLE_DATA); | 160 HAS_RETRANSMITTABLE_DATA); |
| 145 } | 161 } |
| 146 | 162 |
| 147 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { | 163 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 148 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) | 164 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) |
| 149 .Times(1).WillOnce(Return(true)); | 165 .Times(1) |
| 166 .WillOnce(Return(true)); |
| 150 SerializedPacket packet(CreateFecPacket(sequence_number)); | 167 SerializedPacket packet(CreateFecPacket(sequence_number)); |
| 151 manager_.OnSerializedPacket(packet); | 168 manager_.OnSerializedPacket(packet); |
| 152 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | 169 manager_.OnPacketSent(sequence_number, |
| 153 packet.packet->length(), NOT_RETRANSMISSION, | 170 clock_.ApproximateNow(), |
| 171 packet.packet->length(), |
| 172 NOT_RETRANSMISSION, |
| 154 NO_RETRANSMITTABLE_DATA); | 173 NO_RETRANSMITTABLE_DATA); |
| 155 } | 174 } |
| 156 | 175 |
| 157 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { | 176 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { |
| 158 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) | 177 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _)) |
| 159 .Times(1).WillOnce(Return(false)); | 178 .Times(1) |
| 179 .WillOnce(Return(false)); |
| 160 SerializedPacket packet(CreatePacket(sequence_number, false)); | 180 SerializedPacket packet(CreatePacket(sequence_number, false)); |
| 161 manager_.OnSerializedPacket(packet); | 181 manager_.OnSerializedPacket(packet); |
| 162 manager_.OnPacketSent(sequence_number, clock_.Now(), | 182 manager_.OnPacketSent(sequence_number, |
| 163 packet.packet->length(), NOT_RETRANSMISSION, | 183 clock_.Now(), |
| 184 packet.packet->length(), |
| 185 NOT_RETRANSMISSION, |
| 164 NO_RETRANSMITTABLE_DATA); | 186 NO_RETRANSMITTABLE_DATA); |
| 165 } | 187 } |
| 166 | 188 |
| 167 // Based on QuicConnection's WritePendingRetransmissions. | 189 // Based on QuicConnection's WritePendingRetransmissions. |
| 168 void RetransmitNextPacket( | 190 void RetransmitNextPacket( |
| 169 QuicPacketSequenceNumber retransmission_sequence_number) { | 191 QuicPacketSequenceNumber retransmission_sequence_number) { |
| 170 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 192 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 171 EXPECT_CALL(*send_algorithm_, | 193 EXPECT_CALL(*send_algorithm_, |
| 172 OnPacketSent(_, retransmission_sequence_number, _, _)) | 194 OnPacketSent(_, retransmission_sequence_number, _, _)) |
| 173 .Times(1).WillOnce(Return(true)); | 195 .Times(1) |
| 196 .WillOnce(Return(true)); |
| 174 const QuicSentPacketManager::PendingRetransmission pending = | 197 const QuicSentPacketManager::PendingRetransmission pending = |
| 175 manager_.NextPendingRetransmission(); | 198 manager_.NextPendingRetransmission(); |
| 176 manager_.OnRetransmittedPacket( | 199 manager_.OnRetransmittedPacket(pending.sequence_number, |
| 177 pending.sequence_number, retransmission_sequence_number); | 200 retransmission_sequence_number); |
| 178 manager_.OnPacketSent(retransmission_sequence_number, | 201 manager_.OnPacketSent(retransmission_sequence_number, |
| 179 clock_.ApproximateNow(), 1000, | 202 clock_.ApproximateNow(), |
| 180 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); | 203 1000, |
| 204 pending.transmission_type, |
| 205 HAS_RETRANSMITTABLE_DATA); |
| 181 } | 206 } |
| 182 | 207 |
| 183 QuicSentPacketManager manager_; | 208 QuicSentPacketManager manager_; |
| 184 vector<QuicPacket*> packets_; | 209 vector<QuicPacket*> packets_; |
| 185 MockClock clock_; | 210 MockClock clock_; |
| 186 QuicConnectionStats stats_; | 211 QuicConnectionStats stats_; |
| 187 MockSendAlgorithm* send_algorithm_; | 212 MockSendAlgorithm* send_algorithm_; |
| 188 }; | 213 }; |
| 189 | 214 |
| 190 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 215 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 191 VerifyUnackedPackets(NULL, 0); | 216 VerifyUnackedPackets(NULL, 0); |
| 192 | 217 |
| 193 SerializedPacket serialized_packet(CreateDataPacket(1)); | 218 SerializedPacket serialized_packet(CreateDataPacket(1)); |
| 194 | 219 |
| 195 manager_.OnSerializedPacket(serialized_packet); | 220 manager_.OnSerializedPacket(serialized_packet); |
| 196 | 221 |
| 197 QuicPacketSequenceNumber unacked[] = { 1 }; | 222 QuicPacketSequenceNumber unacked[] = {1}; |
| 198 VerifyUnackedPackets(unacked, arraysize(unacked)); | 223 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 199 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 224 QuicPacketSequenceNumber retransmittable[] = {1}; |
| 200 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 225 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 201 } | 226 } |
| 202 | 227 |
| 203 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 228 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 204 SendDataPacket(1); | 229 SendDataPacket(1); |
| 205 RetransmitPacket(1, 2); | 230 RetransmitPacket(1, 2); |
| 206 | 231 |
| 207 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 232 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
| 208 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 233 QuicPacketSequenceNumber unacked[] = {1, 2}; |
| 209 VerifyUnackedPackets(unacked, arraysize(unacked)); | 234 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 210 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 235 QuicPacketSequenceNumber retransmittable[] = {2}; |
| 211 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 236 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 212 } | 237 } |
| 213 | 238 |
| 214 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 239 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 215 SendDataPacket(1); | 240 SendDataPacket(1); |
| 216 RetransmitAndSendPacket(1, 2); | 241 RetransmitAndSendPacket(1, 2); |
| 217 | 242 |
| 218 // Ack 2 but not 1. | 243 // Ack 2 but not 1. |
| 219 ReceivedPacketInfo received_info; | 244 ReceivedPacketInfo received_info; |
| 220 received_info.largest_observed = 2; | 245 received_info.largest_observed = 2; |
| 221 received_info.missing_packets.insert(1); | 246 received_info.missing_packets.insert(1); |
| 222 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 247 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 223 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); | 248 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
| 224 manager_.OnIncomingAck(received_info, clock_.Now()); | 249 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 225 | 250 |
| 226 // Packet 1 is unacked, pending, but not retransmittable. | 251 // Packet 1 is unacked, pending, but not retransmittable. |
| 227 QuicPacketSequenceNumber unacked[] = { 1 }; | 252 QuicPacketSequenceNumber unacked[] = {1}; |
| 228 VerifyUnackedPackets(unacked, arraysize(unacked)); | 253 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 229 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 254 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 230 VerifyRetransmittablePackets(NULL, 0); | 255 VerifyRetransmittablePackets(NULL, 0); |
| 231 } | 256 } |
| 232 | 257 |
| 233 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 258 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 234 SendDataPacket(1); | 259 SendDataPacket(1); |
| 235 QuicSentPacketManagerPeer::MarkForRetransmission( | 260 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 236 &manager_, 1, LOSS_RETRANSMISSION); | 261 &manager_, 1, LOSS_RETRANSMISSION); |
| 237 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 262 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 clock_.AdvanceTime(rtt); | 308 clock_.AdvanceTime(rtt); |
| 284 | 309 |
| 285 // Ack 1 but not 2. | 310 // Ack 1 but not 2. |
| 286 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); | 311 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); |
| 287 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 312 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 288 ReceivedPacketInfo received_info; | 313 ReceivedPacketInfo received_info; |
| 289 received_info.largest_observed = 1; | 314 received_info.largest_observed = 1; |
| 290 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 315 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 291 | 316 |
| 292 // 2 remains unacked, but no packets have retransmittable data. | 317 // 2 remains unacked, but no packets have retransmittable data. |
| 293 QuicPacketSequenceNumber unacked[] = { 2 }; | 318 QuicPacketSequenceNumber unacked[] = {2}; |
| 294 VerifyUnackedPackets(unacked, arraysize(unacked)); | 319 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 295 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 320 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 296 VerifyRetransmittablePackets(NULL, 0); | 321 VerifyRetransmittablePackets(NULL, 0); |
| 297 | 322 |
| 298 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); | 323 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); |
| 299 } | 324 } |
| 300 | 325 |
| 301 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 326 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
| 302 SendDataPacket(1); | 327 SendDataPacket(1); |
| 303 RetransmitPacket(1, 2); | 328 RetransmitPacket(1, 2); |
| 304 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _)) | 329 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _)) |
| 305 .WillOnce(Return(true)); | 330 .WillOnce(Return(true)); |
| 306 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000, | 331 manager_.OnPacketSent(2, |
| 307 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 332 clock_.ApproximateNow(), |
| 333 1000, |
| 334 LOSS_RETRANSMISSION, |
| 335 HAS_RETRANSMITTABLE_DATA); |
| 308 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 336 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 309 clock_.AdvanceTime(rtt); | 337 clock_.AdvanceTime(rtt); |
| 310 | 338 |
| 311 // First, ACK packet 1 which makes packet 2 non-retransmittable. | 339 // First, ACK packet 1 which makes packet 2 non-retransmittable. |
| 312 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); | 340 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); |
| 313 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 341 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 314 ReceivedPacketInfo received_info; | 342 ReceivedPacketInfo received_info; |
| 315 received_info.largest_observed = 1; | 343 received_info.largest_observed = 1; |
| 316 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 344 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 317 | 345 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 clock_.AdvanceTime(rtt); | 412 clock_.AdvanceTime(rtt); |
| 385 | 413 |
| 386 // Ack 1 but not 2 or 3. | 414 // Ack 1 but not 2 or 3. |
| 387 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); | 415 EXPECT_CALL(*send_algorithm_, OnRttUpdated(1)); |
| 388 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 416 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 389 ReceivedPacketInfo received_info; | 417 ReceivedPacketInfo received_info; |
| 390 received_info.largest_observed = 1; | 418 received_info.largest_observed = 1; |
| 391 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 419 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 392 | 420 |
| 393 // 2 and 3 remain unacked, but no packets have retransmittable data. | 421 // 2 and 3 remain unacked, but no packets have retransmittable data. |
| 394 QuicPacketSequenceNumber unacked[] = { 2, 3 }; | 422 QuicPacketSequenceNumber unacked[] = {2, 3}; |
| 395 VerifyUnackedPackets(unacked, arraysize(unacked)); | 423 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 396 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 424 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 397 VerifyRetransmittablePackets(NULL, 0); | 425 VerifyRetransmittablePackets(NULL, 0); |
| 398 | 426 |
| 399 // Ensure packet 2 is lost when 4 and 5 are sent and acked. | 427 // Ensure packet 2 is lost when 4 and 5 are sent and acked. |
| 400 SendDataPacket(4); | 428 SendDataPacket(4); |
| 401 received_info.largest_observed = 4; | 429 received_info.largest_observed = 4; |
| 402 received_info.missing_packets.insert(2); | 430 received_info.missing_packets.insert(2); |
| 403 EXPECT_CALL(*send_algorithm_, OnRttUpdated(4)); | 431 EXPECT_CALL(*send_algorithm_, OnRttUpdated(4)); |
| 404 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); | 432 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); |
| 405 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)); | 433 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)); |
| 406 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 434 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 407 | 435 |
| 408 QuicPacketSequenceNumber unacked2[] = { 2 }; | 436 QuicPacketSequenceNumber unacked2[] = {2}; |
| 409 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | 437 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
| 410 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 438 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 411 | 439 |
| 412 SendDataPacket(5); | 440 SendDataPacket(5); |
| 413 received_info.largest_observed = 5; | 441 received_info.largest_observed = 5; |
| 414 EXPECT_CALL(*send_algorithm_, OnRttUpdated(5)); | 442 EXPECT_CALL(*send_algorithm_, OnRttUpdated(5)); |
| 415 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); | 443 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); |
| 416 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); | 444 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); |
| 417 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); | 445 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); |
| 418 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 446 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 431 // Ack 2 and 3, and mark 1 as revived. | 459 // Ack 2 and 3, and mark 1 as revived. |
| 432 ReceivedPacketInfo received_info; | 460 ReceivedPacketInfo received_info; |
| 433 received_info.largest_observed = 3; | 461 received_info.largest_observed = 3; |
| 434 received_info.missing_packets.insert(1); | 462 received_info.missing_packets.insert(1); |
| 435 received_info.revived_packets.insert(1); | 463 received_info.revived_packets.insert(1); |
| 436 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 464 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 437 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2); | 465 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2); |
| 438 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 466 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 439 | 467 |
| 440 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 468 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 441 QuicPacketSequenceNumber unacked[] = { 1, 4 }; | 469 QuicPacketSequenceNumber unacked[] = {1, 4}; |
| 442 VerifyUnackedPackets(unacked, arraysize(unacked)); | 470 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 443 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 471 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 444 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 472 QuicPacketSequenceNumber retransmittable[] = {4}; |
| 445 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 473 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 446 | 474 |
| 447 // Ack the 4th packet and expect the 1st to be considered lost. | 475 // Ack the 4th packet and expect the 1st to be considered lost. |
| 448 received_info.largest_observed = 4; | 476 received_info.largest_observed = 4; |
| 449 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 477 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 450 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 478 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 451 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 479 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
| 452 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)); | 480 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)); |
| 453 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 481 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 454 | 482 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 467 ReceivedPacketInfo received_info; | 495 ReceivedPacketInfo received_info; |
| 468 received_info.largest_observed = 4; | 496 received_info.largest_observed = 4; |
| 469 received_info.missing_packets.insert(1); | 497 received_info.missing_packets.insert(1); |
| 470 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 498 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 471 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); | 499 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); |
| 472 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 500 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 473 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 501 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
| 474 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 502 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 475 | 503 |
| 476 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 504 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 477 QuicPacketSequenceNumber unacked[] = { 1, 5 }; | 505 QuicPacketSequenceNumber unacked[] = {1, 5}; |
| 478 VerifyUnackedPackets(unacked, arraysize(unacked)); | 506 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 479 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 507 QuicPacketSequenceNumber retransmittable[] = {1}; |
| 480 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 508 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 481 | 509 |
| 482 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be | 510 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be |
| 483 // removed from pending retransmissions map. | 511 // removed from pending retransmissions map. |
| 484 received_info.largest_observed = 5; | 512 received_info.largest_observed = 5; |
| 485 received_info.revived_packets.insert(1); | 513 received_info.revived_packets.insert(1); |
| 486 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 514 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 487 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); | 515 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); |
| 488 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 516 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 489 | 517 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 505 received_info.missing_packets.insert(2); | 533 received_info.missing_packets.insert(2); |
| 506 received_info.missing_packets.insert(3); | 534 received_info.missing_packets.insert(3); |
| 507 received_info.missing_packets.insert(4); | 535 received_info.missing_packets.insert(4); |
| 508 received_info.is_truncated = true; | 536 received_info.is_truncated = true; |
| 509 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 537 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 510 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 538 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 511 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 539 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
| 512 manager_.OnIncomingAck(received_info, clock_.Now()); | 540 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 513 | 541 |
| 514 // High water mark will be raised. | 542 // High water mark will be raised. |
| 515 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 543 QuicPacketSequenceNumber unacked[] = {2, 3, 4}; |
| 516 VerifyUnackedPackets(unacked, arraysize(unacked)); | 544 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 517 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 545 QuicPacketSequenceNumber retransmittable[] = {4}; |
| 518 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 546 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 519 } | 547 } |
| 520 | 548 |
| 521 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 549 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
| 522 SendDataPacket(1); | 550 SendDataPacket(1); |
| 523 RetransmitAndSendPacket(1, 2); | 551 RetransmitAndSendPacket(1, 2); |
| 524 RetransmitAndSendPacket(2, 3); | 552 RetransmitAndSendPacket(2, 3); |
| 525 RetransmitAndSendPacket(3, 4); | 553 RetransmitAndSendPacket(3, 4); |
| 526 manager_.OnSerializedPacket(CreateDataPacket(5)); | 554 manager_.OnSerializedPacket(CreateDataPacket(5)); |
| 527 manager_.OnSerializedPacket(CreateDataPacket(6)); | 555 manager_.OnSerializedPacket(CreateDataPacket(6)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 549 received_info.missing_packets.insert(5); | 577 received_info.missing_packets.insert(5); |
| 550 received_info.missing_packets.insert(6); | 578 received_info.missing_packets.insert(6); |
| 551 received_info.is_truncated = true; | 579 received_info.is_truncated = true; |
| 552 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 580 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 553 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); | 581 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); |
| 554 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); | 582 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
| 555 manager_.OnIncomingAck(received_info, clock_.Now()); | 583 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 556 } | 584 } |
| 557 | 585 |
| 558 // High water mark will be raised. | 586 // High water mark will be raised. |
| 559 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; | 587 QuicPacketSequenceNumber unacked[] = {4, 5, 6, 7, 8, 9}; |
| 560 VerifyUnackedPackets(unacked, arraysize(unacked)); | 588 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 561 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 589 QuicPacketSequenceNumber retransmittable[] = {5, 6, 7, 8, 9}; |
| 562 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 590 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 563 } | 591 } |
| 564 | 592 |
| 565 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 593 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
| 566 EXPECT_EQ(0u, manager_.GetLeastUnackedSentPacket()); | 594 EXPECT_EQ(0u, manager_.GetLeastUnackedSentPacket()); |
| 567 } | 595 } |
| 568 | 596 |
| 569 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 597 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
| 570 SerializedPacket serialized_packet(CreateDataPacket(1)); | 598 SerializedPacket serialized_packet(CreateDataPacket(1)); |
| 571 | 599 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 596 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 624 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 597 | 625 |
| 598 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 626 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 599 manager_.OnSerializedPacket(serialized_packet2); | 627 manager_.OnSerializedPacket(serialized_packet2); |
| 600 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 628 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 601 | 629 |
| 602 SerializedPacket serialized_packet3(CreateFecPacket(3)); | 630 SerializedPacket serialized_packet3(CreateFecPacket(3)); |
| 603 manager_.OnSerializedPacket(serialized_packet3); | 631 manager_.OnSerializedPacket(serialized_packet3); |
| 604 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 632 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 605 | 633 |
| 606 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 634 QuicPacketSequenceNumber unacked[] = {1, 2, 3}; |
| 607 VerifyUnackedPackets(unacked, arraysize(unacked)); | 635 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 608 VerifyRetransmittablePackets(NULL, 0); | 636 VerifyRetransmittablePackets(NULL, 0); |
| 609 | 637 |
| 610 manager_.DiscardUnackedPacket(1); | 638 manager_.DiscardUnackedPacket(1); |
| 611 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 639 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 612 | 640 |
| 613 // Ack 2. | 641 // Ack 2. |
| 614 ReceivedPacketInfo received_info; | 642 ReceivedPacketInfo received_info; |
| 615 received_info.largest_observed = 2; | 643 received_info.largest_observed = 2; |
| 616 manager_.OnIncomingAck(received_info, clock_.Now()); | 644 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 617 | 645 |
| 618 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); | 646 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
| 619 | 647 |
| 620 // Discard the 3rd packet and ensure there are no FEC packets. | 648 // Discard the 3rd packet and ensure there are no FEC packets. |
| 621 manager_.DiscardUnackedPacket(3); | 649 manager_.DiscardUnackedPacket(3); |
| 622 EXPECT_FALSE(manager_.HasUnackedPackets()); | 650 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 623 } | 651 } |
| 624 | 652 |
| 625 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 653 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 626 VerifyUnackedPackets(NULL, 0); | 654 VerifyUnackedPackets(NULL, 0); |
| 627 | 655 |
| 628 SerializedPacket serialized_packet(CreateFecPacket(1)); | 656 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 629 manager_.OnSerializedPacket(serialized_packet); | 657 manager_.OnSerializedPacket(serialized_packet); |
| 630 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _)) | 658 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _)).Times(1).WillOnce( |
| 631 .Times(1).WillOnce(Return(true)); | 659 Return(true)); |
| 632 manager_.OnPacketSent( | 660 manager_.OnPacketSent( |
| 633 1, QuicTime::Zero(), 1000, NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); | 661 1, QuicTime::Zero(), 1000, NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); |
| 634 | 662 |
| 635 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 663 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 636 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | 664 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); |
| 637 manager_.OnSerializedPacket(serialized_packet2); | 665 manager_.OnSerializedPacket(serialized_packet2); |
| 638 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _)) | 666 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _)).Times(1).WillOnce( |
| 639 .Times(1).WillOnce(Return(true)); | 667 Return(true)); |
| 640 manager_.OnPacketSent( | 668 manager_.OnPacketSent( |
| 641 2, sent_time, 1000, NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); | 669 2, sent_time, 1000, NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); |
| 642 | 670 |
| 643 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 671 QuicPacketSequenceNumber unacked[] = {1, 2}; |
| 644 VerifyUnackedPackets(unacked, arraysize(unacked)); | 672 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 645 VerifyRetransmittablePackets(NULL, 0); | 673 VerifyRetransmittablePackets(NULL, 0); |
| 646 | 674 |
| 647 EXPECT_TRUE(manager_.HasUnackedPackets()); | 675 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 648 EXPECT_EQ(QuicTime::Zero(), | 676 EXPECT_EQ(QuicTime::Zero(), |
| 649 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); | 677 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 650 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); | 678 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
| 651 } | 679 } |
| 652 | 680 |
| 653 TEST_F(QuicSentPacketManagerTest, FackRetransmit17Packets) { | 681 TEST_F(QuicSentPacketManagerTest, FackRetransmit17Packets) { |
| 654 const size_t kNumSentPackets = 25; | 682 const size_t kNumSentPackets = 25; |
| 655 // Transmit 25 packets. | 683 // Transmit 25 packets. |
| 656 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { | 684 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { |
| 657 SendDataPacket(i); | 685 SendDataPacket(i); |
| 658 } | 686 } |
| 659 | 687 |
| 660 // Nack the first 19 packets 3 times, which does not trigger early retransmit. | 688 // Nack the first 19 packets 3 times, which does not trigger early retransmit. |
| 661 const size_t kLargestObserved = 20; | 689 const size_t kLargestObserved = 20; |
| 662 ReceivedPacketInfo received_info; | 690 ReceivedPacketInfo received_info; |
| 663 received_info.largest_observed = kLargestObserved; | 691 received_info.largest_observed = kLargestObserved; |
| 664 received_info.delta_time_largest_observed = | 692 received_info.delta_time_largest_observed = |
| 665 QuicTime::Delta::FromMilliseconds(5); | 693 QuicTime::Delta::FromMilliseconds(5); |
| 666 for (size_t i = 1; i < kLargestObserved; ++i) { | 694 for (size_t i = 1; i < kLargestObserved; ++i) { |
| 667 received_info.missing_packets.insert(i); | 695 received_info.missing_packets.insert(i); |
| 668 } | 696 } |
| 669 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); | 697 EXPECT_CALL(*send_algorithm_, OnRttUpdated(_)); |
| 670 EXPECT_CALL(*send_algorithm_, | 698 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kLargestObserved, _)).Times(1); |
| 671 OnPacketAcked(kLargestObserved, _)).Times(1); | |
| 672 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(17); | 699 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(17); |
| 673 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(17); | 700 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(17); |
| 674 manager_.OnIncomingAck(received_info, clock_.Now()); | 701 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 675 EXPECT_EQ( | 702 EXPECT_EQ( |
| 676 17u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 703 17u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
| 677 for (size_t i = 1; i < kLargestObserved; ++i) { | 704 for (size_t i = 1; i < kLargestObserved; ++i) { |
| 678 EXPECT_EQ(kLargestObserved - i, | 705 EXPECT_EQ(kLargestObserved - i, |
| 679 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); | 706 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); |
| 680 } | 707 } |
| 681 | 708 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 manager_.OnIncomingAck(received_info, clock_.Now()); | 776 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 750 } | 777 } |
| 751 | 778 |
| 752 TEST_F(QuicSentPacketManagerTest, Rtt) { | 779 TEST_F(QuicSentPacketManagerTest, Rtt) { |
| 753 QuicPacketSequenceNumber sequence_number = 1; | 780 QuicPacketSequenceNumber sequence_number = 1; |
| 754 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); | 781 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); |
| 755 SendDataPacket(sequence_number); | 782 SendDataPacket(sequence_number); |
| 756 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 783 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 757 | 784 |
| 758 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); | 785 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); |
| 759 EXPECT_CALL(*send_algorithm_, | 786 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)).Times(1); |
| 760 OnPacketAcked(sequence_number, _)).Times(1); | |
| 761 ReceivedPacketInfo received_info; | 787 ReceivedPacketInfo received_info; |
| 762 received_info.largest_observed = sequence_number; | 788 received_info.largest_observed = sequence_number; |
| 763 received_info.delta_time_largest_observed = | 789 received_info.delta_time_largest_observed = |
| 764 QuicTime::Delta::FromMilliseconds(5); | 790 QuicTime::Delta::FromMilliseconds(5); |
| 765 manager_.OnIncomingAck(received_info, clock_.Now()); | 791 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 766 EXPECT_EQ(expected_rtt, | 792 EXPECT_EQ(expected_rtt, |
| 767 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | 793 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 768 } | 794 } |
| 769 | 795 |
| 770 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 796 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
| 771 // Expect that the RTT is equal to the local time elapsed, since the | 797 // Expect that the RTT is equal to the local time elapsed, since the |
| 772 // delta_time_largest_observed is larger than the local time elapsed | 798 // delta_time_largest_observed is larger than the local time elapsed |
| 773 // and is hence invalid. | 799 // and is hence invalid. |
| 774 QuicPacketSequenceNumber sequence_number = 1; | 800 QuicPacketSequenceNumber sequence_number = 1; |
| 775 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 801 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 776 SendDataPacket(sequence_number); | 802 SendDataPacket(sequence_number); |
| 777 clock_.AdvanceTime(expected_rtt); | 803 clock_.AdvanceTime(expected_rtt); |
| 778 | 804 |
| 779 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); | 805 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); |
| 780 EXPECT_CALL(*send_algorithm_, | 806 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)).Times(1); |
| 781 OnPacketAcked(sequence_number, _)).Times(1); | |
| 782 ReceivedPacketInfo received_info; | 807 ReceivedPacketInfo received_info; |
| 783 received_info.largest_observed = sequence_number; | 808 received_info.largest_observed = sequence_number; |
| 784 received_info.delta_time_largest_observed = | 809 received_info.delta_time_largest_observed = |
| 785 QuicTime::Delta::FromMilliseconds(11); | 810 QuicTime::Delta::FromMilliseconds(11); |
| 786 manager_.OnIncomingAck(received_info, clock_.Now()); | 811 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 787 EXPECT_EQ(expected_rtt, | 812 EXPECT_EQ(expected_rtt, |
| 788 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | 813 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 789 } | 814 } |
| 790 | 815 |
| 791 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 816 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
| 792 // Expect that the RTT is equal to the local time elapsed, since the | 817 // Expect that the RTT is equal to the local time elapsed, since the |
| 793 // delta_time_largest_observed is infinite, and is hence invalid. | 818 // delta_time_largest_observed is infinite, and is hence invalid. |
| 794 QuicPacketSequenceNumber sequence_number = 1; | 819 QuicPacketSequenceNumber sequence_number = 1; |
| 795 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 820 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 796 SendDataPacket(sequence_number); | 821 SendDataPacket(sequence_number); |
| 797 clock_.AdvanceTime(expected_rtt); | 822 clock_.AdvanceTime(expected_rtt); |
| 798 | 823 |
| 799 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); | 824 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); |
| 800 EXPECT_CALL(*send_algorithm_, | 825 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)).Times(1); |
| 801 OnPacketAcked(sequence_number, _)).Times(1); | |
| 802 ReceivedPacketInfo received_info; | 826 ReceivedPacketInfo received_info; |
| 803 received_info.largest_observed = sequence_number; | 827 received_info.largest_observed = sequence_number; |
| 804 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); | 828 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); |
| 805 manager_.OnIncomingAck(received_info, clock_.Now()); | 829 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 806 EXPECT_EQ(expected_rtt, | 830 EXPECT_EQ(expected_rtt, |
| 807 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | 831 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 808 } | 832 } |
| 809 | 833 |
| 810 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { | 834 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { |
| 811 // Expect that the RTT is the time between send and receive since the | 835 // Expect that the RTT is the time between send and receive since the |
| 812 // delta_time_largest_observed is zero. | 836 // delta_time_largest_observed is zero. |
| 813 QuicPacketSequenceNumber sequence_number = 1; | 837 QuicPacketSequenceNumber sequence_number = 1; |
| 814 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 838 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 815 SendDataPacket(sequence_number); | 839 SendDataPacket(sequence_number); |
| 816 clock_.AdvanceTime(expected_rtt); | 840 clock_.AdvanceTime(expected_rtt); |
| 817 | 841 |
| 818 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); | 842 EXPECT_CALL(*send_algorithm_, OnRttUpdated(sequence_number)); |
| 819 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) | 843 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)).Times(1); |
| 820 .Times(1); | |
| 821 ReceivedPacketInfo received_info; | 844 ReceivedPacketInfo received_info; |
| 822 received_info.largest_observed = sequence_number; | 845 received_info.largest_observed = sequence_number; |
| 823 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 846 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 824 manager_.OnIncomingAck(received_info, clock_.Now()); | 847 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 825 EXPECT_EQ(expected_rtt, | 848 EXPECT_EQ(expected_rtt, |
| 826 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | 849 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 827 } | 850 } |
| 828 | 851 |
| 829 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 852 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
| 830 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 853 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1029 | 1052 |
| 1030 // Retransmit the crypto packet as 2. | 1053 // Retransmit the crypto packet as 2. |
| 1031 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1); | 1054 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1); |
| 1032 manager_.OnRetransmissionTimeout(); | 1055 manager_.OnRetransmissionTimeout(); |
| 1033 RetransmitNextPacket(2); | 1056 RetransmitNextPacket(2); |
| 1034 | 1057 |
| 1035 // Now retransmit all the unacked packets, which occurs when there is a | 1058 // Now retransmit all the unacked packets, which occurs when there is a |
| 1036 // version negotiation. | 1059 // version negotiation. |
| 1037 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1); | 1060 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1); |
| 1038 manager_.RetransmitUnackedPackets(ALL_PACKETS); | 1061 manager_.RetransmitUnackedPackets(ALL_PACKETS); |
| 1039 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 1062 QuicPacketSequenceNumber unacked[] = {1, 2}; |
| 1040 VerifyUnackedPackets(unacked, arraysize(unacked)); | 1063 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 1041 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1064 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1042 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1065 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1043 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1066 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 1044 } | 1067 } |
| 1045 | 1068 |
| 1046 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { | 1069 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { |
| 1047 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1070 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1048 // Serialize two data packets and send the latter. | 1071 // Serialize two data packets and send the latter. |
| 1049 SerializedPacket packet(CreateDataPacket(1)); | 1072 SerializedPacket packet(CreateDataPacket(1)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1072 } | 1095 } |
| 1073 | 1096 |
| 1074 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 1097 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
| 1075 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 1098 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 1076 } | 1099 } |
| 1077 | 1100 |
| 1078 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 1101 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
| 1079 SendCryptoPacket(1); | 1102 SendCryptoPacket(1); |
| 1080 | 1103 |
| 1081 // Check the min. | 1104 // Check the min. |
| 1082 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1105 QuicSentPacketManagerPeer::GetRttStats(&manager_) |
| 1083 1 * base::Time::kMicrosecondsPerMillisecond); | 1106 ->set_initial_rtt_us(1 * base::Time::kMicrosecondsPerMillisecond); |
| 1084 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1107 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1085 manager_.GetRetransmissionTime()); | 1108 manager_.GetRetransmissionTime()); |
| 1086 | 1109 |
| 1087 // Test with a standard smoothed RTT. | 1110 // Test with a standard smoothed RTT. |
| 1088 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1111 QuicSentPacketManagerPeer::GetRttStats(&manager_) |
| 1089 100 * base::Time::kMicrosecondsPerMillisecond); | 1112 ->set_initial_rtt_us(100 * base::Time::kMicrosecondsPerMillisecond); |
| 1090 | 1113 |
| 1091 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); | 1114 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); |
| 1092 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); | 1115 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
| 1093 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1116 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1094 | 1117 |
| 1095 // Retransmit the packet by invoking the retransmission timeout. | 1118 // Retransmit the packet by invoking the retransmission timeout. |
| 1096 clock_.AdvanceTime(srtt.Multiply(1.5)); | 1119 clock_.AdvanceTime(srtt.Multiply(1.5)); |
| 1097 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); | 1120 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); |
| 1098 manager_.OnRetransmissionTimeout(); | 1121 manager_.OnRetransmissionTimeout(); |
| 1099 RetransmitNextPacket(2); | 1122 RetransmitNextPacket(2); |
| 1100 | 1123 |
| 1101 // The retransmission time should now be twice as far in the future. | 1124 // The retransmission time should now be twice as far in the future. |
| 1102 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); | 1125 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
| 1103 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1126 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1104 } | 1127 } |
| 1105 | 1128 |
| 1106 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 1129 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
| 1107 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1130 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1108 SendDataPacket(1); | 1131 SendDataPacket(1); |
| 1109 SendDataPacket(2); | 1132 SendDataPacket(2); |
| 1110 | 1133 |
| 1111 // Check the min. | 1134 // Check the min. |
| 1112 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1135 QuicSentPacketManagerPeer::GetRttStats(&manager_) |
| 1113 1 * base::Time::kMicrosecondsPerMillisecond); | 1136 ->set_initial_rtt_us(1 * base::Time::kMicrosecondsPerMillisecond); |
| 1114 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1137 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1115 manager_.GetRetransmissionTime()); | 1138 manager_.GetRetransmissionTime()); |
| 1116 | 1139 |
| 1117 // Test with a standard smoothed RTT. | 1140 // Test with a standard smoothed RTT. |
| 1118 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1141 QuicSentPacketManagerPeer::GetRttStats(&manager_) |
| 1119 100 * base::Time::kMicrosecondsPerMillisecond); | 1142 ->set_initial_rtt_us(100 * base::Time::kMicrosecondsPerMillisecond); |
| 1120 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); | 1143 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); |
| 1121 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1144 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
| 1122 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1145 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1123 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1146 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1124 | 1147 |
| 1125 // Retransmit the packet by invoking the retransmission timeout. | 1148 // Retransmit the packet by invoking the retransmission timeout. |
| 1126 clock_.AdvanceTime(expected_tlp_delay); | 1149 clock_.AdvanceTime(expected_tlp_delay); |
| 1127 manager_.OnRetransmissionTimeout(); | 1150 manager_.OnRetransmissionTimeout(); |
| 1128 RetransmitNextPacket(3); | 1151 RetransmitNextPacket(3); |
| 1129 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1152 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1130 | 1153 |
| 1131 expected_time = clock_.Now().Add(expected_tlp_delay); | 1154 expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1132 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1155 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1133 } | 1156 } |
| 1134 | 1157 |
| 1135 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { | 1158 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { |
| 1136 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1159 QuicSentPacketManagerPeer::GetRttStats(&manager_) |
| 1137 QuicTime::Delta::FromMilliseconds(100), | 1160 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), |
| 1138 QuicTime::Delta::Zero(), | 1161 QuicTime::Delta::Zero(), |
| 1139 QuicTime::Zero()); | 1162 QuicTime::Zero()); |
| 1140 | 1163 |
| 1141 SendDataPacket(1); | 1164 SendDataPacket(1); |
| 1142 SendDataPacket(2); | 1165 SendDataPacket(2); |
| 1143 | 1166 |
| 1144 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1167 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
| 1145 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1168 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 1146 .WillRepeatedly(Return(expected_rto_delay)); | 1169 .WillRepeatedly(Return(expected_rto_delay)); |
| 1147 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1170 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
| 1148 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1171 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1149 | 1172 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1240 | 1263 |
| 1241 // Fire the retransmission timeout and ensure the loss detection algorithm | 1264 // Fire the retransmission timeout and ensure the loss detection algorithm |
| 1242 // is invoked. | 1265 // is invoked. |
| 1243 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) | 1266 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
| 1244 .WillOnce(Return(SequenceNumberSet())); | 1267 .WillOnce(Return(SequenceNumberSet())); |
| 1245 manager_.OnRetransmissionTimeout(); | 1268 manager_.OnRetransmissionTimeout(); |
| 1246 } | 1269 } |
| 1247 | 1270 |
| 1248 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetection) { | 1271 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetection) { |
| 1249 EXPECT_EQ(kNack, | 1272 EXPECT_EQ(kNack, |
| 1250 QuicSentPacketManagerPeer::GetLossAlgorithm( | 1273 QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1251 &manager_)->GetLossDetectionType()); | 1274 ->GetLossDetectionType()); |
| 1252 | 1275 |
| 1253 QuicConfig config; | 1276 QuicConfig config; |
| 1254 QuicConfigPeer::SetReceivedLossDetection(&config, kTIME); | 1277 QuicConfigPeer::SetReceivedLossDetection(&config, kTIME); |
| 1255 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1278 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1256 manager_.SetFromConfig(config); | 1279 manager_.SetFromConfig(config); |
| 1257 | 1280 |
| 1258 EXPECT_EQ(kTime, | 1281 EXPECT_EQ(kTime, |
| 1259 QuicSentPacketManagerPeer::GetLossAlgorithm( | 1282 QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1260 &manager_)->GetLossDetectionType()); | 1283 ->GetLossDetectionType()); |
| 1261 } | 1284 } |
| 1262 | 1285 |
| 1263 | |
| 1264 } // namespace | 1286 } // namespace |
| 1265 } // namespace test | 1287 } // namespace test |
| 1266 } // namespace net | 1288 } // namespace net |
| OLD | NEW |