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

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

Issue 1667513002: Deprecate FLAGS_quic_general_loss_algorithm. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@113072084
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/congestion_control/time_loss_algorithm_test.cc ('k') | net/quic/quic_flags.h » ('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 <ostream> 7 #include <ostream>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 EXPECT_CALL(visitor_, WillingAndAbleToWrite()).Times(AnyNumber()); 722 EXPECT_CALL(visitor_, WillingAndAbleToWrite()).Times(AnyNumber());
723 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); 723 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber());
724 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); 724 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
725 EXPECT_CALL(visitor_, PostProcessAfterData()).Times(AnyNumber()); 725 EXPECT_CALL(visitor_, PostProcessAfterData()).Times(AnyNumber());
726 EXPECT_CALL(visitor_, HasOpenDynamicStreams()) 726 EXPECT_CALL(visitor_, HasOpenDynamicStreams())
727 .WillRepeatedly(Return(false)); 727 .WillRepeatedly(Return(false));
728 EXPECT_CALL(visitor_, OnCongestionWindowChange(_)).Times(AnyNumber()); 728 EXPECT_CALL(visitor_, OnCongestionWindowChange(_)).Times(AnyNumber());
729 729
730 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) 730 EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
731 .WillRepeatedly(Return(QuicTime::Zero())); 731 .WillRepeatedly(Return(QuicTime::Zero()));
732 if (FLAGS_quic_general_loss_algorithm) { 732 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)).Times(AnyNumber());
733 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
734 .Times(AnyNumber());
735 } else {
736 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
737 .WillRepeatedly(Return(PacketNumberSet()));
738 }
739 // TODO(ianswett): Fix QuicConnectionTests so they don't attempt to write 733 // TODO(ianswett): Fix QuicConnectionTests so they don't attempt to write
740 // non-crypto stream data at ENCRYPTION_NONE. 734 // non-crypto stream data at ENCRYPTION_NONE.
741 FLAGS_quic_never_write_unencrypted_data = false; 735 FLAGS_quic_never_write_unencrypted_data = false;
742 FLAGS_quic_no_unencrypted_fec = false; 736 FLAGS_quic_no_unencrypted_fec = false;
743 } 737 }
744 738
745 QuicVersion version() { return GetParam().version; } 739 QuicVersion version() { return GetParam().version; }
746 740
747 QuicAckFrame* outgoing_ack() { 741 QuicAckFrame* outgoing_ack() {
748 QuicConnectionPeer::PopulateAckFrame(&connection_, &ack_); 742 QuicConnectionPeer::PopulateAckFrame(&connection_, &ack_);
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
1368 1362
1369 QuicAckFrame frame = InitAckFrame(num_packets); 1363 QuicAckFrame frame = InitAckFrame(num_packets);
1370 PacketNumberSet lost_packets; 1364 PacketNumberSet lost_packets;
1371 // Create an ack with 256 nacks, none adjacent to one another. 1365 // Create an ack with 256 nacks, none adjacent to one another.
1372 for (QuicPacketNumber i = 1; i <= 256; ++i) { 1366 for (QuicPacketNumber i = 1; i <= 256; ++i) {
1373 NackPacket(i * 2, &frame); 1367 NackPacket(i * 2, &frame);
1374 if (i < 256) { // Last packet is nacked, but not lost. 1368 if (i < 256) { // Last packet is nacked, but not lost.
1375 lost_packets.insert(i * 2); 1369 lost_packets.insert(i * 2);
1376 } 1370 }
1377 } 1371 }
1378 if (FLAGS_quic_general_loss_algorithm) { 1372 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1379 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1380 } else {
1381 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1382 .WillOnce(Return(lost_packets));
1383 }
1384 EXPECT_CALL(entropy_calculator_, EntropyHash(511)) 1373 EXPECT_CALL(entropy_calculator_, EntropyHash(511))
1385 .WillOnce(Return(static_cast<QuicPacketEntropyHash>(0))); 1374 .WillOnce(Return(static_cast<QuicPacketEntropyHash>(0)));
1386 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 1375 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
1387 ProcessAckPacket(&frame); 1376 ProcessAckPacket(&frame);
1388 1377
1389 // A truncated ack will not have the true largest observed. 1378 // A truncated ack will not have the true largest observed.
1390 EXPECT_GT(num_packets, manager_->largest_observed()); 1379 EXPECT_GT(num_packets, manager_->largest_observed());
1391 1380
1392 AckPacket(192, &frame); 1381 AckPacket(192, &frame);
1393 1382
1394 // Removing one missing packet allows us to ack 192 and one more range, but 1383 // Removing one missing packet allows us to ack 192 and one more range, but
1395 // 192 has already been declared lost, so it doesn't register as an ack. 1384 // 192 has already been declared lost, so it doesn't register as an ack.
1396 if (FLAGS_quic_general_loss_algorithm) { 1385 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1397 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1398 } else {
1399 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1400 .WillOnce(Return(PacketNumberSet()));
1401 }
1402 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 1386 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
1403 ProcessAckPacket(&frame); 1387 ProcessAckPacket(&frame);
1404 EXPECT_EQ(num_packets, manager_->largest_observed()); 1388 EXPECT_EQ(num_packets, manager_->largest_observed());
1405 } 1389 }
1406 1390
1407 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) { 1391 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
1408 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1392 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1409 1393
1410 ProcessPacket(kDefaultPathId, 1); 1394 ProcessPacket(kDefaultPathId, 1);
1411 // Delay sending, then queue up an ack. 1395 // Delay sending, then queue up an ack.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 1452
1469 QuicPacketNumber original; 1453 QuicPacketNumber original;
1470 QuicByteCount packet_size; 1454 QuicByteCount packet_size;
1471 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 1455 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
1472 .WillOnce( 1456 .WillOnce(
1473 DoAll(SaveArg<2>(&original), SaveArg<3>(&packet_size), Return(true))); 1457 DoAll(SaveArg<2>(&original), SaveArg<3>(&packet_size), Return(true)));
1474 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 1458 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
1475 QuicAckFrame frame = InitAckFrame(original); 1459 QuicAckFrame frame = InitAckFrame(original);
1476 NackPacket(original, &frame); 1460 NackPacket(original, &frame);
1477 // First nack triggers early retransmit. 1461 // First nack triggers early retransmit.
1478 if (FLAGS_quic_general_loss_algorithm) { 1462 SendAlgorithmInterface::CongestionVector lost_packets;
1479 SendAlgorithmInterface::CongestionVector lost_packets; 1463 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
1480 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 1464 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
1481 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 1465 .WillOnce(SetArgPointee<3>(lost_packets));
1482 .WillOnce(SetArgPointee<3>(lost_packets));
1483 } else {
1484 PacketNumberSet lost_packets;
1485 lost_packets.insert(1);
1486 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1487 .WillOnce(Return(lost_packets));
1488 }
1489 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 1466 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
1490 QuicPacketNumber retransmission; 1467 QuicPacketNumber retransmission;
1491 EXPECT_CALL(*send_algorithm_, 1468 EXPECT_CALL(*send_algorithm_,
1492 OnPacketSent(_, _, _, packet_size - kQuicVersionSize, _)) 1469 OnPacketSent(_, _, _, packet_size - kQuicVersionSize, _))
1493 .WillOnce(DoAll(SaveArg<2>(&retransmission), Return(true))); 1470 .WillOnce(DoAll(SaveArg<2>(&retransmission), Return(true)));
1494 1471
1495 ProcessAckPacket(&frame); 1472 ProcessAckPacket(&frame);
1496 1473
1497 QuicAckFrame frame2 = InitAckFrame(retransmission); 1474 QuicAckFrame frame2 = InitAckFrame(retransmission);
1498 NackPacket(original, &frame2); 1475 NackPacket(original, &frame2);
1499 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 1476 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
1500 if (FLAGS_quic_general_loss_algorithm) { 1477 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1501 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
1502 } else {
1503 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1504 .WillOnce(Return(PacketNumberSet()));
1505 }
1506 ProcessAckPacket(&frame2); 1478 ProcessAckPacket(&frame2);
1507 1479
1508 // Now if the peer sends an ack which still reports the retransmitted packet 1480 // Now if the peer sends an ack which still reports the retransmitted packet
1509 // as missing, that will bundle an ack with data after two acks in a row 1481 // as missing, that will bundle an ack with data after two acks in a row
1510 // indicate the high water mark needs to be raised. 1482 // indicate the high water mark needs to be raised.
1511 EXPECT_CALL(*send_algorithm_, 1483 EXPECT_CALL(*send_algorithm_,
1512 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA)); 1484 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA));
1513 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, nullptr); 1485 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, nullptr);
1514 // No ack sent. 1486 // No ack sent.
1515 EXPECT_EQ(1u, writer_->frame_count()); 1487 EXPECT_EQ(1u, writer_->frame_count());
1516 EXPECT_EQ(1u, writer_->stream_frames().size()); 1488 EXPECT_EQ(1u, writer_->stream_frames().size());
1517 1489
1518 // No more packet loss for the rest of the test. 1490 // No more packet loss for the rest of the test.
1519 if (FLAGS_quic_general_loss_algorithm) { 1491 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)).Times(AnyNumber());
1520 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)).Times(AnyNumber());
1521 } else {
1522 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
1523 .WillRepeatedly(Return(PacketNumberSet()));
1524 }
1525 ProcessAckPacket(&frame2); 1492 ProcessAckPacket(&frame2);
1526 EXPECT_CALL(*send_algorithm_, 1493 EXPECT_CALL(*send_algorithm_,
1527 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA)); 1494 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA));
1528 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, nullptr); 1495 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, nullptr);
1529 // Ack bundled. 1496 // Ack bundled.
1530 EXPECT_EQ(3u, writer_->frame_count()); 1497 EXPECT_EQ(3u, writer_->frame_count());
1531 EXPECT_EQ(1u, writer_->stream_frames().size()); 1498 EXPECT_EQ(1u, writer_->stream_frames().size());
1532 EXPECT_FALSE(writer_->ack_frames().empty()); 1499 EXPECT_FALSE(writer_->ack_frames().empty());
1533 1500
1534 // But an ack with no missing packets will not send an ack. 1501 // But an ack with no missing packets will not send an ack.
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
1991 // stream frame size, which are absent in the retransmission. 1958 // stream frame size, which are absent in the retransmission.
1992 size_t retransmitted_packet = protected_packet - 3; 1959 size_t retransmitted_packet = protected_packet - 3;
1993 EXPECT_EQ(protected_packet + retransmitted_packet, 1960 EXPECT_EQ(protected_packet + retransmitted_packet,
1994 QuicSentPacketManagerPeer::GetBytesInFlight(manager_)); 1961 QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
1995 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); 1962 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet());
1996 1963
1997 // Receive ack for the retransmission. No data should be outstanding. 1964 // Receive ack for the retransmission. No data should be outstanding.
1998 QuicAckFrame ack = InitAckFrame(3); 1965 QuicAckFrame ack = InitAckFrame(3);
1999 NackPacket(1, &ack); 1966 NackPacket(1, &ack);
2000 NackPacket(2, &ack); 1967 NackPacket(2, &ack);
2001 if (FLAGS_quic_general_loss_algorithm) { 1968 SendAlgorithmInterface::CongestionVector lost_packets;
2002 SendAlgorithmInterface::CongestionVector lost_packets; 1969 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
2003 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 1970 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2004 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 1971 .WillOnce(SetArgPointee<3>(lost_packets));
2005 .WillOnce(SetArgPointee<3>(lost_packets));
2006 } else {
2007 PacketNumberSet lost_packets;
2008 lost_packets.insert(1);
2009 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2010 .WillOnce(Return(lost_packets));
2011 }
2012 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 1972 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2013 ProcessAckPacket(&ack); 1973 ProcessAckPacket(&ack);
2014 1974
2015 // Ensure the alarm is not set since all packets have been acked or abandoned. 1975 // Ensure the alarm is not set since all packets have been acked or abandoned.
2016 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); 1976 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
2017 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_)); 1977 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
2018 } 1978 }
2019 1979
2020 TEST_P(QuicConnectionTest, RemoveFECFromInflightOnLossRetransmission) { 1980 TEST_P(QuicConnectionTest, RemoveFECFromInflightOnLossRetransmission) {
2021 EXPECT_TRUE(QuicPacketCreatorPeer::IsFecEnabled(creator_)); 1981 EXPECT_TRUE(QuicPacketCreatorPeer::IsFecEnabled(creator_));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2057 EXPECT_EQ(protected_packet + fec_packet + 4 * unprotected_packet, 2017 EXPECT_EQ(protected_packet + fec_packet + 4 * unprotected_packet,
2058 QuicSentPacketManagerPeer::GetBytesInFlight(manager_)); 2018 QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
2059 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); 2019 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet());
2060 2020
2061 // Ack data packets, and NACK FEC packet and one data packet. Triggers 2021 // Ack data packets, and NACK FEC packet and one data packet. Triggers
2062 // NACK-based loss detection of both packets, but only data packet is 2022 // NACK-based loss detection of both packets, but only data packet is
2063 // retransmitted and considered outstanding. 2023 // retransmitted and considered outstanding.
2064 QuicAckFrame ack = InitAckFrame(6); 2024 QuicAckFrame ack = InitAckFrame(6);
2065 NackPacket(2, &ack); 2025 NackPacket(2, &ack);
2066 NackPacket(3, &ack); 2026 NackPacket(3, &ack);
2067 if (FLAGS_quic_general_loss_algorithm) { 2027 SendAlgorithmInterface::CongestionVector lost_packets;
2068 SendAlgorithmInterface::CongestionVector lost_packets; 2028 lost_packets.push_back(std::make_pair(2, kMaxPacketSize));
2069 lost_packets.push_back(std::make_pair(2, kMaxPacketSize)); 2029 lost_packets.push_back(std::make_pair(3, kMaxPacketSize));
2070 lost_packets.push_back(std::make_pair(3, kMaxPacketSize)); 2030 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2071 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2031 .WillOnce(SetArgPointee<3>(lost_packets));
2072 .WillOnce(SetArgPointee<3>(lost_packets));
2073 } else {
2074 PacketNumberSet lost_packets;
2075 lost_packets.insert(2);
2076 lost_packets.insert(3);
2077 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2078 .WillOnce(Return(lost_packets));
2079 }
2080 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2032 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2081 EXPECT_CALL(*send_algorithm_, 2033 EXPECT_CALL(*send_algorithm_,
2082 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA)) 2034 OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA))
2083 .Times(1); 2035 .Times(1);
2084 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2036 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2085 ProcessAckPacket(&ack); 2037 ProcessAckPacket(&ack);
2086 // On receiving this ack from the server, the client will no longer send 2038 // On receiving this ack from the server, the client will no longer send
2087 // version number in subsequent packets, including in this retransmission. 2039 // version number in subsequent packets, including in this retransmission.
2088 size_t unprotected_packet_no_version = unprotected_packet - 4; 2040 size_t unprotected_packet_no_version = unprotected_packet - 4;
2089 EXPECT_EQ(unprotected_packet_no_version, 2041 EXPECT_EQ(unprotected_packet_no_version,
2090 QuicSentPacketManagerPeer::GetBytesInFlight(manager_)); 2042 QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
2091 2043
2092 // Receive ack for the retransmission. No data should be outstanding. 2044 // Receive ack for the retransmission. No data should be outstanding.
2093 QuicAckFrame ack2 = InitAckFrame(7); 2045 QuicAckFrame ack2 = InitAckFrame(7);
2094 NackPacket(2, &ack2); 2046 NackPacket(2, &ack2);
2095 NackPacket(3, &ack2); 2047 NackPacket(3, &ack2);
2096 if (FLAGS_quic_general_loss_algorithm) { 2048 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2097 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2098 } else {
2099 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2100 .WillOnce(Return(PacketNumberSet()));
2101 }
2102 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2049 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2103 ProcessAckPacket(&ack2); 2050 ProcessAckPacket(&ack2);
2104 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_)); 2051 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
2105 } 2052 }
2106 2053
2107 TEST_P(QuicConnectionTest, FECRemainsInflightOnTLPOfEarlierData) { 2054 TEST_P(QuicConnectionTest, FECRemainsInflightOnTLPOfEarlierData) {
2108 // This test checks if TLP is sent correctly when a data and an FEC packet 2055 // This test checks if TLP is sent correctly when a data and an FEC packet
2109 // are outstanding. TLP should be sent for the data packet when the 2056 // are outstanding. TLP should be sent for the data packet when the
2110 // retransmission alarm fires. 2057 // retransmission alarm fires.
2111 // Turn on TLP for this test. 2058 // Turn on TLP for this test.
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
2482 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2429 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2483 2430
2484 // Don't lose a packet on an ack, and nothing is retransmitted. 2431 // Don't lose a packet on an ack, and nothing is retransmitted.
2485 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2432 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2486 QuicAckFrame ack_one = InitAckFrame(1); 2433 QuicAckFrame ack_one = InitAckFrame(1);
2487 ProcessAckPacket(&ack_one); 2434 ProcessAckPacket(&ack_one);
2488 2435
2489 // Lose a packet and ensure it triggers retransmission. 2436 // Lose a packet and ensure it triggers retransmission.
2490 QuicAckFrame nack_two = InitAckFrame(3); 2437 QuicAckFrame nack_two = InitAckFrame(3);
2491 NackPacket(2, &nack_two); 2438 NackPacket(2, &nack_two);
2492 if (FLAGS_quic_general_loss_algorithm) { 2439 SendAlgorithmInterface::CongestionVector lost_packets;
2493 SendAlgorithmInterface::CongestionVector lost_packets; 2440 lost_packets.push_back(std::make_pair(2, kMaxPacketSize));
2494 lost_packets.push_back(std::make_pair(2, kMaxPacketSize)); 2441 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2495 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2442 .WillOnce(SetArgPointee<3>(lost_packets));
2496 .WillOnce(SetArgPointee<3>(lost_packets));
2497 } else {
2498 PacketNumberSet lost_packets;
2499 lost_packets.insert(2);
2500 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2501 .WillOnce(Return(lost_packets));
2502 }
2503 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2443 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2504 EXPECT_CALL(*send_algorithm_, 2444 EXPECT_CALL(*send_algorithm_,
2505 OnPacketSent(_, _, _, second_packet_size - kQuicVersionSize, _)) 2445 OnPacketSent(_, _, _, second_packet_size - kQuicVersionSize, _))
2506 .Times(1); 2446 .Times(1);
2507 ProcessAckPacket(&nack_two); 2447 ProcessAckPacket(&nack_two);
2508 } 2448 }
2509 2449
2510 TEST_P(QuicConnectionTest, DoNotSendQueuedPacketForResetStream) { 2450 TEST_P(QuicConnectionTest, DoNotSendQueuedPacketForResetStream) {
2511 // Block the connection to queue the packet. 2451 // Block the connection to queue the packet.
2512 BlockOnNextWrite(); 2452 BlockOnNextWrite();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2556 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet); 2496 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet);
2557 SendStreamDataToPeer(stream_id, "fooos", 7, !kFin, &last_packet); 2497 SendStreamDataToPeer(stream_id, "fooos", 7, !kFin, &last_packet);
2558 2498
2559 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 2499 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
2560 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14); 2500 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14);
2561 2501
2562 // Lose a packet and ensure it does not trigger retransmission. 2502 // Lose a packet and ensure it does not trigger retransmission.
2563 QuicAckFrame nack_two = InitAckFrame(last_packet); 2503 QuicAckFrame nack_two = InitAckFrame(last_packet);
2564 NackPacket(last_packet - 1, &nack_two); 2504 NackPacket(last_packet - 1, &nack_two);
2565 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2505 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2566 if (FLAGS_quic_general_loss_algorithm) { 2506 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2567 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2568 } else {
2569 PacketNumberSet lost_packets;
2570 lost_packets.insert(last_packet - 1);
2571 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2572 .WillOnce(Return(lost_packets));
2573 }
2574 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2507 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2575 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 2508 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
2576 ProcessAckPacket(&nack_two); 2509 ProcessAckPacket(&nack_two);
2577 } 2510 }
2578 2511
2579 TEST_P(QuicConnectionTest, RetransmitForQuicRstStreamNoErrorOnNack) { 2512 TEST_P(QuicConnectionTest, RetransmitForQuicRstStreamNoErrorOnNack) {
2580 QuicStreamId stream_id = 2; 2513 QuicStreamId stream_id = 2;
2581 QuicPacketNumber last_packet; 2514 QuicPacketNumber last_packet;
2582 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_packet); 2515 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_packet);
2583 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet); 2516 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet);
2584 SendStreamDataToPeer(stream_id, "fooos", 7, !kFin, &last_packet); 2517 SendStreamDataToPeer(stream_id, "fooos", 7, !kFin, &last_packet);
2585 2518
2586 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 2519 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
2587 connection_.SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 14); 2520 connection_.SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 14);
2588 2521
2589 // Lose a packet, ensure it triggers retransmission on QUIC_VERSION_29 2522 // Lose a packet, ensure it triggers retransmission on QUIC_VERSION_29
2590 // or later versions. 2523 // or later versions.
2591 QuicAckFrame nack_two = InitAckFrame(last_packet); 2524 QuicAckFrame nack_two = InitAckFrame(last_packet);
2592 NackPacket(last_packet - 1, &nack_two); 2525 NackPacket(last_packet - 1, &nack_two);
2593 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2526 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2594 if (FLAGS_quic_general_loss_algorithm) { 2527 SendAlgorithmInterface::CongestionVector lost_packets;
2595 SendAlgorithmInterface::CongestionVector lost_packets; 2528 lost_packets.push_back(std::make_pair(last_packet - 1, kMaxPacketSize));
2596 lost_packets.push_back(std::make_pair(last_packet - 1, kMaxPacketSize)); 2529 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2597 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2530 .WillOnce(SetArgPointee<3>(lost_packets));
2598 .WillOnce(SetArgPointee<3>(lost_packets));
2599 } else {
2600 PacketNumberSet lost_packets;
2601 lost_packets.insert(last_packet - 1);
2602 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2603 .WillOnce(Return(lost_packets));
2604 }
2605 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2531 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2606 if (version() > QUIC_VERSION_28) { 2532 if (version() > QUIC_VERSION_28) {
2607 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 2533 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
2608 .Times(AtLeast(1)); 2534 .Times(AtLeast(1));
2609 } else { 2535 } else {
2610 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 2536 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
2611 } 2537 }
2612 ProcessAckPacket(&nack_two); 2538 ProcessAckPacket(&nack_two);
2613 } 2539 }
2614 2540
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2659 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet); 2585 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet);
2660 BlockOnNextWrite(); 2586 BlockOnNextWrite();
2661 connection_.SendStreamDataWithString(stream_id, "fooos", 7, !kFin, nullptr); 2587 connection_.SendStreamDataWithString(stream_id, "fooos", 7, !kFin, nullptr);
2662 2588
2663 // Lose a packet which will trigger a pending retransmission. 2589 // Lose a packet which will trigger a pending retransmission.
2664 QuicAckFrame ack = InitAckFrame(last_packet); 2590 QuicAckFrame ack = InitAckFrame(last_packet);
2665 NackPacket(last_packet - 1, &ack); 2591 NackPacket(last_packet - 1, &ack);
2666 PacketNumberSet lost_packets; 2592 PacketNumberSet lost_packets;
2667 lost_packets.insert(last_packet - 1); 2593 lost_packets.insert(last_packet - 1);
2668 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2594 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2669 if (FLAGS_quic_general_loss_algorithm) { 2595 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2670 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2671 } else {
2672 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2673 .WillOnce(Return(lost_packets));
2674 }
2675 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2596 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2676 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 2597 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
2677 ProcessAckPacket(&ack); 2598 ProcessAckPacket(&ack);
2678 2599
2679 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14); 2600 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14);
2680 2601
2681 // Unblock the connection and verify that the RST_STREAM is sent but not the 2602 // Unblock the connection and verify that the RST_STREAM is sent but not the
2682 // second data packet nor a retransmit. 2603 // second data packet nor a retransmit.
2683 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 2604 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
2684 writer_->SetWritable(); 2605 writer_->SetWritable();
2685 connection_.OnCanWrite(); 2606 connection_.OnCanWrite();
2686 EXPECT_EQ(1u, writer_->frame_count()); 2607 EXPECT_EQ(1u, writer_->frame_count());
2687 EXPECT_EQ(1u, writer_->rst_stream_frames().size()); 2608 EXPECT_EQ(1u, writer_->rst_stream_frames().size());
2688 EXPECT_EQ(stream_id, writer_->rst_stream_frames().front().stream_id); 2609 EXPECT_EQ(stream_id, writer_->rst_stream_frames().front().stream_id);
2689 } 2610 }
2690 2611
2691 TEST_P(QuicConnectionTest, SendPendingRetransmissionForQuicRstStreamNoError) { 2612 TEST_P(QuicConnectionTest, SendPendingRetransmissionForQuicRstStreamNoError) {
2692 QuicStreamId stream_id = 2; 2613 QuicStreamId stream_id = 2;
2693 QuicPacketNumber last_packet; 2614 QuicPacketNumber last_packet;
2694 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_packet); 2615 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_packet);
2695 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet); 2616 SendStreamDataToPeer(stream_id, "foos", 3, !kFin, &last_packet);
2696 BlockOnNextWrite(); 2617 BlockOnNextWrite();
2697 connection_.SendStreamDataWithString(stream_id, "fooos", 7, !kFin, nullptr); 2618 connection_.SendStreamDataWithString(stream_id, "fooos", 7, !kFin, nullptr);
2698 2619
2699 // Lose a packet which will trigger a pending retransmission. 2620 // Lose a packet which will trigger a pending retransmission.
2700 QuicAckFrame ack = InitAckFrame(last_packet); 2621 QuicAckFrame ack = InitAckFrame(last_packet);
2701 NackPacket(last_packet - 1, &ack); 2622 NackPacket(last_packet - 1, &ack);
2702 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2623 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2703 if (FLAGS_quic_general_loss_algorithm) { 2624 SendAlgorithmInterface::CongestionVector lost_packets;
2704 SendAlgorithmInterface::CongestionVector lost_packets; 2625 lost_packets.push_back(std::make_pair(last_packet - 1, kMaxPacketSize));
2705 lost_packets.push_back(std::make_pair(last_packet - 1, kMaxPacketSize)); 2626 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2706 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2627 .WillOnce(SetArgPointee<3>(lost_packets));
2707 .WillOnce(SetArgPointee<3>(lost_packets));
2708 } else {
2709 PacketNumberSet lost_packets;
2710 lost_packets.insert(last_packet - 1);
2711 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2712 .WillOnce(Return(lost_packets));
2713 }
2714 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2628 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2715 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 2629 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
2716 ProcessAckPacket(&ack); 2630 ProcessAckPacket(&ack);
2717 2631
2718 connection_.SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 14); 2632 connection_.SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 14);
2719 2633
2720 // Unblock the connection and verify that the RST_STREAM is sent and the 2634 // Unblock the connection and verify that the RST_STREAM is sent and the
2721 // second data packet or a retransmit is only sent on QUIC_VERSION_29 or 2635 // second data packet or a retransmit is only sent on QUIC_VERSION_29 or
2722 // later versions. 2636 // later versions.
2723 if (version() > QUIC_VERSION_28) { 2637 if (version() > QUIC_VERSION_28) {
(...skipping 21 matching lines...) Expand all
2745 2659
2746 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2660 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2747 2661
2748 // Instigate a loss with an ack. 2662 // Instigate a loss with an ack.
2749 QuicAckFrame nack_two = InitAckFrame(3); 2663 QuicAckFrame nack_two = InitAckFrame(3);
2750 NackPacket(2, &nack_two); 2664 NackPacket(2, &nack_two);
2751 // The first nack should trigger a fast retransmission, but we'll be 2665 // The first nack should trigger a fast retransmission, but we'll be
2752 // write blocked, so the packet will be queued. 2666 // write blocked, so the packet will be queued.
2753 BlockOnNextWrite(); 2667 BlockOnNextWrite();
2754 2668
2755 if (FLAGS_quic_general_loss_algorithm) { 2669 SendAlgorithmInterface::CongestionVector lost_packets;
2756 SendAlgorithmInterface::CongestionVector lost_packets; 2670 lost_packets.push_back(std::make_pair(2, kMaxPacketSize));
2757 lost_packets.push_back(std::make_pair(2, kMaxPacketSize)); 2671 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2758 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2672 .WillOnce(SetArgPointee<3>(lost_packets));
2759 .WillOnce(SetArgPointee<3>(lost_packets));
2760 } else {
2761 PacketNumberSet lost_packets;
2762 lost_packets.insert(2);
2763 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2764 .WillOnce(Return(lost_packets));
2765 }
2766 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2673 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2767 ProcessAckPacket(&nack_two); 2674 ProcessAckPacket(&nack_two);
2768 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 2675 EXPECT_EQ(1u, connection_.NumQueuedPackets());
2769 2676
2770 // Now, ack the previous transmission. 2677 // Now, ack the previous transmission.
2771 if (FLAGS_quic_general_loss_algorithm) { 2678 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2772 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
2773 } else {
2774 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2775 .WillOnce(Return(PacketNumberSet()));
2776 }
2777 QuicAckFrame ack_all = InitAckFrame(3); 2679 QuicAckFrame ack_all = InitAckFrame(3);
2778 ProcessAckPacket(&ack_all); 2680 ProcessAckPacket(&ack_all);
2779 2681
2780 // Unblock the socket and attempt to send the queued packets. However, 2682 // Unblock the socket and attempt to send the queued packets. However,
2781 // since the previous transmission has been acked, we will not 2683 // since the previous transmission has been acked, we will not
2782 // send the retransmission. 2684 // send the retransmission.
2783 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 2685 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
2784 2686
2785 writer_->SetWritable(); 2687 writer_->SetWritable();
2786 connection_.OnCanWrite(); 2688 connection_.OnCanWrite();
2787 2689
2788 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 2690 EXPECT_EQ(0u, connection_.NumQueuedPackets());
2789 } 2691 }
2790 2692
2791 TEST_P(QuicConnectionTest, RetransmitNackedLargestObserved) { 2693 TEST_P(QuicConnectionTest, RetransmitNackedLargestObserved) {
2792 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2694 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2793 QuicPacketNumber largest_observed; 2695 QuicPacketNumber largest_observed;
2794 QuicByteCount packet_size; 2696 QuicByteCount packet_size;
2795 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 2697 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
2796 .WillOnce(DoAll(SaveArg<2>(&largest_observed), SaveArg<3>(&packet_size), 2698 .WillOnce(DoAll(SaveArg<2>(&largest_observed), SaveArg<3>(&packet_size),
2797 Return(true))); 2699 Return(true)));
2798 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 2700 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
2799 2701
2800 QuicAckFrame frame = InitAckFrame(1); 2702 QuicAckFrame frame = InitAckFrame(1);
2801 NackPacket(largest_observed, &frame); 2703 NackPacket(largest_observed, &frame);
2802 // The first nack should retransmit the largest observed packet. 2704 // The first nack should retransmit the largest observed packet.
2803 if (FLAGS_quic_general_loss_algorithm) { 2705 SendAlgorithmInterface::CongestionVector lost_packets;
2804 SendAlgorithmInterface::CongestionVector lost_packets; 2706 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
2805 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 2707 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2806 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 2708 .WillOnce(SetArgPointee<3>(lost_packets));
2807 .WillOnce(SetArgPointee<3>(lost_packets));
2808 } else {
2809 PacketNumberSet lost_packets;
2810 lost_packets.insert(1);
2811 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2812 .WillOnce(Return(lost_packets));
2813 }
2814 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2709 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2815 EXPECT_CALL(*send_algorithm_, 2710 EXPECT_CALL(*send_algorithm_,
2816 OnPacketSent(_, _, _, packet_size - kQuicVersionSize, _)); 2711 OnPacketSent(_, _, _, packet_size - kQuicVersionSize, _));
2817 ProcessAckPacket(&frame); 2712 ProcessAckPacket(&frame);
2818 } 2713 }
2819 2714
2820 TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) { 2715 TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) {
2821 for (int i = 0; i < 10; ++i) { 2716 for (int i = 0; i < 10; ++i) {
2822 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 2717 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
2823 connection_.SendStreamDataWithString(3, "foo", i * 3, !kFin, nullptr); 2718 connection_.SendStreamDataWithString(3, "foo", i * 3, !kFin, nullptr);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2923 } 2818 }
2924 2819
2925 // Ack 15, nack 1-14. 2820 // Ack 15, nack 1-14.
2926 2821
2927 QuicAckFrame nack = InitAckFrame(15); 2822 QuicAckFrame nack = InitAckFrame(15);
2928 for (int i = 1; i < 15; ++i) { 2823 for (int i = 1; i < 15; ++i) {
2929 NackPacket(i, &nack); 2824 NackPacket(i, &nack);
2930 } 2825 }
2931 2826
2932 // 14 packets have been NACK'd and lost. 2827 // 14 packets have been NACK'd and lost.
2933 if (FLAGS_quic_general_loss_algorithm) { 2828 SendAlgorithmInterface::CongestionVector lost_packets;
2934 SendAlgorithmInterface::CongestionVector lost_packets; 2829 for (int i = 1; i < 15; ++i) {
2935 for (int i = 1; i < 15; ++i) { 2830 lost_packets.push_back(std::make_pair(i, kMaxPacketSize));
2936 lost_packets.push_back(std::make_pair(i, kMaxPacketSize));
2937 }
2938 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2939 .WillOnce(SetArgPointee<3>(lost_packets));
2940 } else {
2941 PacketNumberSet lost_packets;
2942 for (int i = 1; i < 15; ++i) {
2943 lost_packets.insert(i);
2944 }
2945 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
2946 .WillOnce(Return(lost_packets));
2947 } 2831 }
2832 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
2833 .WillOnce(SetArgPointee<3>(lost_packets));
2948 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 2834 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
2949 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14); 2835 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14);
2950 ProcessAckPacket(&nack); 2836 ProcessAckPacket(&nack);
2951 } 2837 }
2952 2838
2953 // Test sending multiple acks from the connection to the session. 2839 // Test sending multiple acks from the connection to the session.
2954 TEST_P(QuicConnectionTest, MultipleAcks) { 2840 TEST_P(QuicConnectionTest, MultipleAcks) {
2955 QuicPacketNumber last_packet; 2841 QuicPacketNumber last_packet;
2956 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 2842 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
2957 EXPECT_EQ(1u, last_packet); 2843 EXPECT_EQ(1u, last_packet);
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
4601 4487
4602 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { 4488 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) {
4603 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4489 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
4604 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, 4490 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin,
4605 nullptr); 4491 nullptr);
4606 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, 4492 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin,
4607 nullptr); 4493 nullptr);
4608 // Ack the second packet, which will retransmit the first packet. 4494 // Ack the second packet, which will retransmit the first packet.
4609 QuicAckFrame ack = InitAckFrame(2); 4495 QuicAckFrame ack = InitAckFrame(2);
4610 NackPacket(1, &ack); 4496 NackPacket(1, &ack);
4611 if (FLAGS_quic_general_loss_algorithm) { 4497 SendAlgorithmInterface::CongestionVector lost_packets;
4612 SendAlgorithmInterface::CongestionVector lost_packets; 4498 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
4613 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 4499 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
4614 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 4500 .WillOnce(SetArgPointee<3>(lost_packets));
4615 .WillOnce(SetArgPointee<3>(lost_packets));
4616 } else {
4617 PacketNumberSet lost_packets;
4618 lost_packets.insert(1);
4619 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
4620 .WillOnce(Return(lost_packets));
4621 }
4622 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 4501 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
4623 ProcessAckPacket(&ack); 4502 ProcessAckPacket(&ack);
4624 EXPECT_EQ(1u, writer_->frame_count()); 4503 EXPECT_EQ(1u, writer_->frame_count());
4625 EXPECT_EQ(1u, writer_->stream_frames().size()); 4504 EXPECT_EQ(1u, writer_->stream_frames().size());
4626 writer_->Reset(); 4505 writer_->Reset();
4627 4506
4628 // Now ack the retransmission, which will both raise the high water mark 4507 // Now ack the retransmission, which will both raise the high water mark
4629 // and see if there is more data to send. 4508 // and see if there is more data to send.
4630 ack = InitAckFrame(3); 4509 ack = InitAckFrame(3);
4631 NackPacket(1, &ack); 4510 NackPacket(1, &ack);
4632 if (FLAGS_quic_general_loss_algorithm) { 4511 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
4633 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
4634 } else {
4635 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
4636 .WillOnce(Return(PacketNumberSet()));
4637 }
4638 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 4512 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
4639 ProcessAckPacket(&ack); 4513 ProcessAckPacket(&ack);
4640 4514
4641 // Check that no packet is sent and the ack alarm isn't set. 4515 // Check that no packet is sent and the ack alarm isn't set.
4642 EXPECT_EQ(0u, writer_->frame_count()); 4516 EXPECT_EQ(0u, writer_->frame_count());
4643 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4517 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4644 writer_->Reset(); 4518 writer_->Reset();
4645 4519
4646 // Send the same ack, but send both data and an ack together. 4520 // Send the same ack, but send both data and an ack together.
4647 ack = InitAckFrame(3); 4521 ack = InitAckFrame(3);
4648 NackPacket(1, &ack); 4522 NackPacket(1, &ack);
4649 if (FLAGS_quic_general_loss_algorithm) { 4523 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
4650 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
4651 } else {
4652 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
4653 .WillOnce(Return(PacketNumberSet()));
4654 }
4655 EXPECT_CALL(visitor_, OnCanWrite()) 4524 EXPECT_CALL(visitor_, OnCanWrite())
4656 .WillOnce(IgnoreResult(InvokeWithoutArgs( 4525 .WillOnce(IgnoreResult(InvokeWithoutArgs(
4657 &connection_, &TestConnection::EnsureWritableAndSendStreamData5))); 4526 &connection_, &TestConnection::EnsureWritableAndSendStreamData5)));
4658 ProcessAckPacket(&ack); 4527 ProcessAckPacket(&ack);
4659 4528
4660 // Check that ack is bundled with outgoing data and the delayed ack 4529 // Check that ack is bundled with outgoing data and the delayed ack
4661 // alarm is reset. 4530 // alarm is reset.
4662 EXPECT_EQ(3u, writer_->frame_count()); 4531 EXPECT_EQ(3u, writer_->frame_count());
4663 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 4532 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
4664 EXPECT_FALSE(writer_->ack_frames().empty()); 4533 EXPECT_FALSE(writer_->ack_frames().empty());
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
5007 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(3); 4876 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(3);
5008 4877
5009 // Retransmit due to RTO. 4878 // Retransmit due to RTO.
5010 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10)); 4879 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
5011 connection_.GetRetransmissionAlarm()->Fire(); 4880 connection_.GetRetransmissionAlarm()->Fire();
5012 4881
5013 // Retransmit due to explicit nacks. 4882 // Retransmit due to explicit nacks.
5014 QuicAckFrame nack_three = InitAckFrame(4); 4883 QuicAckFrame nack_three = InitAckFrame(4);
5015 NackPacket(3, &nack_three); 4884 NackPacket(3, &nack_three);
5016 NackPacket(1, &nack_three); 4885 NackPacket(1, &nack_three);
5017 if (FLAGS_quic_general_loss_algorithm) { 4886 SendAlgorithmInterface::CongestionVector lost_packets;
5018 SendAlgorithmInterface::CongestionVector lost_packets; 4887 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
5019 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 4888 lost_packets.push_back(std::make_pair(3, kMaxPacketSize));
5020 lost_packets.push_back(std::make_pair(3, kMaxPacketSize)); 4889 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
5021 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 4890 .WillOnce(SetArgPointee<3>(lost_packets));
5022 .WillOnce(SetArgPointee<3>(lost_packets));
5023 } else {
5024 PacketNumberSet lost_packets;
5025 lost_packets.insert(1);
5026 lost_packets.insert(3);
5027 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5028 .WillOnce(Return(lost_packets));
5029 }
5030 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 4891 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5031 EXPECT_CALL(visitor_, OnCanWrite()); 4892 EXPECT_CALL(visitor_, OnCanWrite());
5032 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4893 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
5033 ProcessAckPacket(&nack_three); 4894 ProcessAckPacket(&nack_three);
5034 4895
5035 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) 4896 EXPECT_CALL(*send_algorithm_, BandwidthEstimate())
5036 .WillOnce(Return(QuicBandwidth::Zero())); 4897 .WillOnce(Return(QuicBandwidth::Zero()));
5037 4898
5038 const QuicConnectionStats& stats = connection_.GetStats(); 4899 const QuicConnectionStats& stats = connection_.GetStats();
5039 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize, 4900 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize,
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
5207 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, listener.get()); 5068 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, listener.get());
5208 5069
5209 // Send some other data which we will ACK. 5070 // Send some other data which we will ACK.
5210 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, nullptr); 5071 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, nullptr);
5211 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, nullptr); 5072 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, nullptr);
5212 5073
5213 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1 5074 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1
5214 // which we registered to be notified about. 5075 // which we registered to be notified about.
5215 QuicAckFrame frame = InitAckFrame(3); 5076 QuicAckFrame frame = InitAckFrame(3);
5216 NackPacket(1, &frame); 5077 NackPacket(1, &frame);
5217 if (FLAGS_quic_general_loss_algorithm) { 5078 SendAlgorithmInterface::CongestionVector lost_packets;
5218 SendAlgorithmInterface::CongestionVector lost_packets; 5079 lost_packets.push_back(std::make_pair(1, kMaxPacketSize));
5219 lost_packets.push_back(std::make_pair(1, kMaxPacketSize)); 5080 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
5220 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 5081 .WillOnce(SetArgPointee<3>(lost_packets));
5221 .WillOnce(SetArgPointee<3>(lost_packets));
5222 } else {
5223 PacketNumberSet lost_packets;
5224 lost_packets.insert(1);
5225 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5226 .WillOnce(Return(lost_packets));
5227 }
5228 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5082 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5229 ProcessAckPacket(&frame); 5083 ProcessAckPacket(&frame);
5230 } 5084 }
5231 5085
5232 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) { 5086 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) {
5233 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 5087 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
5234 5088
5235 // Create a listener which we expect to be called. 5089 // Create a listener which we expect to be called.
5236 scoped_refptr<MockAckListener> listener(new MockAckListener); 5090 scoped_refptr<MockAckListener> listener(new MockAckListener);
5237 EXPECT_CALL(*listener, OnPacketRetransmitted(3)).Times(1); 5091 EXPECT_CALL(*listener, OnPacketRetransmitted(3)).Times(1);
5238 EXPECT_CALL(*listener, OnPacketAcked(3, _)).Times(1); 5092 EXPECT_CALL(*listener, OnPacketAcked(3, _)).Times(1);
5239 5093
5240 // Send four packets, and register to be notified on ACK of packet 2. 5094 // Send four packets, and register to be notified on ACK of packet 2.
5241 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 5095 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
5242 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, listener.get()); 5096 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, listener.get());
5243 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, nullptr); 5097 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, nullptr);
5244 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, nullptr); 5098 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, nullptr);
5245 5099
5246 // Now we receive ACK for packets 1, 3, and 4 and lose 2. 5100 // Now we receive ACK for packets 1, 3, and 4 and lose 2.
5247 QuicAckFrame frame = InitAckFrame(4); 5101 QuicAckFrame frame = InitAckFrame(4);
5248 NackPacket(2, &frame); 5102 NackPacket(2, &frame);
5249 if (FLAGS_quic_general_loss_algorithm) { 5103 SendAlgorithmInterface::CongestionVector lost_packets;
5250 SendAlgorithmInterface::CongestionVector lost_packets; 5104 lost_packets.push_back(std::make_pair(2, kMaxPacketSize));
5251 lost_packets.push_back(std::make_pair(2, kMaxPacketSize)); 5105 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
5252 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 5106 .WillOnce(SetArgPointee<3>(lost_packets));
5253 .WillOnce(SetArgPointee<3>(lost_packets));
5254 } else {
5255 PacketNumberSet lost_packets;
5256 lost_packets.insert(2);
5257 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5258 .WillOnce(Return(lost_packets));
5259 }
5260 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5107 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5261 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 5108 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
5262 ProcessAckPacket(&frame); 5109 ProcessAckPacket(&frame);
5263 5110
5264 // Now we get an ACK for packet 5 (retransmitted packet 2), which should 5111 // Now we get an ACK for packet 5 (retransmitted packet 2), which should
5265 // trigger the callback. 5112 // trigger the callback.
5266 if (FLAGS_quic_general_loss_algorithm) { 5113 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5267 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5268 } else {
5269 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5270 .WillOnce(Return(PacketNumberSet()));
5271 }
5272 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5114 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5273 QuicAckFrame second_ack_frame = InitAckFrame(5); 5115 QuicAckFrame second_ack_frame = InitAckFrame(5);
5274 ProcessAckPacket(&second_ack_frame); 5116 ProcessAckPacket(&second_ack_frame);
5275 } 5117 }
5276 5118
5277 // AckNotifierCallback is triggered by the ack of a packet that timed 5119 // AckNotifierCallback is triggered by the ack of a packet that timed
5278 // out and was retransmitted, even though the retransmission has a 5120 // out and was retransmitted, even though the retransmission has a
5279 // different packet number. 5121 // different packet number.
5280 TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) { 5122 TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) {
5281 // Create a listener which we expect to be called. 5123 // Create a listener which we expect to be called.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
5322 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 5164 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
5323 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, listener.get()); 5165 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, listener.get());
5324 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, nullptr); 5166 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, nullptr);
5325 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, nullptr); 5167 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, nullptr);
5326 5168
5327 // Now we receive ACK for packets 1, 3, and 4 and lose 2. 5169 // Now we receive ACK for packets 1, 3, and 4 and lose 2.
5328 QuicAckFrame frame = InitAckFrame(4); 5170 QuicAckFrame frame = InitAckFrame(4);
5329 NackPacket(2, &frame); 5171 NackPacket(2, &frame);
5330 EXPECT_CALL(*listener, OnPacketRetransmitted(_)); 5172 EXPECT_CALL(*listener, OnPacketRetransmitted(_));
5331 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 5173 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
5332 if (FLAGS_quic_general_loss_algorithm) { 5174 SendAlgorithmInterface::CongestionVector lost_packets;
5333 SendAlgorithmInterface::CongestionVector lost_packets; 5175 lost_packets.push_back(std::make_pair(2, kMaxPacketSize));
5334 lost_packets.push_back(std::make_pair(2, kMaxPacketSize)); 5176 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _))
5335 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _)) 5177 .WillOnce(SetArgPointee<3>(lost_packets));
5336 .WillOnce(SetArgPointee<3>(lost_packets));
5337 } else {
5338 PacketNumberSet lost_packets;
5339 lost_packets.insert(2);
5340 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5341 .WillOnce(Return(lost_packets));
5342 }
5343 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5178 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5344 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 5179 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
5345 ProcessAckPacket(&frame); 5180 ProcessAckPacket(&frame);
5346 5181
5347 // Now we get an ACK for packet 2, which was previously nacked. 5182 // Now we get an ACK for packet 2, which was previously nacked.
5348 EXPECT_CALL(*listener, OnPacketAcked(3, _)); 5183 EXPECT_CALL(*listener, OnPacketAcked(3, _));
5349 if (FLAGS_quic_general_loss_algorithm) { 5184 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5350 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5351 } else {
5352 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5353 .WillOnce(Return(PacketNumberSet()));
5354 }
5355 QuicAckFrame second_ack_frame = InitAckFrame(4); 5185 QuicAckFrame second_ack_frame = InitAckFrame(4);
5356 ProcessAckPacket(&second_ack_frame); 5186 ProcessAckPacket(&second_ack_frame);
5357 5187
5358 // Verify that the listener is not notified again when the 5188 // Verify that the listener is not notified again when the
5359 // retransmit is acked. 5189 // retransmit is acked.
5360 if (FLAGS_quic_general_loss_algorithm) { 5190 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5361 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5362 } else {
5363 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5364 .WillOnce(Return(PacketNumberSet()));
5365 }
5366 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5191 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5367 QuicAckFrame third_ack_frame = InitAckFrame(5); 5192 QuicAckFrame third_ack_frame = InitAckFrame(5);
5368 ProcessAckPacket(&third_ack_frame); 5193 ProcessAckPacket(&third_ack_frame);
5369 } 5194 }
5370 5195
5371 TEST_P(QuicConnectionTest, AckNotifierFECTriggerCallback) { 5196 TEST_P(QuicConnectionTest, AckNotifierFECTriggerCallback) {
5372 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 5197 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
5373 5198
5374 // Create a listener which we expect to be called. 5199 // Create a listener which we expect to be called.
5375 scoped_refptr<MockAckListener> listener(new MockAckListener); 5200 scoped_refptr<MockAckListener> listener(new MockAckListener);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
5595 // Evaluate CanWrite, and have it return a non-Zero value. 5420 // Evaluate CanWrite, and have it return a non-Zero value.
5596 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) 5421 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _))
5597 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); 5422 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1)));
5598 connection_.OnCanWrite(); 5423 connection_.OnCanWrite();
5599 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); 5424 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet());
5600 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(1)), 5425 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(1)),
5601 connection_.GetSendAlarm()->deadline()); 5426 connection_.GetSendAlarm()->deadline());
5602 5427
5603 // Process an ack and the send alarm will be set to the new 2ms delay. 5428 // Process an ack and the send alarm will be set to the new 2ms delay.
5604 QuicAckFrame ack = InitAckFrame(1); 5429 QuicAckFrame ack = InitAckFrame(1);
5605 if (FLAGS_quic_general_loss_algorithm) { 5430 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5606 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _));
5607 } else {
5608 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
5609 .WillOnce(Return(PacketNumberSet()));
5610 }
5611 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 5431 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
5612 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) 5432 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _))
5613 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(2))); 5433 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(2)));
5614 ProcessAckPacket(&ack); 5434 ProcessAckPacket(&ack);
5615 EXPECT_EQ(1u, writer_->frame_count()); 5435 EXPECT_EQ(1u, writer_->frame_count());
5616 EXPECT_EQ(1u, writer_->stream_frames().size()); 5436 EXPECT_EQ(1u, writer_->stream_frames().size());
5617 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); 5437 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet());
5618 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(2)), 5438 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(2)),
5619 connection_.GetSendAlarm()->deadline()); 5439 connection_.GetSendAlarm()->deadline());
5620 writer_->Reset(); 5440 writer_->Reset();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
5685 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); 5505 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece());
5686 EXPECT_DFATAL(ProcessFramePacket(QuicFrame(&stream_frame)), 5506 EXPECT_DFATAL(ProcessFramePacket(QuicFrame(&stream_frame)),
5687 "Received a packet with multipath flag on when multipath is " 5507 "Received a packet with multipath flag on when multipath is "
5688 "not enabled."); 5508 "not enabled.");
5689 EXPECT_FALSE(connection_.connected()); 5509 EXPECT_FALSE(connection_.connected());
5690 } 5510 }
5691 5511
5692 } // namespace 5512 } // namespace
5693 } // namespace test 5513 } // namespace test
5694 } // namespace net 5514 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/time_loss_algorithm_test.cc ('k') | net/quic/quic_flags.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698