OLD | NEW |
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/core/quic_connection.h" | 5 #include "net/quic/core/quic_connection.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <memory> | 8 #include <memory> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <utility> | 10 #include <utility> |
(...skipping 18 matching lines...) Expand all Loading... |
29 #include "net/quic/test_tools/quic_config_peer.h" | 29 #include "net/quic/test_tools/quic_config_peer.h" |
30 #include "net/quic/test_tools/quic_connection_peer.h" | 30 #include "net/quic/test_tools/quic_connection_peer.h" |
31 #include "net/quic/test_tools/quic_framer_peer.h" | 31 #include "net/quic/test_tools/quic_framer_peer.h" |
32 #include "net/quic/test_tools/quic_packet_creator_peer.h" | 32 #include "net/quic/test_tools/quic_packet_creator_peer.h" |
33 #include "net/quic/test_tools/quic_packet_generator_peer.h" | 33 #include "net/quic/test_tools/quic_packet_generator_peer.h" |
34 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 34 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
35 #include "net/quic/test_tools/quic_test_utils.h" | 35 #include "net/quic/test_tools/quic_test_utils.h" |
36 #include "net/quic/test_tools/simple_quic_framer.h" | 36 #include "net/quic/test_tools/simple_quic_framer.h" |
37 #include "net/test/gtest_util.h" | 37 #include "net/test/gtest_util.h" |
38 #include "testing/gmock/include/gmock/gmock.h" | 38 #include "testing/gmock/include/gmock/gmock.h" |
| 39 #include "testing/gmock_mutant.h" |
39 #include "testing/gtest/include/gtest/gtest.h" | 40 #include "testing/gtest/include/gtest/gtest.h" |
40 | 41 |
41 using std::string; | 42 using std::string; |
42 using testing::AnyNumber; | 43 using testing::AnyNumber; |
43 using testing::AtLeast; | 44 using testing::AtLeast; |
44 using testing::DoAll; | 45 using testing::DoAll; |
45 using testing::InSequence; | 46 using testing::InSequence; |
| 47 using testing::Invoke; |
46 using testing::InvokeWithoutArgs; | 48 using testing::InvokeWithoutArgs; |
47 using testing::NiceMock; | 49 using testing::NiceMock; |
48 using testing::Ref; | 50 using testing::Ref; |
49 using testing::Return; | 51 using testing::Return; |
50 using testing::SaveArg; | 52 using testing::SaveArg; |
51 using testing::SetArgPointee; | 53 using testing::SetArgPointee; |
52 using testing::StrictMock; | 54 using testing::StrictMock; |
53 using testing::_; | 55 using testing::_; |
54 | 56 |
55 namespace net { | 57 namespace net { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 } | 384 } |
383 | 385 |
384 const std::vector<std::unique_ptr<QuicStreamFrame>>& stream_frames() const { | 386 const std::vector<std::unique_ptr<QuicStreamFrame>>& stream_frames() const { |
385 return framer_.stream_frames(); | 387 return framer_.stream_frames(); |
386 } | 388 } |
387 | 389 |
388 const std::vector<QuicPingFrame>& ping_frames() const { | 390 const std::vector<QuicPingFrame>& ping_frames() const { |
389 return framer_.ping_frames(); | 391 return framer_.ping_frames(); |
390 } | 392 } |
391 | 393 |
| 394 const std::vector<QuicWindowUpdateFrame>& window_update_frames() const { |
| 395 return framer_.window_update_frames(); |
| 396 } |
| 397 |
392 const std::vector<QuicPaddingFrame>& padding_frames() const { | 398 const std::vector<QuicPaddingFrame>& padding_frames() const { |
393 return framer_.padding_frames(); | 399 return framer_.padding_frames(); |
394 } | 400 } |
395 | 401 |
396 size_t last_packet_size() { return last_packet_size_; } | 402 size_t last_packet_size() { return last_packet_size_; } |
397 | 403 |
398 const QuicVersionNegotiationPacket* version_negotiation_packet() { | 404 const QuicVersionNegotiationPacket* version_negotiation_packet() { |
399 return framer_.version_negotiation_packet(); | 405 return framer_.version_negotiation_packet(); |
400 } | 406 } |
401 | 407 |
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 EXPECT_EQ(1u, writer_->stream_frames().size()); | 1498 EXPECT_EQ(1u, writer_->stream_frames().size()); |
1493 EXPECT_FALSE(writer_->ack_frames().empty()); | 1499 EXPECT_FALSE(writer_->ack_frames().empty()); |
1494 | 1500 |
1495 // 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. |
1496 AckPacket(original, &frame2); | 1502 AckPacket(original, &frame2); |
1497 ProcessAckPacket(&frame2); | 1503 ProcessAckPacket(&frame2); |
1498 ProcessAckPacket(&frame2); | 1504 ProcessAckPacket(&frame2); |
1499 } | 1505 } |
1500 | 1506 |
1501 TEST_P(QuicConnectionTest, 20AcksCausesAckSend) { | 1507 TEST_P(QuicConnectionTest, 20AcksCausesAckSend) { |
| 1508 if (connection_.version() > QUIC_VERSION_38) { |
| 1509 return; |
| 1510 } |
1502 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1511 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1503 | 1512 |
1504 SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr); | 1513 SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr); |
1505 | 1514 |
1506 QuicAlarm* ack_alarm = QuicConnectionPeer::GetAckAlarm(&connection_); | 1515 QuicAlarm* ack_alarm = QuicConnectionPeer::GetAckAlarm(&connection_); |
1507 // But an ack with no missing packets will not send an ack. | 1516 // But an ack with no missing packets will not send an ack. |
1508 QuicAckFrame frame = InitAckFrame(1); | 1517 QuicAckFrame frame = InitAckFrame(1); |
1509 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); | 1518 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); |
1510 for (int i = 0; i < 19; ++i) { | 1519 for (int i = 0; i < 19; ++i) { |
1511 ProcessAckPacket(&frame); | 1520 ProcessAckPacket(&frame); |
1512 EXPECT_FALSE(ack_alarm->IsSet()); | 1521 EXPECT_FALSE(ack_alarm->IsSet()); |
1513 } | 1522 } |
1514 EXPECT_EQ(1u, writer_->packets_write_attempts()); | 1523 EXPECT_EQ(1u, writer_->packets_write_attempts()); |
1515 // The 20th ack packet will cause an ack to be sent. | 1524 // The 20th ack packet will cause an ack to be sent. |
1516 ProcessAckPacket(&frame); | 1525 ProcessAckPacket(&frame); |
1517 EXPECT_EQ(2u, writer_->packets_write_attempts()); | 1526 EXPECT_EQ(2u, writer_->packets_write_attempts()); |
1518 } | 1527 } |
1519 | 1528 |
| 1529 TEST_P(QuicConnectionTest, AckNeedsRetransmittableFrames) { |
| 1530 if (connection_.version() <= QUIC_VERSION_38) { |
| 1531 return; |
| 1532 } |
| 1533 |
| 1534 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 1535 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(99); |
| 1536 |
| 1537 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(19); |
| 1538 // Receives packets 1 - 39. |
| 1539 for (size_t i = 1; i <= 39; ++i) { |
| 1540 ProcessDataPacket(i); |
| 1541 } |
| 1542 // Receiving Packet 40 causes 20th ack to send. Session is informed and adds |
| 1543 // WINDOW_UPDATE. |
| 1544 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()) |
| 1545 .WillOnce( |
| 1546 Invoke(testing::CreateFunctor(&QuicConnection::SendWindowUpdate, |
| 1547 base::Unretained(&connection_), 0, 0))); |
| 1548 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); |
| 1549 EXPECT_EQ(0u, writer_->window_update_frames().size()); |
| 1550 ProcessDataPacket(40); |
| 1551 EXPECT_EQ(1u, writer_->window_update_frames().size()); |
| 1552 |
| 1553 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(9); |
| 1554 // Receives packets 41 - 59. |
| 1555 for (size_t i = 41; i <= 59; ++i) { |
| 1556 ProcessDataPacket(i); |
| 1557 } |
| 1558 // Send a packet containing stream frame. |
| 1559 SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr); |
| 1560 |
| 1561 // Session will not be informed until receiving another 20 packets. |
| 1562 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(19); |
| 1563 for (size_t i = 60; i <= 98; ++i) { |
| 1564 ProcessDataPacket(i); |
| 1565 EXPECT_EQ(0u, writer_->window_update_frames().size()); |
| 1566 } |
| 1567 // Session does not add a retransmittable frame. |
| 1568 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(1); |
| 1569 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); |
| 1570 EXPECT_EQ(0u, writer_->ping_frames().size()); |
| 1571 ProcessDataPacket(99); |
| 1572 EXPECT_EQ(0u, writer_->window_update_frames().size()); |
| 1573 // A ping frame will be added. |
| 1574 EXPECT_EQ(1u, writer_->ping_frames().size()); |
| 1575 } |
| 1576 |
1520 TEST_P(QuicConnectionTest, LeastUnackedLower) { | 1577 TEST_P(QuicConnectionTest, LeastUnackedLower) { |
1521 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1578 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1522 | 1579 |
1523 SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr); | 1580 SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr); |
1524 SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr); | 1581 SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr); |
1525 SendStreamDataToPeer(1, "eep", 6, NO_FIN, nullptr); | 1582 SendStreamDataToPeer(1, "eep", 6, NO_FIN, nullptr); |
1526 | 1583 |
1527 // Start out saying the least unacked is 2. | 1584 // Start out saying the least unacked is 2. |
1528 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5); | 1585 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5); |
1529 QuicStopWaitingFrame frame = InitStopWaitingFrame(2); | 1586 QuicStopWaitingFrame frame = InitStopWaitingFrame(2); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1564 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); | 1621 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); |
1565 | 1622 |
1566 // Nack the first packet and ack the rest, leaving a huge gap. | 1623 // Nack the first packet and ack the rest, leaving a huge gap. |
1567 QuicAckFrame frame1 = InitAckFrame(num_packets); | 1624 QuicAckFrame frame1 = InitAckFrame(num_packets); |
1568 NackPacket(1, &frame1); | 1625 NackPacket(1, &frame1); |
1569 ProcessAckPacket(&frame1); | 1626 ProcessAckPacket(&frame1); |
1570 } | 1627 } |
1571 | 1628 |
1572 TEST_P(QuicConnectionTest, TooManyReceivedPackets) { | 1629 TEST_P(QuicConnectionTest, TooManyReceivedPackets) { |
1573 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1630 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 1631 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
1574 // Miss 99 of every 100 packets for 5500 packets. | 1632 // Miss 99 of every 100 packets for 5500 packets. |
1575 for (QuicPacketNumber i = 1; i < kMaxTrackedPackets + 500; i += 100) { | 1633 for (QuicPacketNumber i = 1; i < kMaxTrackedPackets + 500; i += 100) { |
1576 ProcessPacket(i); | 1634 ProcessPacket(i); |
1577 if (!connection_.connected()) { | 1635 if (!connection_.connected()) { |
1578 break; | 1636 break; |
1579 } | 1637 } |
1580 } | 1638 } |
1581 } | 1639 } |
1582 | 1640 |
1583 TEST_P(QuicConnectionTest, LargestObservedLower) { | 1641 TEST_P(QuicConnectionTest, LargestObservedLower) { |
(...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3680 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); | 3738 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); |
3681 } else { | 3739 } else { |
3682 EXPECT_EQ(2u, writer_->frame_count()); | 3740 EXPECT_EQ(2u, writer_->frame_count()); |
3683 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3741 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3684 } | 3742 } |
3685 EXPECT_FALSE(writer_->ack_frames().empty()); | 3743 EXPECT_FALSE(writer_->ack_frames().empty()); |
3686 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3744 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3687 } | 3745 } |
3688 | 3746 |
3689 TEST_P(QuicConnectionTest, SendDelayedAckDecimation) { | 3747 TEST_P(QuicConnectionTest, SendDelayedAckDecimation) { |
| 3748 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
3690 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); | 3749 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); |
3691 | 3750 |
3692 const size_t kMinRttMs = 40; | 3751 const size_t kMinRttMs = 40; |
3693 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3752 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3694 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3753 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3695 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3754 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3696 // The ack time should be based on min_rtt/4, since it's less than the | 3755 // The ack time should be based on min_rtt/4, since it's less than the |
3697 // default delayed ack time. | 3756 // default delayed ack time. |
3698 QuicTime ack_time = clock_.ApproximateNow() + | 3757 QuicTime ack_time = clock_.ApproximateNow() + |
3699 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4); | 3758 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3735 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); | 3794 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); |
3736 } else { | 3795 } else { |
3737 EXPECT_EQ(2u, writer_->frame_count()); | 3796 EXPECT_EQ(2u, writer_->frame_count()); |
3738 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3797 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3739 } | 3798 } |
3740 EXPECT_FALSE(writer_->ack_frames().empty()); | 3799 EXPECT_FALSE(writer_->ack_frames().empty()); |
3741 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3800 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3742 } | 3801 } |
3743 | 3802 |
3744 TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) { | 3803 TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) { |
| 3804 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
3745 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); | 3805 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); |
3746 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 3806 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
3747 | 3807 |
3748 const size_t kMinRttMs = 40; | 3808 const size_t kMinRttMs = 40; |
3749 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3809 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3750 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3810 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3751 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3811 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3752 // The ack time should be based on min_rtt/8, since it's less than the | 3812 // The ack time should be based on min_rtt/8, since it's less than the |
3753 // default delayed ack time. | 3813 // default delayed ack time. |
3754 QuicTime ack_time = clock_.ApproximateNow() + | 3814 QuicTime ack_time = clock_.ApproximateNow() + |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3791 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); | 3851 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); |
3792 } else { | 3852 } else { |
3793 EXPECT_EQ(2u, writer_->frame_count()); | 3853 EXPECT_EQ(2u, writer_->frame_count()); |
3794 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3854 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3795 } | 3855 } |
3796 EXPECT_FALSE(writer_->ack_frames().empty()); | 3856 EXPECT_FALSE(writer_->ack_frames().empty()); |
3797 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3857 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3798 } | 3858 } |
3799 | 3859 |
3800 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) { | 3860 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) { |
| 3861 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
3801 QuicConnectionPeer::SetAckMode( | 3862 QuicConnectionPeer::SetAckMode( |
3802 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3863 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3803 | 3864 |
3804 const size_t kMinRttMs = 40; | 3865 const size_t kMinRttMs = 40; |
3805 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3866 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3806 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3867 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3807 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3868 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3808 // The ack time should be based on min_rtt/4, since it's less than the | 3869 // The ack time should be based on min_rtt/4, since it's less than the |
3809 // default delayed ack time. | 3870 // default delayed ack time. |
3810 QuicTime ack_time = clock_.ApproximateNow() + | 3871 QuicTime ack_time = clock_.ApproximateNow() + |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3855 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); | 3916 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); |
3856 } else { | 3917 } else { |
3857 EXPECT_EQ(2u, writer_->frame_count()); | 3918 EXPECT_EQ(2u, writer_->frame_count()); |
3858 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3919 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3859 } | 3920 } |
3860 EXPECT_FALSE(writer_->ack_frames().empty()); | 3921 EXPECT_FALSE(writer_->ack_frames().empty()); |
3861 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3922 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3862 } | 3923 } |
3863 | 3924 |
3864 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) { | 3925 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) { |
| 3926 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
3865 QuicConnectionPeer::SetAckMode( | 3927 QuicConnectionPeer::SetAckMode( |
3866 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3928 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3867 | 3929 |
3868 const size_t kMinRttMs = 40; | 3930 const size_t kMinRttMs = 40; |
3869 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3931 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3870 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3932 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3871 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3933 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3872 // The ack time should be based on min_rtt/4, since it's less than the | 3934 // The ack time should be based on min_rtt/4, since it's less than the |
3873 // default delayed ack time. | 3935 // default delayed ack time. |
3874 QuicTime ack_time = clock_.ApproximateNow() + | 3936 QuicTime ack_time = clock_.ApproximateNow() + |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3936 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); | 3998 EXPECT_TRUE(writer_->stop_waiting_frames().empty()); |
3937 } else { | 3999 } else { |
3938 EXPECT_EQ(2u, writer_->frame_count()); | 4000 EXPECT_EQ(2u, writer_->frame_count()); |
3939 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 4001 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3940 } | 4002 } |
3941 EXPECT_FALSE(writer_->ack_frames().empty()); | 4003 EXPECT_FALSE(writer_->ack_frames().empty()); |
3942 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 4004 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3943 } | 4005 } |
3944 | 4006 |
3945 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReorderingEighthRtt) { | 4007 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReorderingEighthRtt) { |
| 4008 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
3946 QuicConnectionPeer::SetAckMode( | 4009 QuicConnectionPeer::SetAckMode( |
3947 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 4010 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3948 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 4011 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
3949 | 4012 |
3950 const size_t kMinRttMs = 40; | 4013 const size_t kMinRttMs = 40; |
3951 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 4014 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3952 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 4015 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3953 QuicTime::Delta::Zero(), QuicTime::Zero()); | 4016 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3954 // The ack time should be based on min_rtt/8, since it's less than the | 4017 // The ack time should be based on min_rtt/8, since it's less than the |
3955 // default delayed ack time. | 4018 // default delayed ack time. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4002 } else { | 4065 } else { |
4003 EXPECT_EQ(2u, writer_->frame_count()); | 4066 EXPECT_EQ(2u, writer_->frame_count()); |
4004 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 4067 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
4005 } | 4068 } |
4006 EXPECT_FALSE(writer_->ack_frames().empty()); | 4069 EXPECT_FALSE(writer_->ack_frames().empty()); |
4007 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 4070 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
4008 } | 4071 } |
4009 | 4072 |
4010 TEST_P(QuicConnectionTest, | 4073 TEST_P(QuicConnectionTest, |
4011 SendDelayedAckDecimationWithLargeReorderingEighthRtt) { | 4074 SendDelayedAckDecimationWithLargeReorderingEighthRtt) { |
| 4075 EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber()); |
4012 QuicConnectionPeer::SetAckMode( | 4076 QuicConnectionPeer::SetAckMode( |
4013 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 4077 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
4014 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 4078 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
4015 | 4079 |
4016 const size_t kMinRttMs = 40; | 4080 const size_t kMinRttMs = 40; |
4017 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 4081 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
4018 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 4082 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
4019 QuicTime::Delta::Zero(), QuicTime::Zero()); | 4083 QuicTime::Delta::Zero(), QuicTime::Zero()); |
4020 // The ack time should be based on min_rtt/8, since it's less than the | 4084 // The ack time should be based on min_rtt/8, since it's less than the |
4021 // default delayed ack time. | 4085 // default delayed ack time. |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4335 false, false); | 4399 false, false); |
4336 } | 4400 } |
4337 | 4401 |
4338 TEST_P(QuicConnectionTest, PublicReset) { | 4402 TEST_P(QuicConnectionTest, PublicReset) { |
4339 QuicPublicResetPacket header; | 4403 QuicPublicResetPacket header; |
4340 // Public reset packet in only built by server. | 4404 // Public reset packet in only built by server. |
4341 header.public_header.connection_id = | 4405 header.public_header.connection_id = |
4342 GetPeerInMemoryConnectionId(connection_id_); | 4406 GetPeerInMemoryConnectionId(connection_id_); |
4343 header.public_header.reset_flag = true; | 4407 header.public_header.reset_flag = true; |
4344 header.public_header.version_flag = false; | 4408 header.public_header.version_flag = false; |
4345 header.rejected_packet_number = 10101; | |
4346 std::unique_ptr<QuicEncryptedPacket> packet( | 4409 std::unique_ptr<QuicEncryptedPacket> packet( |
4347 framer_.BuildPublicResetPacket(header)); | 4410 framer_.BuildPublicResetPacket(header)); |
4348 std::unique_ptr<QuicReceivedPacket> received( | 4411 std::unique_ptr<QuicReceivedPacket> received( |
4349 ConstructReceivedPacket(*packet, QuicTime::Zero())); | 4412 ConstructReceivedPacket(*packet, QuicTime::Zero())); |
4350 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, _, | 4413 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, _, |
4351 ConnectionCloseSource::FROM_PEER)); | 4414 ConnectionCloseSource::FROM_PEER)); |
4352 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); | 4415 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); |
4353 } | 4416 } |
4354 | 4417 |
4355 TEST_P(QuicConnectionTest, GoAway) { | 4418 TEST_P(QuicConnectionTest, GoAway) { |
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5153 error_details, ConnectionCloseSource::FROM_PEER)); | 5216 error_details, ConnectionCloseSource::FROM_PEER)); |
5154 connection_.set_perspective(Perspective::IS_CLIENT); | 5217 connection_.set_perspective(Perspective::IS_CLIENT); |
5155 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, | 5218 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, |
5156 error_details, | 5219 error_details, |
5157 ConnectionCloseBehavior::SILENT_CLOSE); | 5220 ConnectionCloseBehavior::SILENT_CLOSE); |
5158 } | 5221 } |
5159 | 5222 |
5160 } // namespace | 5223 } // namespace |
5161 } // namespace test | 5224 } // namespace test |
5162 } // namespace net | 5225 } // namespace net |
OLD | NEW |