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 #include "base/memory/ptr_util.h" | 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" |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 // Ack 3, which causes SpuriousRetransmitDetected to be called. | 563 // Ack 3, which causes SpuriousRetransmitDetected to be called. |
564 { | 564 { |
565 QuicAckFrame ack_frame = InitAckFrame(4); | 565 QuicAckFrame ack_frame = InitAckFrame(4); |
566 NackPackets(2, 3, &ack_frame); | 566 NackPackets(2, 3, &ack_frame); |
567 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 567 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
568 EXPECT_CALL(*loss_algorithm, SpuriousRetransmitDetected(_, _, _, 5)); | 568 EXPECT_CALL(*loss_algorithm, SpuriousRetransmitDetected(_, _, _, 5)); |
569 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 569 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
570 } | 570 } |
571 } | 571 } |
572 | 572 |
573 TEST_P(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | |
574 FLAGS_quic_loss_recovery_use_largest_acked = false; | |
575 if (!GetParam().missing) { | |
576 return; | |
577 } | |
578 SendDataPacket(1); | |
579 RetransmitAndSendPacket(1, 2); | |
580 RetransmitAndSendPacket(2, 3); | |
581 RetransmitAndSendPacket(3, 4); | |
582 SendDataPacket(5); | |
583 SendDataPacket(6); | |
584 SendDataPacket(7); | |
585 SendDataPacket(8); | |
586 SendDataPacket(9); | |
587 | |
588 // Ack previous transmission | |
589 { | |
590 QuicAckFrame ack_frame = InitAckFrame(2); | |
591 NackPackets(1, 2, &ack_frame); | |
592 ExpectAck(2); | |
593 manager_.OnIncomingAck(ack_frame, clock_.Now()); | |
594 EXPECT_TRUE(QuicSentPacketManagerPeer::IsUnacked(&manager_, 4)); | |
595 } | |
596 | |
597 // Truncated ack with 4 NACKs | |
598 { | |
599 QuicAckFrame ack_frame = InitAckFrame(6); | |
600 NackPackets(3, 7, &ack_frame); | |
601 ack_frame.is_truncated = true; | |
602 ExpectAckAndLoss(true, 1, 3); | |
603 manager_.OnIncomingAck(ack_frame, clock_.Now()); | |
604 } | |
605 | |
606 // High water mark will be raised. | |
607 QuicPacketNumber unacked[] = {4, 5, 6, 7, 8, 9}; | |
608 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
609 QuicPacketNumber retransmittable[] = {5, 6, 7, 8, 9}; | |
610 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
611 } | |
612 | |
613 TEST_P(QuicSentPacketManagerTest, GetLeastUnacked) { | 573 TEST_P(QuicSentPacketManagerTest, GetLeastUnacked) { |
614 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); | 574 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); |
615 } | 575 } |
616 | 576 |
617 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { | 577 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { |
618 SendDataPacket(1); | 578 SendDataPacket(1); |
619 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); | 579 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); |
620 } | 580 } |
621 | 581 |
622 TEST_P(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 582 TEST_P(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1539 options.push_back(kNRTO); | 1499 options.push_back(kNRTO); |
1540 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1500 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
1541 client_config.SetConnectionOptionsToSend(options); | 1501 client_config.SetConnectionOptionsToSend(options); |
1542 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1502 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
1543 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1503 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
1544 manager_.SetFromConfig(client_config); | 1504 manager_.SetFromConfig(client_config); |
1545 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1505 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
1546 } | 1506 } |
1547 | 1507 |
1548 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) { | 1508 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) { |
1549 FLAGS_quic_loss_recovery_use_largest_acked = true; | |
1550 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); | 1509 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
1551 QuicConfig config; | 1510 QuicConfig config; |
1552 QuicTagVector options; | 1511 QuicTagVector options; |
1553 | 1512 |
1554 options.push_back(kUNDO); | 1513 options.push_back(kUNDO); |
1555 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1514 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
1556 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1515 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
1557 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1516 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
1558 manager_.SetFromConfig(config); | 1517 manager_.SetFromConfig(config); |
1559 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); | 1518 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1591 // Ack 1 and ensure the retransmissions are cancelled and put back in flight. | 1550 // Ack 1 and ensure the retransmissions are cancelled and put back in flight. |
1592 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 1551 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
1593 ack_frame = InitAckFrame(5); | 1552 ack_frame = InitAckFrame(5); |
1594 NackPackets(2, kNumSentPackets, &ack_frame); | 1553 NackPackets(2, kNumSentPackets, &ack_frame); |
1595 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1554 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
1596 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1555 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1597 EXPECT_EQ(3u * kDefaultLength, BytesInFlight()); | 1556 EXPECT_EQ(3u * kDefaultLength, BytesInFlight()); |
1598 } | 1557 } |
1599 | 1558 |
1600 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) { | 1559 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) { |
1601 FLAGS_quic_loss_recovery_use_largest_acked = true; | |
1602 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); | 1560 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
1603 QuicConfig client_config; | 1561 QuicConfig client_config; |
1604 QuicTagVector options; | 1562 QuicTagVector options; |
1605 | 1563 |
1606 options.push_back(kUNDO); | 1564 options.push_back(kUNDO); |
1607 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1565 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
1608 client_config.SetConnectionOptionsToSend(options); | 1566 client_config.SetConnectionOptionsToSend(options); |
1609 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1567 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
1610 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1568 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
1611 manager_.SetFromConfig(client_config); | 1569 manager_.SetFromConfig(client_config); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1708 ExpectAck(1); | 1666 ExpectAck(1); |
1709 EXPECT_CALL(*network_change_visitor_, | 1667 EXPECT_CALL(*network_change_visitor_, |
1710 OnPathMtuIncreased(kDefaultLength + 100)); | 1668 OnPathMtuIncreased(kDefaultLength + 100)); |
1711 QuicAckFrame ack_frame = InitAckFrame(1); | 1669 QuicAckFrame ack_frame = InitAckFrame(1); |
1712 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1670 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
1713 } | 1671 } |
1714 | 1672 |
1715 } // namespace | 1673 } // namespace |
1716 } // namespace test | 1674 } // namespace test |
1717 } // namespace net | 1675 } // namespace net |
OLD | NEW |