summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_sent_packet_manager_test.cc
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-08 19:01:52 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-08 19:01:52 +0000
commit14a957522e13fd223f1fb9af4b8e61f1c3351189 (patch)
tree579532bdece6b154af9c86f98547e1fa07ff1f76 /net/quic/quic_sent_packet_manager_test.cc
parentbc14fb52b468bbde0d12276d44f70b943f86c697 (diff)
downloadchromium_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.cc59
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;