Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: net/quic/quic_sent_packet_manager_test.cc

Issue 559373003: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compiler errors Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 VerifyUnackedPackets(unacked, arraysize(unacked)); 600 VerifyUnackedPackets(unacked, arraysize(unacked));
601 QuicPacketSequenceNumber retransmittable[] = { 5 }; 601 QuicPacketSequenceNumber retransmittable[] = { 5 };
602 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 602 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
603 } 603 }
604 604
605 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { 605 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) {
606 SendDataPacket(1); 606 SendDataPacket(1);
607 RetransmitAndSendPacket(1, 2); 607 RetransmitAndSendPacket(1, 2);
608 RetransmitAndSendPacket(2, 3); 608 RetransmitAndSendPacket(2, 3);
609 RetransmitAndSendPacket(3, 4); 609 RetransmitAndSendPacket(3, 4);
610 manager_.OnSerializedPacket(CreateDataPacket(5)); 610 SendDataPacket(5);
611 manager_.OnSerializedPacket(CreateDataPacket(6)); 611 SendDataPacket(6);
612 manager_.OnSerializedPacket(CreateDataPacket(7)); 612 SendDataPacket(7);
613 manager_.OnSerializedPacket(CreateDataPacket(8)); 613 SendDataPacket(8);
614 manager_.OnSerializedPacket(CreateDataPacket(9)); 614 SendDataPacket(9);
615 615
616 // Ack previous transmission 616 // Ack previous transmission
617 { 617 {
618 QuicAckFrame ack_frame; 618 QuicAckFrame ack_frame;
619 ack_frame.largest_observed = 2; 619 ack_frame.largest_observed = 2;
620 ack_frame.missing_packets.insert(1); 620 ack_frame.missing_packets.insert(1);
621 ExpectAck(2); 621 ExpectAck(2);
622 manager_.OnIncomingAck(ack_frame, clock_.Now()); 622 manager_.OnIncomingAck(ack_frame, clock_.Now());
623 EXPECT_TRUE(manager_.IsUnacked(4)); 623 EXPECT_TRUE(manager_.IsUnacked(4));
624 } 624 }
625 625
626 // Truncated ack with 4 NACKs 626 // Truncated ack with 4 NACKs
627 { 627 {
628 QuicAckFrame ack_frame; 628 QuicAckFrame ack_frame;
629 ack_frame.largest_observed = 6; 629 ack_frame.largest_observed = 6;
630 ack_frame.missing_packets.insert(3); 630 ack_frame.missing_packets.insert(3);
631 ack_frame.missing_packets.insert(4); 631 ack_frame.missing_packets.insert(4);
632 ack_frame.missing_packets.insert(5); 632 ack_frame.missing_packets.insert(5);
633 ack_frame.missing_packets.insert(6); 633 ack_frame.missing_packets.insert(6);
634 ack_frame.is_truncated = true; 634 ack_frame.is_truncated = true;
635 ExpectAckAndLoss(false, 1, 3); 635 ExpectAckAndLoss(true, 1, 3);
636 manager_.OnIncomingAck(ack_frame, clock_.Now()); 636 manager_.OnIncomingAck(ack_frame, clock_.Now());
637 } 637 }
638 638
639 // High water mark will be raised. 639 // High water mark will be raised.
640 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; 640 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 };
641 VerifyUnackedPackets(unacked, arraysize(unacked)); 641 VerifyUnackedPackets(unacked, arraysize(unacked));
642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; 642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 };
643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
644 } 644 }
645 645
(...skipping 11 matching lines...) Expand all
657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { 657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) {
658 SerializedPacket serialized_packet(CreateFecPacket(1)); 658 SerializedPacket serialized_packet(CreateFecPacket(1));
659 659
660 manager_.OnSerializedPacket(serialized_packet); 660 manager_.OnSerializedPacket(serialized_packet);
661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 661 EXPECT_EQ(1u, manager_.GetLeastUnacked());
662 } 662 }
663 663
664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { 664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) {
665 VerifyUnackedPackets(NULL, 0); 665 VerifyUnackedPackets(NULL, 0);
666 666
667 SerializedPacket serialized_packet(CreateFecPacket(1)); 667 SendFecPacket(1);
668 manager_.OnSerializedPacket(serialized_packet);
669 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 668 EXPECT_EQ(1u, manager_.GetLeastUnacked());
670 669
671 SerializedPacket serialized_packet2(CreateFecPacket(2)); 670 SendFecPacket(2);
672 manager_.OnSerializedPacket(serialized_packet2);
673 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 671 EXPECT_EQ(1u, manager_.GetLeastUnacked());
674 672
675 SerializedPacket serialized_packet3(CreateFecPacket(3)); 673 SendFecPacket(3);
676 manager_.OnSerializedPacket(serialized_packet3);
677 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 674 EXPECT_EQ(1u, manager_.GetLeastUnacked());
678 675
679 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; 676 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 };
680 VerifyUnackedPackets(unacked, arraysize(unacked)); 677 VerifyUnackedPackets(unacked, arraysize(unacked));
681 VerifyRetransmittablePackets(NULL, 0); 678 VerifyRetransmittablePackets(NULL, 0);
682 679
683 // Ack 2, which has never been sent, so there's no rtt update. 680 // Ack 2, so there's an rtt update.
681 ExpectAck(2);
684 QuicAckFrame ack_frame; 682 QuicAckFrame ack_frame;
685 ack_frame.largest_observed = 2; 683 ack_frame.largest_observed = 2;
684 ack_frame.missing_packets.insert(1);
686 manager_.OnIncomingAck(ack_frame, clock_.Now()); 685 manager_.OnIncomingAck(ack_frame, clock_.Now());
687 686
688 EXPECT_EQ(3u, manager_.GetLeastUnacked()); 687 EXPECT_EQ(1u, manager_.GetLeastUnacked());
689 } 688 }
690 689
691 TEST_F(QuicSentPacketManagerTest, GetSentTime) { 690 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
692 VerifyUnackedPackets(NULL, 0); 691 VerifyUnackedPackets(NULL, 0);
693 692
694 SerializedPacket serialized_packet(CreateFecPacket(1)); 693 SerializedPacket serialized_packet(CreateFecPacket(1));
695 manager_.OnSerializedPacket(serialized_packet); 694 manager_.OnSerializedPacket(serialized_packet);
696 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) 695 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _))
697 .Times(1).WillOnce(Return(true)); 696 .Times(1).WillOnce(Return(true));
698 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION, 697 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION,
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 967
969 // The first retransmission timeout retransmits 2 crypto packets. 968 // The first retransmission timeout retransmits 2 crypto packets.
970 manager_.OnRetransmissionTimeout(); 969 manager_.OnRetransmissionTimeout();
971 RetransmitNextPacket(6); 970 RetransmitNextPacket(6);
972 RetransmitNextPacket(7); 971 RetransmitNextPacket(7);
973 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 972 EXPECT_FALSE(manager_.HasPendingRetransmissions());
974 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 973 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
975 974
976 // Now act like a version negotiation packet arrived, which would cause all 975 // Now act like a version negotiation packet arrived, which would cause all
977 // unacked packets to be retransmitted. 976 // unacked packets to be retransmitted.
978 manager_.RetransmitUnackedPackets(ALL_PACKETS); 977 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION);
979 978
980 // Ensure the first two pending packets are the crypto retransmits. 979 // Ensure the first two pending packets are the crypto retransmits.
981 ASSERT_TRUE(manager_.HasPendingRetransmissions()); 980 ASSERT_TRUE(manager_.HasPendingRetransmissions());
982 EXPECT_EQ(6u, manager_.NextPendingRetransmission().sequence_number); 981 EXPECT_EQ(6u, manager_.NextPendingRetransmission().sequence_number);
983 RetransmitNextPacket(8); 982 RetransmitNextPacket(8);
984 EXPECT_EQ(7u, manager_.NextPendingRetransmission().sequence_number); 983 EXPECT_EQ(7u, manager_.NextPendingRetransmission().sequence_number);
985 RetransmitNextPacket(9); 984 RetransmitNextPacket(9);
986 985
987 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 986 EXPECT_TRUE(manager_.HasPendingRetransmissions());
987 // Send 3 more data packets and ensure the least unacked is raised.
988 RetransmitNextPacket(10);
989 RetransmitNextPacket(11);
990 RetransmitNextPacket(12);
991 EXPECT_FALSE(manager_.HasPendingRetransmissions());
992
993 EXPECT_EQ(8u, manager_.GetLeastUnacked());
988 } 994 }
989 995
990 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { 996 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) {
991 // Send 1 crypto packet. 997 // Send 1 crypto packet.
992 SendCryptoPacket(1); 998 SendCryptoPacket(1);
993 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 999 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
994 1000
995 // Retransmit the crypto packet as 2. 1001 // Retransmit the crypto packet as 2.
996 manager_.OnRetransmissionTimeout(); 1002 manager_.OnRetransmissionTimeout();
997 RetransmitNextPacket(2); 1003 RetransmitNextPacket(2);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 // Send 1 crypto packet. 1042 // Send 1 crypto packet.
1037 SendCryptoPacket(1); 1043 SendCryptoPacket(1);
1038 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1044 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1039 1045
1040 // Retransmit the crypto packet as 2. 1046 // Retransmit the crypto packet as 2.
1041 manager_.OnRetransmissionTimeout(); 1047 manager_.OnRetransmissionTimeout();
1042 RetransmitNextPacket(2); 1048 RetransmitNextPacket(2);
1043 1049
1044 // Now retransmit all the unacked packets, which occurs when there is a 1050 // Now retransmit all the unacked packets, which occurs when there is a
1045 // version negotiation. 1051 // version negotiation.
1046 manager_.RetransmitUnackedPackets(ALL_PACKETS); 1052 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION);
1047 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 1053 QuicPacketSequenceNumber unacked[] = { 1, 2 };
1048 VerifyUnackedPackets(unacked, arraysize(unacked)); 1054 VerifyUnackedPackets(unacked, arraysize(unacked));
1049 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1055 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1050 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1056 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1051 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1057 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1052 } 1058 }
1053 1059
1054 TEST_F(QuicSentPacketManagerTest, 1060 TEST_F(QuicSentPacketManagerTest,
1055 CryptoHandshakeRetransmissionThenNeuterAndAck) { 1061 CryptoHandshakeRetransmissionThenNeuterAndAck) {
1056 // Send 1 crypto packet. 1062 // Send 1 crypto packet.
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1442 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1437 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); 1443 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_));
1438 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 1444 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1439 .WillOnce(Return(100 * kDefaultTCPMSS)); 1445 .WillOnce(Return(100 * kDefaultTCPMSS));
1440 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1446 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1441 manager_.SetFromConfig(config); 1447 manager_.SetFromConfig(config);
1442 1448
1443 EXPECT_TRUE(manager_.using_pacing()); 1449 EXPECT_TRUE(manager_.using_pacing());
1444 } 1450 }
1445 1451
1452 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) {
1453 uint32 initial_rtt_us = 325000;
1454 EXPECT_NE(initial_rtt_us,
1455 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds());
1456
1457 QuicConfig config;
1458 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us);
1459 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1460 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_));
1461 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1462 .WillOnce(Return(100 * kDefaultTCPMSS));
1463 manager_.SetFromConfig(config);
1464
1465 EXPECT_EQ(initial_rtt_us,
1466 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds());
1467 }
1468
1446 } // namespace 1469 } // namespace
1447 } // namespace test 1470 } // namespace test
1448 } // namespace net 1471 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698