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

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

Issue 1546633002: Drop not awaited packets before decrypt them. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@110393215
Patch Set: Created 5 years 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_flags.h » ('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/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.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 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize); 805 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize);
805 connection_.ProcessUdpPacket( 806 connection_.ProcessUdpPacket(
806 kSelfAddress, kPeerAddress, 807 kSelfAddress, kPeerAddress,
807 QuicEncryptedPacket(buffer, encrypted_length, false)); 808 QuicEncryptedPacket(buffer, encrypted_length, false));
808 return base::checked_cast<QuicPacketEntropyHash>(encrypted_length); 809 return base::checked_cast<QuicPacketEntropyHash>(encrypted_length);
809 } 810 }
810 811
811 size_t ProcessDataPacket(QuicPacketNumber number, 812 size_t ProcessDataPacket(QuicPacketNumber number,
812 QuicFecGroupNumber fec_group, 813 QuicFecGroupNumber fec_group,
813 bool entropy_flag) { 814 bool entropy_flag) {
814 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, 815 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, false,
815 ENCRYPTION_NONE); 816 ENCRYPTION_NONE);
816 } 817 }
817 818
818 size_t ProcessDataPacketAtLevel(QuicPacketNumber number, 819 size_t ProcessDataPacketAtLevel(QuicPacketNumber number,
819 QuicFecGroupNumber fec_group, 820 QuicFecGroupNumber fec_group,
820 bool entropy_flag, 821 bool entropy_flag,
822 bool has_stop_waiting,
821 EncryptionLevel level) { 823 EncryptionLevel level) {
822 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group, 824 scoped_ptr<QuicPacket> packet(
823 entropy_flag)); 825 ConstructDataPacket(number, fec_group, entropy_flag, has_stop_waiting));
824 char buffer[kMaxPacketSize]; 826 char buffer[kMaxPacketSize];
825 size_t encrypted_length = 827 size_t encrypted_length =
826 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize); 828 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize);
827 connection_.ProcessUdpPacket( 829 connection_.ProcessUdpPacket(
828 kSelfAddress, kPeerAddress, 830 kSelfAddress, kPeerAddress,
829 QuicEncryptedPacket(buffer, encrypted_length, false)); 831 QuicEncryptedPacket(buffer, encrypted_length, false));
830 return encrypted_length; 832 return encrypted_length;
831 } 833 }
832 834
833 void ProcessClosePacket(QuicPacketNumber number, 835 void ProcessClosePacket(QuicPacketNumber number,
834 QuicFecGroupNumber fec_group) { 836 QuicFecGroupNumber fec_group) {
835 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); 837 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group));
836 char buffer[kMaxPacketSize]; 838 char buffer[kMaxPacketSize];
837 size_t encrypted_length = framer_.EncryptPayload( 839 size_t encrypted_length = framer_.EncryptPayload(
838 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize); 840 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize);
839 connection_.ProcessUdpPacket( 841 connection_.ProcessUdpPacket(
840 kSelfAddress, kPeerAddress, 842 kSelfAddress, kPeerAddress,
841 QuicEncryptedPacket(buffer, encrypted_length, false)); 843 QuicEncryptedPacket(buffer, encrypted_length, false));
842 } 844 }
843 845
844 size_t ProcessFecProtectedPacket(QuicPacketNumber number, 846 size_t ProcessFecProtectedPacket(QuicPacketNumber number,
845 bool expect_revival, 847 bool expect_revival,
846 bool entropy_flag) { 848 bool entropy_flag,
849 bool has_stop_waiting) {
847 return ProcessFecProtectedPacketAtLevel(number, 1, expect_revival, 850 return ProcessFecProtectedPacketAtLevel(number, 1, expect_revival,
848 entropy_flag, ENCRYPTION_NONE); 851 entropy_flag, has_stop_waiting,
852 ENCRYPTION_NONE);
849 } 853 }
850 854
851 size_t ProcessFecProtectedPacketAtLevel(QuicPacketNumber number, 855 size_t ProcessFecProtectedPacketAtLevel(QuicPacketNumber number,
852 QuicFecGroupNumber fec_group, 856 QuicFecGroupNumber fec_group,
853 bool expect_revival, 857 bool expect_revival,
854 bool entropy_flag, 858 bool entropy_flag,
859 bool has_stop_waiting,
855 EncryptionLevel level) { 860 EncryptionLevel level) {
856 if (expect_revival) { 861 if (expect_revival) {
857 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 862 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
858 } 863 }
859 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1).RetiresOnSaturation(); 864 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1).RetiresOnSaturation();
860 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, level); 865 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag,
866 has_stop_waiting, level);
861 } 867 }
862 868
863 // Processes an FEC packet that covers the packets that would have been 869 // Processes an FEC packet that covers the packets that would have been
864 // received. 870 // received.
865 size_t ProcessFecPacket(QuicPacketNumber number, 871 size_t ProcessFecPacket(QuicPacketNumber number,
866 QuicPacketNumber min_protected_packet, 872 QuicPacketNumber min_protected_packet,
867 bool expect_revival, 873 bool expect_revival,
868 bool entropy_flag, 874 bool entropy_flag,
869 QuicPacket* packet) { 875 QuicPacket* packet) {
870 return ProcessFecPacketAtLevel(number, min_protected_packet, expect_revival, 876 return ProcessFecPacketAtLevel(number, min_protected_packet, expect_revival,
(...skipping 12 matching lines...) Expand all
883 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 889 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
884 } 890 }
885 891
886 // Construct the decrypted data packet so we can compute the correct 892 // Construct the decrypted data packet so we can compute the correct
887 // redundancy. If |packet| has been provided then use that, otherwise 893 // redundancy. If |packet| has been provided then use that, otherwise
888 // construct a default data packet. 894 // construct a default data packet.
889 scoped_ptr<QuicPacket> data_packet; 895 scoped_ptr<QuicPacket> data_packet;
890 if (packet) { 896 if (packet) {
891 data_packet.reset(packet); 897 data_packet.reset(packet);
892 } else { 898 } else {
893 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag)); 899 data_packet.reset(
900 ConstructDataPacket(number, 1, !kEntropyFlag, !kHasStopWaiting));
894 } 901 }
895 902
896 QuicPacketHeader header; 903 QuicPacketHeader header;
897 header.public_header.connection_id = connection_id_; 904 header.public_header.connection_id = connection_id_;
898 header.public_header.packet_number_length = packet_number_length_; 905 header.public_header.packet_number_length = packet_number_length_;
899 header.public_header.connection_id_length = connection_id_length_; 906 header.public_header.connection_id_length = connection_id_length_;
900 header.packet_number = number; 907 header.packet_number = number;
901 header.entropy_flag = entropy_flag; 908 header.entropy_flag = entropy_flag;
902 header.fec_flag = true; 909 header.fec_flag = true;
903 header.is_in_fec_group = IN_FEC_GROUP; 910 header.is_in_fec_group = IN_FEC_GROUP;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 } 989 }
983 990
984 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) { 991 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) {
985 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header, frames); 992 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header, frames);
986 EXPECT_NE(nullptr, packet); 993 EXPECT_NE(nullptr, packet);
987 return packet; 994 return packet;
988 } 995 }
989 996
990 QuicPacket* ConstructDataPacket(QuicPacketNumber number, 997 QuicPacket* ConstructDataPacket(QuicPacketNumber number,
991 QuicFecGroupNumber fec_group, 998 QuicFecGroupNumber fec_group,
992 bool entropy_flag) { 999 bool entropy_flag,
1000 bool has_stop_waiting) {
993 QuicPacketHeader header; 1001 QuicPacketHeader header;
994 header.public_header.connection_id = connection_id_; 1002 header.public_header.connection_id = connection_id_;
995 header.public_header.packet_number_length = packet_number_length_; 1003 header.public_header.packet_number_length = packet_number_length_;
996 header.public_header.connection_id_length = connection_id_length_; 1004 header.public_header.connection_id_length = connection_id_length_;
997 header.entropy_flag = entropy_flag; 1005 header.entropy_flag = entropy_flag;
998 header.packet_number = number; 1006 header.packet_number = number;
999 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;
1000 header.fec_group = fec_group; 1008 header.fec_group = fec_group;
1001 1009
1002 QuicFrames frames; 1010 QuicFrames frames;
1003 frames.push_back(QuicFrame(&frame1_)); 1011 frames.push_back(QuicFrame(&frame1_));
1012 if (has_stop_waiting) {
1013 frames.push_back(QuicFrame(&stop_waiting_));
1014 }
1004 return ConstructPacket(header, frames); 1015 return ConstructPacket(header, frames);
1005 } 1016 }
1006 1017
1007 QuicPacket* ConstructClosePacket(QuicPacketNumber number, 1018 QuicPacket* ConstructClosePacket(QuicPacketNumber number,
1008 QuicFecGroupNumber fec_group) { 1019 QuicFecGroupNumber fec_group) {
1009 QuicPacketHeader header; 1020 QuicPacketHeader header;
1010 header.public_header.connection_id = connection_id_; 1021 header.public_header.connection_id = connection_id_;
1011 header.packet_number = number; 1022 header.packet_number = number;
1012 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 1023 header.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
1013 header.fec_group = fec_group; 1024 header.fec_group = fec_group;
(...skipping 2043 matching lines...) Expand 10 before | Expand all | Expand 10 after
3057 // Connection id length in the revived header should be the same as 3068 // Connection id length in the revived header should be the same as
3058 // in the original data/fec packet headers. 3069 // in the original data/fec packet headers.
3059 EXPECT_EQ(connection_id_length_, 3070 EXPECT_EQ(connection_id_length_,
3060 fec_visitor->revived_header().public_header.connection_id_length); 3071 fec_visitor->revived_header().public_header.connection_id_length);
3061 } 3072 }
3062 } 3073 }
3063 3074
3064 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) { 3075 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
3065 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3076 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3066 3077
3067 ProcessFecProtectedPacket(1, false, kEntropyFlag); 3078 ProcessFecProtectedPacket(1, false, kEntropyFlag, !kHasStopWaiting);
3068 // Don't send missing packet 2. 3079 // Don't send missing packet 2.
3069 ProcessFecPacket(3, 1, true, !kEntropyFlag, nullptr); 3080 ProcessFecPacket(3, 1, true, !kEntropyFlag, nullptr);
3070 // Entropy flag should be true, so entropy should not be 0. 3081 // Entropy flag should be true, so entropy should not be 0.
3071 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3082 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3072 } 3083 }
3073 3084
3074 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) { 3085 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
3075 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3086 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3076 3087
3077 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 3088 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3078 // Don't send missing packet 2. 3089 // Don't send missing packet 2.
3079 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 3090 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
3080 ProcessFecPacket(4, 1, true, kEntropyFlag, nullptr); 3091 ProcessFecPacket(4, 1, true, kEntropyFlag, nullptr);
3081 // Ensure QUIC no longer revives entropy for lost packets. 3092 // Ensure QUIC no longer revives entropy for lost packets.
3082 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3093 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3083 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 4)); 3094 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 4));
3084 } 3095 }
3085 3096
3086 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) { 3097 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
3087 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3098 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3088 3099
3089 // Don't send missing packet 1. 3100 // Don't send missing packet 1.
3090 ProcessFecPacket(3, 1, false, !kEntropyFlag, nullptr); 3101 ProcessFecPacket(3, 1, false, !kEntropyFlag, nullptr);
3091 // Out of order. 3102 // Out of order.
3092 ProcessFecProtectedPacket(2, true, !kEntropyFlag); 3103 ProcessFecProtectedPacket(2, true, !kEntropyFlag, !kHasStopWaiting);
3093 // Entropy flag should be false, so entropy should be 0. 3104 // Entropy flag should be false, so entropy should be 0.
3094 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3105 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3095 } 3106 }
3096 3107
3097 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) { 3108 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) {
3098 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3109 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3099 3110
3100 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 3111 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3101 // Don't send missing packet 2. 3112 // Don't send missing packet 2.
3102 ProcessFecPacket(6, 1, false, kEntropyFlag, nullptr); 3113 ProcessFecPacket(6, 1, false, kEntropyFlag, nullptr);
3103 ProcessFecProtectedPacket(3, false, kEntropyFlag); 3114 ProcessFecProtectedPacket(3, false, kEntropyFlag, !kHasStopWaiting);
3104 ProcessFecProtectedPacket(4, false, kEntropyFlag); 3115 ProcessFecProtectedPacket(4, false, kEntropyFlag, !kHasStopWaiting);
3105 ProcessFecProtectedPacket(5, true, !kEntropyFlag); 3116 ProcessFecProtectedPacket(5, true, !kEntropyFlag, !kHasStopWaiting);
3106 // Ensure entropy is not revived for the missing packet. 3117 // Ensure entropy is not revived for the missing packet.
3107 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 3118 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
3108 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 3)); 3119 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 3));
3109 } 3120 }
3110 3121
3111 TEST_P(QuicConnectionTest, TLP) { 3122 TEST_P(QuicConnectionTest, TLP) {
3112 QuicSentPacketManagerPeer::SetMaxTailLossProbes(manager_, 1); 3123 QuicSentPacketManagerPeer::SetMaxTailLossProbes(manager_, 1);
3113 3124
3114 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); 3125 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr);
3115 EXPECT_EQ(1u, stop_waiting()->least_unacked); 3126 EXPECT_EQ(1u, stop_waiting()->least_unacked);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
3311 QuicConfig config; 3322 QuicConfig config;
3312 connection_.SetFromConfig(config); 3323 connection_.SetFromConfig(config);
3313 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3324 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3314 use_tagging_decrypter(); 3325 use_tagging_decrypter();
3315 3326
3316 const uint8 tag = 0x07; 3327 const uint8 tag = 0x07;
3317 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3328 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3318 3329
3319 // Process an encrypted packet which can not yet be decrypted which should 3330 // Process an encrypted packet which can not yet be decrypted which should
3320 // result in the packet being buffered. 3331 // result in the packet being buffered.
3321 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3332 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, !kHasStopWaiting,
3333 ENCRYPTION_INITIAL);
3322 3334
3323 // Transition to the new encryption state and process another encrypted packet 3335 // Transition to the new encryption state and process another encrypted packet
3324 // which should result in the original packet being processed. 3336 // which should result in the original packet being processed.
3325 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3337 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3326 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3338 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3327 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3339 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3328 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2); 3340 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2);
3329 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3341 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, !kHasStopWaiting,
3342 ENCRYPTION_INITIAL);
3330 3343
3331 // Finally, process a third packet and note that we do not reprocess the 3344 // Finally, process a third packet and note that we do not reprocess the
3332 // buffered packet. 3345 // buffered packet.
3333 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 3346 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
3334 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3347 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, !kHasStopWaiting,
3348 ENCRYPTION_INITIAL);
3335 } 3349 }
3336 3350
3337 TEST_P(QuicConnectionTest, ProcessBufferedFECGroup) { 3351 TEST_P(QuicConnectionTest, ProcessBufferedFECGroup) {
3338 // SetFromConfig is always called after construction from InitializeSession. 3352 // SetFromConfig is always called after construction from InitializeSession.
3339 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3353 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3340 QuicConfig config; 3354 QuicConfig config;
3341 config.set_max_undecryptable_packets(100); 3355 config.set_max_undecryptable_packets(100);
3342 connection_.SetFromConfig(config); 3356 connection_.SetFromConfig(config);
3343 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3357 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3344 use_tagging_decrypter(); 3358 use_tagging_decrypter();
3345 3359
3346 const uint8 tag = 0x07; 3360 const uint8 tag = 0x07;
3347 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3361 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3348 3362
3349 // Don't send packet 1 and buffer initially encrypted packets. 3363 // Don't send packet 1 and buffer initially encrypted packets.
3350 ProcessFecProtectedPacketAtLevel(2, 1, false, !kEntropyFlag, 3364 ProcessFecProtectedPacketAtLevel(2, 1, false, !kEntropyFlag, !kHasStopWaiting,
3351 ENCRYPTION_INITIAL); 3365 ENCRYPTION_INITIAL);
3352 ProcessFecPacketAtLevel(3, 1, false, kEntropyFlag, nullptr, 3366 ProcessFecPacketAtLevel(3, 1, false, kEntropyFlag, nullptr,
3353 ENCRYPTION_INITIAL); 3367 ENCRYPTION_INITIAL);
3354 // Since the packets were buffered, no FEC group should be open. 3368 // Since the packets were buffered, no FEC group should be open.
3355 ASSERT_EQ(0u, connection_.NumFecGroups()); 3369 ASSERT_EQ(0u, connection_.NumFecGroups());
3356 3370
3357 // Now send non-fec protected ack packet and close the group. 3371 // Now send non-fec protected ack packet and close the group.
3358 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3372 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3359 ProcessStopWaitingPacketAtLevel(4, &frame, ENCRYPTION_INITIAL); 3373 ProcessStopWaitingPacketAtLevel(4, &frame, ENCRYPTION_INITIAL);
3360 3374
3361 // Transition to the new encryption state and process another encrypted packet 3375 // Transition to the new encryption state and process another encrypted packet
3362 // which should result in the original packets being processed. The missing 3376 // which should result in the original packets being processed. The missing
3363 // packet should be revived before the STOP_WAITING packet is processed. 3377 // packet should be revived before the STOP_WAITING packet is processed.
3364 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3378 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3365 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3379 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3366 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3380 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3367 3381
3368 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2).RetiresOnSaturation(); 3382 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(2).RetiresOnSaturation();
3369 ProcessDataPacketAtLevel(5, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3383 ProcessDataPacketAtLevel(5, 0, kEntropyFlag, !kHasStopWaiting,
3384 ENCRYPTION_INITIAL);
3370 const QuicConnectionStats& stats = connection_.GetStats(); 3385 const QuicConnectionStats& stats = connection_.GetStats();
3371 EXPECT_EQ(1u, stats.packets_revived); 3386 EXPECT_EQ(1u, stats.packets_revived);
3372 } 3387 }
3373 3388
3374 TEST_P(QuicConnectionTest, Buffer100NonDecryptablePackets) { 3389 TEST_P(QuicConnectionTest, Buffer100NonDecryptablePackets) {
3375 // SetFromConfig is always called after construction from InitializeSession. 3390 // SetFromConfig is always called after construction from InitializeSession.
3376 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3391 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3377 QuicConfig config; 3392 QuicConfig config;
3378 config.set_max_undecryptable_packets(100); 3393 config.set_max_undecryptable_packets(100);
3379 connection_.SetFromConfig(config); 3394 connection_.SetFromConfig(config);
3380 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3395 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3381 use_tagging_decrypter(); 3396 use_tagging_decrypter();
3382 3397
3383 const uint8 tag = 0x07; 3398 const uint8 tag = 0x07;
3384 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3399 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3385 3400
3386 // Process an encrypted packet which can not yet be decrypted which should 3401 // Process an encrypted packet which can not yet be decrypted which should
3387 // result in the packet being buffered. 3402 // result in the packet being buffered.
3388 for (QuicPacketNumber i = 1; i <= 100; ++i) { 3403 for (QuicPacketNumber i = 1; i <= 100; ++i) {
3389 ProcessDataPacketAtLevel(i, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3404 ProcessDataPacketAtLevel(i, 0, kEntropyFlag, !kHasStopWaiting,
3405 ENCRYPTION_INITIAL);
3390 } 3406 }
3391 3407
3392 // Transition to the new encryption state and process another encrypted packet 3408 // Transition to the new encryption state and process another encrypted packet
3393 // which should result in the original packets being processed. 3409 // which should result in the original packets being processed.
3394 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 3410 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
3395 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 3411 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
3396 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 3412 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
3397 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(101); 3413 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(101);
3398 ProcessDataPacketAtLevel(101, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3414 ProcessDataPacketAtLevel(101, 0, kEntropyFlag, !kHasStopWaiting,
3415 ENCRYPTION_INITIAL);
3399 3416
3400 // Finally, process a third packet and note that we do not reprocess the 3417 // Finally, process a third packet and note that we do not reprocess the
3401 // buffered packet. 3418 // buffered packet.
3402 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 3419 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
3403 ProcessDataPacketAtLevel(102, 0, kEntropyFlag, ENCRYPTION_INITIAL); 3420 ProcessDataPacketAtLevel(102, 0, kEntropyFlag, !kHasStopWaiting,
3421 ENCRYPTION_INITIAL);
3404 } 3422 }
3405 3423
3406 TEST_P(QuicConnectionTest, TestRetransmitOrder) { 3424 TEST_P(QuicConnectionTest, TestRetransmitOrder) {
3407 QuicByteCount first_packet_size; 3425 QuicByteCount first_packet_size;
3408 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( 3426 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce(
3409 DoAll(SaveArg<3>(&first_packet_size), Return(true))); 3427 DoAll(SaveArg<3>(&first_packet_size), Return(true)));
3410 3428
3411 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr); 3429 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr);
3412 QuicByteCount second_packet_size; 3430 QuicByteCount second_packet_size;
3413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( 3431 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
3497 // Unblock the writes and actually send. 3515 // Unblock the writes and actually send.
3498 writer_->SetWritable(); 3516 writer_->SetWritable();
3499 connection_.OnCanWrite(); 3517 connection_.OnCanWrite();
3500 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 3518 EXPECT_EQ(0u, connection_.NumQueuedPackets());
3501 } 3519 }
3502 3520
3503 TEST_P(QuicConnectionTest, CloseFecGroup) { 3521 TEST_P(QuicConnectionTest, CloseFecGroup) {
3504 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3522 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3505 // Don't send missing packet 1. 3523 // Don't send missing packet 1.
3506 // Don't send missing packet 2. 3524 // Don't send missing packet 2.
3507 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 3525 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
3508 // Don't send missing FEC packet 3. 3526 // Don't send missing FEC packet 3.
3509 ASSERT_EQ(1u, connection_.NumFecGroups()); 3527 ASSERT_EQ(1u, connection_.NumFecGroups());
3510 3528
3511 // Now send non-fec protected ack packet and close the group. 3529 // Now send non-fec protected ack packet and close the group.
3512 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4); 3530 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4);
3513 QuicStopWaitingFrame frame = InitStopWaitingFrame(5); 3531 QuicStopWaitingFrame frame = InitStopWaitingFrame(5);
3514 ProcessStopWaitingPacket(&frame); 3532 ProcessStopWaitingPacket(&frame);
3515 ASSERT_EQ(0u, connection_.NumFecGroups()); 3533 ASSERT_EQ(0u, connection_.NumFecGroups());
3516 } 3534 }
3517 3535
3536 TEST_P(QuicConnectionTest, FailedToCloseFecGroupWithFecProtectedStopWaiting) {
3537 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3538 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, false);
3539 // Don't send missing packet 1.
3540 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3541 EXPECT_EQ(1u, connection_.NumFecGroups());
3542 stop_waiting_ = InitStopWaitingFrame(3);
3543 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3544 // This Fec group would be closed but created again.
3545 EXPECT_EQ(1u, connection_.NumFecGroups());
3546 }
3547
3548 TEST_P(QuicConnectionTest,
3549 CloseFecGroupUnderStopWaitingAndWaitingForPacketsBelowStopWaiting) {
3550 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3551 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, true);
3552 // Don't send missing packet 1.
3553 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3554 EXPECT_EQ(1u, connection_.NumFecGroups());
3555 stop_waiting_ = InitStopWaitingFrame(2);
3556 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3557 // This Fec group would be closed.
3558 EXPECT_EQ(0u, connection_.NumFecGroups());
3559 }
3560
3561 TEST_P(QuicConnectionTest,
3562 DoNotCloseFecGroupUnderStopWaitingButNotWaitingForPacketsBelow) {
3563 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3564 ValueRestore<bool> old_flag(&FLAGS_quic_drop_non_awaited_packets, true);
3565 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
3566 ProcessFecProtectedPacket(2, false, !kEntropyFlag, !kHasStopWaiting);
3567 // Don't send missing packet 3.
3568 EXPECT_EQ(1u, connection_.NumFecGroups());
3569 stop_waiting_ = InitStopWaitingFrame(2);
3570 ProcessFecProtectedPacket(3, false, !kEntropyFlag, kHasStopWaiting);
3571 // This group will not be closed because this group is not waiting for packets
3572 // below stop waiting.
3573 EXPECT_EQ(1u, connection_.NumFecGroups());
3574 }
3575
3518 TEST_P(QuicConnectionTest, InitialTimeout) { 3576 TEST_P(QuicConnectionTest, InitialTimeout) {
3519 EXPECT_TRUE(connection_.connected()); 3577 EXPECT_TRUE(connection_.connected());
3520 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); 3578 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
3521 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 3579 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3522 3580
3523 // SetFromConfig sets the initial timeouts before negotiation. 3581 // SetFromConfig sets the initial timeouts before negotiation.
3524 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 3582 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3525 QuicConfig config; 3583 QuicConfig config;
3526 connection_.SetFromConfig(config); 3584 connection_.SetFromConfig(config);
3527 // Subtract a second from the idle timeout on the client side. 3585 // Subtract a second from the idle timeout on the client side.
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
4172 nullptr); 4230 nullptr);
4173 connection_.GetTimeoutAlarm()->Fire(); 4231 connection_.GetTimeoutAlarm()->Fire();
4174 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); 4232 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
4175 } 4233 }
4176 EXPECT_FALSE(connection_.connected()); 4234 EXPECT_FALSE(connection_.connected());
4177 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 4235 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
4178 } 4236 }
4179 4237
4180 TEST_P(QuicConnectionTest, SendScheduler) { 4238 TEST_P(QuicConnectionTest, SendScheduler) {
4181 // Test that if we send a packet without delay, it is not queued. 4239 // Test that if we send a packet without delay, it is not queued.
4182 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4240 QuicPacket* packet =
4241 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4183 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 4242 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
4184 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4243 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4185 HAS_RETRANSMITTABLE_DATA, false, false); 4244 HAS_RETRANSMITTABLE_DATA, false, false);
4186 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 4245 EXPECT_EQ(0u, connection_.NumQueuedPackets());
4187 } 4246 }
4188 4247
4189 TEST_P(QuicConnectionTest, FailToSendFirstPacket) { 4248 TEST_P(QuicConnectionTest, FailToSendFirstPacket) {
4190 // Test that the connection does not crash when it fails to send the first 4249 // Test that the connection does not crash when it fails to send the first
4191 // packet at which point self_address_ might be uninitialized. 4250 // packet at which point self_address_ might be uninitialized.
4192 EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1); 4251 EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1);
4193 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4252 QuicPacket* packet =
4253 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4194 writer_->SetShouldWriteFail(); 4254 writer_->SetShouldWriteFail();
4195 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4255 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4196 HAS_RETRANSMITTABLE_DATA, false, false); 4256 HAS_RETRANSMITTABLE_DATA, false, false);
4197 } 4257 }
4198 4258
4199 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) { 4259 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) {
4200 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4260 QuicPacket* packet =
4261 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4201 BlockOnNextWrite(); 4262 BlockOnNextWrite();
4202 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); 4263 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0);
4203 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4264 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4204 HAS_RETRANSMITTABLE_DATA, false, false); 4265 HAS_RETRANSMITTABLE_DATA, false, false);
4205 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 4266 EXPECT_EQ(1u, connection_.NumQueuedPackets());
4206 } 4267 }
4207 4268
4208 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) { 4269 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
4209 // All packets carry version info till version is negotiated. 4270 // All packets carry version info till version is negotiated.
4210 size_t payload_length; 4271 size_t payload_length;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4301 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4362 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4302 const uint8 tag = 0x07; 4363 const uint8 tag = 0x07;
4303 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 4364 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
4304 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 4365 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
4305 // Process a packet from the non-crypto stream. 4366 // Process a packet from the non-crypto stream.
4306 frame1_.stream_id = 3; 4367 frame1_.stream_id = 3;
4307 4368
4308 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used 4369 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used
4309 // instead of ENCRYPTION_NONE. 4370 // instead of ENCRYPTION_NONE.
4310 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4371 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4311 ProcessDataPacketAtLevel(1, 0, !kEntropyFlag, ENCRYPTION_INITIAL); 4372 ProcessDataPacketAtLevel(1, 0, !kEntropyFlag, !kHasStopWaiting,
4373 ENCRYPTION_INITIAL);
4312 4374
4313 // Check if delayed ack timer is running for the expected interval. 4375 // Check if delayed ack timer is running for the expected interval.
4314 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4376 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4315 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); 4377 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline());
4316 // Simulate delayed ack alarm firing. 4378 // Simulate delayed ack alarm firing.
4317 connection_.GetAckAlarm()->Fire(); 4379 connection_.GetAckAlarm()->Fire();
4318 // Check that ack is sent and that delayed ack alarm is reset. 4380 // Check that ack is sent and that delayed ack alarm is reset.
4319 EXPECT_EQ(2u, writer_->frame_count()); 4381 EXPECT_EQ(2u, writer_->frame_count());
4320 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 4382 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
4321 EXPECT_FALSE(writer_->ack_frames().empty()); 4383 EXPECT_FALSE(writer_->ack_frames().empty());
(...skipping 16 matching lines...) Expand all
4338 const uint8 tag = 0x07; 4400 const uint8 tag = 0x07;
4339 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); 4401 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag));
4340 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); 4402 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag));
4341 // Process a packet from the non-crypto stream. 4403 // Process a packet from the non-crypto stream.
4342 frame1_.stream_id = 3; 4404 frame1_.stream_id = 3;
4343 4405
4344 // Process all the initial packets in order so there aren't missing packets. 4406 // Process all the initial packets in order so there aren't missing packets.
4345 QuicPacketNumber kFirstDecimatedPacket = 101; 4407 QuicPacketNumber kFirstDecimatedPacket = 101;
4346 for (unsigned int i = 0; i < kFirstDecimatedPacket - 1; ++i) { 4408 for (unsigned int i = 0; i < kFirstDecimatedPacket - 1; ++i) {
4347 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4409 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4348 ProcessDataPacketAtLevel(1 + i, 0, !kEntropyFlag, ENCRYPTION_INITIAL); 4410 ProcessDataPacketAtLevel(1 + i, 0, !kEntropyFlag, !kHasStopWaiting,
4411 ENCRYPTION_INITIAL);
4349 } 4412 }
4350 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4413 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4351 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used 4414 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used
4352 // instead of ENCRYPTION_NONE. 4415 // instead of ENCRYPTION_NONE.
4353 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4416 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4354 ProcessDataPacketAtLevel(kFirstDecimatedPacket, 0, !kEntropyFlag, 4417 ProcessDataPacketAtLevel(kFirstDecimatedPacket, 0, !kEntropyFlag,
4355 ENCRYPTION_INITIAL); 4418 !kHasStopWaiting, ENCRYPTION_INITIAL);
4356 4419
4357 // Check if delayed ack timer is running for the expected interval. 4420 // Check if delayed ack timer is running for the expected interval.
4358 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4421 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4359 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); 4422 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline());
4360 4423
4361 // The 10th received packet causes an ack to be sent. 4424 // The 10th received packet causes an ack to be sent.
4362 for (int i = 0; i < 9; ++i) { 4425 for (int i = 0; i < 9; ++i) {
4363 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 4426 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
4364 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4427 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4365 ProcessDataPacketAtLevel(kFirstDecimatedPacket + 1 + i, 0, !kEntropyFlag, 4428 ProcessDataPacketAtLevel(kFirstDecimatedPacket + 1 + i, 0, !kEntropyFlag,
4366 ENCRYPTION_INITIAL); 4429 !kHasStopWaiting, ENCRYPTION_INITIAL);
4367 } 4430 }
4368 // Check that ack is sent and that delayed ack alarm is reset. 4431 // Check that ack is sent and that delayed ack alarm is reset.
4369 EXPECT_EQ(2u, writer_->frame_count()); 4432 EXPECT_EQ(2u, writer_->frame_count());
4370 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); 4433 EXPECT_FALSE(writer_->stop_waiting_frames().empty());
4371 EXPECT_FALSE(writer_->ack_frames().empty()); 4434 EXPECT_FALSE(writer_->ack_frames().empty());
4372 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 4435 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
4373 } 4436 }
4374 4437
4375 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) { 4438 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) {
4376 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4439 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
4562 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); 4625 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
4563 ProcessClosePacket(2, 0); 4626 ProcessClosePacket(2, 0);
4564 } 4627 }
4565 4628
4566 TEST_P(QuicConnectionTest, SendWhenDisconnected) { 4629 TEST_P(QuicConnectionTest, SendWhenDisconnected) {
4567 EXPECT_TRUE(connection_.connected()); 4630 EXPECT_TRUE(connection_.connected());
4568 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, false)); 4631 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, false));
4569 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false); 4632 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false);
4570 EXPECT_FALSE(connection_.connected()); 4633 EXPECT_FALSE(connection_.connected());
4571 EXPECT_FALSE(connection_.CanWriteStreamData()); 4634 EXPECT_FALSE(connection_.CanWriteStreamData());
4572 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 4635 QuicPacket* packet =
4636 ConstructDataPacket(1, 0, !kEntropyFlag, !kHasStopWaiting);
4573 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); 4637 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0);
4574 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash, 4638 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, kTestEntropyHash,
4575 HAS_RETRANSMITTABLE_DATA, false, false); 4639 HAS_RETRANSMITTABLE_DATA, false, false);
4576 } 4640 }
4577 4641
4578 TEST_P(QuicConnectionTest, PublicReset) { 4642 TEST_P(QuicConnectionTest, PublicReset) {
4579 QuicPublicResetPacket header; 4643 QuicPublicResetPacket header;
4580 header.public_header.connection_id = connection_id_; 4644 header.public_header.connection_id = connection_id_;
4581 header.public_header.reset_flag = true; 4645 header.public_header.reset_flag = true;
4582 header.public_header.version_flag = false; 4646 header.public_header.version_flag = false;
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
4920 stats.bytes_retransmitted); 4984 stats.bytes_retransmitted);
4921 EXPECT_EQ(3u, stats.packets_retransmitted); 4985 EXPECT_EQ(3u, stats.packets_retransmitted);
4922 EXPECT_EQ(1u, stats.rto_count); 4986 EXPECT_EQ(1u, stats.rto_count);
4923 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size); 4987 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size);
4924 } 4988 }
4925 4989
4926 TEST_P(QuicConnectionTest, CheckReceiveStats) { 4990 TEST_P(QuicConnectionTest, CheckReceiveStats) {
4927 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4991 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
4928 4992
4929 size_t received_bytes = 0; 4993 size_t received_bytes = 0;
4930 received_bytes += ProcessFecProtectedPacket(1, false, !kEntropyFlag); 4994 received_bytes +=
4931 received_bytes += ProcessFecProtectedPacket(3, false, !kEntropyFlag); 4995 ProcessFecProtectedPacket(1, false, !kEntropyFlag, !kHasStopWaiting);
4996 received_bytes +=
4997 ProcessFecProtectedPacket(3, false, !kEntropyFlag, !kHasStopWaiting);
4932 // Should be counted against dropped packets. 4998 // Should be counted against dropped packets.
4933 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag); 4999 received_bytes += ProcessDataPacket(3, 1, !kEntropyFlag);
4934 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, nullptr); 5000 received_bytes += ProcessFecPacket(4, 1, true, !kEntropyFlag, nullptr);
4935 5001
4936 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce( 5002 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(
4937 Return(QuicBandwidth::Zero())); 5003 Return(QuicBandwidth::Zero()));
4938 5004
4939 const QuicConnectionStats& stats = connection_.GetStats(); 5005 const QuicConnectionStats& stats = connection_.GetStats();
4940 EXPECT_EQ(received_bytes, stats.bytes_received); 5006 EXPECT_EQ(received_bytes, stats.bytes_received);
4941 EXPECT_EQ(4u, stats.packets_received); 5007 EXPECT_EQ(4u, stats.packets_received);
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
5352 QuicPacketCreatorPeer::GetFecTimeout(creator_)); 5418 QuicPacketCreatorPeer::GetFecTimeout(creator_));
5353 } 5419 }
5354 5420
5355 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) { 5421 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) {
5356 QuicPacketHeader header; 5422 QuicPacketHeader header;
5357 5423
5358 scoped_ptr<MockQuicConnectionDebugVisitor> debug_visitor( 5424 scoped_ptr<MockQuicConnectionDebugVisitor> debug_visitor(
5359 new MockQuicConnectionDebugVisitor()); 5425 new MockQuicConnectionDebugVisitor());
5360 connection_.set_debug_visitor(debug_visitor.get()); 5426 connection_.set_debug_visitor(debug_visitor.get());
5361 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); 5427 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1);
5362 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1); 5428 if (FLAGS_quic_drop_non_awaited_packets) {
5363 EXPECT_CALL(*debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1); 5429 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1);
5430 EXPECT_CALL(*debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1);
5431 }
5364 connection_.OnPacketHeader(header); 5432 connection_.OnPacketHeader(header);
5365 } 5433 }
5366 5434
5367 TEST_P(QuicConnectionTest, Pacing) { 5435 TEST_P(QuicConnectionTest, Pacing) {
5368 TestConnection server(connection_id_, kSelfAddress, helper_.get(), factory_, 5436 TestConnection server(connection_id_, kSelfAddress, helper_.get(), factory_,
5369 Perspective::IS_SERVER, version()); 5437 Perspective::IS_SERVER, version());
5370 TestConnection client(connection_id_, kPeerAddress, helper_.get(), factory_, 5438 TestConnection client(connection_id_, kPeerAddress, helper_.get(), factory_,
5371 Perspective::IS_CLIENT, version()); 5439 Perspective::IS_CLIENT, version());
5372 EXPECT_FALSE(client.sent_packet_manager().using_pacing()); 5440 EXPECT_FALSE(client.sent_packet_manager().using_pacing());
5373 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); 5441 EXPECT_FALSE(server.sent_packet_manager().using_pacing());
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
5503 EXPECT_CALL(visitor_, 5571 EXPECT_CALL(visitor_,
5504 OnConnectionClosed(QUIC_UNENCRYPTED_STREAM_DATA, false)); 5572 OnConnectionClosed(QUIC_UNENCRYPTED_STREAM_DATA, false));
5505 EXPECT_DFATAL(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr), 5573 EXPECT_DFATAL(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr),
5506 "Cannot send stream data without encryption."); 5574 "Cannot send stream data without encryption.");
5507 EXPECT_FALSE(connection_.connected()); 5575 EXPECT_FALSE(connection_.connected());
5508 } 5576 }
5509 5577
5510 } // namespace 5578 } // namespace
5511 } // namespace test 5579 } // namespace test
5512 } // namespace net 5580 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_flags.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698