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 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 #if 0 | 1490 #if 0 |
1466 options.clear(); | 1491 options.clear(); |
1467 options.push_back(kTBBR); | 1492 options.push_back(kTBBR); |
1468 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1493 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
1469 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1494 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
1470 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | 1495 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
1471 manager_.SetFromConfig(config); | 1496 manager_.SetFromConfig(config); |
1472 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( | 1497 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( |
1473 manager_)->GetCongestionControlType()); | 1498 manager_)->GetCongestionControlType()); |
1474 #endif | 1499 #endif |
| 1500 |
| 1501 options.clear(); |
| 1502 options.push_back(kBYTE); |
| 1503 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1504 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1505 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
| 1506 manager_.SetFromConfig(config); |
| 1507 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1508 ->GetCongestionControlType()); |
| 1509 |
| 1510 options.clear(); |
| 1511 options.push_back(kRENO); |
| 1512 options.push_back(kBYTE); |
| 1513 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1514 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1515 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
| 1516 manager_.SetFromConfig(config); |
| 1517 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1518 ->GetCongestionControlType()); |
1475 } | 1519 } |
1476 | 1520 |
1477 TEST_F(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { | 1521 TEST_F(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { |
1478 QuicConfig config; | 1522 QuicConfig config; |
1479 QuicTagVector options; | 1523 QuicTagVector options; |
1480 | 1524 |
1481 options.push_back(k1CON); | 1525 options.push_back(k1CON); |
1482 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1526 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
1483 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1527 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
1484 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | 1528 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1665 | 1709 |
1666 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); | 1710 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); |
1667 manager_.ResumeConnectionState(cached_network_params); | 1711 manager_.ResumeConnectionState(cached_network_params); |
1668 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, | 1712 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, |
1669 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); | 1713 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); |
1670 } | 1714 } |
1671 | 1715 |
1672 } // namespace | 1716 } // namespace |
1673 } // namespace test | 1717 } // namespace test |
1674 } // namespace net | 1718 } // namespace net |
OLD | NEW |