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

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

Issue 270213002: Fix a bug where if a crypto packet is spuriously retransmitted and then (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sending for review Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_sent_packet_manager.h" 5 #include "net/quic/quic_sent_packet_manager.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/test_tools/quic_config_peer.h" 8 #include "net/quic/test_tools/quic_config_peer.h"
9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
10 #include "net/quic/test_tools/quic_test_utils.h" 10 #include "net/quic/test_tools/quic_test_utils.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 } 190 }
191 191
192 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { 192 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) {
193 EXPECT_CALL(*send_algorithm_, 193 EXPECT_CALL(*send_algorithm_,
194 OnPacketSent(_, BytesInFlight(), sequence_number, 194 OnPacketSent(_, BytesInFlight(), sequence_number,
195 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 195 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
196 .Times(1).WillOnce(Return(true)); 196 .Times(1).WillOnce(Return(true));
197 SerializedPacket packet(CreateDataPacket(sequence_number)); 197 SerializedPacket packet(CreateDataPacket(sequence_number));
198 packet.retransmittable_frames->AddStreamFrame( 198 packet.retransmittable_frames->AddStreamFrame(
199 new QuicStreamFrame(1, false, 0, IOVector())); 199 new QuicStreamFrame(1, false, 0, IOVector()));
200 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
200 manager_.OnSerializedPacket(packet); 201 manager_.OnSerializedPacket(packet);
201 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), 202 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
202 packet.packet->length(), NOT_RETRANSMISSION, 203 packet.packet->length(), NOT_RETRANSMISSION,
203 HAS_RETRANSMITTABLE_DATA); 204 HAS_RETRANSMITTABLE_DATA);
204 } 205 }
205 206
206 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { 207 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
207 EXPECT_CALL(*send_algorithm_, 208 EXPECT_CALL(*send_algorithm_,
208 OnPacketSent(_, BytesInFlight(), sequence_number, 209 OnPacketSent(_, BytesInFlight(), sequence_number,
209 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 210 kDefaultLength, NO_RETRANSMITTABLE_DATA))
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 // Now retransmit all the unacked packets, which occurs when there is a 981 // Now retransmit all the unacked packets, which occurs when there is a
981 // version negotiation. 982 // version negotiation.
982 manager_.RetransmitUnackedPackets(ALL_PACKETS); 983 manager_.RetransmitUnackedPackets(ALL_PACKETS);
983 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 984 QuicPacketSequenceNumber unacked[] = { 1, 2 };
984 VerifyUnackedPackets(unacked, arraysize(unacked)); 985 VerifyUnackedPackets(unacked, arraysize(unacked));
985 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 986 EXPECT_TRUE(manager_.HasPendingRetransmissions());
986 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 987 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
987 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 988 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
988 } 989 }
989 990
991 TEST_F(QuicSentPacketManagerTest,
992 CryptoHandshakeRetransmissionThenAbandonAll) {
993 // Send 1 crypto packet.
994 SendCryptoPacket(1);
995 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
996
997 // Retransmit the crypto packet as 2.
998 manager_.OnRetransmissionTimeout();
999 RetransmitNextPacket(2);
1000
1001 // Now discard all unacked unencrypted packets, which occurs when the
1002 // connection goes forward secure.
1003 manager_.DiscardUnencryptedPackets();
1004 VerifyUnackedPackets(NULL, 0);
1005 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1006 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1007 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1008 }
1009
990 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { 1010 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
991 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 1011 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
992 // Serialize two data packets and send the latter. 1012 // Serialize two data packets and send the latter.
993 SerializedPacket packet(CreateDataPacket(1)); 1013 SerializedPacket packet(CreateDataPacket(1));
994 manager_.OnSerializedPacket(packet); 1014 manager_.OnSerializedPacket(packet);
995 SendDataPacket(2); 1015 SendDataPacket(2);
996 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1016 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
997 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1017 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
998 1018
999 // Retransmit 1 unacked packets, but not the first serialized packet. 1019 // Retransmit 1 unacked packets, but not the first serialized packet.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 1219
1200 EXPECT_EQ(kTime, 1220 EXPECT_EQ(kTime,
1201 QuicSentPacketManagerPeer::GetLossAlgorithm( 1221 QuicSentPacketManagerPeer::GetLossAlgorithm(
1202 &manager_)->GetLossDetectionType()); 1222 &manager_)->GetLossDetectionType());
1203 } 1223 }
1204 1224
1205 1225
1206 } // namespace 1226 } // namespace
1207 } // namespace test 1227 } // namespace test
1208 } // namespace net 1228 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698