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/core/quic_sent_packet_manager.h" | 5 #include "net/quic/core/quic_sent_packet_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 #include "base/memory/ptr_util.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/quic/core/quic_flags.h" | 10 #include "net/quic/core/quic_flags.h" |
11 #include "net/quic/test_tools/quic_config_peer.h" | 11 #include "net/quic/test_tools/quic_config_peer.h" |
12 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 12 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
13 #include "net/quic/test_tools/quic_test_utils.h" | 13 #include "net/quic/test_tools/quic_test_utils.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 using std::vector; | 17 using std::vector; |
18 using testing::AnyNumber; | 18 using testing::AnyNumber; |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 ExpectAckAndLoss(true, 5, 2); | 527 ExpectAckAndLoss(true, 5, 2); |
528 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _)); | 528 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _)); |
529 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 529 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
530 | 530 |
531 VerifyUnackedPackets(nullptr, 0); | 531 VerifyUnackedPackets(nullptr, 0); |
532 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 532 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
533 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); | 533 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); |
534 } | 534 } |
535 | 535 |
536 TEST_P(QuicSentPacketManagerTest, AckOriginalTransmission) { | 536 TEST_P(QuicSentPacketManagerTest, AckOriginalTransmission) { |
537 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); | 537 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>(); |
538 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); | 538 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); |
539 | 539 |
540 SendDataPacket(1); | 540 SendDataPacket(1); |
541 RetransmitAndSendPacket(1, 2); | 541 RetransmitAndSendPacket(1, 2); |
542 | 542 |
543 // Ack original transmission, but that wasn't lost via fast retransmit, | 543 // Ack original transmission, but that wasn't lost via fast retransmit, |
544 // so no call on OnSpuriousRetransmission is expected. | 544 // so no call on OnSpuriousRetransmission is expected. |
545 { | 545 { |
546 QuicAckFrame ack_frame = InitAckFrame(1); | 546 QuicAckFrame ack_frame = InitAckFrame(1); |
547 ExpectAck(1); | 547 ExpectAck(1); |
548 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 548 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 for (int i = 0; i < 5; ++i) { | 1339 for (int i = 0; i < 5; ++i) { |
1340 EXPECT_EQ(delay, | 1340 EXPECT_EQ(delay, |
1341 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1341 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
1342 delay = delay + delay; | 1342 delay = delay + delay; |
1343 manager_.OnRetransmissionTimeout(); | 1343 manager_.OnRetransmissionTimeout(); |
1344 RetransmitNextPacket(i + 2); | 1344 RetransmitNextPacket(i + 2); |
1345 } | 1345 } |
1346 } | 1346 } |
1347 | 1347 |
1348 TEST_P(QuicSentPacketManagerTest, GetLossDelay) { | 1348 TEST_P(QuicSentPacketManagerTest, GetLossDelay) { |
1349 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); | 1349 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>(); |
1350 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); | 1350 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); |
1351 | 1351 |
1352 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1352 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1353 .WillRepeatedly(Return(QuicTime::Zero())); | 1353 .WillRepeatedly(Return(QuicTime::Zero())); |
1354 SendDataPacket(1); | 1354 SendDataPacket(1); |
1355 SendDataPacket(2); | 1355 SendDataPacket(2); |
1356 | 1356 |
1357 // Handle an ack which causes the loss algorithm to be evaluated and | 1357 // Handle an ack which causes the loss algorithm to be evaluated and |
1358 // set the loss timeout. | 1358 // set the loss timeout. |
1359 ExpectAck(2); | 1359 ExpectAck(2); |
1360 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 1360 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 // Send 5 packets, mark the first 4 for retransmission, and then cancel | 1563 // Send 5 packets, mark the first 4 for retransmission, and then cancel |
1564 // them when 1 is acked. | 1564 // them when 1 is acked. |
1565 EXPECT_CALL(*send_algorithm_, PacingRate(_)) | 1565 EXPECT_CALL(*send_algorithm_, PacingRate(_)) |
1566 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1566 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
1567 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1567 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
1568 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1568 .WillOnce(Return(10 * kDefaultTCPMSS)); |
1569 const size_t kNumSentPackets = 5; | 1569 const size_t kNumSentPackets = 5; |
1570 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1570 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
1571 SendDataPacket(i); | 1571 SendDataPacket(i); |
1572 } | 1572 } |
1573 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); | 1573 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>(); |
1574 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); | 1574 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); |
1575 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 1575 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
1576 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1576 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
1577 SendAlgorithmInterface::CongestionVector lost_packets; | 1577 SendAlgorithmInterface::CongestionVector lost_packets; |
1578 for (size_t i = 1; i < kNumSentPackets; ++i) { | 1578 for (size_t i = 1; i < kNumSentPackets; ++i) { |
1579 lost_packets.push_back(std::make_pair(i, kMaxPacketSize)); | 1579 lost_packets.push_back(std::make_pair(i, kMaxPacketSize)); |
1580 } | 1580 } |
1581 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)) | 1581 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)) |
1582 .WillOnce(SetArgPointee<4>(lost_packets)); | 1582 .WillOnce(SetArgPointee<4>(lost_packets)); |
1583 QuicAckFrame ack_frame = InitAckFrame(kNumSentPackets); | 1583 QuicAckFrame ack_frame = InitAckFrame(kNumSentPackets); |
1584 NackPackets(1, kNumSentPackets, &ack_frame); | 1584 NackPackets(1, kNumSentPackets, &ack_frame); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1710 ExpectAck(1); | 1710 ExpectAck(1); |
1711 EXPECT_CALL(*network_change_visitor_, | 1711 EXPECT_CALL(*network_change_visitor_, |
1712 OnPathMtuIncreased(kDefaultLength + 100)); | 1712 OnPathMtuIncreased(kDefaultLength + 100)); |
1713 QuicAckFrame ack_frame = InitAckFrame(1); | 1713 QuicAckFrame ack_frame = InitAckFrame(1); |
1714 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1714 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
1715 } | 1715 } |
1716 | 1716 |
1717 } // namespace | 1717 } // namespace |
1718 } // namespace test | 1718 } // namespace test |
1719 } // namespace net | 1719 } // namespace net |
OLD | NEW |