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

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

Issue 182523002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed rch's comments in Patch set 1 of CL 181463007 Created 6 years, 9 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_stats.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"
11 #include "net/quic/congestion_control/loss_detection_interface.h"
11 #include "net/quic/congestion_control/receive_algorithm_interface.h" 12 #include "net/quic/congestion_control/receive_algorithm_interface.h"
12 #include "net/quic/congestion_control/send_algorithm_interface.h" 13 #include "net/quic/congestion_control/send_algorithm_interface.h"
13 #include "net/quic/crypto/null_encrypter.h" 14 #include "net/quic/crypto/null_encrypter.h"
14 #include "net/quic/crypto/quic_decrypter.h" 15 #include "net/quic/crypto/quic_decrypter.h"
15 #include "net/quic/crypto/quic_encrypter.h" 16 #include "net/quic/crypto/quic_encrypter.h"
16 #include "net/quic/quic_protocol.h" 17 #include "net/quic/quic_protocol.h"
17 #include "net/quic/quic_sent_packet_manager.h" 18 #include "net/quic/quic_sent_packet_manager.h"
18 #include "net/quic/quic_utils.h" 19 #include "net/quic/quic_utils.h"
19 #include "net/quic/test_tools/mock_clock.h" 20 #include "net/quic/test_tools/mock_clock.h"
20 #include "net/quic/test_tools/mock_random.h" 21 #include "net/quic/test_tools/mock_random.h"
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 uint32 final_bytes_of_last_packet_; 392 uint32 final_bytes_of_last_packet_;
392 uint32 final_bytes_of_previous_packet_; 393 uint32 final_bytes_of_previous_packet_;
393 bool use_tagging_decrypter_; 394 bool use_tagging_decrypter_;
394 uint32 packets_write_attempts_; 395 uint32 packets_write_attempts_;
395 396
396 DISALLOW_COPY_AND_ASSIGN(TestPacketWriter); 397 DISALLOW_COPY_AND_ASSIGN(TestPacketWriter);
397 }; 398 };
398 399
399 class TestConnection : public QuicConnection { 400 class TestConnection : public QuicConnection {
400 public: 401 public:
401 TestConnection(QuicGuid guid, 402 TestConnection(QuicConnectionId connection_id,
402 IPEndPoint address, 403 IPEndPoint address,
403 TestConnectionHelper* helper, 404 TestConnectionHelper* helper,
404 TestPacketWriter* writer, 405 TestPacketWriter* writer,
405 bool is_server, 406 bool is_server,
406 QuicVersion version) 407 QuicVersion version)
407 : QuicConnection(guid, address, helper, writer, is_server, 408 : QuicConnection(connection_id, address, helper, writer, is_server,
408 SupportedVersions(version)), 409 SupportedVersions(version)),
409 helper_(helper), 410 helper_(helper),
410 writer_(writer) { 411 writer_(writer) {
411 // Disable tail loss probes for most tests. 412 // Disable tail loss probes for most tests.
412 QuicSentPacketManagerPeer::SetMaxTailLossProbes( 413 QuicSentPacketManagerPeer::SetMaxTailLossProbes(
413 QuicConnectionPeer::GetSentPacketManager(this), 0); 414 QuicConnectionPeer::GetSentPacketManager(this), 0);
414 writer_->set_is_server(is_server); 415 writer_->set_is_server(is_server);
415 } 416 }
416 417
417 void SendAck() { 418 void SendAck() {
418 QuicConnectionPeer::SendAck(this); 419 QuicConnectionPeer::SendAck(this);
419 } 420 }
420 421
421 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) { 422 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) {
422 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); 423 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm);
423 } 424 }
424 425
425 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { 426 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) {
426 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); 427 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm);
427 } 428 }
428 429
430 void SetLossAlgorithm(LossDetectionInterface* loss_algorithm) {
431 QuicSentPacketManagerPeer::SetLossAlgorithm(
432 QuicConnectionPeer::GetSentPacketManager(this), loss_algorithm);
433 }
434
429 void SendPacket(EncryptionLevel level, 435 void SendPacket(EncryptionLevel level,
430 QuicPacketSequenceNumber sequence_number, 436 QuicPacketSequenceNumber sequence_number,
431 QuicPacket* packet, 437 QuicPacket* packet,
432 QuicPacketEntropyHash entropy_hash, 438 QuicPacketEntropyHash entropy_hash,
433 HasRetransmittableData retransmittable) { 439 HasRetransmittableData retransmittable) {
434 RetransmittableFrames* retransmittable_frames = 440 RetransmittableFrames* retransmittable_frames =
435 retransmittable == HAS_RETRANSMITTABLE_DATA ? 441 retransmittable == HAS_RETRANSMITTABLE_DATA ?
436 new RetransmittableFrames() : NULL; 442 new RetransmittableFrames() : NULL;
437 OnSerializedPacket( 443 OnSerializedPacket(
438 SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 444 SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 private: 534 private:
529 TestConnectionHelper* helper_; 535 TestConnectionHelper* helper_;
530 TestPacketWriter* writer_; 536 TestPacketWriter* writer_;
531 537
532 DISALLOW_COPY_AND_ASSIGN(TestConnection); 538 DISALLOW_COPY_AND_ASSIGN(TestConnection);
533 }; 539 };
534 540
535 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { 541 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
536 protected: 542 protected:
537 QuicConnectionTest() 543 QuicConnectionTest()
538 : guid_(42), 544 : connection_id_(42),
539 framer_(SupportedVersions(version()), QuicTime::Zero(), false), 545 framer_(SupportedVersions(version()), QuicTime::Zero(), false),
540 creator_(guid_, &framer_, &random_generator_, false), 546 creator_(connection_id_, &framer_, &random_generator_, false),
541 send_algorithm_(new StrictMock<MockSendAlgorithm>), 547 send_algorithm_(new StrictMock<MockSendAlgorithm>),
548 loss_algorithm_(new MockLossAlgorithm()),
542 helper_(new TestConnectionHelper(&clock_, &random_generator_)), 549 helper_(new TestConnectionHelper(&clock_, &random_generator_)),
543 writer_(new TestPacketWriter(version())), 550 writer_(new TestPacketWriter(version())),
544 connection_(guid_, IPEndPoint(), helper_.get(), writer_.get(), 551 connection_(connection_id_, IPEndPoint(), helper_.get(),
545 false, version()), 552 writer_.get(), false, version()),
546 frame1_(1, false, 0, MakeIOVector(data1)), 553 frame1_(1, false, 0, MakeIOVector(data1)),
547 frame2_(1, false, 3, MakeIOVector(data2)), 554 frame2_(1, false, 3, MakeIOVector(data2)),
548 accept_packet_(true) { 555 accept_packet_(true) {
549 connection_.set_visitor(&visitor_); 556 connection_.set_visitor(&visitor_);
550 connection_.SetSendAlgorithm(send_algorithm_); 557 connection_.SetSendAlgorithm(send_algorithm_);
558 connection_.SetLossAlgorithm(loss_algorithm_);
551 framer_.set_received_entropy_calculator(&entropy_calculator_); 559 framer_.set_received_entropy_calculator(&entropy_calculator_);
552 // Simplify tests by not sending feedback unless specifically configured. 560 // Simplify tests by not sending feedback unless specifically configured.
553 SetFeedback(NULL); 561 SetFeedback(NULL);
554 EXPECT_CALL( 562 EXPECT_CALL(
555 *send_algorithm_, TimeUntilSend(_, _, _, _)).WillRepeatedly(Return( 563 *send_algorithm_, TimeUntilSend(_, _, _, _)).WillRepeatedly(Return(
556 QuicTime::Delta::Zero())); 564 QuicTime::Delta::Zero()));
557 EXPECT_CALL(*receive_algorithm_, 565 EXPECT_CALL(*receive_algorithm_,
558 RecordIncomingPacket(_, _, _)).Times(AnyNumber()); 566 RecordIncomingPacket(_, _, _)).Times(AnyNumber());
559 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 567 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
560 .Times(AnyNumber()); 568 .Times(AnyNumber());
561 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( 569 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly(
562 Return(QuicTime::Delta::Zero())); 570 Return(QuicTime::Delta::Zero()));
563 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(Return( 571 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(Return(
564 QuicBandwidth::FromKBitsPerSecond(100))); 572 QuicBandwidth::FromKBitsPerSecond(100)));
565 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly(Return( 573 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly(Return(
566 QuicTime::Delta::FromMilliseconds(100))); 574 QuicTime::Delta::FromMilliseconds(100)));
567 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 575 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
568 .WillByDefault(Return(true)); 576 .WillByDefault(Return(true));
569 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); 577 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber());
570 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); 578 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber());
571 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); 579 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
580
581 EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
582 .WillRepeatedly(Return(QuicTime::Zero()));
583 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
584 .WillRepeatedly(Return(SequenceNumberSet()));
572 } 585 }
573 586
574 QuicVersion version() { 587 QuicVersion version() {
575 return GetParam(); 588 return GetParam();
576 } 589 }
577 590
578 QuicAckFrame* outgoing_ack() { 591 QuicAckFrame* outgoing_ack() {
579 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_)); 592 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_));
580 return outgoing_ack_.get(); 593 return outgoing_ack_.get();
581 } 594 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 // Construct the decrypted data packet so we can compute the correct 714 // Construct the decrypted data packet so we can compute the correct
702 // redundancy. If |packet| has been provided then use that, otherwise 715 // redundancy. If |packet| has been provided then use that, otherwise
703 // construct a default data packet. 716 // construct a default data packet.
704 scoped_ptr<QuicPacket> data_packet; 717 scoped_ptr<QuicPacket> data_packet;
705 if (packet) { 718 if (packet) {
706 data_packet.reset(packet); 719 data_packet.reset(packet);
707 } else { 720 } else {
708 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag)); 721 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag));
709 } 722 }
710 723
711 header_.public_header.guid = guid_; 724 header_.public_header.connection_id = connection_id_;
712 header_.public_header.reset_flag = false; 725 header_.public_header.reset_flag = false;
713 header_.public_header.version_flag = false; 726 header_.public_header.version_flag = false;
714 header_.entropy_flag = entropy_flag; 727 header_.entropy_flag = entropy_flag;
715 header_.fec_flag = true; 728 header_.fec_flag = true;
716 header_.packet_sequence_number = number; 729 header_.packet_sequence_number = number;
717 header_.is_in_fec_group = IN_FEC_GROUP; 730 header_.is_in_fec_group = IN_FEC_GROUP;
718 header_.fec_group = min_protected_packet; 731 header_.fec_group = min_protected_packet;
719 QuicFecData fec_data; 732 QuicFecData fec_data;
720 fec_data.fec_group = header_.fec_group; 733 fec_data.fec_group = header_.fec_group;
721 734
722 // Since all data packets in this test have the same payload, the 735 // Since all data packets in this test have the same payload, the
723 // redundancy is either equal to that payload or the xor of that payload 736 // redundancy is either equal to that payload or the xor of that payload
724 // with itself, depending on the number of packets. 737 // with itself, depending on the number of packets.
725 if (((number - min_protected_packet) % 2) == 0) { 738 if (((number - min_protected_packet) % 2) == 0) {
726 for (size_t i = GetStartOfFecProtectedData( 739 for (size_t i = GetStartOfFecProtectedData(
727 header_.public_header.guid_length, 740 header_.public_header.connection_id_length,
728 header_.public_header.version_flag, 741 header_.public_header.version_flag,
729 header_.public_header.sequence_number_length); 742 header_.public_header.sequence_number_length);
730 i < data_packet->length(); ++i) { 743 i < data_packet->length(); ++i) {
731 data_packet->mutable_data()[i] ^= data_packet->data()[i]; 744 data_packet->mutable_data()[i] ^= data_packet->data()[i];
732 } 745 }
733 } 746 }
734 fec_data.redundancy = data_packet->FecProtectedData(); 747 fec_data.redundancy = data_packet->FecProtectedData();
735 748
736 scoped_ptr<QuicPacket> fec_packet( 749 scoped_ptr<QuicPacket> fec_packet(
737 framer_.BuildFecPacket(header_, fec_data).packet); 750 framer_.BuildFecPacket(header_, fec_data).packet);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 return ProcessFramePacket(QuicFrame(frame)); 792 return ProcessFramePacket(QuicFrame(frame));
780 } 793 }
781 794
782 bool IsMissing(QuicPacketSequenceNumber number) { 795 bool IsMissing(QuicPacketSequenceNumber number) {
783 return IsAwaitingPacket(outgoing_ack()->received_info, number); 796 return IsAwaitingPacket(outgoing_ack()->received_info, number);
784 } 797 }
785 798
786 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, 799 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number,
787 QuicFecGroupNumber fec_group, 800 QuicFecGroupNumber fec_group,
788 bool entropy_flag) { 801 bool entropy_flag) {
789 header_.public_header.guid = guid_; 802 header_.public_header.connection_id = connection_id_;
790 header_.public_header.reset_flag = false; 803 header_.public_header.reset_flag = false;
791 header_.public_header.version_flag = false; 804 header_.public_header.version_flag = false;
792 header_.entropy_flag = entropy_flag; 805 header_.entropy_flag = entropy_flag;
793 header_.fec_flag = false; 806 header_.fec_flag = false;
794 header_.packet_sequence_number = number; 807 header_.packet_sequence_number = number;
795 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 808 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
796 header_.fec_group = fec_group; 809 header_.fec_group = fec_group;
797 810
798 QuicFrames frames; 811 QuicFrames frames;
799 QuicFrame frame(&frame1_); 812 QuicFrame frame(&frame1_);
800 frames.push_back(frame); 813 frames.push_back(frame);
801 QuicPacket* packet = 814 QuicPacket* packet =
802 framer_.BuildUnsizedDataPacket(header_, frames).packet; 815 framer_.BuildUnsizedDataPacket(header_, frames).packet;
803 EXPECT_TRUE(packet != NULL); 816 EXPECT_TRUE(packet != NULL);
804 return packet; 817 return packet;
805 } 818 }
806 819
807 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, 820 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number,
808 QuicFecGroupNumber fec_group) { 821 QuicFecGroupNumber fec_group) {
809 header_.public_header.guid = guid_; 822 header_.public_header.connection_id = connection_id_;
810 header_.packet_sequence_number = number; 823 header_.packet_sequence_number = number;
811 header_.public_header.reset_flag = false; 824 header_.public_header.reset_flag = false;
812 header_.public_header.version_flag = false; 825 header_.public_header.version_flag = false;
813 header_.entropy_flag = false; 826 header_.entropy_flag = false;
814 header_.fec_flag = false; 827 header_.fec_flag = false;
815 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 828 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
816 header_.fec_group = fec_group; 829 header_.fec_group = fec_group;
817 830
818 QuicConnectionCloseFrame qccf; 831 QuicConnectionCloseFrame qccf;
819 qccf.error_code = QUIC_PEER_GOING_AWAY; 832 qccf.error_code = QUIC_PEER_GOING_AWAY;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 ProcessDataPacket(6000, 0, !kEntropyFlag); 902 ProcessDataPacket(6000, 0, !kEntropyFlag);
890 EXPECT_FALSE( 903 EXPECT_FALSE(
891 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL); 904 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL);
892 } 905 }
893 906
894 void BlockOnNextWrite() { 907 void BlockOnNextWrite() {
895 writer_->BlockOnNextWrite(); 908 writer_->BlockOnNextWrite();
896 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1)); 909 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1));
897 } 910 }
898 911
899 QuicGuid guid_; 912 QuicConnectionId connection_id_;
900 QuicFramer framer_; 913 QuicFramer framer_;
901 QuicPacketCreator creator_; 914 QuicPacketCreator creator_;
902 MockEntropyCalculator entropy_calculator_; 915 MockEntropyCalculator entropy_calculator_;
903 916
904 MockSendAlgorithm* send_algorithm_; 917 MockSendAlgorithm* send_algorithm_;
918 MockLossAlgorithm* loss_algorithm_;
905 TestReceiveAlgorithm* receive_algorithm_; 919 TestReceiveAlgorithm* receive_algorithm_;
906 MockClock clock_; 920 MockClock clock_;
907 MockRandom random_generator_; 921 MockRandom random_generator_;
908 scoped_ptr<TestConnectionHelper> helper_; 922 scoped_ptr<TestConnectionHelper> helper_;
909 scoped_ptr<TestPacketWriter> writer_; 923 scoped_ptr<TestPacketWriter> writer_;
910 TestConnection connection_; 924 TestConnection connection_;
911 StrictMock<MockConnectionVisitor> visitor_; 925 StrictMock<MockConnectionVisitor> visitor_;
912 926
913 QuicPacketHeader header_; 927 QuicPacketHeader header_;
914 QuicStreamFrame frame1_; 928 QuicStreamFrame frame1_;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 } 1045 }
1032 1046
1033 TEST_P(QuicConnectionTest, TruncatedAck) { 1047 TEST_P(QuicConnectionTest, TruncatedAck) {
1034 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1048 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1035 QuicPacketSequenceNumber num_packets = 256 * 2 + 1; 1049 QuicPacketSequenceNumber num_packets = 256 * 2 + 1;
1036 for (QuicPacketSequenceNumber i = 0; i < num_packets; ++i) { 1050 for (QuicPacketSequenceNumber i = 0; i < num_packets; ++i) {
1037 SendStreamDataToPeer(3, "foo", i * 3, !kFin, NULL); 1051 SendStreamDataToPeer(3, "foo", i * 3, !kFin, NULL);
1038 } 1052 }
1039 1053
1040 QuicAckFrame frame = InitAckFrame(num_packets, 1); 1054 QuicAckFrame frame = InitAckFrame(num_packets, 1);
1055 SequenceNumberSet lost_packets;
1041 // Create an ack with 256 nacks, none adjacent to one another. 1056 // Create an ack with 256 nacks, none adjacent to one another.
1042 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) { 1057 for (QuicPacketSequenceNumber i = 1; i <= 256; ++i) {
1043 NackPacket(i * 2, &frame); 1058 NackPacket(i * 2, &frame);
1059 if (i < 256) { // Last packet is nacked, but not lost.
1060 lost_packets.insert(i * 2);
1061 }
1044 } 1062 }
1063 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1064 .WillOnce(Return(lost_packets));
1045 EXPECT_CALL(entropy_calculator_, 1065 EXPECT_CALL(entropy_calculator_,
1046 EntropyHash(511)).WillOnce(testing::Return(0)); 1066 EntropyHash(511)).WillOnce(testing::Return(0));
1047 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1067 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1048 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256); 1068 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(256);
1049 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255); 1069 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(255);
1050 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255); 1070 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(255);
1051 ProcessAckPacket(&frame); 1071 ProcessAckPacket(&frame);
1052 1072
1053 QuicReceivedPacketManager* received_packet_manager = 1073 QuicReceivedPacketManager* received_packet_manager =
1054 QuicConnectionPeer::GetReceivedPacketManager(&connection_); 1074 QuicConnectionPeer::GetReceivedPacketManager(&connection_);
1055 // A truncated ack will not have the true largest observed. 1075 // A truncated ack will not have the true largest observed.
1056 EXPECT_GT(num_packets, 1076 EXPECT_GT(num_packets,
1057 received_packet_manager->peer_largest_observed_packet()); 1077 received_packet_manager->peer_largest_observed_packet());
1058 1078
1059 AckPacket(192, &frame); 1079 AckPacket(192, &frame);
1060 1080
1061 // Removing one missing packet allows us to ack 192 and one more range, but 1081 // Removing one missing packet allows us to ack 192 and one more range, but
1062 // 192 has already been declared lost, so it doesn't register as an ack. 1082 // 192 has already been declared lost, so it doesn't register as an ack.
1083 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1084 .WillOnce(Return(SequenceNumberSet()));
1063 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1085 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1064 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1); 1086 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1);
1065 ProcessAckPacket(&frame); 1087 ProcessAckPacket(&frame);
1066 EXPECT_EQ(num_packets, 1088 EXPECT_EQ(num_packets,
1067 received_packet_manager->peer_largest_observed_packet()); 1089 received_packet_manager->peer_largest_observed_packet());
1068 } 1090 }
1069 1091
1070 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) { 1092 TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
1071 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1093 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1072 1094
(...skipping 30 matching lines...) Expand all
1103 // Should ack immediately, since this fills the last hole. 1125 // Should ack immediately, since this fills the last hole.
1104 EXPECT_EQ(3u, writer_->packets_write_attempts()); 1126 EXPECT_EQ(3u, writer_->packets_write_attempts());
1105 1127
1106 ProcessPacket(4); 1128 ProcessPacket(4);
1107 // Should not cause an ack. 1129 // Should not cause an ack.
1108 EXPECT_EQ(3u, writer_->packets_write_attempts()); 1130 EXPECT_EQ(3u, writer_->packets_write_attempts());
1109 } 1131 }
1110 1132
1111 TEST_P(QuicConnectionTest, AckReceiptCausesAckSend) { 1133 TEST_P(QuicConnectionTest, AckReceiptCausesAckSend) {
1112 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1134 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1113 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1); 1135
1114 QuicPacketSequenceNumber original; 1136 QuicPacketSequenceNumber original;
1115 QuicByteCount packet_size; 1137 QuicByteCount packet_size;
1116 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1138 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1117 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size), 1139 .WillOnce(DoAll(SaveArg<1>(&original), SaveArg<2>(&packet_size),
1118 Return(true))); 1140 Return(true)));
1119 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1120 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1141 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1121 QuicAckFrame frame = InitAckFrame(original, 1); 1142 QuicAckFrame frame = InitAckFrame(original, 1);
1122 NackPacket(original, &frame); 1143 NackPacket(original, &frame);
1123 // First nack triggers early retransmit. 1144 // First nack triggers early retransmit.
1145 SequenceNumberSet lost_packets;
1146 lost_packets.insert(1);
1147 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1148 .WillOnce(Return(lost_packets));
1124 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1149 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1150 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1151 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1125 QuicPacketSequenceNumber retransmission; 1152 QuicPacketSequenceNumber retransmission;
1126 EXPECT_CALL(*send_algorithm_, 1153 EXPECT_CALL(*send_algorithm_,
1127 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1154 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1128 NACK_RETRANSMISSION, _)) 1155 NACK_RETRANSMISSION, _))
1129 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true))); 1156 .WillOnce(DoAll(SaveArg<1>(&retransmission), Return(true)));
1130 1157
1131 ProcessAckPacket(&frame); 1158 ProcessAckPacket(&frame);
1132 1159
1133 QuicAckFrame frame2 = InitAckFrame(retransmission, 1); 1160 QuicAckFrame frame2 = InitAckFrame(retransmission, 1);
1134 NackPacket(original, &frame2); 1161 NackPacket(original, &frame2);
1135 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1162 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1136 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)); 1163 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _));
1164 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1165 .WillOnce(Return(SequenceNumberSet()));
1137 ProcessAckPacket(&frame2); 1166 ProcessAckPacket(&frame2);
1138 1167
1139 // Now if the peer sends an ack which still reports the retransmitted packet 1168 // Now if the peer sends an ack which still reports the retransmitted packet
1140 // as missing, that will bundle an ack with data after two acks in a row 1169 // as missing, that will bundle an ack with data after two acks in a row
1141 // indicate the high water mark needs to be raised. 1170 // indicate the high water mark needs to be raised.
1142 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1171 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1143 HAS_RETRANSMITTABLE_DATA)); 1172 HAS_RETRANSMITTABLE_DATA));
1144 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1173 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1145 // No ack sent. 1174 // No ack sent.
1146 EXPECT_EQ(1u, writer_->frame_count()); 1175 EXPECT_EQ(1u, writer_->frame_count());
1147 EXPECT_EQ(1u, writer_->stream_frames()->size()); 1176 EXPECT_EQ(1u, writer_->stream_frames()->size());
1148 writer_->Reset(); 1177 writer_->Reset();
1149 1178
1179 // No more packet loss for the rest of the test.
1180 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1181 .WillRepeatedly(Return(SequenceNumberSet()));
1150 ProcessAckPacket(&frame2); 1182 ProcessAckPacket(&frame2);
1151 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, 1183 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION,
1152 HAS_RETRANSMITTABLE_DATA)); 1184 HAS_RETRANSMITTABLE_DATA));
1153 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL); 1185 connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
1154 // Ack bundled. 1186 // Ack bundled.
1155 if (version() > QUIC_VERSION_15) { 1187 if (version() > QUIC_VERSION_15) {
1156 EXPECT_EQ(3u, writer_->frame_count()); 1188 EXPECT_EQ(3u, writer_->frame_count());
1157 } else { 1189 } else {
1158 EXPECT_EQ(2u, writer_->frame_count()); 1190 EXPECT_EQ(2u, writer_->frame_count());
1159 } 1191 }
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1516 // Advance the time so not all the FEC packets are abandoned. 1548 // Advance the time so not all the FEC packets are abandoned.
1517 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 1549 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
1518 connection_.SendStreamDataWithString(3, "foo", 6, !kFin, NULL); 1550 connection_.SendStreamDataWithString(3, "foo", 6, !kFin, NULL);
1519 1551
1520 QuicAckFrame ack_fec = InitAckFrame(5, 1); 1552 QuicAckFrame ack_fec = InitAckFrame(5, 1);
1521 // Ack all data packets, but no fec packets. 1553 // Ack all data packets, but no fec packets.
1522 NackPacket(2, &ack_fec); 1554 NackPacket(2, &ack_fec);
1523 NackPacket(4, &ack_fec); 1555 NackPacket(4, &ack_fec);
1524 1556
1525 // Lose the first FEC packet and ack the three data packets. 1557 // Lose the first FEC packet and ack the three data packets.
1558 SequenceNumberSet lost_packets;
1559 lost_packets.insert(2);
1560 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1561 .WillOnce(Return(lost_packets));
1526 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1562 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1527 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); 1563 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
1528 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 1564 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1529 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 1565 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1530 ProcessAckPacket(&ack_fec); 1566 ProcessAckPacket(&ack_fec);
1531 1567
1532 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract( 1568 clock_.AdvanceTime(DefaultRetransmissionTime().Subtract(
1533 QuicTime::Delta::FromMilliseconds(1))); 1569 QuicTime::Delta::FromMilliseconds(1)));
1534 1570
1535 // Abandon all packets 1571 // Abandon all packets
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
1781 1817
1782 // Parse the last packet and ensure it's the two stream frames from 1818 // Parse the last packet and ensure it's the two stream frames from
1783 // two different streams. 1819 // two different streams.
1784 EXPECT_EQ(2u, writer_->frame_count()); 1820 EXPECT_EQ(2u, writer_->frame_count());
1785 EXPECT_EQ(2u, writer_->stream_frames()->size()); 1821 EXPECT_EQ(2u, writer_->stream_frames()->size());
1786 EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id); 1822 EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id);
1787 EXPECT_EQ(kStreamId5, (*writer_->stream_frames())[1].stream_id); 1823 EXPECT_EQ(kStreamId5, (*writer_->stream_frames())[1].stream_id);
1788 } 1824 }
1789 1825
1790 TEST_P(QuicConnectionTest, RetransmitOnNack) { 1826 TEST_P(QuicConnectionTest, RetransmitOnNack) {
1791 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1792 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _));
1793 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1);
1794 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1);
1795 QuicPacketSequenceNumber last_packet; 1827 QuicPacketSequenceNumber last_packet;
1796 QuicByteCount second_packet_size; 1828 QuicByteCount second_packet_size;
1797 SendStreamDataToPeer(3, "foo", 0, !kFin, &last_packet); // Packet 1 1829 SendStreamDataToPeer(3, "foo", 0, !kFin, &last_packet); // Packet 1
1798 second_packet_size = 1830 second_packet_size =
1799 SendStreamDataToPeer(3, "foos", 3, !kFin, &last_packet); // Packet 2 1831 SendStreamDataToPeer(3, "foos", 3, !kFin, &last_packet); // Packet 2
1800 SendStreamDataToPeer(3, "fooos", 7, !kFin, &last_packet); // Packet 3 1832 SendStreamDataToPeer(3, "fooos", 7, !kFin, &last_packet); // Packet 3
1801 1833
1802 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1834 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1803 1835
1804 // Peer acks one but not two or three. Right now we only retransmit on 1836 // Don't lose a packet on an ack, and nothing is retransmitted.
1805 // explicit nack, so it should not trigger a retransmission. 1837 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1838 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
1806 QuicAckFrame ack_one = InitAckFrame(1, 0); 1839 QuicAckFrame ack_one = InitAckFrame(1, 0);
1807 ProcessAckPacket(&ack_one); 1840 ProcessAckPacket(&ack_one);
1808 ProcessAckPacket(&ack_one);
1809 ProcessAckPacket(&ack_one);
1810 1841
1811 // Peer acks up to 3 with two explicitly missing. 1842 // Lose a packet and ensure it triggers retransmission.
1812 // Early retransmit causes 2 to be retransmitted on the first ack.
1813 QuicAckFrame nack_two = InitAckFrame(3, 0); 1843 QuicAckFrame nack_two = InitAckFrame(3, 0);
1814 NackPacket(2, &nack_two); 1844 NackPacket(2, &nack_two);
1815 // The third nack should trigger a retransmission. 1845 SequenceNumberSet lost_packets;
1846 lost_packets.insert(2);
1847 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1848 .WillOnce(Return(lost_packets));
1816 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1849 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1817 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)); 1850 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _));
1851 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)).Times(1);
1852 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1);
1818 EXPECT_CALL(*send_algorithm_, 1853 EXPECT_CALL(*send_algorithm_,
1819 OnPacketSent(_, _, second_packet_size - kQuicVersionSize, 1854 OnPacketSent(_, _, second_packet_size - kQuicVersionSize,
1820 NACK_RETRANSMISSION, _)).Times(1); 1855 NACK_RETRANSMISSION, _)).Times(1);
1821 ProcessAckPacket(&nack_two); 1856 ProcessAckPacket(&nack_two);
1822 } 1857 }
1823 1858
1824 TEST_P(QuicConnectionTest, DiscardRetransmit) { 1859 TEST_P(QuicConnectionTest, DiscardRetransmit) {
1825 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1826 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _));
1827 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1);
1828 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)).Times(1);
1829 QuicPacketSequenceNumber last_packet; 1860 QuicPacketSequenceNumber last_packet;
1830 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1 1861 SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet); // Packet 1
1831 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2 1862 SendStreamDataToPeer(1, "foos", 3, !kFin, &last_packet); // Packet 2
1832 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3 1863 SendStreamDataToPeer(1, "fooos", 7, !kFin, &last_packet); // Packet 3
1833 1864
1834 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1865 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1835 1866
1836 // Peer acks one but not two or three. Right now we only retransmit on 1867 // Instigate a loss with an ack.
1837 // explicit nack, so it should not trigger a retransmission.
1838 QuicAckFrame ack_one = InitAckFrame(1, 0);
1839 ProcessAckPacket(&ack_one);
1840 ProcessAckPacket(&ack_one);
1841 ProcessAckPacket(&ack_one);
1842
1843 // Peer acks up to 3 with two explicitly missing. Two nacks should cause no
1844 // change.
1845 QuicAckFrame nack_two = InitAckFrame(3, 0); 1868 QuicAckFrame nack_two = InitAckFrame(3, 0);
1846 NackPacket(2, &nack_two); 1869 NackPacket(2, &nack_two);
1847 // The first nack should trigger a fast retransmission, but we'll be 1870 // The first nack should trigger a fast retransmission, but we'll be
1848 // write blocked, so the packet will be queued. 1871 // write blocked, so the packet will be queued.
1849 BlockOnNextWrite(); 1872 BlockOnNextWrite();
1873 SequenceNumberSet lost_packets;
1874 lost_packets.insert(2);
1875 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1876 .WillOnce(Return(lost_packets));
1850 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1877 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1851 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)); 1878 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
1879 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
1880 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
1852 ProcessAckPacket(&nack_two); 1881 ProcessAckPacket(&nack_two);
1853 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 1882 EXPECT_EQ(1u, connection_.NumQueuedPackets());
1854 1883
1855 // Now, ack the previous transmission. 1884 // Now, ack the previous transmission.
1885 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1886 .WillOnce(Return(SequenceNumberSet()));
1856 QuicAckFrame ack_all = InitAckFrame(3, 0); 1887 QuicAckFrame ack_all = InitAckFrame(3, 0);
1857 ProcessAckPacket(&ack_all); 1888 ProcessAckPacket(&ack_all);
1858 1889
1859 // Unblock the socket and attempt to send the queued packets. However, 1890 // Unblock the socket and attempt to send the queued packets. However,
1860 // since the previous transmission has been acked, we will not 1891 // since the previous transmission has been acked, we will not
1861 // send the retransmission. 1892 // send the retransmission.
1862 EXPECT_CALL(*send_algorithm_, 1893 EXPECT_CALL(*send_algorithm_,
1863 OnPacketSent(_, _, _, _, _)).Times(0); 1894 OnPacketSent(_, _, _, _, _)).Times(0);
1864 1895
1865 writer_->SetWritable(); 1896 writer_->SetWritable();
1866 connection_.OnCanWrite(); 1897 connection_.OnCanWrite();
1867 1898
1868 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1899 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1869 } 1900 }
1870 1901
1871 TEST_P(QuicConnectionTest, RetransmitNackedLargestObserved) { 1902 TEST_P(QuicConnectionTest, RetransmitNackedLargestObserved) {
1872 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1903 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1873 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1);
1874 QuicPacketSequenceNumber largest_observed; 1904 QuicPacketSequenceNumber largest_observed;
1875 QuicByteCount packet_size; 1905 QuicByteCount packet_size;
1876 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 1906 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
1877 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size), 1907 .WillOnce(DoAll(SaveArg<1>(&largest_observed), SaveArg<2>(&packet_size),
1878 Return(true))); 1908 Return(true)));
1879 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1880 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1909 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1910
1881 QuicAckFrame frame = InitAckFrame(1, largest_observed); 1911 QuicAckFrame frame = InitAckFrame(1, largest_observed);
1882 NackPacket(largest_observed, &frame); 1912 NackPacket(largest_observed, &frame);
1883 // The first nack should retransmit the largest observed packet. 1913 // The first nack should retransmit the largest observed packet.
1914 SequenceNumberSet lost_packets;
1915 lost_packets.insert(1);
1916 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
1917 .WillOnce(Return(lost_packets));
1884 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1918 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1919 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
1920 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
1885 EXPECT_CALL(*send_algorithm_, 1921 EXPECT_CALL(*send_algorithm_,
1886 OnPacketSent(_, _, packet_size - kQuicVersionSize, 1922 OnPacketSent(_, _, packet_size - kQuicVersionSize,
1887 NACK_RETRANSMISSION, _)); 1923 NACK_RETRANSMISSION, _));
1888 ProcessAckPacket(&frame); 1924 ProcessAckPacket(&frame);
1889 } 1925 }
1890 1926
1891 TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) { 1927 TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) {
1892 for (int i = 0; i < 10; ++i) { 1928 for (int i = 0; i < 10; ++i) {
1893 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 1929 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
1894 connection_.SendStreamDataWithString(3, "foo", i * 3, !kFin, NULL); 1930 connection_.SendStreamDataWithString(3, "foo", i * 3, !kFin, NULL);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1985 TEST_P(QuicConnectionTest, NoLimitPacketsPerNack) { 2021 TEST_P(QuicConnectionTest, NoLimitPacketsPerNack) {
1986 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2022 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1987 int offset = 0; 2023 int offset = 0;
1988 // Send packets 1 to 15. 2024 // Send packets 1 to 15.
1989 for (int i = 0; i < 15; ++i) { 2025 for (int i = 0; i < 15; ++i) {
1990 SendStreamDataToPeer(1, "foo", offset, !kFin, NULL); 2026 SendStreamDataToPeer(1, "foo", offset, !kFin, NULL);
1991 offset += 3; 2027 offset += 3;
1992 } 2028 }
1993 2029
1994 // Ack 15, nack 1-14. 2030 // Ack 15, nack 1-14.
2031 SequenceNumberSet lost_packets;
1995 QuicAckFrame nack = InitAckFrame(15, 0); 2032 QuicAckFrame nack = InitAckFrame(15, 0);
1996 for (int i = 1; i < 15; ++i) { 2033 for (int i = 1; i < 15; ++i) {
1997 NackPacket(i, &nack); 2034 NackPacket(i, &nack);
2035 lost_packets.insert(i);
1998 } 2036 }
1999 2037
2000 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits 2038 // 14 packets have been NACK'd and lost. In TCP cubic, PRR limits
2001 // the retransmission rate in the case of burst losses. 2039 // the retransmission rate in the case of burst losses.
2040 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2041 .WillOnce(Return(lost_packets));
2002 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2042 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2003 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1); 2043 EXPECT_CALL(*send_algorithm_, OnPacketAcked(15, _)).Times(1);
2004 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14); 2044 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(14);
2005 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14); 2045 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(14);
2006 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14); 2046 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(14);
2007 ProcessAckPacket(&nack); 2047 ProcessAckPacket(&nack);
2008 } 2048 }
2009 2049
2010 // Test sending multiple acks from the connection to the session. 2050 // Test sending multiple acks from the connection to the session.
2011 TEST_P(QuicConnectionTest, MultipleAcks) { 2051 TEST_P(QuicConnectionTest, MultipleAcks) {
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
2352 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, RTO_RETRANSMISSION, _)) 2392 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, RTO_RETRANSMISSION, _))
2353 .WillOnce(DoAll(SaveArg<1>(&rto_sequence_number), Return(true))); 2393 .WillOnce(DoAll(SaveArg<1>(&rto_sequence_number), Return(true)));
2354 connection_.GetRetransmissionAlarm()->Fire(); 2394 connection_.GetRetransmissionAlarm()->Fire();
2355 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission( 2395 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
2356 &connection_, original_sequence_number)); 2396 &connection_, original_sequence_number));
2357 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission( 2397 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
2358 &connection_, rto_sequence_number)); 2398 &connection_, rto_sequence_number));
2359 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission( 2399 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
2360 &connection_, rto_sequence_number)); 2400 &connection_, rto_sequence_number));
2361 // Once by explicit nack. 2401 // Once by explicit nack.
2362 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(3); 2402 SequenceNumberSet lost_packets;
2363 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1); 2403 lost_packets.insert(rto_sequence_number);
2404 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2405 .WillOnce(Return(lost_packets));
2406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(1);
2407 EXPECT_CALL(*send_algorithm_, OnPacketLost(rto_sequence_number, _)).Times(1);
2364 EXPECT_CALL(*send_algorithm_, 2408 EXPECT_CALL(*send_algorithm_,
2365 OnPacketAbandoned(rto_sequence_number, _)).Times(1); 2409 OnPacketAbandoned(rto_sequence_number, _)).Times(1);
2366 QuicPacketSequenceNumber nack_sequence_number = 0; 2410 QuicPacketSequenceNumber nack_sequence_number = 0;
2367 // Ack packets might generate some other packets, which are not 2411 // Ack packets might generate some other packets, which are not
2368 // retransmissions. (More ack packets). 2412 // retransmissions. (More ack packets).
2369 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _)) 2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NOT_RETRANSMISSION, _))
2370 .Times(AnyNumber()); 2414 .Times(AnyNumber());
2371 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NACK_RETRANSMISSION, _)) 2415 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, NACK_RETRANSMISSION, _))
2372 .WillOnce(DoAll(SaveArg<1>(&nack_sequence_number), Return(true))); 2416 .WillOnce(DoAll(SaveArg<1>(&nack_sequence_number), Return(true)));
2373 QuicAckFrame ack = InitAckFrame(rto_sequence_number, 0); 2417 QuicAckFrame ack = InitAckFrame(rto_sequence_number, 0);
2374 // Ack the retransmitted packet. 2418 // Nack the retransmitted packet.
2375 NackPacket(original_sequence_number, &ack); 2419 NackPacket(original_sequence_number, &ack);
2376 NackPacket(rto_sequence_number, &ack); 2420 NackPacket(rto_sequence_number, &ack);
2377 for (int i = 0; i < 3; i++) { 2421 ProcessAckPacket(&ack);
2378 ProcessAckPacket(&ack); 2422
2379 }
2380 ASSERT_NE(0u, nack_sequence_number); 2423 ASSERT_NE(0u, nack_sequence_number);
2381 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission( 2424 EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
2382 &connection_, rto_sequence_number)); 2425 &connection_, rto_sequence_number));
2383 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission( 2426 ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
2384 &connection_, nack_sequence_number)); 2427 &connection_, nack_sequence_number));
2385 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission( 2428 EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
2386 &connection_, nack_sequence_number)); 2429 &connection_, nack_sequence_number));
2387 } 2430 }
2388 2431
2389 TEST_P(QuicConnectionTest, SetRTOAfterWritingToSocket) { 2432 TEST_P(QuicConnectionTest, SetRTOAfterWritingToSocket) {
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
2866 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); 2909 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
2867 } 2910 }
2868 2911
2869 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { 2912 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) {
2870 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2913 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2871 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL); 2914 connection_.SendStreamDataWithString(kStreamId3, "foo", 0, !kFin, NULL);
2872 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL); 2915 connection_.SendStreamDataWithString(kStreamId3, "foo", 3, !kFin, NULL);
2873 // Ack the second packet, which will retransmit the first packet. 2916 // Ack the second packet, which will retransmit the first packet.
2874 QuicAckFrame ack = InitAckFrame(2, 0); 2917 QuicAckFrame ack = InitAckFrame(2, 0);
2875 NackPacket(1, &ack); 2918 NackPacket(1, &ack);
2919 SequenceNumberSet lost_packets;
2920 lost_packets.insert(1);
2921 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2922 .WillOnce(Return(lost_packets));
2876 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2923 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2877 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); 2924 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1);
2878 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); 2925 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
2879 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); 2926 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
2880 ProcessAckPacket(&ack); 2927 ProcessAckPacket(&ack);
2881 EXPECT_EQ(1u, writer_->frame_count()); 2928 EXPECT_EQ(1u, writer_->frame_count());
2882 EXPECT_EQ(1u, writer_->stream_frames()->size()); 2929 EXPECT_EQ(1u, writer_->stream_frames()->size());
2883 writer_->Reset(); 2930 writer_->Reset();
2884 2931
2885 // Now ack the retransmission, which will both raise the high water mark 2932 // Now ack the retransmission, which will both raise the high water mark
2886 // and see if there is more data to send. 2933 // and see if there is more data to send.
2887 ack = InitAckFrame(3, 0); 2934 ack = InitAckFrame(3, 0);
2888 NackPacket(1, &ack); 2935 NackPacket(1, &ack);
2936 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2937 .WillOnce(Return(SequenceNumberSet()));
2889 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 2938 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
2890 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1); 2939 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)).Times(1);
2891 ProcessAckPacket(&ack); 2940 ProcessAckPacket(&ack);
2892 2941
2893 // Check that no packet is sent and the ack alarm isn't set. 2942 // Check that no packet is sent and the ack alarm isn't set.
2894 EXPECT_EQ(0u, writer_->frame_count()); 2943 EXPECT_EQ(0u, writer_->frame_count());
2895 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); 2944 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
2896 writer_->Reset(); 2945 writer_->Reset();
2897 2946
2898 // Send the same ack, but send both data and an ack together. 2947 // Send the same ack, but send both data and an ack together.
2899 ack = InitAckFrame(3, 0); 2948 ack = InitAckFrame(3, 0);
2900 NackPacket(1, &ack); 2949 NackPacket(1, &ack);
2950 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
2951 .WillOnce(Return(SequenceNumberSet()));
2901 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce( 2952 EXPECT_CALL(visitor_, OnCanWrite()).WillOnce(
2902 IgnoreResult(InvokeWithoutArgs( 2953 IgnoreResult(InvokeWithoutArgs(
2903 &connection_, 2954 &connection_,
2904 &TestConnection::EnsureWritableAndSendStreamData5))); 2955 &TestConnection::EnsureWritableAndSendStreamData5)));
2905 ProcessAckPacket(&ack); 2956 ProcessAckPacket(&ack);
2906 2957
2907 // Check that ack is bundled with outgoing data and the delayed ack 2958 // Check that ack is bundled with outgoing data and the delayed ack
2908 // alarm is reset. 2959 // alarm is reset.
2909 if (version() > QUIC_VERSION_15) { 2960 if (version() > QUIC_VERSION_15) {
2910 EXPECT_EQ(3u, writer_->frame_count()); 2961 EXPECT_EQ(3u, writer_->frame_count());
(...skipping 21 matching lines...) Expand all
2932 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false); 2983 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false);
2933 EXPECT_FALSE(connection_.connected()); 2984 EXPECT_FALSE(connection_.connected());
2934 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 2985 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag);
2935 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)).Times(0); 2986 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)).Times(0);
2936 connection_.SendPacket( 2987 connection_.SendPacket(
2937 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA); 2988 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA);
2938 } 2989 }
2939 2990
2940 TEST_P(QuicConnectionTest, PublicReset) { 2991 TEST_P(QuicConnectionTest, PublicReset) {
2941 QuicPublicResetPacket header; 2992 QuicPublicResetPacket header;
2942 header.public_header.guid = guid_; 2993 header.public_header.connection_id = connection_id_;
2943 header.public_header.reset_flag = true; 2994 header.public_header.reset_flag = true;
2944 header.public_header.version_flag = false; 2995 header.public_header.version_flag = false;
2945 header.rejected_sequence_number = 10101; 2996 header.rejected_sequence_number = 10101;
2946 scoped_ptr<QuicEncryptedPacket> packet( 2997 scoped_ptr<QuicEncryptedPacket> packet(
2947 framer_.BuildPublicResetPacket(header)); 2998 framer_.BuildPublicResetPacket(header));
2948 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)); 2999 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, true));
2949 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *packet); 3000 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *packet);
2950 } 3001 }
2951 3002
2952 TEST_P(QuicConnectionTest, GoAway) { 3003 TEST_P(QuicConnectionTest, GoAway) {
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
3142 EXPECT_TRUE(QuicConnectionPeer::IsValidEntropy( 3193 EXPECT_TRUE(QuicConnectionPeer::IsValidEntropy(
3143 &connection_, max_sequence_number, missing_packets, entropy_hash)) 3194 &connection_, max_sequence_number, missing_packets, entropy_hash))
3144 << ""; 3195 << "";
3145 } 3196 }
3146 3197
3147 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) { 3198 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) {
3148 connection_.SetSupportedVersions(QuicSupportedVersions()); 3199 connection_.SetSupportedVersions(QuicSupportedVersions());
3149 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); 3200 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED);
3150 3201
3151 QuicPacketHeader header; 3202 QuicPacketHeader header;
3152 header.public_header.guid = guid_; 3203 header.public_header.connection_id = connection_id_;
3153 header.public_header.reset_flag = false; 3204 header.public_header.reset_flag = false;
3154 header.public_header.version_flag = true; 3205 header.public_header.version_flag = true;
3155 header.entropy_flag = false; 3206 header.entropy_flag = false;
3156 header.fec_flag = false; 3207 header.fec_flag = false;
3157 header.packet_sequence_number = 12; 3208 header.packet_sequence_number = 12;
3158 header.fec_group = 0; 3209 header.fec_group = 0;
3159 3210
3160 QuicFrames frames; 3211 QuicFrames frames;
3161 QuicFrame frame(&frame1_); 3212 QuicFrame frame(&frame1_);
3162 frames.push_back(frame); 3213 frames.push_back(frame);
(...skipping 17 matching lines...) Expand all
3180 EXPECT_EQ(kSupportedQuicVersions[i], 3231 EXPECT_EQ(kSupportedQuicVersions[i],
3181 writer_->version_negotiation_packet()->versions[i]); 3232 writer_->version_negotiation_packet()->versions[i]);
3182 } 3233 }
3183 } 3234 }
3184 3235
3185 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) { 3236 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) {
3186 connection_.SetSupportedVersions(QuicSupportedVersions()); 3237 connection_.SetSupportedVersions(QuicSupportedVersions());
3187 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); 3238 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED);
3188 3239
3189 QuicPacketHeader header; 3240 QuicPacketHeader header;
3190 header.public_header.guid = guid_; 3241 header.public_header.connection_id = connection_id_;
3191 header.public_header.reset_flag = false; 3242 header.public_header.reset_flag = false;
3192 header.public_header.version_flag = true; 3243 header.public_header.version_flag = true;
3193 header.entropy_flag = false; 3244 header.entropy_flag = false;
3194 header.fec_flag = false; 3245 header.fec_flag = false;
3195 header.packet_sequence_number = 12; 3246 header.packet_sequence_number = 12;
3196 header.fec_group = 0; 3247 header.fec_group = 0;
3197 3248
3198 QuicFrames frames; 3249 QuicFrames frames;
3199 QuicFrame frame(&frame1_); 3250 QuicFrame frame(&frame1_);
3200 frames.push_back(frame); 3251 frames.push_back(frame);
(...skipping 24 matching lines...) Expand all
3225 writer_->version_negotiation_packet()->versions[i]); 3276 writer_->version_negotiation_packet()->versions[i]);
3226 } 3277 }
3227 } 3278 }
3228 3279
3229 TEST_P(QuicConnectionTest, 3280 TEST_P(QuicConnectionTest,
3230 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) { 3281 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) {
3231 connection_.SetSupportedVersions(QuicSupportedVersions()); 3282 connection_.SetSupportedVersions(QuicSupportedVersions());
3232 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); 3283 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED);
3233 3284
3234 QuicPacketHeader header; 3285 QuicPacketHeader header;
3235 header.public_header.guid = guid_; 3286 header.public_header.connection_id = connection_id_;
3236 header.public_header.reset_flag = false; 3287 header.public_header.reset_flag = false;
3237 header.public_header.version_flag = true; 3288 header.public_header.version_flag = true;
3238 header.entropy_flag = false; 3289 header.entropy_flag = false;
3239 header.fec_flag = false; 3290 header.fec_flag = false;
3240 header.packet_sequence_number = 12; 3291 header.packet_sequence_number = 12;
3241 header.fec_group = 0; 3292 header.fec_group = 0;
3242 3293
3243 QuicFrames frames; 3294 QuicFrames frames;
3244 QuicFrame frame(&frame1_); 3295 QuicFrame frame(&frame1_);
3245 frames.push_back(frame); 3296 frames.push_back(frame);
(...skipping 10 matching lines...) Expand all
3256 EXPECT_EQ(0u, writer_->last_packet_size()); 3307 EXPECT_EQ(0u, writer_->last_packet_size());
3257 EXPECT_FALSE(connection_.HasQueuedData()); 3308 EXPECT_FALSE(connection_.HasQueuedData());
3258 } 3309 }
3259 3310
3260 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { 3311 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) {
3261 // Start out with some unsupported version. 3312 // Start out with some unsupported version.
3262 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests( 3313 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests(
3263 QUIC_VERSION_UNSUPPORTED); 3314 QUIC_VERSION_UNSUPPORTED);
3264 3315
3265 QuicPacketHeader header; 3316 QuicPacketHeader header;
3266 header.public_header.guid = guid_; 3317 header.public_header.connection_id = connection_id_;
3267 header.public_header.reset_flag = false; 3318 header.public_header.reset_flag = false;
3268 header.public_header.version_flag = true; 3319 header.public_header.version_flag = true;
3269 header.entropy_flag = false; 3320 header.entropy_flag = false;
3270 header.fec_flag = false; 3321 header.fec_flag = false;
3271 header.packet_sequence_number = 12; 3322 header.packet_sequence_number = 12;
3272 header.fec_group = 0; 3323 header.fec_group = 0;
3273 3324
3274 QuicVersionVector supported_versions; 3325 QuicVersionVector supported_versions;
3275 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { 3326 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
3276 supported_versions.push_back(kSupportedQuicVersions[i]); 3327 supported_versions.push_back(kSupportedQuicVersions[i]);
(...skipping 17 matching lines...) Expand all
3294 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); 3345 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
3295 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3346 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3296 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3347 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3297 3348
3298 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket( 3349 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(
3299 QuicConnectionPeer::GetPacketCreator(&connection_))); 3350 QuicConnectionPeer::GetPacketCreator(&connection_)));
3300 } 3351 }
3301 3352
3302 TEST_P(QuicConnectionTest, BadVersionNegotiation) { 3353 TEST_P(QuicConnectionTest, BadVersionNegotiation) {
3303 QuicPacketHeader header; 3354 QuicPacketHeader header;
3304 header.public_header.guid = guid_; 3355 header.public_header.connection_id = connection_id_;
3305 header.public_header.reset_flag = false; 3356 header.public_header.reset_flag = false;
3306 header.public_header.version_flag = true; 3357 header.public_header.version_flag = true;
3307 header.entropy_flag = false; 3358 header.entropy_flag = false;
3308 header.fec_flag = false; 3359 header.fec_flag = false;
3309 header.packet_sequence_number = 12; 3360 header.packet_sequence_number = 12;
3310 header.fec_group = 0; 3361 header.fec_group = 0;
3311 3362
3312 QuicVersionVector supported_versions; 3363 QuicVersionVector supported_versions;
3313 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { 3364 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
3314 supported_versions.push_back(kSupportedQuicVersions[i]); 3365 supported_versions.push_back(kSupportedQuicVersions[i]);
(...skipping 30 matching lines...) Expand all
3345 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1); 3396 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(1);
3346 3397
3347 // Retransmit due to RTO. 3398 // Retransmit due to RTO.
3348 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10)); 3399 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
3349 connection_.GetRetransmissionAlarm()->Fire(); 3400 connection_.GetRetransmissionAlarm()->Fire();
3350 3401
3351 // Retransmit due to explicit nacks. 3402 // Retransmit due to explicit nacks.
3352 QuicAckFrame nack_three = InitAckFrame(4, 0); 3403 QuicAckFrame nack_three = InitAckFrame(4, 0);
3353 NackPacket(3, &nack_three); 3404 NackPacket(3, &nack_three);
3354 NackPacket(1, &nack_three); 3405 NackPacket(1, &nack_three);
3355 QuicFrame frame(&nack_three); 3406 SequenceNumberSet lost_packets;
3407 lost_packets.insert(1);
3408 lost_packets.insert(3);
3409 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3410 .WillOnce(Return(lost_packets));
3356 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 3411 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3357 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1); 3412 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1);
3358 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(1); 3413 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2);
3359 EXPECT_CALL(visitor_, OnCanWrite()).Times(4); 3414 EXPECT_CALL(visitor_, OnCanWrite()).Times(2);
3360 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3415 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3361 3416 ProcessAckPacket(&nack_three);
3362 ProcessFramePacket(frame);
3363 ProcessFramePacket(frame);
3364 ProcessFramePacket(frame);
3365 3417
3366 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce( 3418 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillOnce(
3367 Return(QuicTime::Delta::Zero())); 3419 Return(QuicTime::Delta::Zero()));
3368 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce( 3420 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(
3369 Return(QuicBandwidth::Zero())); 3421 Return(QuicBandwidth::Zero()));
3370 3422
3371 const QuicConnectionStats& stats = connection_.GetStats(); 3423 const QuicConnectionStats& stats = connection_.GetStats();
3372 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize, 3424 EXPECT_EQ(3 * first_packet_size + 2 * second_packet_size - kQuicVersionSize,
3373 stats.bytes_sent); 3425 stats.bytes_sent);
3374 EXPECT_EQ(5u, stats.packets_sent); 3426 EXPECT_EQ(5u, stats.packets_sent);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 2) == NULL); 3473 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 2) == NULL);
3422 3474
3423 // Verify that adding 5 kills off 3, despite 4 being created before 3. 3475 // Verify that adding 5 kills off 3, despite 4 being created before 3.
3424 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 5) != NULL); 3476 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 5) != NULL);
3425 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 4) != NULL); 3477 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 4) != NULL);
3426 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 3) == NULL); 3478 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 3) == NULL);
3427 } 3479 }
3428 3480
3429 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) { 3481 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) {
3430 // Construct a packet with stream frame and connection close frame. 3482 // Construct a packet with stream frame and connection close frame.
3431 header_.public_header.guid = guid_; 3483 header_.public_header.connection_id = connection_id_;
3432 header_.packet_sequence_number = 1; 3484 header_.packet_sequence_number = 1;
3433 header_.public_header.reset_flag = false; 3485 header_.public_header.reset_flag = false;
3434 header_.public_header.version_flag = false; 3486 header_.public_header.version_flag = false;
3435 header_.entropy_flag = false; 3487 header_.entropy_flag = false;
3436 header_.fec_flag = false; 3488 header_.fec_flag = false;
3437 header_.fec_group = 0; 3489 header_.fec_group = 0;
3438 3490
3439 QuicConnectionCloseFrame qccf; 3491 QuicConnectionCloseFrame qccf;
3440 qccf.error_code = QUIC_PEER_GOING_AWAY; 3492 qccf.error_code = QUIC_PEER_GOING_AWAY;
3441 QuicFrame close_frame(&qccf); 3493 QuicFrame close_frame(&qccf);
(...skipping 11 matching lines...) Expand all
3453 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); 3505 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true));
3454 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(true)); 3506 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(true));
3455 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3507 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3456 3508
3457 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3509 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3458 } 3510 }
3459 3511
3460 TEST_P(QuicConnectionTest, DontProcessStreamFrameAndIgnoreCloseFrame) { 3512 TEST_P(QuicConnectionTest, DontProcessStreamFrameAndIgnoreCloseFrame) {
3461 // Construct a packet with stream frame, ack frame, 3513 // Construct a packet with stream frame, ack frame,
3462 // and connection close frame. 3514 // and connection close frame.
3463 header_.public_header.guid = guid_; 3515 header_.public_header.connection_id = connection_id_;
3464 header_.packet_sequence_number = 1; 3516 header_.packet_sequence_number = 1;
3465 header_.public_header.reset_flag = false; 3517 header_.public_header.reset_flag = false;
3466 header_.public_header.version_flag = false; 3518 header_.public_header.version_flag = false;
3467 header_.entropy_flag = false; 3519 header_.entropy_flag = false;
3468 header_.fec_flag = false; 3520 header_.fec_flag = false;
3469 header_.fec_group = 0; 3521 header_.fec_group = 0;
3470 3522
3471 QuicConnectionCloseFrame qccf; 3523 QuicConnectionCloseFrame qccf;
3472 qccf.error_code = QUIC_PEER_GOING_AWAY; 3524 qccf.error_code = QUIC_PEER_GOING_AWAY;
3473 QuicFrame close_frame(&qccf); 3525 QuicFrame close_frame(&qccf);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
3579 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get()); 3631 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get());
3580 3632
3581 // Send some other data which we will ACK. 3633 // Send some other data which we will ACK.
3582 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL); 3634 connection_.SendStreamDataWithString(1, "foo", 0, !kFin, NULL);
3583 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL); 3635 connection_.SendStreamDataWithString(1, "bar", 0, !kFin, NULL);
3584 3636
3585 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1 3637 // Now we receive ACK for packets 2 and 3, but importantly missing packet 1
3586 // which we registered to be notified about. 3638 // which we registered to be notified about.
3587 QuicAckFrame frame = InitAckFrame(3, 0); 3639 QuicAckFrame frame = InitAckFrame(3, 0);
3588 NackPacket(1, &frame); 3640 NackPacket(1, &frame);
3589 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)); 3641 SequenceNumberSet lost_packets;
3590 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); 3642 lost_packets.insert(1);
3643 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3644 .WillOnce(Return(lost_packets));
3645 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
3646 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
3591 ProcessAckPacket(&frame); 3647 ProcessAckPacket(&frame);
3592 } 3648 }
3593 3649
3594 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) { 3650 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterRetransmission) {
3595 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3651 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3596 3652
3597 // Create a delegate which we expect to be called. 3653 // Create a delegate which we expect to be called.
3598 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); 3654 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
3599 EXPECT_CALL(*delegate, OnAckNotification()).Times(1); 3655 EXPECT_CALL(*delegate, OnAckNotification()).Times(1);
3600 3656
3601 // In total expect ACKs for all 4 packets.
3602 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)).Times(2);
3603 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(4);
3604
3605 // Send four packets, and register to be notified on ACK of packet 2. 3657 // Send four packets, and register to be notified on ACK of packet 2.
3606 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 3658 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
3607 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get()); 3659 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, delegate.get());
3608 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL); 3660 connection_.SendStreamDataWithString(3, "baz", 0, !kFin, NULL);
3609 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL); 3661 connection_.SendStreamDataWithString(3, "qux", 0, !kFin, NULL);
3610 3662
3611 // Now we receive ACK for packets 1, 3, and 4, which invokes fast retransmit. 3663 // Now we receive ACK for packets 1, 3, and 4 and lose 2.
3612 QuicAckFrame frame = InitAckFrame(4, 0); 3664 QuicAckFrame frame = InitAckFrame(4, 0);
3613 NackPacket(2, &frame); 3665 NackPacket(2, &frame);
3666 SequenceNumberSet lost_packets;
3667 lost_packets.insert(2);
3668 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3669 .WillOnce(Return(lost_packets));
3670 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3671 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
3614 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 3672 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
3615 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 3673 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
3616 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3617 ProcessAckPacket(&frame); 3675 ProcessAckPacket(&frame);
3618 3676
3619 // Now we get an ACK for packet 5 (retransmitted packet 2), which should 3677 // Now we get an ACK for packet 5 (retransmitted packet 2), which should
3620 // trigger the callback. 3678 // trigger the callback.
3679 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _, _))
3680 .WillRepeatedly(Return(SequenceNumberSet()));
3681 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
3682 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _));
3621 QuicAckFrame second_ack_frame = InitAckFrame(5, 0); 3683 QuicAckFrame second_ack_frame = InitAckFrame(5, 0);
3622 ProcessAckPacket(&second_ack_frame); 3684 ProcessAckPacket(&second_ack_frame);
3623 } 3685 }
3624 3686
3625 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting 3687 // TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting
3626 // ACK) triggers notification on our end. 3688 // ACK) triggers notification on our end.
3627 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) { 3689 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
3628 if (version() < QUIC_VERSION_15) { 3690 if (version() < QUIC_VERSION_15) {
3629 return; 3691 return;
3630 } 3692 }
(...skipping 15 matching lines...) Expand all
3646 // Should recover the Ack packet and trigger the notification callback. 3708 // Should recover the Ack packet and trigger the notification callback.
3647 QuicFrames frames; 3709 QuicFrames frames;
3648 3710
3649 QuicAckFrame ack_frame = InitAckFrame(1, 0); 3711 QuicAckFrame ack_frame = InitAckFrame(1, 0);
3650 frames.push_back(QuicFrame(&ack_frame)); 3712 frames.push_back(QuicFrame(&ack_frame));
3651 3713
3652 // Dummy stream frame to satisfy expectations set elsewhere. 3714 // Dummy stream frame to satisfy expectations set elsewhere.
3653 frames.push_back(QuicFrame(&frame1_)); 3715 frames.push_back(QuicFrame(&frame1_));
3654 3716
3655 QuicPacketHeader ack_header; 3717 QuicPacketHeader ack_header;
3656 ack_header.public_header.guid = guid_; 3718 ack_header.public_header.connection_id = connection_id_;
3657 ack_header.public_header.reset_flag = false; 3719 ack_header.public_header.reset_flag = false;
3658 ack_header.public_header.version_flag = false; 3720 ack_header.public_header.version_flag = false;
3659 ack_header.entropy_flag = !kEntropyFlag; 3721 ack_header.entropy_flag = !kEntropyFlag;
3660 ack_header.fec_flag = true; 3722 ack_header.fec_flag = true;
3661 ack_header.packet_sequence_number = 1; 3723 ack_header.packet_sequence_number = 1;
3662 ack_header.is_in_fec_group = IN_FEC_GROUP; 3724 ack_header.is_in_fec_group = IN_FEC_GROUP;
3663 ack_header.fec_group = 1; 3725 ack_header.fec_group = 1;
3664 3726
3665 QuicPacket* packet = 3727 QuicPacket* packet =
3666 framer_.BuildUnsizedDataPacket(ack_header, frames).packet; 3728 framer_.BuildUnsizedDataPacket(ack_header, frames).packet;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
3731 scoped_ptr<MockQuicConnectionDebugVisitor> 3793 scoped_ptr<MockQuicConnectionDebugVisitor>
3732 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>); 3794 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>);
3733 connection_.set_debug_visitor(debug_visitor.get()); 3795 connection_.set_debug_visitor(debug_visitor.get());
3734 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); 3796 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1);
3735 connection_.OnPacketHeader(header); 3797 connection_.OnPacketHeader(header);
3736 } 3798 }
3737 3799
3738 TEST_P(QuicConnectionTest, Pacing) { 3800 TEST_P(QuicConnectionTest, Pacing) {
3739 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true); 3801 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true);
3740 3802
3741 TestConnection server(guid_, IPEndPoint(), helper_.get(), writer_.get(), 3803 TestConnection server(connection_id_, IPEndPoint(), helper_.get(),
3742 true, version()); 3804 writer_.get(), true, version());
3743 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(), 3805 TestConnection client(connection_id_, IPEndPoint(), helper_.get(),
3744 false, version()); 3806 writer_.get(), false, version());
3745 EXPECT_TRUE(client.sent_packet_manager().using_pacing()); 3807 EXPECT_TRUE(client.sent_packet_manager().using_pacing());
3746 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); 3808 EXPECT_FALSE(server.sent_packet_manager().using_pacing());
3747 } 3809 }
3748 3810
3749 TEST_P(QuicConnectionTest, ControlFramesInstigateAcks) { 3811 TEST_P(QuicConnectionTest, ControlFramesInstigateAcks) {
3750 if (version() < QUIC_VERSION_14) { 3812 if (version() < QUIC_VERSION_14) {
3751 return; 3813 return;
3752 } 3814 }
3753 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3815 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3754 3816
(...skipping 13 matching lines...) Expand all
3768 QuicBlockedFrame blocked; 3830 QuicBlockedFrame blocked;
3769 blocked.stream_id = 3; 3831 blocked.stream_id = 3;
3770 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 3832 EXPECT_CALL(visitor_, OnBlockedFrames(_));
3771 ProcessFramePacket(QuicFrame(&blocked)); 3833 ProcessFramePacket(QuicFrame(&blocked));
3772 EXPECT_TRUE(ack_alarm->IsSet()); 3834 EXPECT_TRUE(ack_alarm->IsSet());
3773 } 3835 }
3774 3836
3775 } // namespace 3837 } // namespace
3776 } // namespace test 3838 } // namespace test
3777 } // namespace net 3839 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_stats.cc ('k') | net/quic/quic_crypto_client_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698