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 |