| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/test_tools/quic_config_peer.h" | 9 #include "net/quic/test_tools/quic_config_peer.h" |
| 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 using testing::StrictMock; | 23 using testing::StrictMock; |
| 24 using testing::_; | 24 using testing::_; |
| 25 | 25 |
| 26 namespace net { | 26 namespace net { |
| 27 namespace test { | 27 namespace test { |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 // Default packet length. | 30 // Default packet length. |
| 31 const uint32 kDefaultLength = 1000; | 31 const uint32 kDefaultLength = 1000; |
| 32 | 32 |
| 33 // Stream ID for data sent in CreatePacket(). |
| 34 const QuicStreamId kStreamId = 7; |
| 35 |
| 33 // Matcher to check the key of the key-value pair it receives as first argument | 36 // Matcher to check the key of the key-value pair it receives as first argument |
| 34 // equals its second argument. | 37 // equals its second argument. |
| 35 MATCHER(KeyEq, "") { | 38 MATCHER(KeyEq, "") { |
| 36 return std::tr1::get<0>(arg).first == std::tr1::get<1>(arg); | 39 return std::tr1::get<0>(arg).first == std::tr1::get<1>(arg); |
| 37 } | 40 } |
| 38 | 41 |
| 39 class MockDebugDelegate : public QuicSentPacketManager::DebugDelegate { | 42 class MockDebugDelegate : public QuicSentPacketManager::DebugDelegate { |
| 40 public: | 43 public: |
| 41 MOCK_METHOD2(OnSpuriousPacketRetransmission, | 44 MOCK_METHOD2(OnSpuriousPacketRetransmission, |
| 42 void(TransmissionType transmission_type, | 45 void(TransmissionType transmission_type, |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 &manager_, new_sequence_number)); | 173 &manager_, new_sequence_number)); |
| 171 } | 174 } |
| 172 | 175 |
| 173 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 176 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 174 return CreatePacket(sequence_number, true); | 177 return CreatePacket(sequence_number, true); |
| 175 } | 178 } |
| 176 | 179 |
| 177 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 180 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
| 178 bool retransmittable) { | 181 bool retransmittable) { |
| 179 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); | 182 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
| 180 return SerializedPacket( | 183 RetransmittableFrames* frames = nullptr; |
| 181 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u, | 184 if (retransmittable) { |
| 182 retransmittable ? new RetransmittableFrames(ENCRYPTION_NONE) : nullptr); | 185 frames = new RetransmittableFrames(ENCRYPTION_NONE); |
| 186 frames->AddStreamFrame( |
| 187 new QuicStreamFrame(kStreamId, false, 0, IOVector())); |
| 188 } |
| 189 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 190 packets_.back(), 0u, frames); |
| 183 } | 191 } |
| 184 | 192 |
| 185 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 193 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 186 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); | 194 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
| 187 SerializedPacket serialized(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 195 SerializedPacket serialized(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 188 packets_.back(), 0u, nullptr); | 196 packets_.back(), 0u, nullptr); |
| 189 serialized.is_fec_packet = true; | 197 serialized.is_fec_packet = true; |
| 190 return serialized; | 198 return serialized; |
| 191 } | 199 } |
| 192 | 200 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 | 321 |
| 314 // There should no longer be a pending retransmission. | 322 // There should no longer be a pending retransmission. |
| 315 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 323 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 316 | 324 |
| 317 // No unacked packets remain. | 325 // No unacked packets remain. |
| 318 VerifyUnackedPackets(nullptr, 0); | 326 VerifyUnackedPackets(nullptr, 0); |
| 319 VerifyRetransmittablePackets(nullptr, 0); | 327 VerifyRetransmittablePackets(nullptr, 0); |
| 320 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 321 } | 329 } |
| 322 | 330 |
| 331 TEST_F(QuicSentPacketManagerTest, RetransmitThenStopRetransmittingBeforeSend) { |
| 332 SendDataPacket(1); |
| 333 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, 1, |
| 334 TLP_RETRANSMISSION); |
| 335 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 336 |
| 337 manager_.CancelRetransmissionsForStream(kStreamId); |
| 338 |
| 339 // There should no longer be a pending retransmission. |
| 340 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 341 |
| 342 QuicPacketSequenceNumber unacked[] = {1}; |
| 343 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 344 VerifyRetransmittablePackets(nullptr, 0); |
| 345 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 346 } |
| 347 |
| 323 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 348 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
| 324 SendDataPacket(1); | 349 SendDataPacket(1); |
| 325 RetransmitAndSendPacket(1, 2); | 350 RetransmitAndSendPacket(1, 2); |
| 326 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 351 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 327 clock_.AdvanceTime(rtt); | 352 clock_.AdvanceTime(rtt); |
| 328 | 353 |
| 329 // Ack 1 but not 2. | 354 // Ack 1 but not 2. |
| 330 ExpectAck(1); | 355 ExpectAck(1); |
| 331 QuicAckFrame ack_frame; | 356 QuicAckFrame ack_frame; |
| 332 ack_frame.largest_observed = 1; | 357 ack_frame.largest_observed = 1; |
| (...skipping 1351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1684 | 1709 |
| 1685 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); | 1710 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); |
| 1686 manager_.ResumeConnectionState(cached_network_params); | 1711 manager_.ResumeConnectionState(cached_network_params); |
| 1687 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, | 1712 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, |
| 1688 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); | 1713 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); |
| 1689 } | 1714 } |
| 1690 | 1715 |
| 1691 } // namespace | 1716 } // namespace |
| 1692 } // namespace test | 1717 } // namespace test |
| 1693 } // namespace net | 1718 } // namespace net |
| OLD | NEW |