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

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

Issue 512933005: Fix a QUIC bug in which PING frames were not being ACK'd. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « net/quic/quic_connection.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 bool entropy_flag, 726 bool entropy_flag,
727 EncryptionLevel level) { 727 EncryptionLevel level) {
728 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group, 728 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group,
729 entropy_flag)); 729 entropy_flag));
730 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 730 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
731 level, number, *packet)); 731 level, number, *packet));
732 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 732 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
733 return encrypted->length(); 733 return encrypted->length();
734 } 734 }
735 735
736 void ProcessPingPacket(QuicPacketSequenceNumber number) {
737 scoped_ptr<QuicPacket> packet(ConstructPingPacket(number));
738 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
739 ENCRYPTION_NONE, number, *packet));
740 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
741 }
742
736 void ProcessClosePacket(QuicPacketSequenceNumber number, 743 void ProcessClosePacket(QuicPacketSequenceNumber number,
737 QuicFecGroupNumber fec_group) { 744 QuicFecGroupNumber fec_group) {
738 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); 745 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group));
739 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 746 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
740 ENCRYPTION_NONE, number, *packet)); 747 ENCRYPTION_NONE, number, *packet));
741 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 748 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
742 } 749 }
743 750
744 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number, 751 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number,
745 bool expect_revival, bool entropy_flag) { 752 bool expect_revival, bool entropy_flag) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 872
866 QuicFrames frames; 873 QuicFrames frames;
867 QuicFrame frame(&frame1_); 874 QuicFrame frame(&frame1_);
868 frames.push_back(frame); 875 frames.push_back(frame);
869 QuicPacket* packet = 876 QuicPacket* packet =
870 BuildUnsizedDataPacket(&framer_, header_, frames).packet; 877 BuildUnsizedDataPacket(&framer_, header_, frames).packet;
871 EXPECT_TRUE(packet != NULL); 878 EXPECT_TRUE(packet != NULL);
872 return packet; 879 return packet;
873 } 880 }
874 881
882 QuicPacket* ConstructPingPacket(QuicPacketSequenceNumber number) {
883 header_.public_header.connection_id = connection_id_;
884 header_.packet_sequence_number = number;
885 header_.public_header.reset_flag = false;
886 header_.public_header.version_flag = false;
887 header_.entropy_flag = false;
888 header_.fec_flag = false;
889 header_.is_in_fec_group = NOT_IN_FEC_GROUP;
890 header_.fec_group = 0;
891
892 QuicPingFrame ping;
893
894 QuicFrames frames;
895 QuicFrame frame(&ping);
896 frames.push_back(frame);
897 QuicPacket* packet =
898 BuildUnsizedDataPacket(&framer_, header_, frames).packet;
899 EXPECT_TRUE(packet != NULL);
900 return packet;
901 }
902
875 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, 903 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number,
876 QuicFecGroupNumber fec_group) { 904 QuicFecGroupNumber fec_group) {
877 header_.public_header.connection_id = connection_id_; 905 header_.public_header.connection_id = connection_id_;
878 header_.packet_sequence_number = number; 906 header_.packet_sequence_number = number;
879 header_.public_header.reset_flag = false; 907 header_.public_header.reset_flag = false;
880 header_.public_header.version_flag = false; 908 header_.public_header.version_flag = false;
881 header_.entropy_flag = false; 909 header_.entropy_flag = false;
882 header_.fec_flag = false; 910 header_.fec_flag = false;
883 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 911 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
884 header_.fec_group = fec_group; 912 header_.fec_group = fec_group;
(...skipping 2075 matching lines...) Expand 10 before | Expand all | Expand 10 after
2960 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2988 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2961 ProcessPacket(1); 2989 ProcessPacket(1);
2962 ProcessPacket(2); 2990 ProcessPacket(2);
2963 // Check that ack is sent and that delayed ack alarm is reset. 2991 // Check that ack is sent and that delayed ack alarm is reset.
2964 EXPECT_EQ(2u, writer_->frame_count()); 2992 EXPECT_EQ(2u, writer_->frame_count());
2965 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 2993 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
2966 EXPECT_FALSE(writer_->ack_frames().empty()); 2994 EXPECT_FALSE(writer_->ack_frames().empty());
2967 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 2995 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
2968 } 2996 }
2969 2997
2998 TEST_P(QuicConnectionTest, SendDelayedAckForPing) {
2999 if (version() < QUIC_VERSION_18) {
3000 return;
3001 }
3002 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3003 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
3004 ProcessPingPacket(1);
3005 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
3006 }
3007
2970 TEST_P(QuicConnectionTest, NoAckOnOldNacks) { 3008 TEST_P(QuicConnectionTest, NoAckOnOldNacks) {
2971 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3009 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2972 // Drop one packet, triggering a sequence of acks. 3010 // Drop one packet, triggering a sequence of acks.
2973 ProcessPacket(2); 3011 ProcessPacket(2);
2974 size_t frames_per_ack = 2; 3012 size_t frames_per_ack = 2;
2975 EXPECT_EQ(frames_per_ack, writer_->frame_count()); 3013 EXPECT_EQ(frames_per_ack, writer_->frame_count());
2976 EXPECT_FALSE(writer_->ack_frames().empty()); 3014 EXPECT_FALSE(writer_->ack_frames().empty());
2977 writer_->Reset(); 3015 writer_->Reset();
2978 ProcessPacket(3); 3016 ProcessPacket(3);
2979 EXPECT_EQ(frames_per_ack, writer_->frame_count()); 3017 EXPECT_EQ(frames_per_ack, writer_->frame_count());
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
3963 QuicBlockedFrame blocked; 4001 QuicBlockedFrame blocked;
3964 blocked.stream_id = 3; 4002 blocked.stream_id = 3;
3965 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 4003 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3966 ProcessFramePacket(QuicFrame(&blocked)); 4004 ProcessFramePacket(QuicFrame(&blocked));
3967 EXPECT_TRUE(ack_alarm->IsSet()); 4005 EXPECT_TRUE(ack_alarm->IsSet());
3968 } 4006 }
3969 4007
3970 } // namespace 4008 } // namespace
3971 } // namespace test 4009 } // namespace test
3972 } // namespace net 4010 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698