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

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

Issue 1541263002: Landing Recent QUIC changes until 12/18/2015 13:57 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: replace -1 with 0xff for InvalidPathId Created 4 years, 11 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') | net/quic/quic_crypto_client_stream.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 (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 <ostream> 7 #include <ostream>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 namespace net { 55 namespace net {
56 namespace test { 56 namespace test {
57 namespace { 57 namespace {
58 58
59 const char data1[] = "foo"; 59 const char data1[] = "foo";
60 const char data2[] = "bar"; 60 const char data2[] = "bar";
61 61
62 const bool kFin = true; 62 const bool kFin = true;
63 const bool kEntropyFlag = true; 63 const bool kEntropyFlag = true;
64 const bool kHasStopWaiting = true;
64 65
65 const QuicPacketEntropyHash kTestEntropyHash = 76; 66 const QuicPacketEntropyHash kTestEntropyHash = 76;
66 67
67 const int kDefaultRetransmissionTimeMs = 500; 68 const int kDefaultRetransmissionTimeMs = 500;
68 69
69 const IPEndPoint kPeerAddress = IPEndPoint(Loopback6(), /*port=*/12345); 70 const IPEndPoint kPeerAddress = IPEndPoint(Loopback6(), /*port=*/12345);
70 const IPEndPoint kSelfAddress = IPEndPoint(Loopback6(), /*port=*/443); 71 const IPEndPoint kSelfAddress = IPEndPoint(Loopback6(), /*port=*/443);
71 72
72 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message. 73 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message.
73 class TaggingEncrypter : public QuicEncrypter { 74 class TaggingEncrypter : public QuicEncrypter {
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 RetransmittableFrames* retransmittable_frames = 444 RetransmittableFrames* retransmittable_frames =
444 retransmittable == HAS_RETRANSMITTABLE_DATA 445 retransmittable == HAS_RETRANSMITTABLE_DATA
445 ? new RetransmittableFrames() 446 ? new RetransmittableFrames()
446 : nullptr; 447 : nullptr;
447 char buffer[kMaxPacketSize]; 448 char buffer[kMaxPacketSize];
448 size_t encrypted_length = 449 size_t encrypted_length =
449 QuicConnectionPeer::GetFramer(this)->EncryptPayload( 450 QuicConnectionPeer::GetFramer(this)->EncryptPayload(
450 ENCRYPTION_NONE, packet_number, *packet, buffer, kMaxPacketSize); 451 ENCRYPTION_NONE, packet_number, *packet, buffer, kMaxPacketSize);
451 delete packet; 452 delete packet;
452 SerializedPacket serialized_packet( 453 SerializedPacket serialized_packet(
453 packet_number, PACKET_6BYTE_PACKET_NUMBER, buffer, encrypted_length, 454 kDefaultPathId, packet_number, PACKET_6BYTE_PACKET_NUMBER, buffer,
454 false, entropy_hash, retransmittable_frames, has_ack, 455 encrypted_length, false, entropy_hash, retransmittable_frames, has_ack,
455 has_pending_frames, ENCRYPTION_NONE); 456 has_pending_frames, ENCRYPTION_NONE);
456 OnSerializedPacket(&serialized_packet); 457 OnSerializedPacket(&serialized_packet);
457 } 458 }
458 459
459 QuicConsumedData SendStreamDataWithString( 460 QuicConsumedData SendStreamDataWithString(
460 QuicStreamId id, 461 QuicStreamId id,
461 StringPiece data, 462 StringPiece data,
462 QuicStreamOffset offset, 463 QuicStreamOffset offset,
463 bool fin, 464 bool fin,
464 QuicAckListenerInterface* listener) { 465 QuicAckListenerInterface* listener) {
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize); 789 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize);
789 connection_.ProcessUdpPacket( 790 connection_.ProcessUdpPacket(
790 kSelfAddress, kPeerAddress, 791 kSelfAddress, kPeerAddress,
791 QuicEncryptedPacket(buffer, encrypted_length, false)); 792 QuicEncryptedPacket(buffer, encrypted_length, false));
792 return base::checked_cast<QuicPacketEntropyHash>(encrypted_length); 793 return base::checked_cast<QuicPacketEntropyHash>(encrypted_length);
793 } 794 }
794 795
795 size_t ProcessDataPacket(QuicPacketNumber number, 796 size_t ProcessDataPacket(QuicPacketNumber number,
796 QuicFecGroupNumber fec_group, 797 QuicFecGroupNumber fec_group,
797 bool entropy_flag) { 798 bool entropy_flag) {
798 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, 799 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, false,
799 ENCRYPTION_NONE); 800 ENCRYPTION_NONE);
800 } 801 }
801 802
802 size_t ProcessDataPacketAtLevel(QuicPacketNumber number, 803 size_t ProcessDataPacketAtLevel(QuicPacketNumber number,
803 QuicFecGroupNumber fec_group, 804 QuicFecGroupNumber fec_group,
804 bool entropy_flag, 805 bool entropy_flag,
806 bool has_stop_waiting,
805 EncryptionLevel level) { 807 EncryptionLevel level) {
806 scoped_ptr<QuicPacket> packet( 808 scoped_ptr<QuicPacket> packet(
807 ConstructDataPacket(number, fec_group, entropy_flag)); 809 ConstructDataPacket(number, fec_group, entropy_flag, has_stop_waiting));
808 char buffer[kMaxPacketSize]; 810 char buffer[kMaxPacketSize];
809 size_t encrypted_length = 811 size_t encrypted_length =
810 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize); 812 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize);
811 connection_.ProcessUdpPacket( 813 connection_.ProcessUdpPacket(
812 kSelfAddress, kPeerAddress, 814 kSelfAddress, kPeerAddress,
813 QuicEncryptedPacket(buffer, encrypted_length, false)); 815 QuicEncryptedPacket(buffer, encrypted_length, false));
814 return encrypted_length; 816 return encrypted_length;
815 } 817 }
816 818
817 void ProcessClosePacket(QuicPacketNumber number, 819 void ProcessClosePacket(QuicPacketNumber number,
818 QuicFecGroupNumber fec_group) { 820 QuicFecGroupNumber fec_group) {
819 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); 821 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group));
820 char buffer[kMaxPacketSize]; 822 char buffer[kMaxPacketSize];
821 size_t encrypted_length = framer_.EncryptPayload( 823 size_t encrypted_length = framer_.EncryptPayload(
822 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize); 824 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize);
823 connection_.ProcessUdpPacket( 825 connection_.ProcessUdpPacket(
824 kSelfAddress, kPeerAddress, 826 kSelfAddress, kPeerAddress,
825 QuicEncryptedPacket(buffer, encrypted_length, false)); 827 QuicEncryptedPacket(buffer, encrypted_length, false));
826 } 828 }
827 829
828 size_t ProcessFecProtectedPacket(QuicPacketNumber number, 830 size_t ProcessFecProtectedPacket(QuicPacketNumber number,
829 bool expect_revival, 831 bool expect_revival,
830 bool entropy_flag) { 832 bool entropy_flag,
833 bool has_stop_waiting) {
831 return ProcessFecProtectedPacketAtLevel(number, 1, expect_revival, 834 return ProcessFecProtectedPacketAtLevel(number, 1, expect_revival,
832 entropy_flag, ENCRYPTION_NONE); 835 entropy_flag, has_stop_waiting,
836 ENCRYPTION_NONE);
833 } 837 }
834 838
835 size_t ProcessFecProtectedPacketAtLevel(QuicPacketNumber number, 839 size_t ProcessFecProtectedPacketAtLevel(QuicPacketNumber number,
836 QuicFecGroupNumber fec_group, 840 QuicFecGroupNumber fec_group,
837 bool expect_revival, 841 bool expect_revival,
838 bool entropy_flag, 842 bool entropy_flag,
843 bool has_stop_waiting,
839 EncryptionLevel level) { 844 EncryptionLevel level) {
840 if (expect_revival) { 845 if (expect_revival) {
841 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 846 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
842 } 847 }
843 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1).RetiresOnSaturation(); 848 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1).RetiresOnSaturation();
844 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, level); 849 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag,
850 has_stop_waiting, level);
845 } 851 }
846 852
847 // Processes an FEC packet that covers the packets that would have been 853 // Processes an FEC packet that covers the packets that would have been
848 // received. 854 // received.
849 size_t ProcessFecPacket(QuicPacketNumber number, 855 size_t ProcessFecPacket(QuicPacketNumber number,
850 QuicPacketNumber min_protected_packet, 856 QuicPacketNumber min_protected_packet,
851 bool expect_revival, 857 bool expect_revival,
852 bool entropy_flag, 858 bool entropy_flag,
853 QuicPacket* packet) { 859 QuicPacket* packet) {
854 return ProcessFecPacketAtLevel(number, min_protected_packet, expect_revival, 860 return ProcessFecPacketAtLevel(number, min_protected_packet, expect_revival,
(...skipping 12 matching lines...) Expand all
867 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 873 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
868 } 874 }
869 875
870 // Construct the decrypted data packet so we can compute the correct 876 // Construct the decrypted data packet so we can compute the correct
871 // redundancy. If |packet| has been provided then use that, otherwise 877 // redundancy. If |packet| has been provided then use that, otherwise
872 // construct a default data packet. 878 // construct a default data packet.
873 scoped_ptr<QuicPacket> data_packet; 879 scoped_ptr<QuicPacket> data_packet;
874 if (packet) { 880 if (packet) {
875 data_packet.reset(packet); 881 data_packet.reset(packet);
876 } else { 882 } else {
877 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag)); 883 data_packet.reset(
884 ConstructDataPacket(number, 1, !kEntropyFlag, !kHasStopWaiting));
878 } 885 }
879 886
880 QuicPacketHeader header; 887 QuicPacketHeader header;
881 header.public_header.connection_id = connection_id_; 888 header.public_header.connection_id = connection_id_;
882 header.public_header.packet_number_length = packet_number_length_; 889 header.public_header.packet_number_length = packet_number_length_;
883 header.public_header.connection_id_length = connection_id_length_; 890 header.public_header.connection_id_length = connection_id_length_;
884 header.packet_number = number; 891 header.packet_number = number;
885 header.entropy_flag = entropy_flag; 892 header.entropy_flag = entropy_flag;
886 header.fec_flag = true; 893 header.fec_flag = true;
887 header.is_in_fec_group = IN_FEC_GROUP; 894 header.is_in_fec_group = IN_FEC_GROUP;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 } 973 }
967 974
968 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) { 975 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) {
969 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header, frames); 976 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header, frames);
970 EXPECT_NE(nullptr, packet); 977 EXPECT_NE(nullptr, packet);
971 return packet; 978 return packet;
972 } 979 }
973 980
974 QuicPacket* ConstructDataPacket(QuicPacketNumber number, 981 QuicPacket* ConstructDataPacket(QuicPacketNumber number,
975 QuicFecGroupNumber fec_group, 982 QuicFecGroupNumber fec_group,
976 bool entropy_flag) { 983 bool entropy_flag,
984 bool has_stop_waiting) {
977 QuicPacketHeader header; 985 QuicPacketHeader header;
978 header.public_header.connection_id = connection_id_; 986 header.public_header.connection_id = connection_id_;
979 header.public_header.packet_number_length = packet_number_length_; 987 header.public_header.packet_number_length = packet_number_length_;
980 header.public_header.connection_id_length = connection_id_length_; 988 header.public_header.connection_id_length = connection_id_length_;
981 header.entropy_flag = entropy_flag; 989 header.entropy_flag = entropy_flag;
982 header.packet_number = number; 990 header.packet_number = number;
983 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 991 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
984 header.fec_group = fec_group; 992 header.fec_group = fec_group;
985 993
986 QuicFrames frames; 994 QuicFrames frames;
987 frames.push_back(QuicFrame(&frame1_)); 995 frames.push_back(QuicFrame(&frame1_));
996 if (has_stop_waiting) {
997 frames.push_back(QuicFrame(&stop_waiting_));
998 }
988 return ConstructPacket(header, frames); 999 return ConstructPacket(header, frames);
989 } 1000 }
990 1001
991 QuicPacket* ConstructClosePacket(QuicPacketNumber number, 1002 QuicPacket* ConstructClosePacket(QuicPacketNumber number,
992 QuicFecGroupNumber fec_group) { 1003 QuicFecGroupNumber fec_group) {
993 QuicPacketHeader header; 1004 QuicPacketHeader header;
994 header.public_header.connection_id = connection_id_; 1005 header.public_header.connection_id = connection_id_;
995 header.packet_number = number; 1006 header.packet_number = number;
996 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 1007 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
997 header.fec_group = fec_group; 1008 header.fec_group = fec_group;
(...skipping 2055 matching lines...) Expand 10 before | Expand all | Expand 10 after
3053 // Connection id length in the revived header should be the same as 3064 // Connection id length in the revived header should be the same as
3054 // in the original data/fec packet headers. 3065 // in the original data/fec packet headers.
3055 EXPECT_EQ(connection_id_length_, 3066 EXPECT_EQ(connection_id_length_,
3056 fec_visitor->revived_header().public_header.connection_id_length); 3067 fec_visitor->revived_header().public_header.connection_id_length);
3057 } 3068 }
3058 } 3069 }
3059 3070
3060 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) { 3071 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
3061 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3072 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3062 3073
3063 ProcessFecProtectedPacket(1, false, kEntropyFlag); 3074 ProcessFecProtectedPacket(1, false, kEntropyFlag, !kHasStopWaiting);
3064 // Don't send missing packet 2. 3075 // Don't send missing packet 2.
3065 ProcessFecPacket(3, 1, true, !kEntropyFlag, nullptr); 3076 ProcessFecPacket(3, 1, true, !kEntropyFlag, nullptr);
3066 // Entropy flag should be true, so entropy should not be 0. 3077 // Entropy flag should be true, so entropy should not be 0.
3067 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3078 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3068 } 3079 }
3069 3080
3070 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) { 3081 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
3071 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3082 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3072 3083
3073 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 3084 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3074 // Don't send missing packet 2. 3085 // Don't send missing packet 2.
3075 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 3086 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
3076 ProcessFecPacket(4, 1, true, kEntropyFlag, nullptr); 3087 ProcessFecPacket(4, 1, true, kEntropyFlag, nullptr);
3077 // Ensure QUIC no longer revives entropy for lost packets. 3088 // Ensure QUIC no longer revives entropy for lost packets.
3078 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3089 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3079 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 4)); 3090 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 4));
3080 } 3091 }
3081 3092
3082 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) { 3093 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
3083 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3094 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3084 3095
3085 // Don't send missing packet 1. 3096 // Don't send missing packet 1.
3086 ProcessFecPacket(3, 1, false, !kEntropyFlag, nullptr); 3097 ProcessFecPacket(3, 1, false, !kEntropyFlag, nullptr);
3087 // Out of order. 3098 // Out of order.
3088 ProcessFecProtectedPacket(2, true, !kEntropyFlag); 3099 ProcessFecProtectedPacket(2, true, !kEntropyFlag, !kHasStopWaiting);
3089 // Entropy flag should be false, so entropy should be 0. 3100 // Entropy flag should be false, so entropy should be 0.
3090 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3101 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3091 } 3102 }
3092 3103
3093 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) { 3104 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) {
3094 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3105 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3095 3106
3096 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 3107 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3097 // Don't send missing packet 2. 3108 // Don't send missing packet 2.
3098 ProcessFecPacket(6, 1, false, kEntropyFlag, nullptr); 3109 ProcessFecPacket(6, 1, false, kEntropyFlag, nullptr);
3099 ProcessFecProtectedPacket(3, false, kEntropyFlag); 3110 ProcessFecProtectedPacket(3, false, kEntropyFlag, !kHasStopWaiting);
3100 ProcessFecProtectedPacket(4, false, kEntropyFlag); 3111 ProcessFecProtectedPacket(4, false, kEntropyFlag, !kHasStopWaiting);
3101 ProcessFecProtectedPacket(5, true, !kEntropyFlag); 3112 ProcessFecProtectedPacket(5, true, !kEntropyFlag, !kHasStopWaiting);
3102 // Ensure entropy is not revived for the missing packet. 3113 // Ensure entropy is not revived for the missing packet.
3103 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3114 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3104 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 3)); 3115 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 3));
3105 } 3116 }
3106 3117
3107 TEST_P(QuicConnectionTest, TLP) { 3118 TEST_P(QuicConnectionTest, TLP) {
3108 QuicSentPacketManagerPeer::SetMaxTailLossProbes(manager_, 1); 3119 QuicSentPacketManagerPeer::SetMaxTailLossProbes(manager_, 1);
3109 3120
3110 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); 3121 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr);
3111 EXPECT_EQ(1u, stop_waiting()->least_unacked); 3122 EXPECT_EQ(1u, stop_waiting()->least_unacked);
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
3305 QuicConfig config; 3316 QuicConfig config;
3306 connection_.SetFromConfig(config); 3317 connection_.SetFromConfig(config);
3307 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3318 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3308 use_tagging_decrypter(); 3319 use_tagging_decrypter();
3309 3320
3310 const uint8_t tag = 0x07; 3321 const uint8_t tag = 0x07;
3311 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3322 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3312 3323
3313 // Process an encrypted packet which can not yet be decrypted which should 3324 // Process an encrypted packet which can not yet be decrypted which should
3314 // result in the packet being buffered. 3325 // result in the packet being buffered.
3315 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3326 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, !kHasStopWaiting,
3327 ENCRYPTION_INITIAL);
3316 3328
3317 // Transition to the new encryption state and process another encrypted packet 3329 // Transition to the new encryption state and process another encrypted packet
3318 // which should result in the original packet being processed. 3330 // which should result in the original packet being processed.
3319 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3331 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3320 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3332 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3321 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3333 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3322 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2); 3334 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2);
3323 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3335 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, !kHasStopWaiting,
3336 ENCRYPTION_INITIAL);
3324 3337
3325 // Finally, process a third packet and note that we do not reprocess the 3338 // Finally, process a third packet and note that we do not reprocess the
3326 // buffered packet. 3339 // buffered packet.
3327 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 3340 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
3328 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3341 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, !kHasStopWaiting,
3342 ENCRYPTION_INITIAL);
3329 } 3343 }
3330 3344
3331 TEST_P(QuicConnectionTest, ProcessBufferedFECGroup) { 3345 TEST_P(QuicConnectionTest, ProcessBufferedFECGroup) {
3332 // SetFromConfig is always called after construction from InitializeSession. 3346 // SetFromConfig is always called after construction from InitializeSession.
3333 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3347 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3334 QuicConfig config; 3348 QuicConfig config;
3335 config.set_max_undecryptable_packets(100); 3349 config.set_max_undecryptable_packets(100);
3336 connection_.SetFromConfig(config); 3350 connection_.SetFromConfig(config);
3337 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3351 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3338 use_tagging_decrypter(); 3352 use_tagging_decrypter();
3339 3353
3340 const uint8_t tag = 0x07; 3354 const uint8_t tag = 0x07;
3341 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3355 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3342 3356
3343 // Don't send packet 1 and buffer initially encrypted packets. 3357 // Don't send packet 1 and buffer initially encrypted packets.
3344 ProcessFecProtectedPacketAtLevel(2, 1, false, !kEntropyFlag, 3358 ProcessFecProtectedPacketAtLevel(2, 1, false, !kEntropyFlag, !kHasStopWaiting,
3345 ENCRYPTION_INITIAL); 3359 ENCRYPTION_INITIAL);
3346 ProcessFecPacketAtLevel(3, 1, false, kEntropyFlag, nullptr, 3360 ProcessFecPacketAtLevel(3, 1, false, kEntropyFlag, nullptr,
3347 ENCRYPTION_INITIAL); 3361 ENCRYPTION_INITIAL);
3348 // Since the packets were buffered, no FEC group should be open. 3362 // Since the packets were buffered, no FEC group should be open.
3349 ASSERT_EQ(0u, connection_.NumFecGroups()); 3363 ASSERT_EQ(0u, connection_.NumFecGroups());
3350 3364
3351 // Now send non-fec protected ack packet and close the group. 3365 // Now send non-fec protected ack packet and close the group.
3352 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3366 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3353 ProcessStopWaitingPacketAtLevel(4, &frame, ENCRYPTION_INITIAL); 3367 ProcessStopWaitingPacketAtLevel(4, &frame, ENCRYPTION_INITIAL);
3354 3368
3355 // Transition to the new encryption state and process another encrypted packet 3369 // Transition to the new encryption state and process another encrypted packet
3356 // which should result in the original packets being processed. The missing 3370 // which should result in the original packets being processed. The missing
3357 // packet should be revived before the STOP_WAITING packet is processed. 3371 // packet should be revived before the STOP_WAITING packet is processed.
3358 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3372 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3359 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3373 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3360 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3374 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3361 3375
3362 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2).RetiresOnSaturation(); 3376 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2).RetiresOnSaturation();
3363 ProcessDataPacketAtLevel(5, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3377 ProcessDataPacketAtLevel(5, 0, kEntropyFlag, !kHasStopWaiting,
3378 ENCRYPTION_INITIAL);
3364 const QuicConnectionStats& stats = connection_.GetStats(); 3379 const QuicConnectionStats& stats = connection_.GetStats();
3365 EXPECT_EQ(1u, stats.packets_revived); 3380 EXPECT_EQ(1u, stats.packets_revived);
3366 } 3381 }
3367 3382
3368 TEST_P(QuicConnectionTest, Buffer100NonDecryptablePackets) { 3383 TEST_P(QuicConnectionTest, Buffer100NonDecryptablePackets) {
3369 // SetFromConfig is always called after construction from InitializeSession. 3384 // SetFromConfig is always called after construction from InitializeSession.
3370 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3385 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3371 QuicConfig config; 3386 QuicConfig config;
3372 config.set_max_undecryptable_packets(100); 3387 config.set_max_undecryptable_packets(100);
3373 connection_.SetFromConfig(config); 3388 connection_.SetFromConfig(config);
3374 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3389 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3375 use_tagging_decrypter(); 3390 use_tagging_decrypter();
3376 3391
3377 const uint8_t tag = 0x07; 3392 const uint8_t tag = 0x07;
3378 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3393 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3379 3394
3380 // Process an encrypted packet which can not yet be decrypted which should 3395 // Process an encrypted packet which can not yet be decrypted which should
3381 // result in the packet being buffered. 3396 // result in the packet being buffered.
3382 for (QuicPacketNumber i = 1; i <= 100; ++i) { 3397 for (QuicPacketNumber i = 1; i <= 100; ++i) {
3383 ProcessDataPacketAtLevel(i, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3398 ProcessDataPacketAtLevel(i, 0, kEntropyFlag, !kHasStopWaiting,
3399 ENCRYPTION_INITIAL);
3384 } 3400 }
3385 3401
3386 // Transition to the new encryption state and process another encrypted packet 3402 // Transition to the new encryption state and process another encrypted packet
3387 // which should result in the original packets being processed. 3403 // which should result in the original packets being processed.
3388 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3404 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3389 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3405 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3390 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3406 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3391 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(101); 3407 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(101);
3392 ProcessDataPacketAtLevel(101, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3408 ProcessDataPacketAtLevel(101, 0, kEntropyFlag, !kHasStopWaiting,
3409 ENCRYPTION_INITIAL);
3393 3410
3394 // Finally, process a third packet and note that we do not reprocess the 3411 // Finally, process a third packet and note that we do not reprocess the
3395 // buffered packet. 3412 // buffered packet.
3396 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 3413 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
3397 ProcessDataPacketAtLevel(102, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3414 ProcessDataPacketAtLevel(102, 0, kEntropyFlag, !kHasStopWaiting,
3415 ENCRYPTION_INITIAL);
3398 } 3416 }
3399 3417
3400 TEST_P(QuicConnectionTest, TestRetransmitOrder) { 3418 TEST_P(QuicConnectionTest, TestRetransmitOrder) {
3401 QuicByteCount first_packet_size; 3419 QuicByteCount first_packet_size;
3402 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 3420 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
3403 .WillOnce(DoAll(SaveArg<3>(&first_packet_size), Return(true))); 3421 .WillOnce(DoAll(SaveArg<3>(&first_packet_size), Return(true)));
3404 3422
3405 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr); 3423 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr);
3406 QuicByteCount second_packet_size; 3424 QuicByteCount second_packet_size;
3407 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 3425 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
3486 // Unblock the writes and actually send. 3504 // Unblock the writes and actually send.
3487 writer_->SetWritable(); 3505 writer_->SetWritable();
3488 connection_.OnCanWrite(); 3506 connection_.OnCanWrite();
3489 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 3507 EXPECT_EQ(0u, connection_.NumQueuedPackets());
3490 } 3508 }
3491 3509
3492 TEST_P(QuicConnectionTest, CloseFecGroup) { 3510 TEST_P(QuicConnectionTest, CloseFecGroup) {
3493 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3511 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3494 // Don't send missing packet 1. 3512 // Don't send missing packet 1.
3495 // Don't send missing packet 2. 3513 // Don't send missing packet 2.
3496 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 3514 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
3497 // Don't send missing FEC packet 3. 3515 // Don't send missing FEC packet 3.
3498 ASSERT_EQ(1u, connection_.NumFecGroups()); 3516 ASSERT_EQ(1u, connection_.NumFecGroups());
3499 3517
3500 // Now send non-fec protected ack packet and close the group. 3518 // Now send non-fec protected ack packet and close the group.
3501 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4); 3519 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4);
3502 QuicStopWaitingFrame frame = InitStopWaitingFrame(5); 3520 QuicStopWaitingFrame frame = InitStopWaitingFrame(5);
3503 ProcessStopWaitingPacket(&frame); 3521 ProcessStopWaitingPacket(&frame);
3504 ASSERT_EQ(0u, connection_.NumFecGroups()); 3522 ASSERT_EQ(0u, connection_.NumFecGroups());
3505 } 3523 }
3506 3524
3525 TEST_P(QuicConnectionTest, FailedToCloseFecGroupWithFecProtectedStopWaiting) {
3526 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3527 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, false);
3528 // Don't send missing packet 1.
3529 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3530 EXPECT_EQ(1u, connection_.NumFecGroups());
3531 stop_waiting_ = InitStopWaitingFrame(3);
3532 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3533 // This Fec group would be closed but created again.
3534 EXPECT_EQ(1u, connection_.NumFecGroups());
3535 }
3536
3537 TEST_P(QuicConnectionTest,
3538 CloseFecGroupUnderStopWaitingAndWaitingForPacketsBelowStopWaiting) {
3539 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3540 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, true);
3541 // Don't send missing packet 1.
3542 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3543 EXPECT_EQ(1u, connection_.NumFecGroups());
3544 stop_waiting_ = InitStopWaitingFrame(2);
3545 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3546 // This Fec group would be closed.
3547 EXPECT_EQ(0u, connection_.NumFecGroups());
3548 }
3549
3550 TEST_P(QuicConnectionTest,
3551 DoNotCloseFecGroupUnderStopWaitingButNotWaitingForPacketsBelow) {
3552 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3553 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, true);
3554 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3555 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3556 // Don't send missing packet 3.
3557 EXPECT_EQ(1u, connection_.NumFecGroups());
3558 stop_waiting_ = InitStopWaitingFrame(2);
3559 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3560 // This group will not be closed because this group is not waiting for packets
3561 // below stop waiting.
3562 EXPECT_EQ(1u, connection_.NumFecGroups());
3563 }
3564
3507 TEST_P(QuicConnectionTest, InitialTimeout) { 3565 TEST_P(QuicConnectionTest, InitialTimeout) {
3508 EXPECT_TRUE(connection_.connected()); 3566 EXPECT_TRUE(connection_.connected());
3509 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); 3567 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
3510 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 3568 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3511 3569
3512 // SetFromConfig sets the initial timeouts before negotiation. 3570 // SetFromConfig sets the initial timeouts before negotiation.
3513 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3571 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3514 QuicConfig config; 3572 QuicConfig config;
3515 connection_.SetFromConfig(config); 3573 connection_.SetFromConfig(config);
3516 // Subtract a second from the idle timeout on the client side. 3574 // Subtract a second from the idle timeout on the client side.
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
4161 nullptr); 4219 nullptr);
4162 connection_.GetTimeoutAlarm()->Fire(); 4220 connection_.GetTimeoutAlarm()->Fire();
4163 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); 4221 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
4164 } 4222 }
4165 EXPECT_FALSE(connection_.connected()); 4223 EXPECT_FALSE(connection_.connected());
4166 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 4224 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
4167 } 4225 }
4168 4226
4169 TEST_P(QuicConnectionTest, SendScheduler) { 4227 TEST_P(QuicConnectionTest, SendScheduler) {
4170 // Test that if we send a packet without delay, it is not queued. 4228 // Test that if we send a packet without delay, it is not queued.
4171 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4229 QuicPacket* packet =
4230 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4172 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 4231 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
4173 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4232 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4174 HAS_RETRANSMITTABLE_DATA, false, false); 4233 HAS_RETRANSMITTABLE_DATA, false, false);
4175 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 4234 EXPECT_EQ(0u, connection_.NumQueuedPackets());
4176 } 4235 }
4177 4236
4178 TEST_P(QuicConnectionTest, FailToSendFirstPacket) { 4237 TEST_P(QuicConnectionTest, FailToSendFirstPacket) {
4179 // Test that the connection does not crash when it fails to send the first 4238 // Test that the connection does not crash when it fails to send the first
4180 // packet at which point self_address_ might be uninitialized. 4239 // packet at which point self_address_ might be uninitialized.
4181 EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1); 4240 EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1);
4182 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4241 QuicPacket* packet =
4242 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4183 writer_->SetShouldWriteFail(); 4243 writer_->SetShouldWriteFail();
4184 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4244 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4185 HAS_RETRANSMITTABLE_DATA, false, false); 4245 HAS_RETRANSMITTABLE_DATA, false, false);
4186 } 4246 }
4187 4247
4188 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) { 4248 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) {
4189 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4249 QuicPacket* packet =
4250 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4190 BlockOnNextWrite(); 4251 BlockOnNextWrite();
4191 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); 4252 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0);
4192 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4253 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4193 HAS_RETRANSMITTABLE_DATA, false, false); 4254 HAS_RETRANSMITTABLE_DATA, false, false);
4194 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 4255 EXPECT_EQ(1u, connection_.NumQueuedPackets());
4195 } 4256 }
4196 4257
4197 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) { 4258 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
4198 // All packets carry version info till version is negotiated. 4259 // All packets carry version info till version is negotiated.
4199 size_t payload_length; 4260 size_t payload_length;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4290 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4351 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4291 const uint8_t tag = 0x07; 4352 const uint8_t tag = 0x07;
4292 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 4353 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
4293 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 4354 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
4294 // Process a packet from the non-crypto stream. 4355 // Process a packet from the non-crypto stream.
4295 frame1_.stream_id = 3; 4356 frame1_.stream_id = 3;
4296 4357
4297 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used 4358 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used
4298 // instead of ENCRYPTION_NONE. 4359 // instead of ENCRYPTION_NONE.
4299 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4360 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4300 ProcessDataPacketAtLevel(1, 0, !kEntropyFlag, ENCRYPTION_INITIAL); 4361 ProcessDataPacketAtLevel(1, 0, !kEntropyFlag, !kHasStopWaiting,
4362 ENCRYPTION_INITIAL);
4301 4363
4302 // Check if delayed ack timer is running for the expected interval. 4364 // Check if delayed ack timer is running for the expected interval.
4303 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4365 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4304 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); 4366 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline());
4305 // Simulate delayed ack alarm firing. 4367 // Simulate delayed ack alarm firing.
4306 connection_.GetAckAlarm()->Fire(); 4368 connection_.GetAckAlarm()->Fire();
4307 // Check that ack is sent and that delayed ack alarm is reset. 4369 // Check that ack is sent and that delayed ack alarm is reset.
4308 EXPECT_EQ(2u, writer_->frame_count()); 4370 EXPECT_EQ(2u, writer_->frame_count());
4309 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 4371 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
4310 EXPECT_FALSE(writer_->ack_frames().empty()); 4372 EXPECT_FALSE(writer_->ack_frames().empty());
(...skipping 16 matching lines...) Expand all
4327 const uint8_t tag = 0x07; 4389 const uint8_t tag = 0x07;
4328 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 4390 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
4329 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 4391 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
4330 // Process a packet from the non-crypto stream. 4392 // Process a packet from the non-crypto stream.
4331 frame1_.stream_id = 3; 4393 frame1_.stream_id = 3;
4332 4394
4333 // Process all the initial packets in order so there aren't missing packets. 4395 // Process all the initial packets in order so there aren't missing packets.
4334 QuicPacketNumber kFirstDecimatedPacket = 101; 4396 QuicPacketNumber kFirstDecimatedPacket = 101;
4335 for (unsigned int i = 0; i < kFirstDecimatedPacket - 1; ++i) { 4397 for (unsigned int i = 0; i < kFirstDecimatedPacket - 1; ++i) {
4336 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4398 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4337 ProcessDataPacketAtLevel(1 + i, 0, !kEntropyFlag, ENCRYPTION_INITIAL); 4399 ProcessDataPacketAtLevel(1 + i, 0, !kEntropyFlag, !kHasStopWaiting,
4400 ENCRYPTION_INITIAL);
4338 } 4401 }
4339 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4402 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4340 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used 4403 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used
4341 // instead of ENCRYPTION_NONE. 4404 // instead of ENCRYPTION_NONE.
4342 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4405 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4343 ProcessDataPacketAtLevel(kFirstDecimatedPacket, 0, !kEntropyFlag, 4406 ProcessDataPacketAtLevel(kFirstDecimatedPacket, 0, !kEntropyFlag,
4344 ENCRYPTION_INITIAL); 4407 !kHasStopWaiting, ENCRYPTION_INITIAL);
4345 4408
4346 // Check if delayed ack timer is running for the expected interval. 4409 // Check if delayed ack timer is running for the expected interval.
4347 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4410 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4348 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); 4411 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline());
4349 4412
4350 // The 10th received packet causes an ack to be sent. 4413 // The 10th received packet causes an ack to be sent.
4351 for (int i = 0; i < 9; ++i) { 4414 for (int i = 0; i < 9; ++i) {
4352 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4415 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4353 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4416 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4354 ProcessDataPacketAtLevel(kFirstDecimatedPacket + 1 + i, 0, !kEntropyFlag, 4417 ProcessDataPacketAtLevel(kFirstDecimatedPacket + 1 + i, 0, !kEntropyFlag,
4355 ENCRYPTION_INITIAL); 4418 !kHasStopWaiting, ENCRYPTION_INITIAL);
4356 } 4419 }
4357 // Check that ack is sent and that delayed ack alarm is reset. 4420 // Check that ack is sent and that delayed ack alarm is reset.
4358 EXPECT_EQ(2u, writer_->frame_count()); 4421 EXPECT_EQ(2u, writer_->frame_count());
4359 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 4422 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
4360 EXPECT_FALSE(writer_->ack_frames().empty()); 4423 EXPECT_FALSE(writer_->ack_frames().empty());
4361 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4424 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4362 } 4425 }
4363 4426
4364 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) { 4427 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) {
4365 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4428 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
4550 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 4613 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
4551 ProcessClosePacket(2, 0); 4614 ProcessClosePacket(2, 0);
4552 } 4615 }
4553 4616
4554 TEST_P(QuicConnectionTest, SendWhenDisconnected) { 4617 TEST_P(QuicConnectionTest, SendWhenDisconnected) {
4555 EXPECT_TRUE(connection_.connected()); 4618 EXPECT_TRUE(connection_.connected());
4556 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, false)); 4619 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, false));
4557 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false); 4620 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false);
4558 EXPECT_FALSE(connection_.connected()); 4621 EXPECT_FALSE(connection_.connected());
4559 EXPECT_FALSE(connection_.CanWriteStreamData()); 4622 EXPECT_FALSE(connection_.CanWriteStreamData());
4560 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4623 QuicPacket* packet =
4624 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4561 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); 4625 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0);
4562 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4626 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4563 HAS_RETRANSMITTABLE_DATA, false, false); 4627 HAS_RETRANSMITTABLE_DATA, false, false);
4564 } 4628 }
4565 4629
4566 TEST_P(QuicConnectionTest, PublicReset) { 4630 TEST_P(QuicConnectionTest, PublicReset) {
4567 QuicPublicResetPacket header; 4631 QuicPublicResetPacket header;
4568 header.public_header.connection_id = connection_id_; 4632 header.public_header.connection_id = connection_id_;
4569 header.public_header.reset_flag = true; 4633 header.public_header.reset_flag = true;
4570 header.public_header.version_flag = false; 4634 header.public_header.version_flag = false;
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
4907 stats.bytes_retransmitted); 4971 stats.bytes_retransmitted);
4908 EXPECT_EQ(3u, stats.packets_retransmitted); 4972 EXPECT_EQ(3u, stats.packets_retransmitted);
4909 EXPECT_EQ(1u, stats.rto_count); 4973 EXPECT_EQ(1u, stats.rto_count);
4910 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size); 4974 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size);
4911 } 4975 }
4912 4976
4913 TEST_P(QuicConnectionTest, CheckReceiveStats) { 4977 TEST_P(QuicConnectionTest, CheckReceiveStats) {
4914 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4978 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
4915 4979
4916 size_t received_bytes = 0; 4980 size_t received_bytes = 0;
4917 received_bytes += ProcessFecProtectedPacket(1, false, !kEntropyFlag); 4981 received_bytes +=
4918 received_bytes += ProcessFecProtectedPacket(3, false, !kEntropyFlag); 4982 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
4983 received_bytes +=
4984 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
4919 // Should be counted against dropped packets. 4985 // Should be counted against dropped packets.
4920 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag); 4986 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag);
4921 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, nullptr); 4987 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, nullptr);
4922 4988
4923 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) 4989 EXPECT_CALL(*send_algorithm_, BandwidthEstimate())
4924 .WillOnce(Return(QuicBandwidth::Zero())); 4990 .WillOnce(Return(QuicBandwidth::Zero()));
4925 4991
4926 const QuicConnectionStats& stats = connection_.GetStats(); 4992 const QuicConnectionStats& stats = connection_.GetStats();
4927 EXPECT_EQ(received_bytes, stats.bytes_received); 4993 EXPECT_EQ(received_bytes, stats.bytes_received);
4928 EXPECT_EQ(4u, stats.packets_received); 4994 EXPECT_EQ(4u, stats.packets_received);
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
5339 QuicPacketCreatorPeer::GetFecTimeout(creator_)); 5405 QuicPacketCreatorPeer::GetFecTimeout(creator_));
5340 } 5406 }
5341 5407
5342 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) { 5408 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) {
5343 QuicPacketHeader header; 5409 QuicPacketHeader header;
5344 5410
5345 scoped_ptr<MockQuicConnectionDebugVisitor> debug_visitor( 5411 scoped_ptr<MockQuicConnectionDebugVisitor> debug_visitor(
5346 new MockQuicConnectionDebugVisitor()); 5412 new MockQuicConnectionDebugVisitor());
5347 connection_.set_debug_visitor(debug_visitor.get()); 5413 connection_.set_debug_visitor(debug_visitor.get());
5348 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); 5414 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1);
5349 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1); 5415 if (FLAGS_quic_drop_non_awaited_packets) {
5350 EXPECT_CALL(*debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1); 5416 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1);
5417 EXPECT_CALL(*debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1);
5418 }
5351 connection_.OnPacketHeader(header); 5419 connection_.OnPacketHeader(header);
5352 } 5420 }
5353 5421
5354 TEST_P(QuicConnectionTest, Pacing) { 5422 TEST_P(QuicConnectionTest, Pacing) {
5355 TestConnection server(connection_id_, kSelfAddress, helper_.get(), factory_, 5423 TestConnection server(connection_id_, kSelfAddress, helper_.get(), factory_,
5356 Perspective::IS_SERVER, version()); 5424 Perspective::IS_SERVER, version());
5357 TestConnection client(connection_id_, kPeerAddress, helper_.get(), factory_, 5425 TestConnection client(connection_id_, kPeerAddress, helper_.get(), factory_,
5358 Perspective::IS_CLIENT, version()); 5426 Perspective::IS_CLIENT, version());
5359 EXPECT_FALSE(client.sent_packet_manager().using_pacing()); 5427 EXPECT_FALSE(client.sent_packet_manager().using_pacing());
5360 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); 5428 EXPECT_FALSE(server.sent_packet_manager().using_pacing());
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
5490 EXPECT_CALL(visitor_, 5558 EXPECT_CALL(visitor_,
5491 OnConnectionClosed(QUIC_UNENCRYPTED_STREAM_DATA, false)); 5559 OnConnectionClosed(QUIC_UNENCRYPTED_STREAM_DATA, false));
5492 EXPECT_DFATAL(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr), 5560 EXPECT_DFATAL(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr),
5493 "Cannot send stream data without encryption."); 5561 "Cannot send stream data without encryption.");
5494 EXPECT_FALSE(connection_.connected()); 5562 EXPECT_FALSE(connection_.connected());
5495 } 5563 }
5496 5564
5497 } // namespace 5565 } // namespace
5498 } // namespace test 5566 } // namespace test
5499 } // namespace net 5567 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_crypto_client_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698