diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 19:01:52 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 19:01:52 +0000 |
commit | 14a957522e13fd223f1fb9af4b8e61f1c3351189 (patch) | |
tree | 579532bdece6b154af9c86f98547e1fa07ff1f76 /net/quic/quic_sent_packet_manager_test.cc | |
parent | bc14fb52b468bbde0d12276d44f70b943f86c697 (diff) | |
download | chromium_src-14a957522e13fd223f1fb9af4b8e61f1c3351189.zip chromium_src-14a957522e13fd223f1fb9af4b8e61f1c3351189.tar.gz chromium_src-14a957522e13fd223f1fb9af4b8e61f1c3351189.tar.bz2 |
Land Recent QUIC Changes.
Fix QUIC faster stats reporting memory leaks and crashes by changing
lifetime once again. Now QuicAckNotify::DelegateInterface, one of the
base classes of QuicFasterStatsGatherer, is ref-counted so
QuicFasterStatsGatherer is guanrateed to be around until either faster
stats reporting happens or the last ack is delivered by the
QuicConnection.
Merge internal change: 59228960
https://codereview.chromium.org/126543005/
Add a test requested by rch@ in cr/59053386 to replicate a potential
DCHECK failure.
Merge internal change: 59147972
https://codereview.chromium.org/127563002/
QUIC - Syncing with internal source code. Fixing the include
order. Added missing OVERRIDE.
Merge internal change: 59061118
https://codereview.chromium.org/127553002/
Make TimeWaitListManager use PacketWriter's socket writability state.
Merge internal change: 59058066
https://codereview.chromium.org/127523002/
Make QuicPacketWriter keep track of socket writability; expose the
underlying writer's state instead of keeping a separate variable in
Dispatcher.
Eventually we'll thread this to session/connection as suggested in
a TODO.
Merge internal change: 59055651
https://codereview.chromium.org/127503002/
Fix a QUIC DCHECK flakiness caused by not checking if a packet is
pending before asserting that it's in the sent_packet_map.
Merge internal change: 59053386
https://codereview.chromium.org/127003002/
QUIC Cleanup to remove pending_packets from QuicSentPacketManager and
use a flag in unacked_packets_.
Replaced FindOrNull and FindOrDie with find() call.
Merge internal change: 59015729
https://codereview.chromium.org/126983002/
R=rch@chromium.org
Review URL: https://codereview.chromium.org/127633002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243619 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/quic/quic_sent_packet_manager_test.cc')
-rw-r--r-- | net/quic/quic_sent_packet_manager_test.cc | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/net/quic/quic_sent_packet_manager_test.cc b/net/quic/quic_sent_packet_manager_test.cc index 4b576c6..b0e861d 100644 --- a/net/quic/quic_sent_packet_manager_test.cc +++ b/net/quic/quic_sent_packet_manager_test.cc @@ -53,21 +53,6 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { } } - void VerifyPendingPackets(QuicPacketSequenceNumber* packets, - size_t num_packets) { - const SequenceNumberSet& pending_packets = - QuicSentPacketManagerPeer::GetPendingPackets(&manager_); - if (num_packets == 0) { - EXPECT_TRUE(pending_packets.empty()); - return; - } - - EXPECT_EQ(num_packets, pending_packets.size()); - for (size_t i = 0; i < num_packets; ++i) { - EXPECT_TRUE(ContainsKey(pending_packets, packets[i])) << packets[i]; - } - } - void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, size_t num_packets) { SequenceNumberSet unacked = manager_.GetUnackedPackets(); @@ -267,7 +252,7 @@ TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { // 2 remains unacked, but no packets have retransmittable data. QuicPacketSequenceNumber unacked[] = { 2 }; VerifyUnackedPackets(unacked, arraysize(unacked)); - VerifyPendingPackets(NULL, 0); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); VerifyRetransmittablePackets(NULL, 0); // Verify that the retransmission alarm would not fire, @@ -310,7 +295,7 @@ TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { // No packets remain unacked. VerifyUnackedPackets(NULL, 0); - VerifyPendingPackets(NULL, 0); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); VerifyRetransmittablePackets(NULL, 0); // Verify that the retransmission alarm would not fire, @@ -336,7 +321,7 @@ TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded. VerifyUnackedPackets(NULL, 0); - VerifyPendingPackets(NULL, 0); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); VerifyRetransmittablePackets(NULL, 0); // Verify that the retransmission alarm would not fire, @@ -358,7 +343,7 @@ TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { // 3 remains unacked, but no packets have retransmittable data. QuicPacketSequenceNumber unacked[] = { 3 }; VerifyUnackedPackets(unacked, arraysize(unacked)); - VerifyPendingPackets(NULL, 0); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); VerifyRetransmittablePackets(NULL, 0); // Verify that the retransmission alarm would not fire to abandon packet 3. @@ -1034,6 +1019,42 @@ TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); } +TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { + // Send 2 crypto packets and serialize 1 data packet. + const size_t kNumSentCryptoPackets = 2; + for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { + SendCryptoPacket(i); + } + SerializedPacket packet(CreateDataPacket(3)); + manager_.OnSerializedPacket(packet); + EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); + + // Retransmit 2 crypto packets, but not the serialized packet. + EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); + manager_.OnRetransmissionTimeout(); + RetransmitNextPacket(6); + RetransmitNextPacket(7); + EXPECT_FALSE(manager_.HasPendingRetransmissions()); + EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); +} + +TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { + QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); + // Serialize two data packets and send the latter. + SerializedPacket packet(CreateDataPacket(1)); + manager_.OnSerializedPacket(packet); + SendDataPacket(2); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); + EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); + + // Retransmit 1 unacked packets, but not the first serialized packet. + manager_.OnRetransmissionTimeout(); + RetransmitNextPacket(3); + EXPECT_FALSE(manager_.HasPendingRetransmissions()); + EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); + EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); +} + TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { // Send 100 packets and then ensure all are abandoned when the RTO fires. const size_t kNumSentPackets = 100; |