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

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

Issue 109993008: Fix QUIC's TCP style retransmission logic to only send a maximum of 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | net/quic/quic_sent_packet_manager.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 911
912 QuicAckFrame frame(num_packets, QuicTime::Zero(), 1); 912 QuicAckFrame frame(num_packets, QuicTime::Zero(), 1);
913 // Create an ack with 256 nacks, none adjacent to one another. 913 // Create an ack with 256 nacks, none adjacent to one another.
914 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) { 914 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) {
915 frame.received_info.missing_packets.insert(i * 2); 915 frame.received_info.missing_packets.insert(i * 2);
916 } 916 }
917 frame.received_info.entropy_hash = 0; 917 frame.received_info.entropy_hash = 0;
918 EXPECT_CALL(entropy_calculator_, 918 EXPECT_CALL(entropy_calculator_,
919 EntropyHash(511)).WillOnce(testing::Return(0)); 919 EntropyHash(511)).WillOnce(testing::Return(0));
920 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(256); 920 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(256);
921 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(10); 921 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
922 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(10); 922 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2);
923 ProcessAckPacket(&frame); 923 ProcessAckPacket(&frame);
924 924
925 QuicReceivedPacketManager* received_packet_manager = 925 QuicReceivedPacketManager* received_packet_manager =
926 QuicConnectionPeer::GetReceivedPacketManager(&connection_); 926 QuicConnectionPeer::GetReceivedPacketManager(&connection_);
927 // A truncated ack will not have the true largest observed. 927 // A truncated ack will not have the true largest observed.
928 EXPECT_GT(num_packets, 928 EXPECT_GT(num_packets,
929 received_packet_manager->peer_largest_observed_packet()); 929 received_packet_manager->peer_largest_observed_packet());
930 930
931 frame.received_info.missing_packets.erase(192); 931 frame.received_info.missing_packets.erase(192);
932 frame.received_info.entropy_hash = 2; 932 frame.received_info.entropy_hash = 2;
933 933
934 // Removing one missing packet allows us to ack 192 and one more range. 934 // Removing one missing packet allows us to ack 192 and one more range.
935 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(2); 935 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(2);
936 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(10); 936 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
937 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(10); 937 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2);
938 ProcessAckPacket(&frame); 938 ProcessAckPacket(&frame);
939 EXPECT_EQ(num_packets, 939 EXPECT_EQ(num_packets,
940 received_packet_manager->peer_largest_observed_packet()); 940 received_packet_manager->peer_largest_observed_packet());
941 } 941 }
942 942
943 TEST_F(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) { 943 TEST_F(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
944 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 944 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
945 945
946 ProcessPacket(1); 946 ProcessPacket(1);
947 // Delay sending, then queue up an ack. 947 // Delay sending, then queue up an ack.
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
1781 1781
1782 // Fire the alarms and ensure the connection is still write blocked. 1782 // Fire the alarms and ensure the connection is still write blocked.
1783 connection_.GetResumeWritesAlarm()->Fire(); 1783 connection_.GetResumeWritesAlarm()->Fire();
1784 connection_.GetSendAlarm()->Fire(); 1784 connection_.GetSendAlarm()->Fire();
1785 EXPECT_TRUE(QuicConnectionPeer::IsWriteBlocked(&connection_)); 1785 EXPECT_TRUE(QuicConnectionPeer::IsWriteBlocked(&connection_));
1786 } 1786 }
1787 1787
1788 TEST_F(QuicConnectionTest, LimitPacketsPerNack) { 1788 TEST_F(QuicConnectionTest, LimitPacketsPerNack) {
1789 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1789 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1790 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _, _)).Times(1); 1790 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _, _)).Times(1);
1791 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(13); 1791 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(4);
1792 int offset = 0; 1792 int offset = 0;
1793 // Send packets 1 to 15. 1793 // Send packets 1 to 15.
1794 for (int i = 0; i < 15; ++i) { 1794 for (int i = 0; i < 15; ++i) {
1795 SendStreamDataToPeer(1, "foo", offset, !kFin, NULL); 1795 SendStreamDataToPeer(1, "foo", offset, !kFin, NULL);
1796 offset += 3; 1796 offset += 3;
1797 } 1797 }
1798 1798
1799 // Ack 15, nack 1-14. 1799 // Ack 15, nack 1-14.
1800 QuicAckFrame nack(15, QuicTime::Zero(), 0); 1800 QuicAckFrame nack(15, QuicTime::Zero(), 0);
1801 for (int i = 1; i < 15; ++i) { 1801 for (int i = 1; i < 15; ++i) {
1802 nack.received_info.missing_packets.insert(i); 1802 nack.received_info.missing_packets.insert(i);
1803 } 1803 }
1804 1804
1805 nack.received_info.entropy_hash = 1805 nack.received_info.entropy_hash =
1806 QuicConnectionPeer::GetSentEntropyHash(&connection_, 15) ^ 1806 QuicConnectionPeer::GetSentEntropyHash(&connection_, 15) ^
1807 QuicConnectionPeer::GetSentEntropyHash(&connection_, 14); 1807 QuicConnectionPeer::GetSentEntropyHash(&connection_, 14);
1808 1808
1809 // 13 packets have been NACK'd 3 times, but we limit retransmissions to 10. 1809 // 13 packets have been NACK'd 3 times, but we limit retransmissions to 2.
1810 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(10); 1810 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
1811 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(10); 1811 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
1812 ProcessAckPacket(&nack); 1812 ProcessAckPacket(&nack);
1813 1813
1814 // The next call should trigger retransmitting 3 more packets, because 14 1814 // The next call should trigger retransmitting 2 more packets.
1815 // only has 2 nacks so far. 1815 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
1816 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(3); 1816 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
1817 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(3);
1818 ProcessAckPacket(&nack); 1817 ProcessAckPacket(&nack);
1819 } 1818 }
1820 1819
1821 // Test sending multiple acks from the connection to the session. 1820 // Test sending multiple acks from the connection to the session.
1822 TEST_F(QuicConnectionTest, MultipleAcks) { 1821 TEST_F(QuicConnectionTest, MultipleAcks) {
1823 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(6); 1822 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(6);
1824 QuicPacketSequenceNumber last_packet; 1823 QuicPacketSequenceNumber last_packet;
1825 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 1824 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
1826 EXPECT_EQ(1u, last_packet); 1825 EXPECT_EQ(1u, last_packet);
1827 SendStreamDataToPeer(3, "foo", 0, !kFin, &last_packet); // Packet 2 1826 SendStreamDataToPeer(3, "foo", 0, !kFin, &last_packet); // Packet 2
(...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after
3379 true); 3378 true);
3380 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(), 3379 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(),
3381 false); 3380 false);
3382 EXPECT_TRUE(client.sent_packet_manager().using_pacing()); 3381 EXPECT_TRUE(client.sent_packet_manager().using_pacing());
3383 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); 3382 EXPECT_FALSE(server.sent_packet_manager().using_pacing());
3384 } 3383 }
3385 3384
3386 } // namespace 3385 } // namespace
3387 } // namespace test 3386 } // namespace test
3388 } // namespace net 3387 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_sent_packet_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698