| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) | 139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) |
| 140 << " packets[" << i << "]:" << packets[i]; | 140 << " packets[" << i << "]:" << packets[i]; |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 | 143 |
| 144 void ExpectAck(QuicPacketNumber largest_observed) { | 144 void ExpectAck(QuicPacketNumber largest_observed) { |
| 145 EXPECT_CALL( | 145 EXPECT_CALL( |
| 146 *send_algorithm_, | 146 *send_algorithm_, |
| 147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), | 147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), |
| 148 IsEmpty())); | 148 IsEmpty())); |
| 149 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 149 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 150 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 151 } | 150 } |
| 152 | 151 |
| 153 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) { | 152 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) { |
| 154 EXPECT_CALL(*send_algorithm_, | 153 EXPECT_CALL(*send_algorithm_, |
| 155 OnCongestionEvent(true, _, IsEmpty(), IsEmpty())); | 154 OnCongestionEvent(true, _, IsEmpty(), IsEmpty())); |
| 156 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 155 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 157 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 158 } | 156 } |
| 159 | 157 |
| 160 void ExpectAckAndLoss(bool rtt_updated, | 158 void ExpectAckAndLoss(bool rtt_updated, |
| 161 QuicPacketNumber largest_observed, | 159 QuicPacketNumber largest_observed, |
| 162 QuicPacketNumber lost_packet) { | 160 QuicPacketNumber lost_packet) { |
| 163 EXPECT_CALL(*send_algorithm_, | 161 EXPECT_CALL(*send_algorithm_, |
| 164 OnCongestionEvent(rtt_updated, _, | 162 OnCongestionEvent(rtt_updated, _, |
| 165 ElementsAre(Pair(largest_observed, _)), | 163 ElementsAre(Pair(largest_observed, _)), |
| 166 ElementsAre(Pair(lost_packet, _)))); | 164 ElementsAre(Pair(lost_packet, _)))); |
| 167 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 165 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 168 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 169 } | 166 } |
| 170 | 167 |
| 171 // |packets_acked| and |packets_lost| should be in packet number order. | 168 // |packets_acked| and |packets_lost| should be in packet number order. |
| 172 void ExpectAcksAndLosses(bool rtt_updated, | 169 void ExpectAcksAndLosses(bool rtt_updated, |
| 173 QuicPacketNumber* packets_acked, | 170 QuicPacketNumber* packets_acked, |
| 174 size_t num_packets_acked, | 171 size_t num_packets_acked, |
| 175 QuicPacketNumber* packets_lost, | 172 QuicPacketNumber* packets_lost, |
| 176 size_t num_packets_lost) { | 173 size_t num_packets_lost) { |
| 177 vector<QuicPacketNumber> ack_vector; | 174 vector<QuicPacketNumber> ack_vector; |
| 178 for (size_t i = 0; i < num_packets_acked; ++i) { | 175 for (size_t i = 0; i < num_packets_acked; ++i) { |
| 179 ack_vector.push_back(packets_acked[i]); | 176 ack_vector.push_back(packets_acked[i]); |
| 180 } | 177 } |
| 181 vector<QuicPacketNumber> lost_vector; | 178 vector<QuicPacketNumber> lost_vector; |
| 182 for (size_t i = 0; i < num_packets_lost; ++i) { | 179 for (size_t i = 0; i < num_packets_lost; ++i) { |
| 183 lost_vector.push_back(packets_lost[i]); | 180 lost_vector.push_back(packets_lost[i]); |
| 184 } | 181 } |
| 185 EXPECT_CALL( | 182 EXPECT_CALL( |
| 186 *send_algorithm_, | 183 *send_algorithm_, |
| 187 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector), | 184 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector), |
| 188 Pointwise(KeyEq(), lost_vector))); | 185 Pointwise(KeyEq(), lost_vector))); |
| 189 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()) | 186 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()) |
| 190 .Times(AnyNumber()); | 187 .Times(AnyNumber()); |
| 191 EXPECT_CALL(*network_change_visitor_, OnRttChange()).Times(AnyNumber()); | |
| 192 } | 188 } |
| 193 | 189 |
| 194 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 190 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 195 QuicPacketNumber new_packet_number) { | 191 QuicPacketNumber new_packet_number) { |
| 196 RetransmitAndSendPacket(old_packet_number, new_packet_number, | 192 RetransmitAndSendPacket(old_packet_number, new_packet_number, |
| 197 TLP_RETRANSMISSION); | 193 TLP_RETRANSMISSION); |
| 198 } | 194 } |
| 199 | 195 |
| 200 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 196 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 201 QuicPacketNumber new_packet_number, | 197 QuicPacketNumber new_packet_number, |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 455 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 460 } | 456 } |
| 461 | 457 |
| 462 TEST_P(QuicSentPacketManagerTest, | 458 TEST_P(QuicSentPacketManagerTest, |
| 463 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { | 459 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { |
| 464 SendDataPacket(1); | 460 SendDataPacket(1); |
| 465 RetransmitAndSendPacket(1, 2); | 461 RetransmitAndSendPacket(1, 2); |
| 466 | 462 |
| 467 // Fire the RTO, which will mark 2 for retransmission (but will not send it). | 463 // Fire the RTO, which will mark 2 for retransmission (but will not send it). |
| 468 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 464 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 469 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 465 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 470 manager_.OnRetransmissionTimeout(); | 466 manager_.OnRetransmissionTimeout(); |
| 471 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 467 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 472 | 468 |
| 473 // Ack 1 but not 2, before 2 is able to be sent. | 469 // Ack 1 but not 2, before 2 is able to be sent. |
| 474 // Since 1 has been retransmitted, it has already been lost, and so the | 470 // Since 1 has been retransmitted, it has already been lost, and so the |
| 475 // send algorithm is not informed that it has been ACK'd. | 471 // send algorithm is not informed that it has been ACK'd. |
| 476 QuicAckFrame ack_frame = InitAckFrame(1); | 472 QuicAckFrame ack_frame = InitAckFrame(1); |
| 477 ExpectUpdatedRtt(1); | 473 ExpectUpdatedRtt(1); |
| 478 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); | 474 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); |
| 479 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 475 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. | 817 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. |
| 822 EXPECT_EQ(102 * kDefaultLength, | 818 EXPECT_EQ(102 * kDefaultLength, |
| 823 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 819 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
| 824 | 820 |
| 825 RetransmitNextPacket(103); | 821 RetransmitNextPacket(103); |
| 826 QuicAckFrame ack_frame = InitAckFrame(103); | 822 QuicAckFrame ack_frame = InitAckFrame(103); |
| 827 NackPackets(0, 103, &ack_frame); | 823 NackPackets(0, 103, &ack_frame); |
| 828 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 824 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 829 EXPECT_CALL(*send_algorithm_, | 825 EXPECT_CALL(*send_algorithm_, |
| 830 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _)); | 826 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _)); |
| 831 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 827 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 832 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 833 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 828 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 834 // All packets before 103 should be lost. | 829 // All packets before 103 should be lost. |
| 835 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 830 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
| 836 } | 831 } |
| 837 | 832 |
| 838 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { | 833 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { |
| 839 // Send 2 crypto packets and 3 data packets. | 834 // Send 2 crypto packets and 3 data packets. |
| 840 const size_t kNumSentCryptoPackets = 2; | 835 const size_t kNumSentCryptoPackets = 2; |
| 841 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 836 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 842 SendCryptoPacket(i); | 837 SendCryptoPacket(i); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1040 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1046 | 1041 |
| 1047 // Ack a retransmission. | 1042 // Ack a retransmission. |
| 1048 QuicAckFrame ack_frame = InitAckFrame(102); | 1043 QuicAckFrame ack_frame = InitAckFrame(102); |
| 1049 NackPackets(0, 102, &ack_frame); | 1044 NackPackets(0, 102, &ack_frame); |
| 1050 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 1045 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 1051 // Ensure no packets are lost. | 1046 // Ensure no packets are lost. |
| 1052 EXPECT_CALL(*send_algorithm_, | 1047 EXPECT_CALL(*send_algorithm_, |
| 1053 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), | 1048 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), |
| 1054 /*lost_packets=*/IsEmpty())); | 1049 /*lost_packets=*/IsEmpty())); |
| 1055 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1050 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1056 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1057 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1051 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1058 // RTO's use loss detection instead of immediately declaring retransmitted | 1052 // RTO's use loss detection instead of immediately declaring retransmitted |
| 1059 // packets lost. | 1053 // packets lost. |
| 1060 for (int i = 1; i <= 99; ++i) { | 1054 for (int i = 1; i <= 99; ++i) { |
| 1061 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); | 1055 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); |
| 1062 } | 1056 } |
| 1063 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1057 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1064 } | 1058 } |
| 1065 | 1059 |
| 1066 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { | 1060 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { |
| 1067 QuicConfig client_config; | 1061 QuicConfig client_config; |
| 1068 QuicTagVector options; | 1062 QuicTagVector options; |
| 1069 options.push_back(kNRTO); | 1063 options.push_back(kNRTO); |
| 1070 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1064 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1071 client_config.SetConnectionOptionsToSend(options); | 1065 client_config.SetConnectionOptionsToSend(options); |
| 1072 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1066 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1073 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1074 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1067 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1075 EXPECT_CALL(*send_algorithm_, PacingRate()) | 1068 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1076 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1069 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1077 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1070 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1078 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1071 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1079 manager_.SetFromConfig(client_config); | 1072 manager_.SetFromConfig(client_config); |
| 1080 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1073 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1081 | 1074 |
| 1082 // Send 100 packets. | 1075 // Send 100 packets. |
| 1083 const size_t kNumSentPackets = 100; | 1076 const size_t kNumSentPackets = 100; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1095 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1088 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1096 | 1089 |
| 1097 // Ack a retransmission and expect no call to OnRetransmissionTimeout. | 1090 // Ack a retransmission and expect no call to OnRetransmissionTimeout. |
| 1098 QuicAckFrame ack_frame = InitAckFrame(102); | 1091 QuicAckFrame ack_frame = InitAckFrame(102); |
| 1099 NackPackets(0, 102, &ack_frame); | 1092 NackPackets(0, 102, &ack_frame); |
| 1100 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 1093 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 1101 // This will include packets in the lost packet map. | 1094 // This will include packets in the lost packet map. |
| 1102 EXPECT_CALL(*send_algorithm_, | 1095 EXPECT_CALL(*send_algorithm_, |
| 1103 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), | 1096 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), |
| 1104 /*lost_packets=*/Not(IsEmpty()))); | 1097 /*lost_packets=*/Not(IsEmpty()))); |
| 1105 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1098 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1106 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1107 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1099 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1108 } | 1100 } |
| 1109 | 1101 |
| 1110 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { | 1102 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { |
| 1111 // Send 1 packet. | 1103 // Send 1 packet. |
| 1112 SendDataPacket(1); | 1104 SendDataPacket(1); |
| 1113 | 1105 |
| 1114 manager_.OnRetransmissionTimeout(); | 1106 manager_.OnRetransmissionTimeout(); |
| 1115 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1107 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1116 EXPECT_EQ(kDefaultLength, | 1108 EXPECT_EQ(kDefaultLength, |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1385 | 1377 |
| 1386 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { | 1378 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { |
| 1387 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) | 1379 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1388 ->GetLossDetectionType()); | 1380 ->GetLossDetectionType()); |
| 1389 | 1381 |
| 1390 QuicConfig config; | 1382 QuicConfig config; |
| 1391 QuicTagVector options; | 1383 QuicTagVector options; |
| 1392 options.push_back(kTIME); | 1384 options.push_back(kTIME); |
| 1393 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1385 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1394 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1386 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1395 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1387 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1396 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1397 manager_.SetFromConfig(config); | 1388 manager_.SetFromConfig(config); |
| 1398 | 1389 |
| 1399 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) | 1390 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) |
| 1400 ->GetLossDetectionType()); | 1391 ->GetLossDetectionType()); |
| 1401 } | 1392 } |
| 1402 | 1393 |
| 1403 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { | 1394 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { |
| 1404 FLAGS_quic_allow_bbr = true; | 1395 FLAGS_quic_allow_bbr = true; |
| 1405 QuicConfig config; | 1396 QuicConfig config; |
| 1406 QuicTagVector options; | 1397 QuicTagVector options; |
| 1407 | 1398 |
| 1408 options.push_back(kRENO); | 1399 options.push_back(kRENO); |
| 1409 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1400 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1410 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1401 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1411 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1412 manager_.SetFromConfig(config); | 1402 manager_.SetFromConfig(config); |
| 1413 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1403 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1414 ->GetCongestionControlType()); | 1404 ->GetCongestionControlType()); |
| 1415 | 1405 |
| 1416 // TODO(rtenneti): Enable the following code after BBR code is checked in. | 1406 // TODO(rtenneti): Enable the following code after BBR code is checked in. |
| 1417 #if 0 | 1407 #if 0 |
| 1418 options.clear(); | 1408 options.clear(); |
| 1419 options.push_back(kTBBR); | 1409 options.push_back(kTBBR); |
| 1420 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1410 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1421 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1411 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1422 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1423 manager_.SetFromConfig(config); | 1412 manager_.SetFromConfig(config); |
| 1424 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( | 1413 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( |
| 1425 manager_)->GetCongestionControlType()); | 1414 manager_)->GetCongestionControlType()); |
| 1426 #endif | 1415 #endif |
| 1427 | 1416 |
| 1428 options.clear(); | 1417 options.clear(); |
| 1429 options.push_back(kBYTE); | 1418 options.push_back(kBYTE); |
| 1430 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1419 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1431 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1420 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1432 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1433 manager_.SetFromConfig(config); | 1421 manager_.SetFromConfig(config); |
| 1434 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1422 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1435 ->GetCongestionControlType()); | 1423 ->GetCongestionControlType()); |
| 1436 | 1424 |
| 1437 options.clear(); | 1425 options.clear(); |
| 1438 options.push_back(kRENO); | 1426 options.push_back(kRENO); |
| 1439 options.push_back(kBYTE); | 1427 options.push_back(kBYTE); |
| 1440 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1428 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1441 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1429 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1442 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1443 manager_.SetFromConfig(config); | 1430 manager_.SetFromConfig(config); |
| 1444 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) | 1431 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
| 1445 ->GetCongestionControlType()); | 1432 ->GetCongestionControlType()); |
| 1446 } | 1433 } |
| 1447 | 1434 |
| 1448 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { | 1435 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { |
| 1449 QuicConfig config; | 1436 QuicConfig config; |
| 1450 QuicTagVector options; | 1437 QuicTagVector options; |
| 1451 | 1438 |
| 1452 options.push_back(k1CON); | 1439 options.push_back(k1CON); |
| 1453 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1440 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1454 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1441 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1455 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1456 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); | 1442 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); |
| 1457 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1443 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1458 manager_.SetFromConfig(config); | 1444 manager_.SetFromConfig(config); |
| 1459 | 1445 |
| 1460 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1446 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1461 QuicConfig client_config; | 1447 QuicConfig client_config; |
| 1462 client_config.SetConnectionOptionsToSend(options); | 1448 client_config.SetConnectionOptionsToSend(options); |
| 1463 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1449 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1464 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1465 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); | 1450 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); |
| 1466 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1451 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1467 manager_.SetFromConfig(client_config); | 1452 manager_.SetFromConfig(client_config); |
| 1468 } | 1453 } |
| 1469 | 1454 |
| 1470 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { | 1455 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { |
| 1471 // By default, changing the number of open streams does nothing. | 1456 // By default, changing the number of open streams does nothing. |
| 1472 manager_.SetNumOpenStreams(5); | 1457 manager_.SetNumOpenStreams(5); |
| 1473 | 1458 |
| 1474 QuicConfig config; | 1459 QuicConfig config; |
| 1475 QuicTagVector options; | 1460 QuicTagVector options; |
| 1476 | 1461 |
| 1477 options.push_back(kNCON); | 1462 options.push_back(kNCON); |
| 1478 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1463 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1479 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1464 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1480 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1481 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1465 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1482 manager_.SetFromConfig(config); | 1466 manager_.SetFromConfig(config); |
| 1483 | 1467 |
| 1484 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); | 1468 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); |
| 1485 manager_.SetNumOpenStreams(5); | 1469 manager_.SetNumOpenStreams(5); |
| 1486 } | 1470 } |
| 1487 | 1471 |
| 1488 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { | 1472 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { |
| 1489 QuicConfig config; | 1473 QuicConfig config; |
| 1490 QuicTagVector options; | 1474 QuicTagVector options; |
| 1491 | 1475 |
| 1492 options.push_back(kNTLP); | 1476 options.push_back(kNTLP); |
| 1493 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1477 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1494 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1478 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1495 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1496 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1479 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1497 manager_.SetFromConfig(config); | 1480 manager_.SetFromConfig(config); |
| 1498 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); | 1481 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); |
| 1499 } | 1482 } |
| 1500 | 1483 |
| 1501 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { | 1484 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { |
| 1502 QuicConfig client_config; | 1485 QuicConfig client_config; |
| 1503 QuicTagVector options; | 1486 QuicTagVector options; |
| 1504 | 1487 |
| 1505 options.push_back(kNTLP); | 1488 options.push_back(kNTLP); |
| 1506 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1489 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1507 client_config.SetConnectionOptionsToSend(options); | 1490 client_config.SetConnectionOptionsToSend(options); |
| 1508 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1491 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1509 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1510 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1492 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1511 manager_.SetFromConfig(client_config); | 1493 manager_.SetFromConfig(client_config); |
| 1512 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); | 1494 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); |
| 1513 } | 1495 } |
| 1514 | 1496 |
| 1515 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { | 1497 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { |
| 1516 QuicConfig config; | 1498 QuicConfig config; |
| 1517 QuicTagVector options; | 1499 QuicTagVector options; |
| 1518 | 1500 |
| 1519 options.push_back(kTLPR); | 1501 options.push_back(kTLPR); |
| 1520 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1502 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1521 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1503 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1522 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1523 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1504 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1524 manager_.SetFromConfig(config); | 1505 manager_.SetFromConfig(config); |
| 1525 EXPECT_TRUE( | 1506 EXPECT_TRUE( |
| 1526 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); | 1507 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); |
| 1527 } | 1508 } |
| 1528 | 1509 |
| 1529 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { | 1510 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { |
| 1530 QuicConfig client_config; | 1511 QuicConfig client_config; |
| 1531 QuicTagVector options; | 1512 QuicTagVector options; |
| 1532 | 1513 |
| 1533 options.push_back(kTLPR); | 1514 options.push_back(kTLPR); |
| 1534 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1515 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1535 client_config.SetConnectionOptionsToSend(options); | 1516 client_config.SetConnectionOptionsToSend(options); |
| 1536 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1517 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1537 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1538 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1518 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1539 manager_.SetFromConfig(client_config); | 1519 manager_.SetFromConfig(client_config); |
| 1540 EXPECT_TRUE( | 1520 EXPECT_TRUE( |
| 1541 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); | 1521 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); |
| 1542 } | 1522 } |
| 1543 | 1523 |
| 1544 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { | 1524 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { |
| 1545 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1525 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1546 QuicConfig config; | 1526 QuicConfig config; |
| 1547 QuicTagVector options; | 1527 QuicTagVector options; |
| 1548 | 1528 |
| 1549 options.push_back(kNRTO); | 1529 options.push_back(kNRTO); |
| 1550 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1530 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1551 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1531 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1552 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1553 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1532 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1554 manager_.SetFromConfig(config); | 1533 manager_.SetFromConfig(config); |
| 1555 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1534 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1556 } | 1535 } |
| 1557 | 1536 |
| 1558 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { | 1537 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { |
| 1559 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1538 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1560 QuicConfig client_config; | 1539 QuicConfig client_config; |
| 1561 QuicTagVector options; | 1540 QuicTagVector options; |
| 1562 | 1541 |
| 1563 options.push_back(kNRTO); | 1542 options.push_back(kNRTO); |
| 1564 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1543 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1565 client_config.SetConnectionOptionsToSend(options); | 1544 client_config.SetConnectionOptionsToSend(options); |
| 1566 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1545 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1567 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1568 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1546 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1569 manager_.SetFromConfig(client_config); | 1547 manager_.SetFromConfig(client_config); |
| 1570 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1548 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1571 } | 1549 } |
| 1572 | 1550 |
| 1573 TEST_P(QuicSentPacketManagerTest, | 1551 TEST_P(QuicSentPacketManagerTest, |
| 1574 NegotiateConservativeReceiveWindowFromOptions) { | 1552 NegotiateConservativeReceiveWindowFromOptions) { |
| 1575 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1553 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1576 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1554 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1577 | 1555 |
| 1578 // Try to set a size below the minimum and ensure it gets set to the min. | 1556 // Try to set a size below the minimum and ensure it gets set to the min. |
| 1579 QuicConfig client_config; | 1557 QuicConfig client_config; |
| 1580 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); | 1558 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); |
| 1581 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1559 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1582 EXPECT_CALL(*send_algorithm_, | 1560 EXPECT_CALL(*send_algorithm_, |
| 1583 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6)); | 1561 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6)); |
| 1584 EXPECT_CALL(*send_algorithm_, PacingRate()) | 1562 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1585 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1563 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1586 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1564 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1587 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1565 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1588 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1566 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1589 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1590 manager_.SetFromConfig(client_config); | 1567 manager_.SetFromConfig(client_config); |
| 1591 | 1568 |
| 1592 EXPECT_EQ(kMinSocketReceiveBuffer, | 1569 EXPECT_EQ(kMinSocketReceiveBuffer, |
| 1593 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1570 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1594 | 1571 |
| 1595 // Ensure the smaller send window only allows 16 packets to be sent. | 1572 // Ensure the smaller send window only allows 16 packets to be sent. |
| 1596 for (QuicPacketNumber i = 1; i <= 16; ++i) { | 1573 for (QuicPacketNumber i = 1; i <= 16; ++i) { |
| 1597 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1574 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1598 .WillOnce(Return(QuicTime::Delta::Zero())); | 1575 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1599 EXPECT_EQ(QuicTime::Delta::Zero(), | 1576 EXPECT_EQ(QuicTime::Delta::Zero(), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1637 } | 1614 } |
| 1638 | 1615 |
| 1639 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1616 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1640 uint32_t initial_rtt_us = 325000; | 1617 uint32_t initial_rtt_us = 325000; |
| 1641 EXPECT_NE(initial_rtt_us, | 1618 EXPECT_NE(initial_rtt_us, |
| 1642 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1619 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1643 | 1620 |
| 1644 QuicConfig config; | 1621 QuicConfig config; |
| 1645 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); | 1622 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); |
| 1646 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1623 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1647 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1624 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1648 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | |
| 1649 manager_.SetFromConfig(config); | 1625 manager_.SetFromConfig(config); |
| 1650 | 1626 |
| 1651 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1627 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1652 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); | 1628 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); |
| 1653 } | 1629 } |
| 1654 | 1630 |
| 1655 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { | 1631 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { |
| 1656 // The sent packet manager should use the RTT from CachedNetworkParameters if | 1632 // The sent packet manager should use the RTT from CachedNetworkParameters if |
| 1657 // it is provided. | 1633 // it is provided. |
| 1658 const int kRttMs = 1234; | 1634 const int kRttMs = 1234; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1716 manager_.OnConnectionMigration(PORT_CHANGE); | 1692 manager_.OnConnectionMigration(PORT_CHANGE); |
| 1717 | 1693 |
| 1718 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1694 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1719 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1695 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1720 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1696 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1721 } | 1697 } |
| 1722 | 1698 |
| 1723 } // namespace | 1699 } // namespace |
| 1724 } // namespace test | 1700 } // namespace test |
| 1725 } // namespace net | 1701 } // namespace net |
| OLD | NEW |