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-05-13 07:44:22 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-13 07:44:22 +0000
commit6d9ca3b790e9cc01e1ae0b39730c27423e2e7d7f (patch)
treee34edb10a3166cfdf5f4e0f71e8e8e754b801ffe /net/quic/quic_sent_packet_manager_test.cc
parent4c900827947228c8642a594d682817444cd4a559 (diff)
downloadchromium_src-6d9ca3b790e9cc01e1ae0b39730c27423e2e7d7f.zip
chromium_src-6d9ca3b790e9cc01e1ae0b39730c27423e2e7d7f.tar.gz
chromium_src-6d9ca3b790e9cc01e1ae0b39730c27423e2e7d7f.tar.bz2
Land Recent QUIC Changes.
Fix a flaky EndToEndTest where packet loss is possible with a large buffer that may overrun. Merge internal change: 66821654 https://codereview.chromium.org/280383003/ QUIC change to invoke SetNotPending for retransmissions in MarkForRetransmission and a minor cleanup in UnackedPacketMap. Merge internal change: 66729074 https://codereview.chromium.org/278823005/ Remove unused IsHandshake argument to QuicConnection::OnCanWrite. Merge internal change: 66652078 https://codereview.chromium.org/286563003/ Revert of Fix a bug where if a crypto packet is spuriously retransmitted and thenneutered, it remains in missing_packets until the end of the connection. Reverted chromium cl: https://codereview.chromium.org/270213002/ Rollback of Merge internal change: 66262890. *** Reason for rollback *** This appears to have caused a major QUIC loadtest regression on internal server. Additionally, it's wrong in some other subtle ways, so rolling it back and trying a new approach. *** Original change description *** Fix a bug where if a crypto packet is spuriously retransmitted and then neutered, it remains in missing_packets until the end of the connection. *** Merge internal change: 66615668 https://codereview.chromium.org/287583002/ Revert of Minor QUIC cleanup to combine QuicUnackedPacketMap's RemovePacket and NeuterPacket into RemoveOrNeuterPacket. Rollback of merge internal change: 66306887 Rollback of Chromium's CL https://codereview.chromium.org/271443008/ *** Reason for rollback *** After further issues with the QUIC handshake packets, rolling back this change in favor of a different approach. *** Original change description *** Minor QUIC cleanup to combine QuicUnackedPacketMap's RemovePacket and NeuterPacket into RemoveOrNeuterPacket. This prevents potential bugs where a packet can be set not pending, then neuter'd, which cuases the packet to never be removed from the unacked packet map. *** Merge internal change: 66573334 https://codereview.chromium.org/280753002/ Merging end_to_end_test.cc with the internal source tree. + Fixed comments (MB for megabytes and 256KB per sec instead of 1Mbit). + Made LargePostWithPacketLossAndBlockedSocket and LargePostNoPacketLossWithDelayAndReordering to be in the same order as the internal source tree. Merge internal change: 66556306 https://codereview.chromium.org/283683002/ Allows QUIC connections to remain established even though the peer's port has changed. Should make things a bit better for clients experiencing NAT rebindign while talking QUIC to Bandaid. QUIC connection port migration. Protected behind FLAGS_quic_allow_port_migration Merge internal change: 66523001 https://codereview.chromium.org/279453004/ Remove unnecessary methods from QuicUnackedPacketMap and a minor QuicSentPacketManagerTest fix as a result. Merge internal change: 66427453 https://codereview.chromium.org/287443003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/283693002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270046 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.cc50
1 files changed, 12 insertions, 38 deletions
diff --git a/net/quic/quic_sent_packet_manager_test.cc b/net/quic/quic_sent_packet_manager_test.cc
index e44dca5..7d0bfed 100644
--- a/net/quic/quic_sent_packet_manager_test.cc
+++ b/net/quic/quic_sent_packet_manager_test.cc
@@ -69,22 +69,13 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets,
size_t num_packets) {
- SequenceNumberSet unacked =
- QuicSentPacketManagerPeer::GetUnackedPackets(&manager_);
- for (size_t i = 0; i < num_packets; ++i) {
- EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i];
- }
- size_t num_retransmittable = 0;
- for (SequenceNumberSet::const_iterator it = unacked.begin();
- it != unacked.end(); ++it) {
- if (manager_.HasRetransmittableFrames(*it)) {
- ++num_retransmittable;
- }
- }
EXPECT_EQ(num_packets,
QuicSentPacketManagerPeer::GetNumRetransmittablePackets(
&manager_));
- EXPECT_EQ(num_packets, num_retransmittable);
+ for (size_t i = 0; i < num_packets; ++i) {
+ EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i]))
+ << " packets[" << i << "]:" << packets[i];
+ }
}
void ExpectAck(QuicPacketSequenceNumber largest_observed) {
@@ -125,15 +116,18 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
Pointwise(KeyEq(), lost_vector)));
}
+ // Retransmits a packet as though it was a TLP retransmission, because TLP
+ // leaves the |old_sequence_number| pending.
+ // TODO(ianswett): Test with transmission types besides TLP.
void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number,
QuicPacketSequenceNumber new_sequence_number) {
QuicSentPacketManagerPeer::MarkForRetransmission(
- &manager_, old_sequence_number, LOSS_RETRANSMISSION);
+ &manager_, old_sequence_number, TLP_RETRANSMISSION);
EXPECT_TRUE(manager_.HasPendingRetransmissions());
QuicSentPacketManager::PendingRetransmission next_retransmission =
manager_.NextPendingRetransmission();
EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number);
- EXPECT_EQ(LOSS_RETRANSMISSION,
+ EXPECT_EQ(TLP_RETRANSMISSION,
next_retransmission.transmission_type);
manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number);
EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
@@ -197,7 +191,6 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
SerializedPacket packet(CreateDataPacket(sequence_number));
packet.retransmittable_frames->AddStreamFrame(
new QuicStreamFrame(1, false, 0, IOVector()));
- packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
manager_.OnSerializedPacket(packet);
manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
packet.packet->length(), NOT_RETRANSMISSION,
@@ -297,7 +290,7 @@ TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
SendDataPacket(1);
QuicSentPacketManagerPeer::MarkForRetransmission(
- &manager_, 1, LOSS_RETRANSMISSION);
+ &manager_, 1, TLP_RETRANSMISSION);
EXPECT_TRUE(manager_.HasPendingRetransmissions());
// Ack 1.
@@ -557,9 +550,9 @@ TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
manager_.OnIncomingAck(received_info, clock_.Now());
// High water mark will be raised.
- QuicPacketSequenceNumber unacked[] = { 2, 3, 4 };
+ QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 };
VerifyUnackedPackets(unacked, arraysize(unacked));
- QuicPacketSequenceNumber retransmittable[] = { 4 };
+ QuicPacketSequenceNumber retransmittable[] = { 5 };
VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
}
@@ -988,25 +981,6 @@ TEST_F(QuicSentPacketManagerTest,
EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
}
-TEST_F(QuicSentPacketManagerTest,
- CryptoHandshakeRetransmissionThenAbandonAll) {
- // Send 1 crypto packet.
- SendCryptoPacket(1);
- EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
-
- // Retransmit the crypto packet as 2.
- manager_.OnRetransmissionTimeout();
- RetransmitNextPacket(2);
-
- // Now discard all unacked unencrypted packets, which occurs when the
- // connection goes forward secure.
- manager_.DiscardUnencryptedPackets();
- VerifyUnackedPackets(NULL, 0);
- EXPECT_FALSE(manager_.HasPendingRetransmissions());
- EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
- EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
-}
-
TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
// Serialize two data packets and send the latter.