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

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

Issue 188333003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compilation error - added NET_EXPORT_PRIVATE to QuicFixedUint32 Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_data_stream_test.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 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 class TestConnection : public QuicConnection { 400 class TestConnection : public QuicConnection {
401 public: 401 public:
402 TestConnection(QuicConnectionId connection_id, 402 TestConnection(QuicConnectionId connection_id,
403 IPEndPoint address, 403 IPEndPoint address,
404 TestConnectionHelper* helper, 404 TestConnectionHelper* helper,
405 TestPacketWriter* writer, 405 TestPacketWriter* writer,
406 bool is_server, 406 bool is_server,
407 QuicVersion version) 407 QuicVersion version)
408 : QuicConnection(connection_id, address, helper, writer, is_server, 408 : QuicConnection(connection_id, address, helper, writer, is_server,
409 SupportedVersions(version)), 409 SupportedVersions(version)),
410 helper_(helper),
411 writer_(writer) { 410 writer_(writer) {
412 // Disable tail loss probes for most tests. 411 // Disable tail loss probes for most tests.
413 QuicSentPacketManagerPeer::SetMaxTailLossProbes( 412 QuicSentPacketManagerPeer::SetMaxTailLossProbes(
414 QuicConnectionPeer::GetSentPacketManager(this), 0); 413 QuicConnectionPeer::GetSentPacketManager(this), 0);
415 writer_->set_is_server(is_server); 414 writer_->set_is_server(is_server);
416 } 415 }
417 416
418 void SendAck() { 417 void SendAck() {
419 QuicConnectionPeer::SendAck(this); 418 QuicConnectionPeer::SendAck(this);
420 } 419 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 } 524 }
526 525
527 TestConnectionHelper::TestAlarm* GetTimeoutAlarm() { 526 TestConnectionHelper::TestAlarm* GetTimeoutAlarm() {
528 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( 527 return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
529 QuicConnectionPeer::GetTimeoutAlarm(this)); 528 QuicConnectionPeer::GetTimeoutAlarm(this));
530 } 529 }
531 530
532 using QuicConnection::SelectMutualVersion; 531 using QuicConnection::SelectMutualVersion;
533 532
534 private: 533 private:
535 TestConnectionHelper* helper_;
536 TestPacketWriter* writer_; 534 TestPacketWriter* writer_;
537 535
538 DISALLOW_COPY_AND_ASSIGN(TestConnection); 536 DISALLOW_COPY_AND_ASSIGN(TestConnection);
539 }; 537 };
540 538
541 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { 539 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
542 protected: 540 protected:
543 QuicConnectionTest() 541 QuicConnectionTest()
544 : connection_id_(42), 542 : connection_id_(42),
545 framer_(SupportedVersions(version()), QuicTime::Zero(), false), 543 framer_(SupportedVersions(version()), QuicTime::Zero(), false),
(...skipping 17 matching lines...) Expand all
563 *send_algorithm_, TimeUntilSend(_, _, _, _)).WillRepeatedly(Return( 561 *send_algorithm_, TimeUntilSend(_, _, _, _)).WillRepeatedly(Return(
564 QuicTime::Delta::Zero())); 562 QuicTime::Delta::Zero()));
565 EXPECT_CALL(*receive_algorithm_, 563 EXPECT_CALL(*receive_algorithm_,
566 RecordIncomingPacket(_, _, _)).Times(AnyNumber()); 564 RecordIncomingPacket(_, _, _)).Times(AnyNumber());
567 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 565 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
568 .Times(AnyNumber()); 566 .Times(AnyNumber());
569 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( 567 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly(
570 Return(QuicTime::Delta::Zero())); 568 Return(QuicTime::Delta::Zero()));
571 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(Return( 569 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(Return(
572 QuicBandwidth::FromKBitsPerSecond(100))); 570 QuicBandwidth::FromKBitsPerSecond(100)));
573 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly(Return(
574 QuicTime::Delta::FromMilliseconds(100)));
575 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 571 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
576 .WillByDefault(Return(true)); 572 .WillByDefault(Return(true));
577 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); 573 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber());
578 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); 574 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber());
579 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); 575 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
580 576
581 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) 577 EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
582 .WillRepeatedly(Return(QuicTime::Zero())); 578 .WillRepeatedly(Return(QuicTime::Zero()));
583 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 579 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
584 .WillRepeatedly(Return(SequenceNumberSet())); 580 .WillRepeatedly(Return(SequenceNumberSet()));
585 } 581 }
586 582
587 QuicVersion version() { 583 QuicVersion version() {
588 return GetParam(); 584 return GetParam();
589 } 585 }
590 586
591 QuicAckFrame* outgoing_ack() { 587 QuicAckFrame* outgoing_ack() {
592 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_)); 588 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_));
593 return outgoing_ack_.get(); 589 return outgoing_ack_.get();
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 1049
1054 QuicAckFrame frame = InitAckFrame(num_packets, 1); 1050 QuicAckFrame frame = InitAckFrame(num_packets, 1);
1055 SequenceNumberSet lost_packets; 1051 SequenceNumberSet lost_packets;
1056 // Create an ack with 256 nacks, none adjacent to one another. 1052 // Create an ack with 256 nacks, none adjacent to one another.
1057 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) { 1053 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) {
1058 NackPacket(i * 2, &frame); 1054 NackPacket(i * 2, &frame);
1059 if (i < 256) { // Last packet is nacked, but not lost. 1055 if (i < 256) { // Last packet is nacked, but not lost.
1060 lost_packets.insert(i * 2); 1056 lost_packets.insert(i * 2);
1061 } 1057 }
1062 } 1058 }
1063 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1059 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1064 .WillOnce(Return(lost_packets)); 1060 .WillOnce(Return(lost_packets));
1065 EXPECT_CALL(entropy_calculator_, 1061 EXPECT_CALL(entropy_calculator_,
1066 EntropyHash(511)).WillOnce(testing::Return(0)); 1062 EntropyHash(511)).WillOnce(testing::Return(0));
1067 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1063 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1068 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256); 1064 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256);
1069 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255); 1065 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255);
1070 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255); 1066 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255);
1071 ProcessAckPacket(&frame); 1067 ProcessAckPacket(&frame);
1072 1068
1073 QuicReceivedPacketManager* received_packet_manager = 1069 QuicReceivedPacketManager* received_packet_manager =
1074 QuicConnectionPeer::GetReceivedPacketManager(&connection_); 1070 QuicConnectionPeer::GetReceivedPacketManager(&connection_);
1075 // A truncated ack will not have the true largest observed. 1071 // A truncated ack will not have the true largest observed.
1076 EXPECT_GT(num_packets, 1072 EXPECT_GT(num_packets,
1077 received_packet_manager->peer_largest_observed_packet()); 1073 received_packet_manager->peer_largest_observed_packet());
1078 1074
1079 AckPacket(192, &frame); 1075 AckPacket(192, &frame);
1080 1076
1081 // Removing one missing packet allows us to ack 192 and one more range, but 1077 // Removing one missing packet allows us to ack 192 and one more range, but
1082 // 192 has already been declared lost, so it doesn't register as an ack. 1078 // 192 has already been declared lost, so it doesn't register as an ack.
1083 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1079 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1084 .WillOnce(Return(SequenceNumberSet())); 1080 .WillOnce(Return(SequenceNumberSet()));
1085 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1081 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1086 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1); 1082 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1);
1087 ProcessAckPacket(&frame); 1083 ProcessAckPacket(&frame);
1088 EXPECT_EQ(num_packets, 1084 EXPECT_EQ(num_packets,
1089 received_packet_manager->peer_largest_observed_packet()); 1085 received_packet_manager->peer_largest_observed_packet());
1090 } 1086 }
1091 1087
1092 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) { 1088 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
1093 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1089 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 QuicByteCount packet_size; 1133 QuicByteCount packet_size;
1138 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1134 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1139 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size), 1135 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size),
1140 Return(true))); 1136 Return(true)));
1141 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1137 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1142 QuicAckFrame frame = InitAckFrame(original, 1); 1138 QuicAckFrame frame = InitAckFrame(original, 1);
1143 NackPacket(original, &frame); 1139 NackPacket(original, &frame);
1144 // First nack triggers early retransmit. 1140 // First nack triggers early retransmit.
1145 SequenceNumberSet lost_packets; 1141 SequenceNumberSet lost_packets;
1146 lost_packets.insert(1); 1142 lost_packets.insert(1);
1147 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1143 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1148 .WillOnce(Return(lost_packets)); 1144 .WillOnce(Return(lost_packets));
1149 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1145 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1150 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 1146 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1151 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 1147 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1152 QuicPacketSequenceNumber retransmission; 1148 QuicPacketSequenceNumber retransmission;
1153 EXPECT_CALL(*send_algorithm_, 1149 EXPECT_CALL(*send_algorithm_,
1154 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1150 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1155 NACK_RETRANSMISSION, _)) 1151 NACK_RETRANSMISSION, _))
1156 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true))); 1152 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true)));
1157 1153
1158 ProcessAckPacket(&frame); 1154 ProcessAckPacket(&frame);
1159 1155
1160 QuicAckFrame frame2 = InitAckFrame(retransmission, 1); 1156 QuicAckFrame frame2 = InitAckFrame(retransmission, 1);
1161 NackPacket(original, &frame2); 1157 NackPacket(original, &frame2);
1162 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1158 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1163 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)); 1159 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _));
1164 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1160 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1165 .WillOnce(Return(SequenceNumberSet())); 1161 .WillOnce(Return(SequenceNumberSet()));
1166 ProcessAckPacket(&frame2); 1162 ProcessAckPacket(&frame2);
1167 1163
1168 // Now if the peer sends an ack which still reports the retransmitted packet 1164 // Now if the peer sends an ack which still reports the retransmitted packet
1169 // as missing, that will bundle an ack with data after two acks in a row 1165 // as missing, that will bundle an ack with data after two acks in a row
1170 // indicate the high water mark needs to be raised. 1166 // indicate the high water mark needs to be raised.
1171 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1167 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1172 HAS_RETRANSMITTABLE_DATA)); 1168 HAS_RETRANSMITTABLE_DATA));
1173 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1169 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1174 // No ack sent. 1170 // No ack sent.
1175 EXPECT_EQ(1u, writer_->frame_count()); 1171 EXPECT_EQ(1u, writer_->frame_count());
1176 EXPECT_EQ(1u, writer_->stream_frames()->size()); 1172 EXPECT_EQ(1u, writer_->stream_frames()->size());
1177 writer_->Reset(); 1173 writer_->Reset();
1178 1174
1179 // No more packet loss for the rest of the test. 1175 // No more packet loss for the rest of the test.
1180 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1176 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1181 .WillRepeatedly(Return(SequenceNumberSet())); 1177 .WillRepeatedly(Return(SequenceNumberSet()));
1182 ProcessAckPacket(&frame2); 1178 ProcessAckPacket(&frame2);
1183 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1179 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1184 HAS_RETRANSMITTABLE_DATA)); 1180 HAS_RETRANSMITTABLE_DATA));
1185 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1181 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1186 // Ack bundled. 1182 // Ack bundled.
1187 if (version() > QUIC_VERSION_15) { 1183 if (version() > QUIC_VERSION_15) {
1188 EXPECT_EQ(3u, writer_->frame_count()); 1184 EXPECT_EQ(3u, writer_->frame_count());
1189 } else { 1185 } else {
1190 EXPECT_EQ(2u, writer_->frame_count()); 1186 EXPECT_EQ(2u, writer_->frame_count());
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 connection_.SendStreamDataWithString(3, "foo", 6, !kFin, NULL); 1546 connection_.SendStreamDataWithString(3, "foo", 6, !kFin, NULL);
1551 1547
1552 QuicAckFrame ack_fec = InitAckFrame(5, 1); 1548 QuicAckFrame ack_fec = InitAckFrame(5, 1);
1553 // Ack all data packets, but no fec packets. 1549 // Ack all data packets, but no fec packets.
1554 NackPacket(2, &ack_fec); 1550 NackPacket(2, &ack_fec);
1555 NackPacket(4, &ack_fec); 1551 NackPacket(4, &ack_fec);
1556 1552
1557 // Lose the first FEC packet and ack the three data packets. 1553 // Lose the first FEC packet and ack the three data packets.
1558 SequenceNumberSet lost_packets; 1554 SequenceNumberSet lost_packets;
1559 lost_packets.insert(2); 1555 lost_packets.insert(2);
1560 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1556 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1561 .WillOnce(Return(lost_packets)); 1557 .WillOnce(Return(lost_packets));
1562 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1558 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1563 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); 1559 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
1564 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 1560 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1565 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 1561 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1566 ProcessAckPacket(&ack_fec); 1562 ProcessAckPacket(&ack_fec);
1567 1563
1568 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract( 1564 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract(
1569 QuicTime::Delta::FromMilliseconds(1))); 1565 QuicTime::Delta::FromMilliseconds(1)));
1570 1566
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1833 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1838 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); 1834 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
1839 QuicAckFrame ack_one = InitAckFrame(1, 0); 1835 QuicAckFrame ack_one = InitAckFrame(1, 0);
1840 ProcessAckPacket(&ack_one); 1836 ProcessAckPacket(&ack_one);
1841 1837
1842 // Lose a packet and ensure it triggers retransmission. 1838 // Lose a packet and ensure it triggers retransmission.
1843 QuicAckFrame nack_two = InitAckFrame(3, 0); 1839 QuicAckFrame nack_two = InitAckFrame(3, 0);
1844 NackPacket(2, &nack_two); 1840 NackPacket(2, &nack_two);
1845 SequenceNumberSet lost_packets; 1841 SequenceNumberSet lost_packets;
1846 lost_packets.insert(2); 1842 lost_packets.insert(2);
1847 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1843 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1848 .WillOnce(Return(lost_packets)); 1844 .WillOnce(Return(lost_packets));
1849 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1845 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1850 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); 1846 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _));
1851 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)).Times(1); 1847 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)).Times(1);
1852 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1); 1848 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1);
1853 EXPECT_CALL(*send_algorithm_, 1849 EXPECT_CALL(*send_algorithm_,
1854 OnPacketSent(_, _, second_packet_size - kQuicVersionSize, 1850 OnPacketSent(_, _, second_packet_size - kQuicVersionSize,
1855 NACK_RETRANSMISSION, _)).Times(1); 1851 NACK_RETRANSMISSION, _)).Times(1);
1856 ProcessAckPacket(&nack_two); 1852 ProcessAckPacket(&nack_two);
1857 } 1853 }
1858 1854
1859 TEST_P(QuicConnectionTest, DiscardRetransmit) { 1855 TEST_P(QuicConnectionTest, DiscardRetransmit) {
1860 QuicPacketSequenceNumber last_packet; 1856 QuicPacketSequenceNumber last_packet;
1861 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 1857 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
1862 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2 1858 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2
1863 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3 1859 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3
1864 1860
1865 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1861 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1866 1862
1867 // Instigate a loss with an ack. 1863 // Instigate a loss with an ack.
1868 QuicAckFrame nack_two = InitAckFrame(3, 0); 1864 QuicAckFrame nack_two = InitAckFrame(3, 0);
1869 NackPacket(2, &nack_two); 1865 NackPacket(2, &nack_two);
1870 // The first nack should trigger a fast retransmission, but we'll be 1866 // The first nack should trigger a fast retransmission, but we'll be
1871 // write blocked, so the packet will be queued. 1867 // write blocked, so the packet will be queued.
1872 BlockOnNextWrite(); 1868 BlockOnNextWrite();
1873 SequenceNumberSet lost_packets; 1869 SequenceNumberSet lost_packets;
1874 lost_packets.insert(2); 1870 lost_packets.insert(2);
1875 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1871 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1876 .WillOnce(Return(lost_packets)); 1872 .WillOnce(Return(lost_packets));
1877 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1873 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1878 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2); 1874 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
1879 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 1875 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1880 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 1876 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1881 ProcessAckPacket(&nack_two); 1877 ProcessAckPacket(&nack_two);
1882 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 1878 EXPECT_EQ(1u, connection_.NumQueuedPackets());
1883 1879
1884 // Now, ack the previous transmission. 1880 // Now, ack the previous transmission.
1885 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1881 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1886 .WillOnce(Return(SequenceNumberSet())); 1882 .WillOnce(Return(SequenceNumberSet()));
1887 QuicAckFrame ack_all = InitAckFrame(3, 0); 1883 QuicAckFrame ack_all = InitAckFrame(3, 0);
1888 ProcessAckPacket(&ack_all); 1884 ProcessAckPacket(&ack_all);
1889 1885
1890 // Unblock the socket and attempt to send the queued packets. However, 1886 // Unblock the socket and attempt to send the queued packets. However,
1891 // since the previous transmission has been acked, we will not 1887 // since the previous transmission has been acked, we will not
1892 // send the retransmission. 1888 // send the retransmission.
1893 EXPECT_CALL(*send_algorithm_, 1889 EXPECT_CALL(*send_algorithm_,
1894 OnPacketSent(_, _, _, _, _)).Times(0); 1890 OnPacketSent(_, _, _, _, _)).Times(0);
1895 1891
(...skipping 10 matching lines...) Expand all
1906 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1902 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1907 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size), 1903 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size),
1908 Return(true))); 1904 Return(true)));
1909 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1905 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1910 1906
1911 QuicAckFrame frame = InitAckFrame(1, largest_observed); 1907 QuicAckFrame frame = InitAckFrame(1, largest_observed);
1912 NackPacket(largest_observed, &frame); 1908 NackPacket(largest_observed, &frame);
1913 // The first nack should retransmit the largest observed packet. 1909 // The first nack should retransmit the largest observed packet.
1914 SequenceNumberSet lost_packets; 1910 SequenceNumberSet lost_packets;
1915 lost_packets.insert(1); 1911 lost_packets.insert(1);
1916 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 1912 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1917 .WillOnce(Return(lost_packets)); 1913 .WillOnce(Return(lost_packets));
1918 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1914 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1919 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 1915 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1920 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 1916 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1921 EXPECT_CALL(*send_algorithm_, 1917 EXPECT_CALL(*send_algorithm_,
1922 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1918 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1923 NACK_RETRANSMISSION, _)); 1919 NACK_RETRANSMISSION, _));
1924 ProcessAckPacket(&frame); 1920 ProcessAckPacket(&frame);
1925 } 1921 }
1926 1922
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2030 // Ack 15, nack 1-14. 2026 // Ack 15, nack 1-14.
2031 SequenceNumberSet lost_packets; 2027 SequenceNumberSet lost_packets;
2032 QuicAckFrame nack = InitAckFrame(15, 0); 2028 QuicAckFrame nack = InitAckFrame(15, 0);
2033 for (int i = 1; i < 15; ++i) { 2029 for (int i = 1; i < 15; ++i) {
2034 NackPacket(i, &nack); 2030 NackPacket(i, &nack);
2035 lost_packets.insert(i); 2031 lost_packets.insert(i);
2036 } 2032 }
2037 2033
2038 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits 2034 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits
2039 // the retransmission rate in the case of burst losses. 2035 // the retransmission rate in the case of burst losses.
2040 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 2036 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2041 .WillOnce(Return(lost_packets)); 2037 .WillOnce(Return(lost_packets));
2042 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2038 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2043 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1); 2039 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1);
2044 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14); 2040 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14);
2045 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14); 2041 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14);
2046 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14); 2042 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14);
2047 ProcessAckPacket(&nack); 2043 ProcessAckPacket(&nack);
2048 } 2044 }
2049 2045
2050 // Test sending multiple acks from the connection to the session. 2046 // Test sending multiple acks from the connection to the session.
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 connection_.GetRetransmissionAlarm()->Fire(); 2390 connection_.GetRetransmissionAlarm()->Fire();
2395 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission( 2391 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
2396 &connection_, original_sequence_number)); 2392 &connection_, original_sequence_number));
2397 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission( 2393 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
2398 &connection_, rto_sequence_number)); 2394 &connection_, rto_sequence_number));
2399 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission( 2395 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
2400 &connection_, rto_sequence_number)); 2396 &connection_, rto_sequence_number));
2401 // Once by explicit nack. 2397 // Once by explicit nack.
2402 SequenceNumberSet lost_packets; 2398 SequenceNumberSet lost_packets;
2403 lost_packets.insert(rto_sequence_number); 2399 lost_packets.insert(rto_sequence_number);
2404 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 2400 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2405 .WillOnce(Return(lost_packets)); 2401 .WillOnce(Return(lost_packets));
2406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(1); 2402 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(1);
2407 EXPECT_CALL(*send_algorithm_, OnPacketLost(rto_sequence_number, _)).Times(1); 2403 EXPECT_CALL(*send_algorithm_, OnPacketLost(rto_sequence_number, _)).Times(1);
2408 EXPECT_CALL(*send_algorithm_, 2404 EXPECT_CALL(*send_algorithm_,
2409 OnPacketAbandoned(rto_sequence_number, _)).Times(1); 2405 OnPacketAbandoned(rto_sequence_number, _)).Times(1);
2410 QuicPacketSequenceNumber nack_sequence_number = 0; 2406 QuicPacketSequenceNumber nack_sequence_number = 0;
2411 // Ack packets might generate some other packets, which are not 2407 // Ack packets might generate some other packets, which are not
2412 // retransmissions. (More ack packets). 2408 // retransmissions. (More ack packets).
2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 2409 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
2414 .Times(AnyNumber()); 2410 .Times(AnyNumber());
(...skipping 27 matching lines...) Expand all
2442 } 2438 }
2443 2439
2444 TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) { 2440 TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) {
2445 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2441 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2446 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 2442 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
2447 .Times(2); 2443 .Times(2);
2448 connection_.SendStreamDataWithString(2, "foo", 0, !kFin, NULL); 2444 connection_.SendStreamDataWithString(2, "foo", 0, !kFin, NULL);
2449 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, NULL); 2445 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, NULL);
2450 QuicAlarm* retransmission_alarm = connection_.GetRetransmissionAlarm(); 2446 QuicAlarm* retransmission_alarm = connection_.GetRetransmissionAlarm();
2451 EXPECT_TRUE(retransmission_alarm->IsSet()); 2447 EXPECT_TRUE(retransmission_alarm->IsSet());
2448 EXPECT_EQ(clock_.Now().Add(DefaultRetransmissionTime()),
2449 retransmission_alarm->deadline());
2452 2450
2453 // Advance the time right before the RTO, then receive an ack for the first 2451 // Advance the time right before the RTO, then receive an ack for the first
2454 // packet to delay the RTO. 2452 // packet to delay the RTO.
2455 clock_.AdvanceTime(DefaultRetransmissionTime()); 2453 clock_.AdvanceTime(DefaultRetransmissionTime());
2456 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2454 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2457 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1); 2455 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1);
2458 QuicAckFrame ack = InitAckFrame(1, 0); 2456 QuicAckFrame ack = InitAckFrame(1, 0);
2459 ProcessAckPacket(&ack); 2457 ProcessAckPacket(&ack);
2460 EXPECT_TRUE(retransmission_alarm->IsSet()); 2458 EXPECT_TRUE(retransmission_alarm->IsSet());
2459 EXPECT_GT(retransmission_alarm->deadline(), clock_.Now());
2461 2460
2462 // Move forward past the original RTO and ensure the RTO is still pending. 2461 // Move forward past the original RTO and ensure the RTO is still pending.
2463 clock_.AdvanceTime(DefaultRetransmissionTime()); 2462 clock_.AdvanceTime(DefaultRetransmissionTime().Multiply(2));
2464 2463
2465 // Ensure the second packet gets retransmitted when it finally fires. 2464 // Ensure the second packet gets retransmitted when it finally fires.
2466 EXPECT_TRUE(retransmission_alarm->IsSet()); 2465 EXPECT_TRUE(retransmission_alarm->IsSet());
2467 EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow()); 2466 EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow());
2468 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 2467 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
2469 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, RTO_RETRANSMISSION, _)); 2468 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, RTO_RETRANSMISSION, _));
2470 // Manually cancel the alarm to simulate a real test. 2469 // Manually cancel the alarm to simulate a real test.
2471 connection_.GetRetransmissionAlarm()->Fire(); 2470 connection_.GetRetransmissionAlarm()->Fire();
2472 2471
2473 // The new retransmitted sequence number should set the RTO to a larger value 2472 // The new retransmitted sequence number should set the RTO to a larger value
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
2911 2910
2912 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { 2911 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) {
2913 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2912 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2914 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL); 2913 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL);
2915 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL); 2914 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL);
2916 // Ack the second packet, which will retransmit the first packet. 2915 // Ack the second packet, which will retransmit the first packet.
2917 QuicAckFrame ack = InitAckFrame(2, 0); 2916 QuicAckFrame ack = InitAckFrame(2, 0);
2918 NackPacket(1, &ack); 2917 NackPacket(1, &ack);
2919 SequenceNumberSet lost_packets; 2918 SequenceNumberSet lost_packets;
2920 lost_packets.insert(1); 2919 lost_packets.insert(1);
2921 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 2920 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2922 .WillOnce(Return(lost_packets)); 2921 .WillOnce(Return(lost_packets));
2923 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2922 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2924 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); 2923 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1);
2925 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 2924 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
2926 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 2925 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
2927 ProcessAckPacket(&ack); 2926 ProcessAckPacket(&ack);
2928 EXPECT_EQ(1u, writer_->frame_count()); 2927 EXPECT_EQ(1u, writer_->frame_count());
2929 EXPECT_EQ(1u, writer_->stream_frames()->size()); 2928 EXPECT_EQ(1u, writer_->stream_frames()->size());
2930 writer_->Reset(); 2929 writer_->Reset();
2931 2930
2932 // Now ack the retransmission, which will both raise the high water mark 2931 // Now ack the retransmission, which will both raise the high water mark
2933 // and see if there is more data to send. 2932 // and see if there is more data to send.
2934 ack = InitAckFrame(3, 0); 2933 ack = InitAckFrame(3, 0);
2935 NackPacket(1, &ack); 2934 NackPacket(1, &ack);
2936 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 2935 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2937 .WillOnce(Return(SequenceNumberSet())); 2936 .WillOnce(Return(SequenceNumberSet()));
2938 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2937 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2939 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1); 2938 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1);
2940 ProcessAckPacket(&ack); 2939 ProcessAckPacket(&ack);
2941 2940
2942 // Check that no packet is sent and the ack alarm isn't set. 2941 // Check that no packet is sent and the ack alarm isn't set.
2943 EXPECT_EQ(0u, writer_->frame_count()); 2942 EXPECT_EQ(0u, writer_->frame_count());
2944 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 2943 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
2945 writer_->Reset(); 2944 writer_->Reset();
2946 2945
2947 // Send the same ack, but send both data and an ack together. 2946 // Send the same ack, but send both data and an ack together.
2948 ack = InitAckFrame(3, 0); 2947 ack = InitAckFrame(3, 0);
2949 NackPacket(1, &ack); 2948 NackPacket(1, &ack);
2950 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 2949 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2951 .WillOnce(Return(SequenceNumberSet())); 2950 .WillOnce(Return(SequenceNumberSet()));
2952 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce( 2951 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(
2953 IgnoreResult(InvokeWithoutArgs( 2952 IgnoreResult(InvokeWithoutArgs(
2954 &connection_, 2953 &connection_,
2955 &TestConnection::EnsureWritableAndSendStreamData5))); 2954 &TestConnection::EnsureWritableAndSendStreamData5)));
2956 ProcessAckPacket(&ack); 2955 ProcessAckPacket(&ack);
2957 2956
2958 // Check that ack is bundled with outgoing data and the delayed ack 2957 // Check that ack is bundled with outgoing data and the delayed ack
2959 // alarm is reset. 2958 // alarm is reset.
2960 if (version() > QUIC_VERSION_15) { 2959 if (version() > QUIC_VERSION_15) {
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
3399 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10)); 3398 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
3400 connection_.GetRetransmissionAlarm()->Fire(); 3399 connection_.GetRetransmissionAlarm()->Fire();
3401 3400
3402 // Retransmit due to explicit nacks. 3401 // Retransmit due to explicit nacks.
3403 QuicAckFrame nack_three = InitAckFrame(4, 0); 3402 QuicAckFrame nack_three = InitAckFrame(4, 0);
3404 NackPacket(3, &nack_three); 3403 NackPacket(3, &nack_three);
3405 NackPacket(1, &nack_three); 3404 NackPacket(1, &nack_three);
3406 SequenceNumberSet lost_packets; 3405 SequenceNumberSet lost_packets;
3407 lost_packets.insert(1); 3406 lost_packets.insert(1);
3408 lost_packets.insert(3); 3407 lost_packets.insert(3);
3409 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 3408 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
3410 .WillOnce(Return(lost_packets)); 3409 .WillOnce(Return(lost_packets));
3411 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3410 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3412 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1); 3411 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1);
3413 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); 3412 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
3414 EXPECT_CALL(visitor_, OnCanWrite()).Times(2); 3413 EXPECT_CALL(visitor_, OnCanWrite()).Times(2);
3415 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3414 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3416 ProcessAckPacket(&nack_three); 3415 ProcessAckPacket(&nack_three);
3417 3416
3418 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce(
3419 Return(QuicTime::Delta::Zero()));
3420 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce( 3417 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(
3421 Return(QuicBandwidth::Zero())); 3418 Return(QuicBandwidth::Zero()));
3422 3419
3423 const QuicConnectionStats& stats = connection_.GetStats(); 3420 const QuicConnectionStats& stats = connection_.GetStats();
3424 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize, 3421 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize,
3425 stats.bytes_sent); 3422 stats.bytes_sent);
3426 EXPECT_EQ(5u, stats.packets_sent); 3423 EXPECT_EQ(5u, stats.packets_sent);
3427 EXPECT_EQ(2 * first_packet_size + second_packet_size - kQuicVersionSize, 3424 EXPECT_EQ(2 * first_packet_size + second_packet_size - kQuicVersionSize,
3428 stats.bytes_retransmitted); 3425 stats.bytes_retransmitted);
3429 EXPECT_EQ(3u, stats.packets_retransmitted); 3426 EXPECT_EQ(3u, stats.packets_retransmitted);
3430 EXPECT_EQ(1u, stats.rto_count); 3427 EXPECT_EQ(1u, stats.rto_count);
3431 } 3428 }
3432 3429
3433 TEST_P(QuicConnectionTest, CheckReceiveStats) { 3430 TEST_P(QuicConnectionTest, CheckReceiveStats) {
3434 if (version() < QUIC_VERSION_15) { 3431 if (version() < QUIC_VERSION_15) {
3435 return; 3432 return;
3436 } 3433 }
3437 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3434 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3438 3435
3439 size_t received_bytes = 0; 3436 size_t received_bytes = 0;
3440 received_bytes += ProcessFecProtectedPacket(1, false, !kEntropyFlag); 3437 received_bytes += ProcessFecProtectedPacket(1, false, !kEntropyFlag);
3441 received_bytes += ProcessFecProtectedPacket(3, false, !kEntropyFlag); 3438 received_bytes += ProcessFecProtectedPacket(3, false, !kEntropyFlag);
3442 // Should be counted against dropped packets. 3439 // Should be counted against dropped packets.
3443 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag); 3440 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag);
3444 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, NULL); 3441 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, NULL);
3445 3442
3446 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce(
3447 Return(QuicTime::Delta::Zero()));
3448 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce( 3443 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(
3449 Return(QuicBandwidth::Zero())); 3444 Return(QuicBandwidth::Zero()));
3450 3445
3451 const QuicConnectionStats& stats = connection_.GetStats(); 3446 const QuicConnectionStats& stats = connection_.GetStats();
3452 EXPECT_EQ(received_bytes, stats.bytes_received); 3447 EXPECT_EQ(received_bytes, stats.bytes_received);
3453 EXPECT_EQ(4u, stats.packets_received); 3448 EXPECT_EQ(4u, stats.packets_received);
3454 3449
3455 EXPECT_EQ(1u, stats.packets_revived); 3450 EXPECT_EQ(1u, stats.packets_revived);
3456 EXPECT_EQ(1u, stats.packets_dropped); 3451 EXPECT_EQ(1u, stats.packets_dropped);
3457 } 3452 }
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
3633 // Send some other data which we will ACK. 3628 // Send some other data which we will ACK.
3634 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL); 3629 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL);
3635 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL); 3630 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL);
3636 3631
3637 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1 3632 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1
3638 // which we registered to be notified about. 3633 // which we registered to be notified about.
3639 QuicAckFrame frame = InitAckFrame(3, 0); 3634 QuicAckFrame frame = InitAckFrame(3, 0);
3640 NackPacket(1, &frame); 3635 NackPacket(1, &frame);
3641 SequenceNumberSet lost_packets; 3636 SequenceNumberSet lost_packets;
3642 lost_packets.insert(1); 3637 lost_packets.insert(1);
3643 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 3638 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
3644 .WillOnce(Return(lost_packets)); 3639 .WillOnce(Return(lost_packets));
3645 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); 3640 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
3646 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); 3641 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
3647 ProcessAckPacket(&frame); 3642 ProcessAckPacket(&frame);
3648 } 3643 }
3649 3644
3650 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) { 3645 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) {
3651 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3646 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3652 3647
3653 // Create a delegate which we expect to be called. 3648 // Create a delegate which we expect to be called.
3654 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); 3649 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
3655 EXPECT_CALL(*delegate, OnAckNotification()).Times(1); 3650 EXPECT_CALL(*delegate, OnAckNotification()).Times(1);
3656 3651
3657 // Send four packets, and register to be notified on ACK of packet 2. 3652 // Send four packets, and register to be notified on ACK of packet 2.
3658 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 3653 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
3659 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get()); 3654 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get());
3660 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL); 3655 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL);
3661 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL); 3656 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL);
3662 3657
3663 // Now we receive ACK for packets 1, 3, and 4 and lose 2. 3658 // Now we receive ACK for packets 1, 3, and 4 and lose 2.
3664 QuicAckFrame frame = InitAckFrame(4, 0); 3659 QuicAckFrame frame = InitAckFrame(4, 0);
3665 NackPacket(2, &frame); 3660 NackPacket(2, &frame);
3666 SequenceNumberSet lost_packets; 3661 SequenceNumberSet lost_packets;
3667 lost_packets.insert(2); 3662 lost_packets.insert(2);
3668 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 3663 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
3669 .WillOnce(Return(lost_packets)); 3664 .WillOnce(Return(lost_packets));
3670 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3665 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3671 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); 3666 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
3672 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 3667 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
3673 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 3668 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
3674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3669 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3675 ProcessAckPacket(&frame); 3670 ProcessAckPacket(&frame);
3676 3671
3677 // Now we get an ACK for packet 5 (retransmitted packet 2), which should 3672 // Now we get an ACK for packet 5 (retransmitted packet 2), which should
3678 // trigger the callback. 3673 // trigger the callback.
3679 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _)) 3674 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
3680 .WillRepeatedly(Return(SequenceNumberSet())); 3675 .WillRepeatedly(Return(SequenceNumberSet()));
3681 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3676 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3682 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); 3677 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _));
3683 QuicAckFrame second_ack_frame = InitAckFrame(5, 0); 3678 QuicAckFrame second_ack_frame = InitAckFrame(5, 0);
3684 ProcessAckPacket(&second_ack_frame); 3679 ProcessAckPacket(&second_ack_frame);
3685 } 3680 }
3686 3681
3687 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting 3682 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting
3688 // ACK) triggers notification on our end. 3683 // ACK) triggers notification on our end.
3689 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) { 3684 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
3830 QuicBlockedFrame blocked; 3825 QuicBlockedFrame blocked;
3831 blocked.stream_id = 3; 3826 blocked.stream_id = 3;
3832 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 3827 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3833 ProcessFramePacket(QuicFrame(&blocked)); 3828 ProcessFramePacket(QuicFrame(&blocked));
3834 EXPECT_TRUE(ack_alarm->IsSet()); 3829 EXPECT_TRUE(ack_alarm->IsSet());
3835 } 3830 }
3836 3831
3837 } // namespace 3832 } // namespace
3838 } // namespace test 3833 } // namespace test
3839 } // namespace net 3834 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_data_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698