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

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

Issue 301173007: Replaced options from QuicPacketCreator with members and explicit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_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 "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 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 570
571 private: 571 private:
572 QuicPacketHeader revived_header_; 572 QuicPacketHeader revived_header_;
573 }; 573 };
574 574
575 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { 575 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
576 protected: 576 protected:
577 QuicConnectionTest() 577 QuicConnectionTest()
578 : connection_id_(42), 578 : connection_id_(42),
579 framer_(SupportedVersions(version()), QuicTime::Zero(), false), 579 framer_(SupportedVersions(version()), QuicTime::Zero(), false),
580 creator_(connection_id_, &framer_, &random_generator_, false), 580 peer_creator_(connection_id_, &framer_, &random_generator_, false),
581 send_algorithm_(new StrictMock<MockSendAlgorithm>), 581 send_algorithm_(new StrictMock<MockSendAlgorithm>),
582 loss_algorithm_(new MockLossAlgorithm()), 582 loss_algorithm_(new MockLossAlgorithm()),
583 helper_(new TestConnectionHelper(&clock_, &random_generator_)), 583 helper_(new TestConnectionHelper(&clock_, &random_generator_)),
584 writer_(new TestPacketWriter(version())), 584 writer_(new TestPacketWriter(version())),
585 connection_(connection_id_, IPEndPoint(), helper_.get(), 585 connection_(connection_id_, IPEndPoint(), helper_.get(),
586 writer_.get(), false, version()), 586 writer_.get(), false, version()),
587 frame1_(1, false, 0, MakeIOVector(data1)), 587 frame1_(1, false, 0, MakeIOVector(data1)),
588 frame2_(1, false, 3, MakeIOVector(data2)), 588 frame2_(1, false, 3, MakeIOVector(data2)),
589 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER), 589 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER),
590 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) { 590 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 } 645 }
646 646
647 void ProcessPacket(QuicPacketSequenceNumber number) { 647 void ProcessPacket(QuicPacketSequenceNumber number) {
648 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); 648 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
649 ProcessDataPacket(number, 0, !kEntropyFlag); 649 ProcessDataPacket(number, 0, !kEntropyFlag);
650 } 650 }
651 651
652 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) { 652 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) {
653 QuicFrames frames; 653 QuicFrames frames;
654 frames.push_back(QuicFrame(frame)); 654 frames.push_back(QuicFrame(frame));
655 QuicPacketCreatorPeer::SetSendVersionInPacket(&creator_, 655 QuicPacketCreatorPeer::SetSendVersionInPacket(&peer_creator_,
656 connection_.is_server()); 656 connection_.is_server());
657 SerializedPacket serialized_packet = creator_.SerializeAllFrames(frames); 657 SerializedPacket serialized_packet =
658 peer_creator_.SerializeAllFrames(frames);
658 scoped_ptr<QuicPacket> packet(serialized_packet.packet); 659 scoped_ptr<QuicPacket> packet(serialized_packet.packet);
659 scoped_ptr<QuicEncryptedPacket> encrypted( 660 scoped_ptr<QuicEncryptedPacket> encrypted(
660 framer_.EncryptPacket(ENCRYPTION_NONE, 661 framer_.EncryptPacket(ENCRYPTION_NONE,
661 serialized_packet.sequence_number, *packet)); 662 serialized_packet.sequence_number, *packet));
662 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 663 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
663 return serialized_packet.entropy_hash; 664 return serialized_packet.entropy_hash;
664 } 665 }
665 666
666 size_t ProcessDataPacket(QuicPacketSequenceNumber number, 667 size_t ProcessDataPacket(QuicPacketSequenceNumber number,
667 QuicFecGroupNumber fec_group, 668 QuicFecGroupNumber fec_group,
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL); 909 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL);
909 } 910 }
910 911
911 void BlockOnNextWrite() { 912 void BlockOnNextWrite() {
912 writer_->BlockOnNextWrite(); 913 writer_->BlockOnNextWrite();
913 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1)); 914 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1));
914 } 915 }
915 916
916 QuicConnectionId connection_id_; 917 QuicConnectionId connection_id_;
917 QuicFramer framer_; 918 QuicFramer framer_;
918 QuicPacketCreator creator_; 919 QuicPacketCreator peer_creator_;
919 MockEntropyCalculator entropy_calculator_; 920 MockEntropyCalculator entropy_calculator_;
920 921
921 MockSendAlgorithm* send_algorithm_; 922 MockSendAlgorithm* send_algorithm_;
922 MockLossAlgorithm* loss_algorithm_; 923 MockLossAlgorithm* loss_algorithm_;
923 TestReceiveAlgorithm* receive_algorithm_; 924 TestReceiveAlgorithm* receive_algorithm_;
924 MockClock clock_; 925 MockClock clock_;
925 MockRandom random_generator_; 926 MockRandom random_generator_;
926 scoped_ptr<TestConnectionHelper> helper_; 927 scoped_ptr<TestConnectionHelper> helper_;
927 scoped_ptr<TestPacketWriter> writer_; 928 scoped_ptr<TestPacketWriter> writer_;
928 TestConnection connection_; 929 TestConnection connection_;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 1010
1010 ProcessPacket(5); 1011 ProcessPacket(5);
1011 EXPECT_EQ(5u, outgoing_ack()->received_info.largest_observed); 1012 EXPECT_EQ(5u, outgoing_ack()->received_info.largest_observed);
1012 EXPECT_TRUE(IsMissing(1)); 1013 EXPECT_TRUE(IsMissing(1));
1013 EXPECT_TRUE(IsMissing(4)); 1014 EXPECT_TRUE(IsMissing(4));
1014 1015
1015 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a 1016 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a
1016 // packet the peer will not retransmit. It indicates this by sending 'least 1017 // packet the peer will not retransmit. It indicates this by sending 'least
1017 // awaiting' is 4. The connection should then realize 1 will not be 1018 // awaiting' is 4. The connection should then realize 1 will not be
1018 // retransmitted, and will remove it from the missing list. 1019 // retransmitted, and will remove it from the missing list.
1019 creator_.set_sequence_number(5); 1020 peer_creator_.set_sequence_number(5);
1020 QuicAckFrame frame = InitAckFrame(1, 4); 1021 QuicAckFrame frame = InitAckFrame(1, 4);
1021 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _)); 1022 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _));
1022 ProcessAckPacket(&frame); 1023 ProcessAckPacket(&frame);
1023 1024
1024 // Force an ack to be sent. 1025 // Force an ack to be sent.
1025 SendAckPacketToPeer(); 1026 SendAckPacketToPeer();
1026 EXPECT_TRUE(IsMissing(4)); 1027 EXPECT_TRUE(IsMissing(4));
1027 } 1028 }
1028 1029
1029 TEST_P(QuicConnectionTest, RejectPacketTooFarOut) { 1030 TEST_P(QuicConnectionTest, RejectPacketTooFarOut) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 TimeUntilSend(_, _, _)).WillOnce( 1103 TimeUntilSend(_, _, _)).WillOnce(
1103 testing::Return(QuicTime::Delta::FromMicroseconds(1))); 1104 testing::Return(QuicTime::Delta::FromMicroseconds(1)));
1104 QuicConnectionPeer::SendAck(&connection_); 1105 QuicConnectionPeer::SendAck(&connection_);
1105 1106
1106 // Process an ack with a least unacked of the received ack. 1107 // Process an ack with a least unacked of the received ack.
1107 // This causes an ack to be sent when TimeUntilSend returns 0. 1108 // This causes an ack to be sent when TimeUntilSend returns 0.
1108 EXPECT_CALL(*send_algorithm_, 1109 EXPECT_CALL(*send_algorithm_,
1109 TimeUntilSend(_, _, _)).WillRepeatedly( 1110 TimeUntilSend(_, _, _)).WillRepeatedly(
1110 testing::Return(QuicTime::Delta::Zero())); 1111 testing::Return(QuicTime::Delta::Zero()));
1111 // Skip a packet and then record an ack. 1112 // Skip a packet and then record an ack.
1112 creator_.set_sequence_number(2); 1113 peer_creator_.set_sequence_number(2);
1113 QuicAckFrame frame = InitAckFrame(0, 3); 1114 QuicAckFrame frame = InitAckFrame(0, 3);
1114 ProcessAckPacket(&frame); 1115 ProcessAckPacket(&frame);
1115 } 1116 }
1116 1117
1117 TEST_P(QuicConnectionTest, OutOfOrderReceiptCausesAckSend) { 1118 TEST_P(QuicConnectionTest, OutOfOrderReceiptCausesAckSend) {
1118 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1119 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1119 1120
1120 ProcessPacket(3); 1121 ProcessPacket(3);
1121 // Should ack immediately since we have missing packets. 1122 // Should ack immediately since we have missing packets.
1122 EXPECT_EQ(1u, writer_->packets_write_attempts()); 1123 EXPECT_EQ(1u, writer_->packets_write_attempts());
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 } 1199 }
1199 1200
1200 TEST_P(QuicConnectionTest, LeastUnackedLower) { 1201 TEST_P(QuicConnectionTest, LeastUnackedLower) {
1201 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1202 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1202 1203
1203 SendStreamDataToPeer(1, "foo", 0, !kFin, NULL); 1204 SendStreamDataToPeer(1, "foo", 0, !kFin, NULL);
1204 SendStreamDataToPeer(1, "bar", 3, !kFin, NULL); 1205 SendStreamDataToPeer(1, "bar", 3, !kFin, NULL);
1205 SendStreamDataToPeer(1, "eep", 6, !kFin, NULL); 1206 SendStreamDataToPeer(1, "eep", 6, !kFin, NULL);
1206 1207
1207 // Start out saying the least unacked is 2. 1208 // Start out saying the least unacked is 2.
1208 creator_.set_sequence_number(5); 1209 peer_creator_.set_sequence_number(5);
1209 if (version() > QUIC_VERSION_15) { 1210 if (version() > QUIC_VERSION_15) {
1210 QuicStopWaitingFrame frame = InitStopWaitingFrame(2); 1211 QuicStopWaitingFrame frame = InitStopWaitingFrame(2);
1211 ProcessStopWaitingPacket(&frame); 1212 ProcessStopWaitingPacket(&frame);
1212 } else { 1213 } else {
1213 QuicAckFrame frame = InitAckFrame(0, 2); 1214 QuicAckFrame frame = InitAckFrame(0, 2);
1214 ProcessAckPacket(&frame); 1215 ProcessAckPacket(&frame);
1215 } 1216 }
1216 1217
1217 // Change it to 1, but lower the sequence number to fake out-of-order packets. 1218 // Change it to 1, but lower the sequence number to fake out-of-order packets.
1218 // This should be fine. 1219 // This should be fine.
1219 creator_.set_sequence_number(1); 1220 peer_creator_.set_sequence_number(1);
1220 // The scheduler will not process out of order acks, but all packet processing 1221 // The scheduler will not process out of order acks, but all packet processing
1221 // causes the connection to try to write. 1222 // causes the connection to try to write.
1222 EXPECT_CALL(visitor_, OnCanWrite()); 1223 EXPECT_CALL(visitor_, OnCanWrite());
1223 if (version() > QUIC_VERSION_15) { 1224 if (version() > QUIC_VERSION_15) {
1224 QuicStopWaitingFrame frame2 = InitStopWaitingFrame(1); 1225 QuicStopWaitingFrame frame2 = InitStopWaitingFrame(1);
1225 ProcessStopWaitingPacket(&frame2); 1226 ProcessStopWaitingPacket(&frame2);
1226 } else { 1227 } else {
1227 QuicAckFrame frame2 = InitAckFrame(0, 1); 1228 QuicAckFrame frame2 = InitAckFrame(0, 1);
1228 ProcessAckPacket(&frame2); 1229 ProcessAckPacket(&frame2);
1229 } 1230 }
1230 1231
1231 // Now claim it's one, but set the ordering so it was sent "after" the first 1232 // Now claim it's one, but set the ordering so it was sent "after" the first
1232 // one. This should cause a connection error. 1233 // one. This should cause a connection error.
1233 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 1234 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
1234 creator_.set_sequence_number(7); 1235 peer_creator_.set_sequence_number(7);
1235 if (version() > QUIC_VERSION_15) { 1236 if (version() > QUIC_VERSION_15) {
1236 EXPECT_CALL(visitor_, 1237 EXPECT_CALL(visitor_,
1237 OnConnectionClosed(QUIC_INVALID_STOP_WAITING_DATA, false)); 1238 OnConnectionClosed(QUIC_INVALID_STOP_WAITING_DATA, false));
1238 QuicStopWaitingFrame frame2 = InitStopWaitingFrame(1); 1239 QuicStopWaitingFrame frame2 = InitStopWaitingFrame(1);
1239 ProcessStopWaitingPacket(&frame2); 1240 ProcessStopWaitingPacket(&frame2);
1240 } else { 1241 } else {
1241 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, false)); 1242 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, false));
1242 QuicAckFrame frame2 = InitAckFrame(0, 1); 1243 QuicAckFrame frame2 = InitAckFrame(0, 1);
1243 ProcessAckPacket(&frame2); 1244 ProcessAckPacket(&frame2);
1244 } 1245 }
(...skipping 25 matching lines...) Expand all
1270 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 1271 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
1271 QuicAckFrame frame(MakeAckFrame(1, 0)); 1272 QuicAckFrame frame(MakeAckFrame(1, 0));
1272 EXPECT_CALL(visitor_, OnCanWrite()).Times(0); 1273 EXPECT_CALL(visitor_, OnCanWrite()).Times(0);
1273 ProcessAckPacket(&frame); 1274 ProcessAckPacket(&frame);
1274 } 1275 }
1275 1276
1276 TEST_P(QuicConnectionTest, AckAll) { 1277 TEST_P(QuicConnectionTest, AckAll) {
1277 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1278 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1278 ProcessPacket(1); 1279 ProcessPacket(1);
1279 1280
1280 creator_.set_sequence_number(1); 1281 peer_creator_.set_sequence_number(1);
1281 QuicAckFrame frame1 = InitAckFrame(0, 1); 1282 QuicAckFrame frame1 = InitAckFrame(0, 1);
1282 ProcessAckPacket(&frame1); 1283 ProcessAckPacket(&frame1);
1283 } 1284 }
1284 1285
1285 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) { 1286 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
1286 QuicPacketSequenceNumber last_packet; 1287 QuicPacketSequenceNumber last_packet;
1288 QuicPacketCreator* creator =
1289 QuicConnectionPeer::GetPacketCreator(&connection_);
1287 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); 1290 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet);
1288 EXPECT_EQ(1u, last_packet); 1291 EXPECT_EQ(1u, last_packet);
1289 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1292 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1290 connection_.options()->send_sequence_number_length); 1293 creator->next_sequence_number_length());
1291 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1294 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1292 writer_->header().public_header.sequence_number_length); 1295 writer_->header().public_header.sequence_number_length);
1293 1296
1294 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 1297 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
1295 Return(kMaxPacketSize * 256)); 1298 Return(kMaxPacketSize * 256));
1296 1299
1297 SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet); 1300 SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet);
1298 EXPECT_EQ(2u, last_packet); 1301 EXPECT_EQ(2u, last_packet);
1299 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 1302 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
1300 connection_.options()->send_sequence_number_length); 1303 creator->next_sequence_number_length());
1301 // The 1 packet lag is due to the sequence number length being recalculated in 1304 // The 1 packet lag is due to the sequence number length being recalculated in
1302 // QuicConnection after a packet is sent. 1305 // QuicConnection after a packet is sent.
1303 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1306 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1304 writer_->header().public_header.sequence_number_length); 1307 writer_->header().public_header.sequence_number_length);
1305 1308
1306 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 1309 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
1307 Return(kMaxPacketSize * 256 * 256)); 1310 Return(kMaxPacketSize * 256 * 256));
1308 1311
1309 SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet); 1312 SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet);
1310 EXPECT_EQ(3u, last_packet); 1313 EXPECT_EQ(3u, last_packet);
1311 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1314 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1312 connection_.options()->send_sequence_number_length); 1315 creator->next_sequence_number_length());
1313 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 1316 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
1314 writer_->header().public_header.sequence_number_length); 1317 writer_->header().public_header.sequence_number_length);
1315 1318
1316 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 1319 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
1317 Return(kMaxPacketSize * 256 * 256 * 256)); 1320 Return(kMaxPacketSize * 256 * 256 * 256));
1318 1321
1319 SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet); 1322 SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet);
1320 EXPECT_EQ(4u, last_packet); 1323 EXPECT_EQ(4u, last_packet);
1321 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1324 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1322 connection_.options()->send_sequence_number_length); 1325 creator->next_sequence_number_length());
1323 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1326 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1324 writer_->header().public_header.sequence_number_length); 1327 writer_->header().public_header.sequence_number_length);
1325 1328
1326 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 1329 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
1327 Return(kMaxPacketSize * 256 * 256 * 256 * 256)); 1330 Return(kMaxPacketSize * 256 * 256 * 256 * 256));
1328 1331
1329 SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet); 1332 SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet);
1330 EXPECT_EQ(5u, last_packet); 1333 EXPECT_EQ(5u, last_packet);
1331 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, 1334 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
1332 connection_.options()->send_sequence_number_length); 1335 creator->next_sequence_number_length());
1333 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1336 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1334 writer_->header().public_header.sequence_number_length); 1337 writer_->header().public_header.sequence_number_length);
1335 } 1338 }
1336 1339
1337 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsUnackedDelta) { 1340 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsUnackedDelta) {
1338 QuicPacketSequenceNumber last_packet; 1341 QuicPacketSequenceNumber last_packet;
1342 QuicPacketCreator* creator =
1343 QuicConnectionPeer::GetPacketCreator(&connection_);
1339 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); 1344 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet);
1340 EXPECT_EQ(1u, last_packet); 1345 EXPECT_EQ(1u, last_packet);
1341 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1346 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1342 connection_.options()->send_sequence_number_length); 1347 creator->next_sequence_number_length());
1343 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1348 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1344 writer_->header().public_header.sequence_number_length); 1349 writer_->header().public_header.sequence_number_length);
1345 1350
1346 QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(100); 1351 creator->set_sequence_number(100);
1347 1352
1348 SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet); 1353 SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet);
1349 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 1354 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
1350 connection_.options()->send_sequence_number_length); 1355 creator->next_sequence_number_length());
1351 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 1356 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
1352 writer_->header().public_header.sequence_number_length); 1357 writer_->header().public_header.sequence_number_length);
1353 1358
1354 QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number( 1359 creator->set_sequence_number(100 * 256);
1355 100 * 256);
1356 1360
1357 SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet); 1361 SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet);
1358 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1362 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1359 connection_.options()->send_sequence_number_length); 1363 creator->next_sequence_number_length());
1360 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 1364 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
1361 writer_->header().public_header.sequence_number_length); 1365 writer_->header().public_header.sequence_number_length);
1362 1366
1363 QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number( 1367 creator->set_sequence_number(100 * 256 * 256);
1364 100 * 256 * 256);
1365 1368
1366 SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet); 1369 SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet);
1367 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1370 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1368 connection_.options()->send_sequence_number_length); 1371 creator->next_sequence_number_length());
1369 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1372 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1370 writer_->header().public_header.sequence_number_length); 1373 writer_->header().public_header.sequence_number_length);
1371 1374
1372 QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number( 1375 creator->set_sequence_number(100 * 256 * 256 * 256);
1373 100 * 256 * 256 * 256);
1374 1376
1375 SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet); 1377 SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet);
1376 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, 1378 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
1377 connection_.options()->send_sequence_number_length); 1379 creator->next_sequence_number_length());
1378 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 1380 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
1379 writer_->header().public_header.sequence_number_length); 1381 writer_->header().public_header.sequence_number_length);
1380 } 1382 }
1381 1383
1382 TEST_P(QuicConnectionTest, BasicSending) { 1384 TEST_P(QuicConnectionTest, BasicSending) {
1383 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1385 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1384 QuicPacketSequenceNumber last_packet; 1386 QuicPacketSequenceNumber last_packet;
1385 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 1387 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
1386 EXPECT_EQ(1u, last_packet); 1388 EXPECT_EQ(1u, last_packet);
1387 SendAckPacketToPeer(); // Packet 2 1389 SendAckPacketToPeer(); // Packet 2
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 1427
1426 // But if we send more data it should. 1428 // But if we send more data it should.
1427 SendStreamDataToPeer(1, "eep", 6, !kFin, &last_packet); // Packet 8 1429 SendStreamDataToPeer(1, "eep", 6, !kFin, &last_packet); // Packet 8
1428 EXPECT_EQ(8u, last_packet); 1430 EXPECT_EQ(8u, last_packet);
1429 SendAckPacketToPeer(); // Packet 9 1431 SendAckPacketToPeer(); // Packet 9
1430 EXPECT_EQ(7u, least_unacked()); 1432 EXPECT_EQ(7u, least_unacked());
1431 } 1433 }
1432 1434
1433 TEST_P(QuicConnectionTest, FECSending) { 1435 TEST_P(QuicConnectionTest, FECSending) {
1434 // All packets carry version info till version is negotiated. 1436 // All packets carry version info till version is negotiated.
1437 QuicPacketCreator* creator =
1438 QuicConnectionPeer::GetPacketCreator(&connection_);
1435 size_t payload_length; 1439 size_t payload_length;
1436 // GetPacketLengthForOneStream() assumes a stream offset of 0 in determining 1440 // GetPacketLengthForOneStream() assumes a stream offset of 0 in determining
1437 // packet length. The size of the offset field in a stream frame is 0 for 1441 // packet length. The size of the offset field in a stream frame is 0 for
1438 // offset 0, and 2 for non-zero offsets up through 16K. Increase 1442 // offset 0, and 2 for non-zero offsets up through 64K. Increase
1439 // max_packet_length by 2 so that subsequent packets containing subsequent 1443 // max_packet_length by 2 so that subsequent packets containing subsequent
1440 // stream frames with non-zero offets will fit within the packet length. 1444 // stream frames with non-zero offets will fit within the packet length.
1441 connection_.options()->max_packet_length = 2 + GetPacketLengthForOneStream( 1445 size_t length = 2 + GetPacketLengthForOneStream(
1442 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER, 1446 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
1443 IN_FEC_GROUP, &payload_length); 1447 IN_FEC_GROUP, &payload_length);
1448 creator->set_max_packet_length(length);
1449
1444 // And send FEC every two packets. 1450 // And send FEC every two packets.
1445 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn( 1451 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(creator, 2));
1446 QuicConnectionPeer::GetPacketCreator(&connection_), 2));
1447 1452
1448 // Send 4 data packets and 2 FEC packets. 1453 // Send 4 data packets and 2 FEC packets.
1449 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(6); 1454 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(6);
1450 // The first stream frame will have 2 fewer overhead bytes than the other 3. 1455 // The first stream frame will have 2 fewer overhead bytes than the other 3.
1451 const string payload(payload_length * 4 + 2, 'a'); 1456 const string payload(payload_length * 4 + 2, 'a');
1452 connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL); 1457 connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL);
1453 // Expect the FEC group to be closed after SendStreamDataWithString. 1458 // Expect the FEC group to be closed after SendStreamDataWithString.
1454 EXPECT_FALSE(creator_.ShouldSendFec(true)); 1459 EXPECT_FALSE(creator->ShouldSendFec(true));
1460 EXPECT_TRUE(creator->IsFecProtected());
1455 } 1461 }
1456 1462
1457 TEST_P(QuicConnectionTest, FECQueueing) { 1463 TEST_P(QuicConnectionTest, FECQueueing) {
1458 // All packets carry version info till version is negotiated. 1464 // All packets carry version info till version is negotiated.
1459 size_t payload_length; 1465 size_t payload_length;
1460 connection_.options()->max_packet_length = 1466 QuicPacketCreator* creator =
1461 GetPacketLengthForOneStream( 1467 QuicConnectionPeer::GetPacketCreator(&connection_);
1462 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER, 1468 size_t length = GetPacketLengthForOneStream(
1463 IN_FEC_GROUP, &payload_length); 1469 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
1470 IN_FEC_GROUP, &payload_length);
1471 creator->set_max_packet_length(length);
1464 // And send FEC every two packets. 1472 // And send FEC every two packets.
1465 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn( 1473 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(creator, 2));
1466 QuicConnectionPeer::GetPacketCreator(&connection_), 2));
1467 1474
1468 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1475 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1469 BlockOnNextWrite(); 1476 BlockOnNextWrite();
1470 const string payload(payload_length, 'a'); 1477 const string payload(payload_length, 'a');
1471 connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL); 1478 connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL);
1472 EXPECT_FALSE(creator_.ShouldSendFec(true)); 1479 EXPECT_FALSE(creator->ShouldSendFec(true));
1480 EXPECT_TRUE(creator->IsFecProtected());
1473 // Expect the first data packet and the fec packet to be queued. 1481 // Expect the first data packet and the fec packet to be queued.
1474 EXPECT_EQ(2u, connection_.NumQueuedPackets()); 1482 EXPECT_EQ(2u, connection_.NumQueuedPackets());
1475 } 1483 }
1476 1484
1477 TEST_P(QuicConnectionTest, AbandonFECFromCongestionWindow) { 1485 TEST_P(QuicConnectionTest, AbandonFECFromCongestionWindow) {
1478 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn( 1486 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(
1479 QuicConnectionPeer::GetPacketCreator(&connection_), 1)); 1487 QuicConnectionPeer::GetPacketCreator(&connection_), 1));
1480 1488
1481 // 1 Data and 1 FEC packet. 1489 // 1 Data and 1 FEC packet.
1482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); 1490 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 1691
1684 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(DoAll( 1692 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(DoAll(
1685 IgnoreResult(InvokeWithoutArgs(&connection_, 1693 IgnoreResult(InvokeWithoutArgs(&connection_,
1686 &TestConnection::SendStreamData3)), 1694 &TestConnection::SendStreamData3)),
1687 IgnoreResult(InvokeWithoutArgs(&connection_, 1695 IgnoreResult(InvokeWithoutArgs(&connection_,
1688 &TestConnection::SendStreamData5)))); 1696 &TestConnection::SendStreamData5))));
1689 1697
1690 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 1698 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
1691 1699
1692 // Process an ack to cause the visitor's OnCanWrite to be invoked. 1700 // Process an ack to cause the visitor's OnCanWrite to be invoked.
1693 creator_.set_sequence_number(2); 1701 peer_creator_.set_sequence_number(2);
1694 QuicAckFrame ack_one = InitAckFrame(0, 0); 1702 QuicAckFrame ack_one = InitAckFrame(0, 0);
1695 ProcessAckPacket(&ack_one); 1703 ProcessAckPacket(&ack_one);
1696 1704
1697 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1705 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1698 EXPECT_FALSE(connection_.HasQueuedData()); 1706 EXPECT_FALSE(connection_.HasQueuedData());
1699 1707
1700 // Parse the last packet and ensure it's an ack and two stream frames from 1708 // Parse the last packet and ensure it's an ack and two stream frames from
1701 // two different streams. 1709 // two different streams.
1702 if (version() > QUIC_VERSION_15) { 1710 if (version() > QUIC_VERSION_15) {
1703 EXPECT_EQ(4u, writer_->frame_count()); 1711 EXPECT_EQ(4u, writer_->frame_count());
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
2541 2549
2542 TEST_P(QuicConnectionTest, CloseFecGroup) { 2550 TEST_P(QuicConnectionTest, CloseFecGroup) {
2543 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2551 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2544 // Don't send missing packet 1. 2552 // Don't send missing packet 1.
2545 // Don't send missing packet 2. 2553 // Don't send missing packet 2.
2546 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 2554 ProcessFecProtectedPacket(3, false, !kEntropyFlag);
2547 // Don't send missing FEC packet 3. 2555 // Don't send missing FEC packet 3.
2548 ASSERT_EQ(1u, connection_.NumFecGroups()); 2556 ASSERT_EQ(1u, connection_.NumFecGroups());
2549 2557
2550 // Now send non-fec protected ack packet and close the group. 2558 // Now send non-fec protected ack packet and close the group.
2551 creator_.set_sequence_number(4); 2559 peer_creator_.set_sequence_number(4);
2552 if (version() > QUIC_VERSION_15) { 2560 if (version() > QUIC_VERSION_15) {
2553 QuicStopWaitingFrame frame = InitStopWaitingFrame(5); 2561 QuicStopWaitingFrame frame = InitStopWaitingFrame(5);
2554 ProcessStopWaitingPacket(&frame); 2562 ProcessStopWaitingPacket(&frame);
2555 } else { 2563 } else {
2556 QuicAckFrame frame = InitAckFrame(0, 5); 2564 QuicAckFrame frame = InitAckFrame(0, 5);
2557 ProcessAckPacket(&frame); 2565 ProcessAckPacket(&frame);
2558 } 2566 }
2559 ASSERT_EQ(0u, connection_.NumFecGroups()); 2567 ASSERT_EQ(0u, connection_.NumFecGroups());
2560 } 2568 }
2561 2569
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
2863 2871
2864 // OnCanWrite should send the packet, because it won't consult the send 2872 // OnCanWrite should send the packet, because it won't consult the send
2865 // algorithm for queued packets. 2873 // algorithm for queued packets.
2866 connection_.OnCanWrite(); 2874 connection_.OnCanWrite();
2867 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 2875 EXPECT_EQ(0u, connection_.NumQueuedPackets());
2868 } 2876 }
2869 2877
2870 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) { 2878 TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
2871 // All packets carry version info till version is negotiated. 2879 // All packets carry version info till version is negotiated.
2872 size_t payload_length; 2880 size_t payload_length;
2873 connection_.options()->max_packet_length = 2881 size_t length = GetPacketLengthForOneStream(
2874 GetPacketLengthForOneStream( 2882 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
2875 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER, 2883 NOT_IN_FEC_GROUP, &payload_length);
2876 NOT_IN_FEC_GROUP, &payload_length); 2884 QuicConnectionPeer::GetPacketCreator(&connection_)->set_max_packet_length(
2885 length);
2877 2886
2878 // Queue the first packet. 2887 // Queue the first packet.
2879 EXPECT_CALL(*send_algorithm_, 2888 EXPECT_CALL(*send_algorithm_,
2880 TimeUntilSend(_, _, _)).WillOnce( 2889 TimeUntilSend(_, _, _)).WillOnce(
2881 testing::Return(QuicTime::Delta::FromMicroseconds(10))); 2890 testing::Return(QuicTime::Delta::FromMicroseconds(10)));
2882 const string payload(payload_length, 'a'); 2891 const string payload(payload_length, 'a');
2883 EXPECT_EQ(0u, 2892 EXPECT_EQ(0u,
2884 connection_.SendStreamDataWithString(3, payload, 0, 2893 connection_.SendStreamDataWithString(3, payload, 0,
2885 !kFin, NULL).bytes_consumed); 2894 !kFin, NULL).bytes_consumed);
2886 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 2895 EXPECT_EQ(0u, connection_.NumQueuedPackets());
2887 } 2896 }
2888 2897
2889 TEST_P(QuicConnectionTest, LoopThroughSendingPackets) { 2898 TEST_P(QuicConnectionTest, LoopThroughSendingPackets) {
2890 // All packets carry version info till version is negotiated. 2899 // All packets carry version info till version is negotiated.
2891 size_t payload_length; 2900 size_t payload_length;
2892 // GetPacketLengthForOneStream() assumes a stream offset of 0 in determining 2901 // GetPacketLengthForOneStream() assumes a stream offset of 0 in determining
2893 // packet length. The size of the offset field in a stream frame is 0 for 2902 // packet length. The size of the offset field in a stream frame is 0 for
2894 // offset 0, and 2 for non-zero offsets up through 16K. Increase 2903 // offset 0, and 2 for non-zero offsets up through 16K. Increase
2895 // max_packet_length by 2 so that subsequent packets containing subsequent 2904 // max_packet_length by 2 so that subsequent packets containing subsequent
2896 // stream frames with non-zero offets will fit within the packet length. 2905 // stream frames with non-zero offets will fit within the packet length.
2897 connection_.options()->max_packet_length = 2 + GetPacketLengthForOneStream( 2906 size_t length = 2 + GetPacketLengthForOneStream(
2898 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER, 2907 connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
2899 NOT_IN_FEC_GROUP, &payload_length); 2908 NOT_IN_FEC_GROUP, &payload_length);
2909 QuicConnectionPeer::GetPacketCreator(&connection_)->set_max_packet_length(
2910 length);
2900 2911
2901 // Queue the first packet. 2912 // Queue the first packet.
2902 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(7); 2913 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(7);
2903 // The first stream frame will have 2 fewer overhead bytes than the other six. 2914 // The first stream frame will have 2 fewer overhead bytes than the other six.
2904 const string payload(payload_length * 7 + 2, 'a'); 2915 const string payload(payload_length * 7 + 2, 'a');
2905 EXPECT_EQ(payload.size(), 2916 EXPECT_EQ(payload.size(),
2906 connection_.SendStreamDataWithString(1, payload, 0, 2917 connection_.SendStreamDataWithString(1, payload, 0,
2907 !kFin, NULL).bytes_consumed); 2918 !kFin, NULL).bytes_consumed);
2908 } 2919 }
2909 2920
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
3153 QuicEncryptedPacket encrypted(NULL, 0); 3164 QuicEncryptedPacket encrypted(NULL, 0);
3154 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), encrypted); 3165 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), encrypted);
3155 // The connection close packet should have error details. 3166 // The connection close packet should have error details.
3156 ASSERT_FALSE(writer_->connection_close_frames().empty()); 3167 ASSERT_FALSE(writer_->connection_close_frames().empty());
3157 EXPECT_EQ("Unable to read public flags.", 3168 EXPECT_EQ("Unable to read public flags.",
3158 writer_->connection_close_frames()[0].error_details); 3169 writer_->connection_close_frames()[0].error_details);
3159 } 3170 }
3160 3171
3161 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) { 3172 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
3162 // Set the sequence number of the ack packet to be least unacked (4). 3173 // Set the sequence number of the ack packet to be least unacked (4).
3163 creator_.set_sequence_number(3); 3174 peer_creator_.set_sequence_number(3);
3164 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3175 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3165 if (version() > QUIC_VERSION_15) { 3176 if (version() > QUIC_VERSION_15) {
3166 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3177 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3167 ProcessStopWaitingPacket(&frame); 3178 ProcessStopWaitingPacket(&frame);
3168 } else { 3179 } else {
3169 QuicAckFrame ack = InitAckFrame(0, 4); 3180 QuicAckFrame ack = InitAckFrame(0, 4);
3170 ProcessAckPacket(&ack); 3181 ProcessAckPacket(&ack);
3171 } 3182 }
3172 EXPECT_TRUE(outgoing_ack()->received_info.missing_packets.empty()); 3183 EXPECT_TRUE(outgoing_ack()->received_info.missing_packets.empty());
3173 } 3184 }
(...skipping 23 matching lines...) Expand all
3197 } 3208 }
3198 3209
3199 TEST_P(QuicConnectionTest, UpdateEntropyForReceivedPackets) { 3210 TEST_P(QuicConnectionTest, UpdateEntropyForReceivedPackets) {
3200 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3211 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3201 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3212 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3202 ProcessDataPacket(1, 1, kEntropyFlag); 3213 ProcessDataPacket(1, 1, kEntropyFlag);
3203 ProcessDataPacket(5, 1, kEntropyFlag); 3214 ProcessDataPacket(5, 1, kEntropyFlag);
3204 ProcessDataPacket(4, 1, !kEntropyFlag); 3215 ProcessDataPacket(4, 1, !kEntropyFlag);
3205 EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash); 3216 EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash);
3206 // Make 4th packet my least unacked, and update entropy for 2, 3 packets. 3217 // Make 4th packet my least unacked, and update entropy for 2, 3 packets.
3207 creator_.set_sequence_number(5); 3218 peer_creator_.set_sequence_number(5);
3208 QuicPacketEntropyHash six_packet_entropy_hash = 0; 3219 QuicPacketEntropyHash six_packet_entropy_hash = 0;
3209 QuicPacketEntropyHash kRandomEntropyHash = 129u; 3220 QuicPacketEntropyHash kRandomEntropyHash = 129u;
3210 if (version() > QUIC_VERSION_15) { 3221 if (version() > QUIC_VERSION_15) {
3211 QuicStopWaitingFrame frame = InitStopWaitingFrame(4); 3222 QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
3212 frame.entropy_hash = kRandomEntropyHash; 3223 frame.entropy_hash = kRandomEntropyHash;
3213 if (ProcessStopWaitingPacket(&frame)) { 3224 if (ProcessStopWaitingPacket(&frame)) {
3214 six_packet_entropy_hash = 1 << 6; 3225 six_packet_entropy_hash = 1 << 6;
3215 } 3226 }
3216 } else { 3227 } else {
3217 QuicAckFrame ack = InitAckFrame(0, 4); 3228 QuicAckFrame ack = InitAckFrame(0, 4);
3218 ack.sent_info.entropy_hash = kRandomEntropyHash; 3229 ack.sent_info.entropy_hash = kRandomEntropyHash;
3219 if (ProcessAckPacket(&ack)) { 3230 if (ProcessAckPacket(&ack)) {
3220 six_packet_entropy_hash = 1 << 6; 3231 six_packet_entropy_hash = 1 << 6;
3221 } 3232 }
3222 } 3233 }
3223 3234
3224 EXPECT_EQ((kRandomEntropyHash + (1 << 5) + six_packet_entropy_hash), 3235 EXPECT_EQ((kRandomEntropyHash + (1 << 5) + six_packet_entropy_hash),
3225 outgoing_ack()->received_info.entropy_hash); 3236 outgoing_ack()->received_info.entropy_hash);
3226 } 3237 }
3227 3238
3228 TEST_P(QuicConnectionTest, UpdateEntropyHashUptoCurrentPacket) { 3239 TEST_P(QuicConnectionTest, UpdateEntropyHashUptoCurrentPacket) {
3229 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1)); 3240 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
3230 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3241 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3231 ProcessDataPacket(1, 1, kEntropyFlag); 3242 ProcessDataPacket(1, 1, kEntropyFlag);
3232 ProcessDataPacket(5, 1, !kEntropyFlag); 3243 ProcessDataPacket(5, 1, !kEntropyFlag);
3233 ProcessDataPacket(22, 1, kEntropyFlag); 3244 ProcessDataPacket(22, 1, kEntropyFlag);
3234 EXPECT_EQ(66u, outgoing_ack()->received_info.entropy_hash); 3245 EXPECT_EQ(66u, outgoing_ack()->received_info.entropy_hash);
3235 creator_.set_sequence_number(22); 3246 peer_creator_.set_sequence_number(22);
3236 QuicPacketEntropyHash kRandomEntropyHash = 85u; 3247 QuicPacketEntropyHash kRandomEntropyHash = 85u;
3237 // Current packet is the least unacked packet. 3248 // Current packet is the least unacked packet.
3238 QuicPacketEntropyHash ack_entropy_hash; 3249 QuicPacketEntropyHash ack_entropy_hash;
3239 if (version() > QUIC_VERSION_15) { 3250 if (version() > QUIC_VERSION_15) {
3240 QuicStopWaitingFrame frame = InitStopWaitingFrame(23); 3251 QuicStopWaitingFrame frame = InitStopWaitingFrame(23);
3241 frame.entropy_hash = kRandomEntropyHash; 3252 frame.entropy_hash = kRandomEntropyHash;
3242 ack_entropy_hash = ProcessStopWaitingPacket(&frame); 3253 ack_entropy_hash = ProcessStopWaitingPacket(&frame);
3243 } else { 3254 } else {
3244 QuicAckFrame ack = InitAckFrame(0, 23); 3255 QuicAckFrame ack = InitAckFrame(0, 23);
3245 ack.sent_info.entropy_hash = kRandomEntropyHash; 3256 ack.sent_info.entropy_hash = kRandomEntropyHash;
(...skipping 25 matching lines...) Expand all
3271 } 3282 }
3272 ProcessDataPacket(i, 1, entropy_flag); 3283 ProcessDataPacket(i, 1, entropy_flag);
3273 } 3284 }
3274 for (int i = 1; i < 50; ++i) { 3285 for (int i = 1; i < 50; ++i) {
3275 EXPECT_EQ(entropy[i], QuicConnectionPeer::ReceivedEntropyHash( 3286 EXPECT_EQ(entropy[i], QuicConnectionPeer::ReceivedEntropyHash(
3276 &connection_, i)); 3287 &connection_, i));
3277 } 3288 }
3278 } 3289 }
3279 3290
3280 TEST_P(QuicConnectionTest, CheckSentEntropyHash) { 3291 TEST_P(QuicConnectionTest, CheckSentEntropyHash) {
3281 creator_.set_sequence_number(1); 3292 peer_creator_.set_sequence_number(1);
3282 SequenceNumberSet missing_packets; 3293 SequenceNumberSet missing_packets;
3283 QuicPacketEntropyHash entropy_hash = 0; 3294 QuicPacketEntropyHash entropy_hash = 0;
3284 QuicPacketSequenceNumber max_sequence_number = 51; 3295 QuicPacketSequenceNumber max_sequence_number = 51;
3285 for (QuicPacketSequenceNumber i = 1; i <= max_sequence_number; ++i) { 3296 for (QuicPacketSequenceNumber i = 1; i <= max_sequence_number; ++i) {
3286 bool is_missing = i % 10 != 0; 3297 bool is_missing = i % 10 != 0;
3287 bool entropy_flag = (i & (i - 1)) != 0; 3298 bool entropy_flag = (i & (i - 1)) != 0;
3288 QuicPacketEntropyHash packet_entropy_hash = 0; 3299 QuicPacketEntropyHash packet_entropy_hash = 0;
3289 if (entropy_flag) { 3300 if (entropy_flag) {
3290 packet_entropy_hash = 1 << (i % 8); 3301 packet_entropy_hash = 1 << (i % 8);
3291 } 3302 }
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
3989 QuicBlockedFrame blocked; 4000 QuicBlockedFrame blocked;
3990 blocked.stream_id = 3; 4001 blocked.stream_id = 3;
3991 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 4002 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3992 ProcessFramePacket(QuicFrame(&blocked)); 4003 ProcessFramePacket(QuicFrame(&blocked));
3993 EXPECT_TRUE(ack_alarm->IsSet()); 4004 EXPECT_TRUE(ack_alarm->IsSet());
3994 } 4005 }
3995 4006
3996 } // namespace 4007 } // namespace
3997 } // namespace test 4008 } // namespace test
3998 } // namespace net 4009 } // 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