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

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

Issue 424003002: Inline the members of QUIC's ReceivedPacketInfo into QuicAckFrame now (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_FixRate_congestion_type_71746617
Patch Set: Created 6 years, 4 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_logger.cc ('k') | net/quic/quic_framer.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 "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 819
820 QuicPacketEntropyHash ProcessStopWaitingPacket(QuicStopWaitingFrame* frame) { 820 QuicPacketEntropyHash ProcessStopWaitingPacket(QuicStopWaitingFrame* frame) {
821 return ProcessFramePacket(QuicFrame(frame)); 821 return ProcessFramePacket(QuicFrame(frame));
822 } 822 }
823 823
824 QuicPacketEntropyHash ProcessGoAwayPacket(QuicGoAwayFrame* frame) { 824 QuicPacketEntropyHash ProcessGoAwayPacket(QuicGoAwayFrame* frame) {
825 return ProcessFramePacket(QuicFrame(frame)); 825 return ProcessFramePacket(QuicFrame(frame));
826 } 826 }
827 827
828 bool IsMissing(QuicPacketSequenceNumber number) { 828 bool IsMissing(QuicPacketSequenceNumber number) {
829 return IsAwaitingPacket(outgoing_ack()->received_info, number); 829 return IsAwaitingPacket(*outgoing_ack(), number);
830 } 830 }
831 831
832 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, 832 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number,
833 QuicFecGroupNumber fec_group, 833 QuicFecGroupNumber fec_group,
834 bool entropy_flag) { 834 bool entropy_flag) {
835 header_.public_header.connection_id = connection_id_; 835 header_.public_header.connection_id = connection_id_;
836 header_.public_header.reset_flag = false; 836 header_.public_header.reset_flag = false;
837 header_.public_header.version_flag = false; 837 header_.public_header.version_flag = false;
838 header_.public_header.sequence_number_length = sequence_number_length_; 838 header_.public_header.sequence_number_length = sequence_number_length_;
839 header_.public_header.connection_id_length = connection_id_length_; 839 header_.public_header.connection_id_length = connection_id_length_;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 } 885 }
886 886
887 QuicTime::Delta DefaultDelayedAckTime() { 887 QuicTime::Delta DefaultDelayedAckTime() {
888 return QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs/2); 888 return QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs/2);
889 } 889 }
890 890
891 // Initialize a frame acknowledging all packets up to largest_observed. 891 // Initialize a frame acknowledging all packets up to largest_observed.
892 const QuicAckFrame InitAckFrame(QuicPacketSequenceNumber largest_observed) { 892 const QuicAckFrame InitAckFrame(QuicPacketSequenceNumber largest_observed) {
893 QuicAckFrame frame(MakeAckFrame(largest_observed)); 893 QuicAckFrame frame(MakeAckFrame(largest_observed));
894 if (largest_observed > 0) { 894 if (largest_observed > 0) {
895 frame.received_info.entropy_hash = 895 frame.entropy_hash =
896 QuicConnectionPeer::GetSentEntropyHash(&connection_, largest_observed); 896 QuicConnectionPeer::GetSentEntropyHash(&connection_,
897 largest_observed);
897 } 898 }
898 return frame; 899 return frame;
899 } 900 }
900 901
901 const QuicStopWaitingFrame InitStopWaitingFrame( 902 const QuicStopWaitingFrame InitStopWaitingFrame(
902 QuicPacketSequenceNumber least_unacked) { 903 QuicPacketSequenceNumber least_unacked) {
903 QuicStopWaitingFrame frame; 904 QuicStopWaitingFrame frame;
904 frame.least_unacked = least_unacked; 905 frame.least_unacked = least_unacked;
905 return frame; 906 return frame;
906 } 907 }
907 // Explicitly nack a packet. 908 // Explicitly nack a packet.
908 void NackPacket(QuicPacketSequenceNumber missing, QuicAckFrame* frame) { 909 void NackPacket(QuicPacketSequenceNumber missing, QuicAckFrame* frame) {
909 frame->received_info.missing_packets.insert(missing); 910 frame->missing_packets.insert(missing);
910 frame->received_info.entropy_hash ^= 911 frame->entropy_hash ^=
911 QuicConnectionPeer::GetSentEntropyHash(&connection_, missing); 912 QuicConnectionPeer::GetSentEntropyHash(&connection_, missing);
912 if (missing > 1) { 913 if (missing > 1) {
913 frame->received_info.entropy_hash ^= 914 frame->entropy_hash ^=
914 QuicConnectionPeer::GetSentEntropyHash(&connection_, missing - 1); 915 QuicConnectionPeer::GetSentEntropyHash(&connection_, missing - 1);
915 } 916 }
916 } 917 }
917 918
918 // Undo nacking a packet within the frame. 919 // Undo nacking a packet within the frame.
919 void AckPacket(QuicPacketSequenceNumber arrived, QuicAckFrame* frame) { 920 void AckPacket(QuicPacketSequenceNumber arrived, QuicAckFrame* frame) {
920 EXPECT_THAT(frame->received_info.missing_packets, Contains(arrived)); 921 EXPECT_THAT(frame->missing_packets, Contains(arrived));
921 frame->received_info.missing_packets.erase(arrived); 922 frame->missing_packets.erase(arrived);
922 frame->received_info.entropy_hash ^= 923 frame->entropy_hash ^=
923 QuicConnectionPeer::GetSentEntropyHash(&connection_, arrived); 924 QuicConnectionPeer::GetSentEntropyHash(&connection_, arrived);
924 if (arrived > 1) { 925 if (arrived > 1) {
925 frame->received_info.entropy_hash ^= 926 frame->entropy_hash ^=
926 QuicConnectionPeer::GetSentEntropyHash(&connection_, arrived - 1); 927 QuicConnectionPeer::GetSentEntropyHash(&connection_, arrived - 1);
927 } 928 }
928 } 929 }
929 930
930 void TriggerConnectionClose() { 931 void TriggerConnectionClose() {
931 // Send an erroneous packet to close the connection. 932 // Send an erroneous packet to close the connection.
932 EXPECT_CALL(visitor_, 933 EXPECT_CALL(visitor_,
933 OnConnectionClosed(QUIC_INVALID_PACKET_HEADER, false)); 934 OnConnectionClosed(QUIC_INVALID_PACKET_HEADER, false));
934 // Call ProcessDataPacket rather than ProcessPacket, as we should not get a 935 // Call ProcessDataPacket rather than ProcessPacket, as we should not get a
935 // packet call to the visitor. 936 // packet call to the visitor.
936 ProcessDataPacket(6000, 0, !kEntropyFlag); 937 ProcessDataPacket(6000, 0, !kEntropyFlag);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 985
985 // Run all end to end tests with all supported versions. 986 // Run all end to end tests with all supported versions.
986 INSTANTIATE_TEST_CASE_P(SupportedVersion, 987 INSTANTIATE_TEST_CASE_P(SupportedVersion,
987 QuicConnectionTest, 988 QuicConnectionTest,
988 ::testing::ValuesIn(QuicSupportedVersions())); 989 ::testing::ValuesIn(QuicSupportedVersions()));
989 990
990 TEST_P(QuicConnectionTest, PacketsInOrder) { 991 TEST_P(QuicConnectionTest, PacketsInOrder) {
991 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 992 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
992 993
993 ProcessPacket(1); 994 ProcessPacket(1);
994 EXPECT_EQ(1u, outgoing_ack()->received_info.largest_observed); 995 EXPECT_EQ(1u, outgoing_ack()->largest_observed);
995 EXPECT_EQ(0u, outgoing_ack()->received_info.missing_packets.size()); 996 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size());
996 997
997 ProcessPacket(2); 998 ProcessPacket(2);
998 EXPECT_EQ(2u, outgoing_ack()->received_info.largest_observed); 999 EXPECT_EQ(2u, outgoing_ack()->largest_observed);
999 EXPECT_EQ(0u, outgoing_ack()->received_info.missing_packets.size()); 1000 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size());
1000 1001
1001 ProcessPacket(3); 1002 ProcessPacket(3);
1002 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1003 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1003 EXPECT_EQ(0u, outgoing_ack()->received_info.missing_packets.size()); 1004 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size());
1004 } 1005 }
1005 1006
1006 TEST_P(QuicConnectionTest, PacketsOutOfOrder) { 1007 TEST_P(QuicConnectionTest, PacketsOutOfOrder) {
1007 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1008 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1008 1009
1009 ProcessPacket(3); 1010 ProcessPacket(3);
1010 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1011 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1011 EXPECT_TRUE(IsMissing(2)); 1012 EXPECT_TRUE(IsMissing(2));
1012 EXPECT_TRUE(IsMissing(1)); 1013 EXPECT_TRUE(IsMissing(1));
1013 1014
1014 ProcessPacket(2); 1015 ProcessPacket(2);
1015 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1016 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1016 EXPECT_FALSE(IsMissing(2)); 1017 EXPECT_FALSE(IsMissing(2));
1017 EXPECT_TRUE(IsMissing(1)); 1018 EXPECT_TRUE(IsMissing(1));
1018 1019
1019 ProcessPacket(1); 1020 ProcessPacket(1);
1020 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1021 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1021 EXPECT_FALSE(IsMissing(2)); 1022 EXPECT_FALSE(IsMissing(2));
1022 EXPECT_FALSE(IsMissing(1)); 1023 EXPECT_FALSE(IsMissing(1));
1023 } 1024 }
1024 1025
1025 TEST_P(QuicConnectionTest, DuplicatePacket) { 1026 TEST_P(QuicConnectionTest, DuplicatePacket) {
1026 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1027 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1027 1028
1028 ProcessPacket(3); 1029 ProcessPacket(3);
1029 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1030 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1030 EXPECT_TRUE(IsMissing(2)); 1031 EXPECT_TRUE(IsMissing(2));
1031 EXPECT_TRUE(IsMissing(1)); 1032 EXPECT_TRUE(IsMissing(1));
1032 1033
1033 // Send packet 3 again, but do not set the expectation that 1034 // Send packet 3 again, but do not set the expectation that
1034 // the visitor OnStreamFrames() will be called. 1035 // the visitor OnStreamFrames() will be called.
1035 ProcessDataPacket(3, 0, !kEntropyFlag); 1036 ProcessDataPacket(3, 0, !kEntropyFlag);
1036 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1037 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1037 EXPECT_TRUE(IsMissing(2)); 1038 EXPECT_TRUE(IsMissing(2));
1038 EXPECT_TRUE(IsMissing(1)); 1039 EXPECT_TRUE(IsMissing(1));
1039 } 1040 }
1040 1041
1041 TEST_P(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) { 1042 TEST_P(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) {
1042 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1043 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1043 1044
1044 ProcessPacket(3); 1045 ProcessPacket(3);
1045 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1046 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1046 EXPECT_TRUE(IsMissing(2)); 1047 EXPECT_TRUE(IsMissing(2));
1047 EXPECT_TRUE(IsMissing(1)); 1048 EXPECT_TRUE(IsMissing(1));
1048 1049
1049 ProcessPacket(2); 1050 ProcessPacket(2);
1050 EXPECT_EQ(3u, outgoing_ack()->received_info.largest_observed); 1051 EXPECT_EQ(3u, outgoing_ack()->largest_observed);
1051 EXPECT_TRUE(IsMissing(1)); 1052 EXPECT_TRUE(IsMissing(1));
1052 1053
1053 ProcessPacket(5); 1054 ProcessPacket(5);
1054 EXPECT_EQ(5u, outgoing_ack()->received_info.largest_observed); 1055 EXPECT_EQ(5u, outgoing_ack()->largest_observed);
1055 EXPECT_TRUE(IsMissing(1)); 1056 EXPECT_TRUE(IsMissing(1));
1056 EXPECT_TRUE(IsMissing(4)); 1057 EXPECT_TRUE(IsMissing(4));
1057 1058
1058 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a 1059 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a
1059 // packet the peer will not retransmit. It indicates this by sending 'least 1060 // packet the peer will not retransmit. It indicates this by sending 'least
1060 // awaiting' is 4. The connection should then realize 1 will not be 1061 // awaiting' is 4. The connection should then realize 1 will not be
1061 // retransmitted, and will remove it from the missing list. 1062 // retransmitted, and will remove it from the missing list.
1062 peer_creator_.set_sequence_number(5); 1063 peer_creator_.set_sequence_number(5);
1063 QuicAckFrame frame = InitAckFrame(1); 1064 QuicAckFrame frame = InitAckFrame(1);
1064 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _)); 1065 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _));
(...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after
3148 EXPECT_EQ("Unable to read public flags.", 3149 EXPECT_EQ("Unable to read public flags.",
3149 writer_->connection_close_frames()[0].error_details); 3150 writer_->connection_close_frames()[0].error_details);
3150 } 3151 }
3151 3152
3152 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) { 3153 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
3153 // Set the sequence number of the ack packet to be least unacked (4). 3154 // Set the sequence number of the ack packet to be least unacked (4).
3154 peer_creator_.set_sequence_number(3); 3155 peer_creator_.set_sequence_number(3);
3155 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3156 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3156 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3157 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3157 ProcessStopWaitingPacket(&frame); 3158 ProcessStopWaitingPacket(&frame);
3158 EXPECT_TRUE(outgoing_ack()->received_info.missing_packets.empty()); 3159 EXPECT_TRUE(outgoing_ack()->missing_packets.empty());
3159 } 3160 }
3160 3161
3161 TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculation) { 3162 TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculation) {
3162 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3163 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3163 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3164 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3164 ProcessDataPacket(1, 1, kEntropyFlag); 3165 ProcessDataPacket(1, 1, kEntropyFlag);
3165 ProcessDataPacket(4, 1, kEntropyFlag); 3166 ProcessDataPacket(4, 1, kEntropyFlag);
3166 ProcessDataPacket(3, 1, !kEntropyFlag); 3167 ProcessDataPacket(3, 1, !kEntropyFlag);
3167 ProcessDataPacket(7, 1, kEntropyFlag); 3168 ProcessDataPacket(7, 1, kEntropyFlag);
3168 EXPECT_EQ(146u, outgoing_ack()->received_info.entropy_hash); 3169 EXPECT_EQ(146u, outgoing_ack()->entropy_hash);
3169 } 3170 }
3170 3171
3171 TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculationHalfFEC) { 3172 TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculationHalfFEC) {
3172 // FEC packets should not change the entropy hash calculation. 3173 // FEC packets should not change the entropy hash calculation.
3173 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3174 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3174 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3175 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3175 ProcessDataPacket(1, 1, kEntropyFlag); 3176 ProcessDataPacket(1, 1, kEntropyFlag);
3176 ProcessFecPacket(4, 1, false, kEntropyFlag, NULL); 3177 ProcessFecPacket(4, 1, false, kEntropyFlag, NULL);
3177 ProcessDataPacket(3, 3, !kEntropyFlag); 3178 ProcessDataPacket(3, 3, !kEntropyFlag);
3178 ProcessFecPacket(7, 3, false, kEntropyFlag, NULL); 3179 ProcessFecPacket(7, 3, false, kEntropyFlag, NULL);
3179 EXPECT_EQ(146u, outgoing_ack()->received_info.entropy_hash); 3180 EXPECT_EQ(146u, outgoing_ack()->entropy_hash);
3180 } 3181 }
3181 3182
3182 TEST_P(QuicConnectionTest, UpdateEntropyForReceivedPackets) { 3183 TEST_P(QuicConnectionTest, UpdateEntropyForReceivedPackets) {
3183 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3184 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3184 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3185 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3185 ProcessDataPacket(1, 1, kEntropyFlag); 3186 ProcessDataPacket(1, 1, kEntropyFlag);
3186 ProcessDataPacket(5, 1, kEntropyFlag); 3187 ProcessDataPacket(5, 1, kEntropyFlag);
3187 ProcessDataPacket(4, 1, !kEntropyFlag); 3188 ProcessDataPacket(4, 1, !kEntropyFlag);
3188 EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash); 3189 EXPECT_EQ(34u, outgoing_ack()->entropy_hash);
3189 // Make 4th packet my least unacked, and update entropy for 2, 3 packets. 3190 // Make 4th packet my least unacked, and update entropy for 2, 3 packets.
3190 peer_creator_.set_sequence_number(5); 3191 peer_creator_.set_sequence_number(5);
3191 QuicPacketEntropyHash six_packet_entropy_hash = 0; 3192 QuicPacketEntropyHash six_packet_entropy_hash = 0;
3192 QuicPacketEntropyHash kRandomEntropyHash = 129u; 3193 QuicPacketEntropyHash kRandomEntropyHash = 129u;
3193 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3194 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3194 frame.entropy_hash = kRandomEntropyHash; 3195 frame.entropy_hash = kRandomEntropyHash;
3195 if (ProcessStopWaitingPacket(&frame)) { 3196 if (ProcessStopWaitingPacket(&frame)) {
3196 six_packet_entropy_hash = 1 << 6; 3197 six_packet_entropy_hash = 1 << 6;
3197 } 3198 }
3198 3199
3199 EXPECT_EQ((kRandomEntropyHash + (1 << 5) + six_packet_entropy_hash), 3200 EXPECT_EQ((kRandomEntropyHash + (1 << 5) + six_packet_entropy_hash),
3200 outgoing_ack()->received_info.entropy_hash); 3201 outgoing_ack()->entropy_hash);
3201 } 3202 }
3202 3203
3203 TEST_P(QuicConnectionTest, UpdateEntropyHashUptoCurrentPacket) { 3204 TEST_P(QuicConnectionTest, UpdateEntropyHashUptoCurrentPacket) {
3204 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3205 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3205 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3206 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3206 ProcessDataPacket(1, 1, kEntropyFlag); 3207 ProcessDataPacket(1, 1, kEntropyFlag);
3207 ProcessDataPacket(5, 1, !kEntropyFlag); 3208 ProcessDataPacket(5, 1, !kEntropyFlag);
3208 ProcessDataPacket(22, 1, kEntropyFlag); 3209 ProcessDataPacket(22, 1, kEntropyFlag);
3209 EXPECT_EQ(66u, outgoing_ack()->received_info.entropy_hash); 3210 EXPECT_EQ(66u, outgoing_ack()->entropy_hash);
3210 peer_creator_.set_sequence_number(22); 3211 peer_creator_.set_sequence_number(22);
3211 QuicPacketEntropyHash kRandomEntropyHash = 85u; 3212 QuicPacketEntropyHash kRandomEntropyHash = 85u;
3212 // Current packet is the least unacked packet. 3213 // Current packet is the least unacked packet.
3213 QuicPacketEntropyHash ack_entropy_hash; 3214 QuicPacketEntropyHash ack_entropy_hash;
3214 QuicStopWaitingFrame frame = InitStopWaitingFrame(23); 3215 QuicStopWaitingFrame frame = InitStopWaitingFrame(23);
3215 frame.entropy_hash = kRandomEntropyHash; 3216 frame.entropy_hash = kRandomEntropyHash;
3216 ack_entropy_hash = ProcessStopWaitingPacket(&frame); 3217 ack_entropy_hash = ProcessStopWaitingPacket(&frame);
3217 EXPECT_EQ((kRandomEntropyHash + ack_entropy_hash), 3218 EXPECT_EQ((kRandomEntropyHash + ack_entropy_hash),
3218 outgoing_ack()->received_info.entropy_hash); 3219 outgoing_ack()->entropy_hash);
3219 ProcessDataPacket(25, 1, kEntropyFlag); 3220 ProcessDataPacket(25, 1, kEntropyFlag);
3220 EXPECT_EQ((kRandomEntropyHash + ack_entropy_hash + (1 << (25 % 8))), 3221 EXPECT_EQ((kRandomEntropyHash + ack_entropy_hash + (1 << (25 % 8))),
3221 outgoing_ack()->received_info.entropy_hash); 3222 outgoing_ack()->entropy_hash);
3222 } 3223 }
3223 3224
3224 TEST_P(QuicConnectionTest, EntropyCalculationForTruncatedAck) { 3225 TEST_P(QuicConnectionTest, EntropyCalculationForTruncatedAck) {
3225 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3226 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3226 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3227 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3227 QuicPacketEntropyHash entropy[51]; 3228 QuicPacketEntropyHash entropy[51];
3228 entropy[0] = 0; 3229 entropy[0] = 0;
3229 for (int i = 1; i < 51; ++i) { 3230 for (int i = 1; i < 51; ++i) {
3230 bool should_send = i % 10 != 1; 3231 bool should_send = i % 10 != 1;
3231 bool entropy_flag = (i & (i - 1)) != 0; 3232 bool entropy_flag = (i & (i - 1)) != 0;
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
3818 3819
3819 // Send some data, which will register the delegate to be notified. 3820 // Send some data, which will register the delegate to be notified.
3820 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get()); 3821 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get());
3821 connection_.SendStreamDataWithString(2, "bar", 0, !kFin, NULL); 3822 connection_.SendStreamDataWithString(2, "bar", 0, !kFin, NULL);
3822 3823
3823 // Process an ACK from the server with a revived packet, which should trigger 3824 // Process an ACK from the server with a revived packet, which should trigger
3824 // the callback. 3825 // the callback.
3825 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); 3826 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
3826 QuicAckFrame frame = InitAckFrame(2); 3827 QuicAckFrame frame = InitAckFrame(2);
3827 NackPacket(1, &frame); 3828 NackPacket(1, &frame);
3828 frame.received_info.revived_packets.insert(1); 3829 frame.revived_packets.insert(1);
3829 ProcessAckPacket(&frame); 3830 ProcessAckPacket(&frame);
3830 // If the ack is processed again, the notifier should not be called again. 3831 // If the ack is processed again, the notifier should not be called again.
3831 ProcessAckPacket(&frame); 3832 ProcessAckPacket(&frame);
3832 } 3833 }
3833 3834
3834 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) { 3835 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
3835 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3836 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3836 EXPECT_CALL(visitor_, OnCanWrite()); 3837 EXPECT_CALL(visitor_, OnCanWrite());
3837 3838
3838 // Create a delegate which we expect to be called. 3839 // Create a delegate which we expect to be called.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
3984 QuicBlockedFrame blocked; 3985 QuicBlockedFrame blocked;
3985 blocked.stream_id = 3; 3986 blocked.stream_id = 3;
3986 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 3987 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3987 ProcessFramePacket(QuicFrame(&blocked)); 3988 ProcessFramePacket(QuicFrame(&blocked));
3988 EXPECT_TRUE(ack_alarm->IsSet()); 3989 EXPECT_TRUE(ack_alarm->IsSet());
3989 } 3990 }
3990 3991
3991 } // namespace 3992 } // namespace
3992 } // namespace test 3993 } // namespace test
3993 } // namespace net 3994 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_logger.cc ('k') | net/quic/quic_framer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698