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

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

Issue 182063002: Add a time based loss detection algorithm to QUIC that loses packets (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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_stats.cc ('k') | 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 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly(Return( 573 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly(Return(
574 QuicTime::Delta::FromMilliseconds(100))); 574 QuicTime::Delta::FromMilliseconds(100)));
575 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 575 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
576 .WillByDefault(Return(true)); 576 .WillByDefault(Return(true));
577 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); 577 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber());
578 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); 578 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber());
579 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); 579 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
580 580
581 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) 581 EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
582 .WillRepeatedly(Return(QuicTime::Zero())); 582 .WillRepeatedly(Return(QuicTime::Zero()));
583 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 583 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
584 .WillRepeatedly(Return(SequenceNumberSet())); 584 .WillRepeatedly(Return(SequenceNumberSet()));
585 } 585 }
586 586
587 QuicVersion version() { 587 QuicVersion version() {
588 return GetParam(); 588 return GetParam();
589 } 589 }
590 590
591 QuicAckFrame* outgoing_ack() { 591 QuicAckFrame* outgoing_ack() {
592 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_)); 592 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_));
593 return outgoing_ack_.get(); 593 return outgoing_ack_.get();
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 1053
1054 QuicAckFrame frame = InitAckFrame(num_packets, 1); 1054 QuicAckFrame frame = InitAckFrame(num_packets, 1);
1055 SequenceNumberSet lost_packets; 1055 SequenceNumberSet lost_packets;
1056 // Create an ack with 256 nacks, none adjacent to one another. 1056 // Create an ack with 256 nacks, none adjacent to one another.
1057 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) { 1057 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) {
1058 NackPacket(i * 2, &frame); 1058 NackPacket(i * 2, &frame);
1059 if (i < 256) { // Last packet is nacked, but not lost. 1059 if (i < 256) { // Last packet is nacked, but not lost.
1060 lost_packets.insert(i * 2); 1060 lost_packets.insert(i * 2);
1061 } 1061 }
1062 } 1062 }
1063 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1063 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1064 .WillOnce(Return(lost_packets)); 1064 .WillOnce(Return(lost_packets));
1065 EXPECT_CALL(entropy_calculator_, 1065 EXPECT_CALL(entropy_calculator_,
1066 EntropyHash(511)).WillOnce(testing::Return(0)); 1066 EntropyHash(511)).WillOnce(testing::Return(0));
1067 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1067 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1068 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256); 1068 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256);
1069 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255); 1069 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255);
1070 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255); 1070 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255);
1071 ProcessAckPacket(&frame); 1071 ProcessAckPacket(&frame);
1072 1072
1073 QuicReceivedPacketManager* received_packet_manager = 1073 QuicReceivedPacketManager* received_packet_manager =
1074 QuicConnectionPeer::GetReceivedPacketManager(&connection_); 1074 QuicConnectionPeer::GetReceivedPacketManager(&connection_);
1075 // A truncated ack will not have the true largest observed. 1075 // A truncated ack will not have the true largest observed.
1076 EXPECT_GT(num_packets, 1076 EXPECT_GT(num_packets,
1077 received_packet_manager->peer_largest_observed_packet()); 1077 received_packet_manager->peer_largest_observed_packet());
1078 1078
1079 AckPacket(192, &frame); 1079 AckPacket(192, &frame);
1080 1080
1081 // Removing one missing packet allows us to ack 192 and one more range, but 1081 // 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. 1082 // 192 has already been declared lost, so it doesn't register as an ack.
1083 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1083 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1084 .WillOnce(Return(SequenceNumberSet())); 1084 .WillOnce(Return(SequenceNumberSet()));
1085 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1085 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1086 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1); 1086 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1);
1087 ProcessAckPacket(&frame); 1087 ProcessAckPacket(&frame);
1088 EXPECT_EQ(num_packets, 1088 EXPECT_EQ(num_packets,
1089 received_packet_manager->peer_largest_observed_packet()); 1089 received_packet_manager->peer_largest_observed_packet());
1090 } 1090 }
1091 1091
1092 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) { 1092 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
1093 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1093 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 QuicByteCount packet_size; 1137 QuicByteCount packet_size;
1138 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1138 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1139 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size), 1139 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size),
1140 Return(true))); 1140 Return(true)));
1141 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1141 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1142 QuicAckFrame frame = InitAckFrame(original, 1); 1142 QuicAckFrame frame = InitAckFrame(original, 1);
1143 NackPacket(original, &frame); 1143 NackPacket(original, &frame);
1144 // First nack triggers early retransmit. 1144 // First nack triggers early retransmit.
1145 SequenceNumberSet lost_packets; 1145 SequenceNumberSet lost_packets;
1146 lost_packets.insert(1); 1146 lost_packets.insert(1);
1147 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1147 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1148 .WillOnce(Return(lost_packets)); 1148 .WillOnce(Return(lost_packets));
1149 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1149 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1150 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 1150 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1151 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 1151 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1152 QuicPacketSequenceNumber retransmission; 1152 QuicPacketSequenceNumber retransmission;
1153 EXPECT_CALL(*send_algorithm_, 1153 EXPECT_CALL(*send_algorithm_,
1154 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1154 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1155 NACK_RETRANSMISSION, _)) 1155 NACK_RETRANSMISSION, _))
1156 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true))); 1156 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true)));
1157 1157
1158 ProcessAckPacket(&frame); 1158 ProcessAckPacket(&frame);
1159 1159
1160 QuicAckFrame frame2 = InitAckFrame(retransmission, 1); 1160 QuicAckFrame frame2 = InitAckFrame(retransmission, 1);
1161 NackPacket(original, &frame2); 1161 NackPacket(original, &frame2);
1162 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1162 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1163 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)); 1163 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _));
1164 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1164 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1165 .WillOnce(Return(SequenceNumberSet())); 1165 .WillOnce(Return(SequenceNumberSet()));
1166 ProcessAckPacket(&frame2); 1166 ProcessAckPacket(&frame2);
1167 1167
1168 // Now if the peer sends an ack which still reports the retransmitted packet 1168 // 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 1169 // 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. 1170 // indicate the high water mark needs to be raised.
1171 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1171 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1172 HAS_RETRANSMITTABLE_DATA)); 1172 HAS_RETRANSMITTABLE_DATA));
1173 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1173 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1174 // No ack sent. 1174 // No ack sent.
1175 EXPECT_EQ(1u, writer_->frame_count()); 1175 EXPECT_EQ(1u, writer_->frame_count());
1176 EXPECT_EQ(1u, writer_->stream_frames()->size()); 1176 EXPECT_EQ(1u, writer_->stream_frames()->size());
1177 writer_->Reset(); 1177 writer_->Reset();
1178 1178
1179 // No more packet loss for the rest of the test. 1179 // No more packet loss for the rest of the test.
1180 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1180 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1181 .WillRepeatedly(Return(SequenceNumberSet())); 1181 .WillRepeatedly(Return(SequenceNumberSet()));
1182 ProcessAckPacket(&frame2); 1182 ProcessAckPacket(&frame2);
1183 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1183 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1184 HAS_RETRANSMITTABLE_DATA)); 1184 HAS_RETRANSMITTABLE_DATA));
1185 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1185 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1186 // Ack bundled. 1186 // Ack bundled.
1187 if (version() > QUIC_VERSION_15) { 1187 if (version() > QUIC_VERSION_15) {
1188 EXPECT_EQ(3u, writer_->frame_count()); 1188 EXPECT_EQ(3u, writer_->frame_count());
1189 } else { 1189 } else {
1190 EXPECT_EQ(2u, writer_->frame_count()); 1190 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); 1550 connection_.SendStreamDataWithString(3, "foo", 6, !kFin, NULL);
1551 1551
1552 QuicAckFrame ack_fec = InitAckFrame(5, 1); 1552 QuicAckFrame ack_fec = InitAckFrame(5, 1);
1553 // Ack all data packets, but no fec packets. 1553 // Ack all data packets, but no fec packets.
1554 NackPacket(2, &ack_fec); 1554 NackPacket(2, &ack_fec);
1555 NackPacket(4, &ack_fec); 1555 NackPacket(4, &ack_fec);
1556 1556
1557 // Lose the first FEC packet and ack the three data packets. 1557 // Lose the first FEC packet and ack the three data packets.
1558 SequenceNumberSet lost_packets; 1558 SequenceNumberSet lost_packets;
1559 lost_packets.insert(2); 1559 lost_packets.insert(2);
1560 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1560 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1561 .WillOnce(Return(lost_packets)); 1561 .WillOnce(Return(lost_packets));
1562 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1562 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1563 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); 1563 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
1564 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 1564 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1565 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 1565 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1566 ProcessAckPacket(&ack_fec); 1566 ProcessAckPacket(&ack_fec);
1567 1567
1568 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract( 1568 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract(
1569 QuicTime::Delta::FromMilliseconds(1))); 1569 QuicTime::Delta::FromMilliseconds(1)));
1570 1570
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1837 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1838 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); 1838 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
1839 QuicAckFrame ack_one = InitAckFrame(1, 0); 1839 QuicAckFrame ack_one = InitAckFrame(1, 0);
1840 ProcessAckPacket(&ack_one); 1840 ProcessAckPacket(&ack_one);
1841 1841
1842 // Lose a packet and ensure it triggers retransmission. 1842 // Lose a packet and ensure it triggers retransmission.
1843 QuicAckFrame nack_two = InitAckFrame(3, 0); 1843 QuicAckFrame nack_two = InitAckFrame(3, 0);
1844 NackPacket(2, &nack_two); 1844 NackPacket(2, &nack_two);
1845 SequenceNumberSet lost_packets; 1845 SequenceNumberSet lost_packets;
1846 lost_packets.insert(2); 1846 lost_packets.insert(2);
1847 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1847 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1848 .WillOnce(Return(lost_packets)); 1848 .WillOnce(Return(lost_packets));
1849 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1849 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1850 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); 1850 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _));
1851 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)).Times(1); 1851 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)).Times(1);
1852 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1); 1852 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1);
1853 EXPECT_CALL(*send_algorithm_, 1853 EXPECT_CALL(*send_algorithm_,
1854 OnPacketSent(_, _, second_packet_size - kQuicVersionSize, 1854 OnPacketSent(_, _, second_packet_size - kQuicVersionSize,
1855 NACK_RETRANSMISSION, _)).Times(1); 1855 NACK_RETRANSMISSION, _)).Times(1);
1856 ProcessAckPacket(&nack_two); 1856 ProcessAckPacket(&nack_two);
1857 } 1857 }
1858 1858
1859 TEST_P(QuicConnectionTest, DiscardRetransmit) { 1859 TEST_P(QuicConnectionTest, DiscardRetransmit) {
1860 QuicPacketSequenceNumber last_packet; 1860 QuicPacketSequenceNumber last_packet;
1861 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 1861 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
1862 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2 1862 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2
1863 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3 1863 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3
1864 1864
1865 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1865 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1866 1866
1867 // Instigate a loss with an ack. 1867 // Instigate a loss with an ack.
1868 QuicAckFrame nack_two = InitAckFrame(3, 0); 1868 QuicAckFrame nack_two = InitAckFrame(3, 0);
1869 NackPacket(2, &nack_two); 1869 NackPacket(2, &nack_two);
1870 // The first nack should trigger a fast retransmission, but we'll be 1870 // The first nack should trigger a fast retransmission, but we'll be
1871 // write blocked, so the packet will be queued. 1871 // write blocked, so the packet will be queued.
1872 BlockOnNextWrite(); 1872 BlockOnNextWrite();
1873 SequenceNumberSet lost_packets; 1873 SequenceNumberSet lost_packets;
1874 lost_packets.insert(2); 1874 lost_packets.insert(2);
1875 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1875 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1876 .WillOnce(Return(lost_packets)); 1876 .WillOnce(Return(lost_packets));
1877 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1877 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1878 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2); 1878 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
1879 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 1879 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1880 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 1880 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1881 ProcessAckPacket(&nack_two); 1881 ProcessAckPacket(&nack_two);
1882 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 1882 EXPECT_EQ(1u, connection_.NumQueuedPackets());
1883 1883
1884 // Now, ack the previous transmission. 1884 // Now, ack the previous transmission.
1885 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1885 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1886 .WillOnce(Return(SequenceNumberSet())); 1886 .WillOnce(Return(SequenceNumberSet()));
1887 QuicAckFrame ack_all = InitAckFrame(3, 0); 1887 QuicAckFrame ack_all = InitAckFrame(3, 0);
1888 ProcessAckPacket(&ack_all); 1888 ProcessAckPacket(&ack_all);
1889 1889
1890 // Unblock the socket and attempt to send the queued packets. However, 1890 // Unblock the socket and attempt to send the queued packets. However,
1891 // since the previous transmission has been acked, we will not 1891 // since the previous transmission has been acked, we will not
1892 // send the retransmission. 1892 // send the retransmission.
1893 EXPECT_CALL(*send_algorithm_, 1893 EXPECT_CALL(*send_algorithm_,
1894 OnPacketSent(_, _, _, _, _)).Times(0); 1894 OnPacketSent(_, _, _, _, _)).Times(0);
1895 1895
(...skipping 10 matching lines...) Expand all
1906 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1906 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1907 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size), 1907 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size),
1908 Return(true))); 1908 Return(true)));
1909 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1909 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1910 1910
1911 QuicAckFrame frame = InitAckFrame(1, largest_observed); 1911 QuicAckFrame frame = InitAckFrame(1, largest_observed);
1912 NackPacket(largest_observed, &frame); 1912 NackPacket(largest_observed, &frame);
1913 // The first nack should retransmit the largest observed packet. 1913 // The first nack should retransmit the largest observed packet.
1914 SequenceNumberSet lost_packets; 1914 SequenceNumberSet lost_packets;
1915 lost_packets.insert(1); 1915 lost_packets.insert(1);
1916 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 1916 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1917 .WillOnce(Return(lost_packets)); 1917 .WillOnce(Return(lost_packets));
1918 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1918 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1919 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 1919 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1920 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 1920 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1921 EXPECT_CALL(*send_algorithm_, 1921 EXPECT_CALL(*send_algorithm_,
1922 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1922 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1923 NACK_RETRANSMISSION, _)); 1923 NACK_RETRANSMISSION, _));
1924 ProcessAckPacket(&frame); 1924 ProcessAckPacket(&frame);
1925 } 1925 }
1926 1926
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2030 // Ack 15, nack 1-14. 2030 // Ack 15, nack 1-14.
2031 SequenceNumberSet lost_packets; 2031 SequenceNumberSet lost_packets;
2032 QuicAckFrame nack = InitAckFrame(15, 0); 2032 QuicAckFrame nack = InitAckFrame(15, 0);
2033 for (int i = 1; i < 15; ++i) { 2033 for (int i = 1; i < 15; ++i) {
2034 NackPacket(i, &nack); 2034 NackPacket(i, &nack);
2035 lost_packets.insert(i); 2035 lost_packets.insert(i);
2036 } 2036 }
2037 2037
2038 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits 2038 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits
2039 // the retransmission rate in the case of burst losses. 2039 // the retransmission rate in the case of burst losses.
2040 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 2040 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2041 .WillOnce(Return(lost_packets)); 2041 .WillOnce(Return(lost_packets));
2042 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2042 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2043 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1); 2043 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1);
2044 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14); 2044 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14);
2045 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14); 2045 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14);
2046 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14); 2046 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14);
2047 ProcessAckPacket(&nack); 2047 ProcessAckPacket(&nack);
2048 } 2048 }
2049 2049
2050 // Test sending multiple acks from the connection to the session. 2050 // 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(); 2394 connection_.GetRetransmissionAlarm()->Fire();
2395 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission( 2395 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
2396 &connection_, original_sequence_number)); 2396 &connection_, original_sequence_number));
2397 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission( 2397 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
2398 &connection_, rto_sequence_number)); 2398 &connection_, rto_sequence_number));
2399 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission( 2399 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
2400 &connection_, rto_sequence_number)); 2400 &connection_, rto_sequence_number));
2401 // Once by explicit nack. 2401 // Once by explicit nack.
2402 SequenceNumberSet lost_packets; 2402 SequenceNumberSet lost_packets;
2403 lost_packets.insert(rto_sequence_number); 2403 lost_packets.insert(rto_sequence_number);
2404 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 2404 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2405 .WillOnce(Return(lost_packets)); 2405 .WillOnce(Return(lost_packets));
2406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(1); 2406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(1);
2407 EXPECT_CALL(*send_algorithm_, OnPacketLost(rto_sequence_number, _)).Times(1); 2407 EXPECT_CALL(*send_algorithm_, OnPacketLost(rto_sequence_number, _)).Times(1);
2408 EXPECT_CALL(*send_algorithm_, 2408 EXPECT_CALL(*send_algorithm_,
2409 OnPacketAbandoned(rto_sequence_number, _)).Times(1); 2409 OnPacketAbandoned(rto_sequence_number, _)).Times(1);
2410 QuicPacketSequenceNumber nack_sequence_number = 0; 2410 QuicPacketSequenceNumber nack_sequence_number = 0;
2411 // Ack packets might generate some other packets, which are not 2411 // Ack packets might generate some other packets, which are not
2412 // retransmissions. (More ack packets). 2412 // retransmissions. (More ack packets).
2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
2414 .Times(AnyNumber()); 2414 .Times(AnyNumber());
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
2911 2911
2912 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { 2912 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) {
2913 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2913 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2914 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL); 2914 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL);
2915 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL); 2915 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL);
2916 // Ack the second packet, which will retransmit the first packet. 2916 // Ack the second packet, which will retransmit the first packet.
2917 QuicAckFrame ack = InitAckFrame(2, 0); 2917 QuicAckFrame ack = InitAckFrame(2, 0);
2918 NackPacket(1, &ack); 2918 NackPacket(1, &ack);
2919 SequenceNumberSet lost_packets; 2919 SequenceNumberSet lost_packets;
2920 lost_packets.insert(1); 2920 lost_packets.insert(1);
2921 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 2921 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2922 .WillOnce(Return(lost_packets)); 2922 .WillOnce(Return(lost_packets));
2923 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2923 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2924 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); 2924 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1);
2925 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 2925 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
2926 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 2926 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
2927 ProcessAckPacket(&ack); 2927 ProcessAckPacket(&ack);
2928 EXPECT_EQ(1u, writer_->frame_count()); 2928 EXPECT_EQ(1u, writer_->frame_count());
2929 EXPECT_EQ(1u, writer_->stream_frames()->size()); 2929 EXPECT_EQ(1u, writer_->stream_frames()->size());
2930 writer_->Reset(); 2930 writer_->Reset();
2931 2931
2932 // Now ack the retransmission, which will both raise the high water mark 2932 // Now ack the retransmission, which will both raise the high water mark
2933 // and see if there is more data to send. 2933 // and see if there is more data to send.
2934 ack = InitAckFrame(3, 0); 2934 ack = InitAckFrame(3, 0);
2935 NackPacket(1, &ack); 2935 NackPacket(1, &ack);
2936 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 2936 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2937 .WillOnce(Return(SequenceNumberSet())); 2937 .WillOnce(Return(SequenceNumberSet()));
2938 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2938 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2939 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1); 2939 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1);
2940 ProcessAckPacket(&ack); 2940 ProcessAckPacket(&ack);
2941 2941
2942 // Check that no packet is sent and the ack alarm isn't set. 2942 // Check that no packet is sent and the ack alarm isn't set.
2943 EXPECT_EQ(0u, writer_->frame_count()); 2943 EXPECT_EQ(0u, writer_->frame_count());
2944 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 2944 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
2945 writer_->Reset(); 2945 writer_->Reset();
2946 2946
2947 // Send the same ack, but send both data and an ack together. 2947 // Send the same ack, but send both data and an ack together.
2948 ack = InitAckFrame(3, 0); 2948 ack = InitAckFrame(3, 0);
2949 NackPacket(1, &ack); 2949 NackPacket(1, &ack);
2950 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 2950 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2951 .WillOnce(Return(SequenceNumberSet())); 2951 .WillOnce(Return(SequenceNumberSet()));
2952 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce( 2952 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(
2953 IgnoreResult(InvokeWithoutArgs( 2953 IgnoreResult(InvokeWithoutArgs(
2954 &connection_, 2954 &connection_,
2955 &TestConnection::EnsureWritableAndSendStreamData5))); 2955 &TestConnection::EnsureWritableAndSendStreamData5)));
2956 ProcessAckPacket(&ack); 2956 ProcessAckPacket(&ack);
2957 2957
2958 // Check that ack is bundled with outgoing data and the delayed ack 2958 // Check that ack is bundled with outgoing data and the delayed ack
2959 // alarm is reset. 2959 // alarm is reset.
2960 if (version() > QUIC_VERSION_15) { 2960 if (version() > QUIC_VERSION_15) {
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
3399 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10)); 3399 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
3400 connection_.GetRetransmissionAlarm()->Fire(); 3400 connection_.GetRetransmissionAlarm()->Fire();
3401 3401
3402 // Retransmit due to explicit nacks. 3402 // Retransmit due to explicit nacks.
3403 QuicAckFrame nack_three = InitAckFrame(4, 0); 3403 QuicAckFrame nack_three = InitAckFrame(4, 0);
3404 NackPacket(3, &nack_three); 3404 NackPacket(3, &nack_three);
3405 NackPacket(1, &nack_three); 3405 NackPacket(1, &nack_three);
3406 SequenceNumberSet lost_packets; 3406 SequenceNumberSet lost_packets;
3407 lost_packets.insert(1); 3407 lost_packets.insert(1);
3408 lost_packets.insert(3); 3408 lost_packets.insert(3);
3409 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 3409 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3410 .WillOnce(Return(lost_packets)); 3410 .WillOnce(Return(lost_packets));
3411 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3411 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3412 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1); 3412 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1);
3413 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); 3413 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
3414 EXPECT_CALL(visitor_, OnCanWrite()).Times(2); 3414 EXPECT_CALL(visitor_, OnCanWrite()).Times(2);
3415 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3415 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3416 ProcessAckPacket(&nack_three); 3416 ProcessAckPacket(&nack_three);
3417 3417
3418 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce( 3418 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce(
3419 Return(QuicTime::Delta::Zero())); 3419 Return(QuicTime::Delta::Zero()));
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
3633 // Send some other data which we will ACK. 3633 // Send some other data which we will ACK.
3634 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL); 3634 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL);
3635 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL); 3635 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL);
3636 3636
3637 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1 3637 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1
3638 // which we registered to be notified about. 3638 // which we registered to be notified about.
3639 QuicAckFrame frame = InitAckFrame(3, 0); 3639 QuicAckFrame frame = InitAckFrame(3, 0);
3640 NackPacket(1, &frame); 3640 NackPacket(1, &frame);
3641 SequenceNumberSet lost_packets; 3641 SequenceNumberSet lost_packets;
3642 lost_packets.insert(1); 3642 lost_packets.insert(1);
3643 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 3643 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3644 .WillOnce(Return(lost_packets)); 3644 .WillOnce(Return(lost_packets));
3645 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); 3645 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
3646 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); 3646 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
3647 ProcessAckPacket(&frame); 3647 ProcessAckPacket(&frame);
3648 } 3648 }
3649 3649
3650 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) { 3650 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) {
3651 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3651 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3652 3652
3653 // Create a delegate which we expect to be called. 3653 // Create a delegate which we expect to be called.
3654 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); 3654 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
3655 EXPECT_CALL(*delegate, OnAckNotification()).Times(1); 3655 EXPECT_CALL(*delegate, OnAckNotification()).Times(1);
3656 3656
3657 // Send four packets, and register to be notified on ACK of packet 2. 3657 // Send four packets, and register to be notified on ACK of packet 2.
3658 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 3658 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
3659 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get()); 3659 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get());
3660 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL); 3660 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL);
3661 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL); 3661 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL);
3662 3662
3663 // Now we receive ACK for packets 1, 3, and 4 and lose 2. 3663 // Now we receive ACK for packets 1, 3, and 4 and lose 2.
3664 QuicAckFrame frame = InitAckFrame(4, 0); 3664 QuicAckFrame frame = InitAckFrame(4, 0);
3665 NackPacket(2, &frame); 3665 NackPacket(2, &frame);
3666 SequenceNumberSet lost_packets; 3666 SequenceNumberSet lost_packets;
3667 lost_packets.insert(2); 3667 lost_packets.insert(2);
3668 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 3668 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3669 .WillOnce(Return(lost_packets)); 3669 .WillOnce(Return(lost_packets));
3670 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3670 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3671 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); 3671 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
3672 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 3672 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
3673 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 3673 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
3674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3675 ProcessAckPacket(&frame); 3675 ProcessAckPacket(&frame);
3676 3676
3677 // Now we get an ACK for packet 5 (retransmitted packet 2), which should 3677 // Now we get an ACK for packet 5 (retransmitted packet 2), which should
3678 // trigger the callback. 3678 // trigger the callback.
3679 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 3679 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3680 .WillRepeatedly(Return(SequenceNumberSet())); 3680 .WillRepeatedly(Return(SequenceNumberSet()));
3681 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3681 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3682 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); 3682 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _));
3683 QuicAckFrame second_ack_frame = InitAckFrame(5, 0); 3683 QuicAckFrame second_ack_frame = InitAckFrame(5, 0);
3684 ProcessAckPacket(&second_ack_frame); 3684 ProcessAckPacket(&second_ack_frame);
3685 } 3685 }
3686 3686
3687 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting 3687 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting
3688 // ACK) triggers notification on our end. 3688 // ACK) triggers notification on our end.
3689 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) { 3689 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
3830 QuicBlockedFrame blocked; 3830 QuicBlockedFrame blocked;
3831 blocked.stream_id = 3; 3831 blocked.stream_id = 3;
3832 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 3832 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3833 ProcessFramePacket(QuicFrame(&blocked)); 3833 ProcessFramePacket(QuicFrame(&blocked));
3834 EXPECT_TRUE(ack_alarm->IsSet()); 3834 EXPECT_TRUE(ack_alarm->IsSet());
3835 } 3835 }
3836 3836
3837 } // namespace 3837 } // namespace
3838 } // namespace test 3838 } // namespace test
3839 } // namespace net 3839 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_stats.cc ('k') | net/quic/quic_sent_packet_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698