OLD | NEW |
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 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 uint32 final_bytes_of_last_packet_; | 392 uint32 final_bytes_of_last_packet_; |
393 uint32 final_bytes_of_previous_packet_; | 393 uint32 final_bytes_of_previous_packet_; |
394 bool use_tagging_decrypter_; | 394 bool use_tagging_decrypter_; |
395 uint32 packets_write_attempts_; | 395 uint32 packets_write_attempts_; |
396 | 396 |
397 DISALLOW_COPY_AND_ASSIGN(TestPacketWriter); | 397 DISALLOW_COPY_AND_ASSIGN(TestPacketWriter); |
398 }; | 398 }; |
399 | 399 |
400 class TestConnection : public QuicConnection { | 400 class TestConnection : public QuicConnection { |
401 public: | 401 public: |
402 TestConnection(QuicGuid guid, | 402 TestConnection(QuicConnectionId connection_id, |
403 IPEndPoint address, | 403 IPEndPoint address, |
404 TestConnectionHelper* helper, | 404 TestConnectionHelper* helper, |
405 TestPacketWriter* writer, | 405 TestPacketWriter* writer, |
406 bool is_server, | 406 bool is_server, |
407 QuicVersion version) | 407 QuicVersion version) |
408 : QuicConnection(guid, address, helper, writer, is_server, | 408 : QuicConnection(connection_id, address, helper, writer, is_server, |
409 SupportedVersions(version)), | 409 SupportedVersions(version)), |
410 helper_(helper), | 410 helper_(helper), |
411 writer_(writer) { | 411 writer_(writer) { |
412 // Disable tail loss probes for most tests. | 412 // Disable tail loss probes for most tests. |
413 QuicSentPacketManagerPeer::SetMaxTailLossProbes( | 413 QuicSentPacketManagerPeer::SetMaxTailLossProbes( |
414 QuicConnectionPeer::GetSentPacketManager(this), 0); | 414 QuicConnectionPeer::GetSentPacketManager(this), 0); |
415 writer_->set_is_server(is_server); | 415 writer_->set_is_server(is_server); |
416 } | 416 } |
417 | 417 |
418 void SendAck() { | 418 void SendAck() { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 private: | 534 private: |
535 TestConnectionHelper* helper_; | 535 TestConnectionHelper* helper_; |
536 TestPacketWriter* writer_; | 536 TestPacketWriter* writer_; |
537 | 537 |
538 DISALLOW_COPY_AND_ASSIGN(TestConnection); | 538 DISALLOW_COPY_AND_ASSIGN(TestConnection); |
539 }; | 539 }; |
540 | 540 |
541 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { | 541 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { |
542 protected: | 542 protected: |
543 QuicConnectionTest() | 543 QuicConnectionTest() |
544 : guid_(42), | 544 : connection_id_(42), |
545 framer_(SupportedVersions(version()), QuicTime::Zero(), false), | 545 framer_(SupportedVersions(version()), QuicTime::Zero(), false), |
546 creator_(guid_, &framer_, &random_generator_, false), | 546 creator_(connection_id_, &framer_, &random_generator_, false), |
547 send_algorithm_(new StrictMock<MockSendAlgorithm>), | 547 send_algorithm_(new StrictMock<MockSendAlgorithm>), |
548 loss_algorithm_(new MockLossAlgorithm()), | 548 loss_algorithm_(new MockLossAlgorithm()), |
549 helper_(new TestConnectionHelper(&clock_, &random_generator_)), | 549 helper_(new TestConnectionHelper(&clock_, &random_generator_)), |
550 writer_(new TestPacketWriter(version())), | 550 writer_(new TestPacketWriter(version())), |
551 connection_(guid_, IPEndPoint(), helper_.get(), writer_.get(), | 551 connection_(connection_id_, IPEndPoint(), helper_.get(), |
552 false, version()), | 552 writer_.get(), false, version()), |
553 frame1_(1, false, 0, MakeIOVector(data1)), | 553 frame1_(1, false, 0, MakeIOVector(data1)), |
554 frame2_(1, false, 3, MakeIOVector(data2)), | 554 frame2_(1, false, 3, MakeIOVector(data2)), |
555 accept_packet_(true) { | 555 accept_packet_(true) { |
556 connection_.set_visitor(&visitor_); | 556 connection_.set_visitor(&visitor_); |
557 connection_.SetSendAlgorithm(send_algorithm_); | 557 connection_.SetSendAlgorithm(send_algorithm_); |
558 connection_.SetLossAlgorithm(loss_algorithm_); | 558 connection_.SetLossAlgorithm(loss_algorithm_); |
559 framer_.set_received_entropy_calculator(&entropy_calculator_); | 559 framer_.set_received_entropy_calculator(&entropy_calculator_); |
560 // Simplify tests by not sending feedback unless specifically configured. | 560 // Simplify tests by not sending feedback unless specifically configured. |
561 SetFeedback(NULL); | 561 SetFeedback(NULL); |
562 EXPECT_CALL( | 562 EXPECT_CALL( |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 // Construct the decrypted data packet so we can compute the correct | 714 // Construct the decrypted data packet so we can compute the correct |
715 // redundancy. If |packet| has been provided then use that, otherwise | 715 // redundancy. If |packet| has been provided then use that, otherwise |
716 // construct a default data packet. | 716 // construct a default data packet. |
717 scoped_ptr<QuicPacket> data_packet; | 717 scoped_ptr<QuicPacket> data_packet; |
718 if (packet) { | 718 if (packet) { |
719 data_packet.reset(packet); | 719 data_packet.reset(packet); |
720 } else { | 720 } else { |
721 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag)); | 721 data_packet.reset(ConstructDataPacket(number, 1, !kEntropyFlag)); |
722 } | 722 } |
723 | 723 |
724 header_.public_header.guid = guid_; | 724 header_.public_header.connection_id = connection_id_; |
725 header_.public_header.reset_flag = false; | 725 header_.public_header.reset_flag = false; |
726 header_.public_header.version_flag = false; | 726 header_.public_header.version_flag = false; |
727 header_.entropy_flag = entropy_flag; | 727 header_.entropy_flag = entropy_flag; |
728 header_.fec_flag = true; | 728 header_.fec_flag = true; |
729 header_.packet_sequence_number = number; | 729 header_.packet_sequence_number = number; |
730 header_.is_in_fec_group = IN_FEC_GROUP; | 730 header_.is_in_fec_group = IN_FEC_GROUP; |
731 header_.fec_group = min_protected_packet; | 731 header_.fec_group = min_protected_packet; |
732 QuicFecData fec_data; | 732 QuicFecData fec_data; |
733 fec_data.fec_group = header_.fec_group; | 733 fec_data.fec_group = header_.fec_group; |
734 | 734 |
735 // 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 |
736 // 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 |
737 // with itself, depending on the number of packets. | 737 // with itself, depending on the number of packets. |
738 if (((number - min_protected_packet) % 2) == 0) { | 738 if (((number - min_protected_packet) % 2) == 0) { |
739 for (size_t i = GetStartOfFecProtectedData( | 739 for (size_t i = GetStartOfFecProtectedData( |
740 header_.public_header.guid_length, | 740 header_.public_header.connection_id_length, |
741 header_.public_header.version_flag, | 741 header_.public_header.version_flag, |
742 header_.public_header.sequence_number_length); | 742 header_.public_header.sequence_number_length); |
743 i < data_packet->length(); ++i) { | 743 i < data_packet->length(); ++i) { |
744 data_packet->mutable_data()[i] ^= data_packet->data()[i]; | 744 data_packet->mutable_data()[i] ^= data_packet->data()[i]; |
745 } | 745 } |
746 } | 746 } |
747 fec_data.redundancy = data_packet->FecProtectedData(); | 747 fec_data.redundancy = data_packet->FecProtectedData(); |
748 | 748 |
749 scoped_ptr<QuicPacket> fec_packet( | 749 scoped_ptr<QuicPacket> fec_packet( |
750 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 Loading... |
792 return ProcessFramePacket(QuicFrame(frame)); | 792 return ProcessFramePacket(QuicFrame(frame)); |
793 } | 793 } |
794 | 794 |
795 bool IsMissing(QuicPacketSequenceNumber number) { | 795 bool IsMissing(QuicPacketSequenceNumber number) { |
796 return IsAwaitingPacket(outgoing_ack()->received_info, number); | 796 return IsAwaitingPacket(outgoing_ack()->received_info, number); |
797 } | 797 } |
798 | 798 |
799 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, | 799 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, |
800 QuicFecGroupNumber fec_group, | 800 QuicFecGroupNumber fec_group, |
801 bool entropy_flag) { | 801 bool entropy_flag) { |
802 header_.public_header.guid = guid_; | 802 header_.public_header.connection_id = connection_id_; |
803 header_.public_header.reset_flag = false; | 803 header_.public_header.reset_flag = false; |
804 header_.public_header.version_flag = false; | 804 header_.public_header.version_flag = false; |
805 header_.entropy_flag = entropy_flag; | 805 header_.entropy_flag = entropy_flag; |
806 header_.fec_flag = false; | 806 header_.fec_flag = false; |
807 header_.packet_sequence_number = number; | 807 header_.packet_sequence_number = number; |
808 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; |
809 header_.fec_group = fec_group; | 809 header_.fec_group = fec_group; |
810 | 810 |
811 QuicFrames frames; | 811 QuicFrames frames; |
812 QuicFrame frame(&frame1_); | 812 QuicFrame frame(&frame1_); |
813 frames.push_back(frame); | 813 frames.push_back(frame); |
814 QuicPacket* packet = | 814 QuicPacket* packet = |
815 framer_.BuildUnsizedDataPacket(header_, frames).packet; | 815 framer_.BuildUnsizedDataPacket(header_, frames).packet; |
816 EXPECT_TRUE(packet != NULL); | 816 EXPECT_TRUE(packet != NULL); |
817 return packet; | 817 return packet; |
818 } | 818 } |
819 | 819 |
820 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, | 820 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, |
821 QuicFecGroupNumber fec_group) { | 821 QuicFecGroupNumber fec_group) { |
822 header_.public_header.guid = guid_; | 822 header_.public_header.connection_id = connection_id_; |
823 header_.packet_sequence_number = number; | 823 header_.packet_sequence_number = number; |
824 header_.public_header.reset_flag = false; | 824 header_.public_header.reset_flag = false; |
825 header_.public_header.version_flag = false; | 825 header_.public_header.version_flag = false; |
826 header_.entropy_flag = false; | 826 header_.entropy_flag = false; |
827 header_.fec_flag = false; | 827 header_.fec_flag = false; |
828 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; |
829 header_.fec_group = fec_group; | 829 header_.fec_group = fec_group; |
830 | 830 |
831 QuicConnectionCloseFrame qccf; | 831 QuicConnectionCloseFrame qccf; |
832 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 Loading... |
902 ProcessDataPacket(6000, 0, !kEntropyFlag); | 902 ProcessDataPacket(6000, 0, !kEntropyFlag); |
903 EXPECT_FALSE( | 903 EXPECT_FALSE( |
904 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL); | 904 QuicConnectionPeer::GetConnectionClosePacket(&connection_) == NULL); |
905 } | 905 } |
906 | 906 |
907 void BlockOnNextWrite() { | 907 void BlockOnNextWrite() { |
908 writer_->BlockOnNextWrite(); | 908 writer_->BlockOnNextWrite(); |
909 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1)); | 909 EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1)); |
910 } | 910 } |
911 | 911 |
912 QuicGuid guid_; | 912 QuicConnectionId connection_id_; |
913 QuicFramer framer_; | 913 QuicFramer framer_; |
914 QuicPacketCreator creator_; | 914 QuicPacketCreator creator_; |
915 MockEntropyCalculator entropy_calculator_; | 915 MockEntropyCalculator entropy_calculator_; |
916 | 916 |
917 MockSendAlgorithm* send_algorithm_; | 917 MockSendAlgorithm* send_algorithm_; |
918 MockLossAlgorithm* loss_algorithm_; | 918 MockLossAlgorithm* loss_algorithm_; |
919 TestReceiveAlgorithm* receive_algorithm_; | 919 TestReceiveAlgorithm* receive_algorithm_; |
920 MockClock clock_; | 920 MockClock clock_; |
921 MockRandom random_generator_; | 921 MockRandom random_generator_; |
922 scoped_ptr<TestConnectionHelper> helper_; | 922 scoped_ptr<TestConnectionHelper> helper_; |
(...skipping 2060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2983 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false); | 2983 connection_.CloseConnection(QUIC_PEER_GOING_AWAY, false); |
2984 EXPECT_FALSE(connection_.connected()); | 2984 EXPECT_FALSE(connection_.connected()); |
2985 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); | 2985 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); |
2986 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)).Times(0); | 2986 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)).Times(0); |
2987 connection_.SendPacket( | 2987 connection_.SendPacket( |
2988 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA); | 2988 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA); |
2989 } | 2989 } |
2990 | 2990 |
2991 TEST_P(QuicConnectionTest, PublicReset) { | 2991 TEST_P(QuicConnectionTest, PublicReset) { |
2992 QuicPublicResetPacket header; | 2992 QuicPublicResetPacket header; |
2993 header.public_header.guid = guid_; | 2993 header.public_header.connection_id = connection_id_; |
2994 header.public_header.reset_flag = true; | 2994 header.public_header.reset_flag = true; |
2995 header.public_header.version_flag = false; | 2995 header.public_header.version_flag = false; |
2996 header.rejected_sequence_number = 10101; | 2996 header.rejected_sequence_number = 10101; |
2997 scoped_ptr<QuicEncryptedPacket> packet( | 2997 scoped_ptr<QuicEncryptedPacket> packet( |
2998 framer_.BuildPublicResetPacket(header)); | 2998 framer_.BuildPublicResetPacket(header)); |
2999 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)); | 2999 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)); |
3000 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *packet); | 3000 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *packet); |
3001 } | 3001 } |
3002 | 3002 |
3003 TEST_P(QuicConnectionTest, GoAway) { | 3003 TEST_P(QuicConnectionTest, GoAway) { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3193 EXPECT_TRUE(QuicConnectionPeer::IsValidEntropy( | 3193 EXPECT_TRUE(QuicConnectionPeer::IsValidEntropy( |
3194 &connection_, max_sequence_number, missing_packets, entropy_hash)) | 3194 &connection_, max_sequence_number, missing_packets, entropy_hash)) |
3195 << ""; | 3195 << ""; |
3196 } | 3196 } |
3197 | 3197 |
3198 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) { | 3198 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) { |
3199 connection_.SetSupportedVersions(QuicSupportedVersions()); | 3199 connection_.SetSupportedVersions(QuicSupportedVersions()); |
3200 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 3200 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
3201 | 3201 |
3202 QuicPacketHeader header; | 3202 QuicPacketHeader header; |
3203 header.public_header.guid = guid_; | 3203 header.public_header.connection_id = connection_id_; |
3204 header.public_header.reset_flag = false; | 3204 header.public_header.reset_flag = false; |
3205 header.public_header.version_flag = true; | 3205 header.public_header.version_flag = true; |
3206 header.entropy_flag = false; | 3206 header.entropy_flag = false; |
3207 header.fec_flag = false; | 3207 header.fec_flag = false; |
3208 header.packet_sequence_number = 12; | 3208 header.packet_sequence_number = 12; |
3209 header.fec_group = 0; | 3209 header.fec_group = 0; |
3210 | 3210 |
3211 QuicFrames frames; | 3211 QuicFrames frames; |
3212 QuicFrame frame(&frame1_); | 3212 QuicFrame frame(&frame1_); |
3213 frames.push_back(frame); | 3213 frames.push_back(frame); |
(...skipping 17 matching lines...) Expand all Loading... |
3231 EXPECT_EQ(kSupportedQuicVersions[i], | 3231 EXPECT_EQ(kSupportedQuicVersions[i], |
3232 writer_->version_negotiation_packet()->versions[i]); | 3232 writer_->version_negotiation_packet()->versions[i]); |
3233 } | 3233 } |
3234 } | 3234 } |
3235 | 3235 |
3236 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) { | 3236 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) { |
3237 connection_.SetSupportedVersions(QuicSupportedVersions()); | 3237 connection_.SetSupportedVersions(QuicSupportedVersions()); |
3238 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 3238 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
3239 | 3239 |
3240 QuicPacketHeader header; | 3240 QuicPacketHeader header; |
3241 header.public_header.guid = guid_; | 3241 header.public_header.connection_id = connection_id_; |
3242 header.public_header.reset_flag = false; | 3242 header.public_header.reset_flag = false; |
3243 header.public_header.version_flag = true; | 3243 header.public_header.version_flag = true; |
3244 header.entropy_flag = false; | 3244 header.entropy_flag = false; |
3245 header.fec_flag = false; | 3245 header.fec_flag = false; |
3246 header.packet_sequence_number = 12; | 3246 header.packet_sequence_number = 12; |
3247 header.fec_group = 0; | 3247 header.fec_group = 0; |
3248 | 3248 |
3249 QuicFrames frames; | 3249 QuicFrames frames; |
3250 QuicFrame frame(&frame1_); | 3250 QuicFrame frame(&frame1_); |
3251 frames.push_back(frame); | 3251 frames.push_back(frame); |
(...skipping 24 matching lines...) Expand all Loading... |
3276 writer_->version_negotiation_packet()->versions[i]); | 3276 writer_->version_negotiation_packet()->versions[i]); |
3277 } | 3277 } |
3278 } | 3278 } |
3279 | 3279 |
3280 TEST_P(QuicConnectionTest, | 3280 TEST_P(QuicConnectionTest, |
3281 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) { | 3281 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) { |
3282 connection_.SetSupportedVersions(QuicSupportedVersions()); | 3282 connection_.SetSupportedVersions(QuicSupportedVersions()); |
3283 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 3283 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
3284 | 3284 |
3285 QuicPacketHeader header; | 3285 QuicPacketHeader header; |
3286 header.public_header.guid = guid_; | 3286 header.public_header.connection_id = connection_id_; |
3287 header.public_header.reset_flag = false; | 3287 header.public_header.reset_flag = false; |
3288 header.public_header.version_flag = true; | 3288 header.public_header.version_flag = true; |
3289 header.entropy_flag = false; | 3289 header.entropy_flag = false; |
3290 header.fec_flag = false; | 3290 header.fec_flag = false; |
3291 header.packet_sequence_number = 12; | 3291 header.packet_sequence_number = 12; |
3292 header.fec_group = 0; | 3292 header.fec_group = 0; |
3293 | 3293 |
3294 QuicFrames frames; | 3294 QuicFrames frames; |
3295 QuicFrame frame(&frame1_); | 3295 QuicFrame frame(&frame1_); |
3296 frames.push_back(frame); | 3296 frames.push_back(frame); |
(...skipping 10 matching lines...) Expand all Loading... |
3307 EXPECT_EQ(0u, writer_->last_packet_size()); | 3307 EXPECT_EQ(0u, writer_->last_packet_size()); |
3308 EXPECT_FALSE(connection_.HasQueuedData()); | 3308 EXPECT_FALSE(connection_.HasQueuedData()); |
3309 } | 3309 } |
3310 | 3310 |
3311 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { | 3311 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { |
3312 // Start out with some unsupported version. | 3312 // Start out with some unsupported version. |
3313 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests( | 3313 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests( |
3314 QUIC_VERSION_UNSUPPORTED); | 3314 QUIC_VERSION_UNSUPPORTED); |
3315 | 3315 |
3316 QuicPacketHeader header; | 3316 QuicPacketHeader header; |
3317 header.public_header.guid = guid_; | 3317 header.public_header.connection_id = connection_id_; |
3318 header.public_header.reset_flag = false; | 3318 header.public_header.reset_flag = false; |
3319 header.public_header.version_flag = true; | 3319 header.public_header.version_flag = true; |
3320 header.entropy_flag = false; | 3320 header.entropy_flag = false; |
3321 header.fec_flag = false; | 3321 header.fec_flag = false; |
3322 header.packet_sequence_number = 12; | 3322 header.packet_sequence_number = 12; |
3323 header.fec_group = 0; | 3323 header.fec_group = 0; |
3324 | 3324 |
3325 QuicVersionVector supported_versions; | 3325 QuicVersionVector supported_versions; |
3326 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 3326 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
3327 supported_versions.push_back(kSupportedQuicVersions[i]); | 3327 supported_versions.push_back(kSupportedQuicVersions[i]); |
(...skipping 17 matching lines...) Expand all Loading... |
3345 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); | 3345 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); |
3346 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3346 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3347 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3347 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3348 | 3348 |
3349 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket( | 3349 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket( |
3350 QuicConnectionPeer::GetPacketCreator(&connection_))); | 3350 QuicConnectionPeer::GetPacketCreator(&connection_))); |
3351 } | 3351 } |
3352 | 3352 |
3353 TEST_P(QuicConnectionTest, BadVersionNegotiation) { | 3353 TEST_P(QuicConnectionTest, BadVersionNegotiation) { |
3354 QuicPacketHeader header; | 3354 QuicPacketHeader header; |
3355 header.public_header.guid = guid_; | 3355 header.public_header.connection_id = connection_id_; |
3356 header.public_header.reset_flag = false; | 3356 header.public_header.reset_flag = false; |
3357 header.public_header.version_flag = true; | 3357 header.public_header.version_flag = true; |
3358 header.entropy_flag = false; | 3358 header.entropy_flag = false; |
3359 header.fec_flag = false; | 3359 header.fec_flag = false; |
3360 header.packet_sequence_number = 12; | 3360 header.packet_sequence_number = 12; |
3361 header.fec_group = 0; | 3361 header.fec_group = 0; |
3362 | 3362 |
3363 QuicVersionVector supported_versions; | 3363 QuicVersionVector supported_versions; |
3364 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 3364 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
3365 supported_versions.push_back(kSupportedQuicVersions[i]); | 3365 supported_versions.push_back(kSupportedQuicVersions[i]); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3473 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 2) == NULL); | 3473 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 2) == NULL); |
3474 | 3474 |
3475 // 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. |
3476 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 5) != NULL); | 3476 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 5) != NULL); |
3477 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 4) != NULL); | 3477 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 4) != NULL); |
3478 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 3) == NULL); | 3478 ASSERT_TRUE(QuicConnectionPeer::GetFecGroup(&connection_, 3) == NULL); |
3479 } | 3479 } |
3480 | 3480 |
3481 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) { | 3481 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) { |
3482 // Construct a packet with stream frame and connection close frame. | 3482 // Construct a packet with stream frame and connection close frame. |
3483 header_.public_header.guid = guid_; | 3483 header_.public_header.connection_id = connection_id_; |
3484 header_.packet_sequence_number = 1; | 3484 header_.packet_sequence_number = 1; |
3485 header_.public_header.reset_flag = false; | 3485 header_.public_header.reset_flag = false; |
3486 header_.public_header.version_flag = false; | 3486 header_.public_header.version_flag = false; |
3487 header_.entropy_flag = false; | 3487 header_.entropy_flag = false; |
3488 header_.fec_flag = false; | 3488 header_.fec_flag = false; |
3489 header_.fec_group = 0; | 3489 header_.fec_group = 0; |
3490 | 3490 |
3491 QuicConnectionCloseFrame qccf; | 3491 QuicConnectionCloseFrame qccf; |
3492 qccf.error_code = QUIC_PEER_GOING_AWAY; | 3492 qccf.error_code = QUIC_PEER_GOING_AWAY; |
3493 QuicFrame close_frame(&qccf); | 3493 QuicFrame close_frame(&qccf); |
(...skipping 11 matching lines...) Expand all Loading... |
3505 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); | 3505 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); |
3506 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(true)); | 3506 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(true)); |
3507 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3507 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3508 | 3508 |
3509 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3509 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3510 } | 3510 } |
3511 | 3511 |
3512 TEST_P(QuicConnectionTest, DontProcessStreamFrameAndIgnoreCloseFrame) { | 3512 TEST_P(QuicConnectionTest, DontProcessStreamFrameAndIgnoreCloseFrame) { |
3513 // Construct a packet with stream frame, ack frame, | 3513 // Construct a packet with stream frame, ack frame, |
3514 // and connection close frame. | 3514 // and connection close frame. |
3515 header_.public_header.guid = guid_; | 3515 header_.public_header.connection_id = connection_id_; |
3516 header_.packet_sequence_number = 1; | 3516 header_.packet_sequence_number = 1; |
3517 header_.public_header.reset_flag = false; | 3517 header_.public_header.reset_flag = false; |
3518 header_.public_header.version_flag = false; | 3518 header_.public_header.version_flag = false; |
3519 header_.entropy_flag = false; | 3519 header_.entropy_flag = false; |
3520 header_.fec_flag = false; | 3520 header_.fec_flag = false; |
3521 header_.fec_group = 0; | 3521 header_.fec_group = 0; |
3522 | 3522 |
3523 QuicConnectionCloseFrame qccf; | 3523 QuicConnectionCloseFrame qccf; |
3524 qccf.error_code = QUIC_PEER_GOING_AWAY; | 3524 qccf.error_code = QUIC_PEER_GOING_AWAY; |
3525 QuicFrame close_frame(&qccf); | 3525 QuicFrame close_frame(&qccf); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3708 // Should recover the Ack packet and trigger the notification callback. | 3708 // Should recover the Ack packet and trigger the notification callback. |
3709 QuicFrames frames; | 3709 QuicFrames frames; |
3710 | 3710 |
3711 QuicAckFrame ack_frame = InitAckFrame(1, 0); | 3711 QuicAckFrame ack_frame = InitAckFrame(1, 0); |
3712 frames.push_back(QuicFrame(&ack_frame)); | 3712 frames.push_back(QuicFrame(&ack_frame)); |
3713 | 3713 |
3714 // Dummy stream frame to satisfy expectations set elsewhere. | 3714 // Dummy stream frame to satisfy expectations set elsewhere. |
3715 frames.push_back(QuicFrame(&frame1_)); | 3715 frames.push_back(QuicFrame(&frame1_)); |
3716 | 3716 |
3717 QuicPacketHeader ack_header; | 3717 QuicPacketHeader ack_header; |
3718 ack_header.public_header.guid = guid_; | 3718 ack_header.public_header.connection_id = connection_id_; |
3719 ack_header.public_header.reset_flag = false; | 3719 ack_header.public_header.reset_flag = false; |
3720 ack_header.public_header.version_flag = false; | 3720 ack_header.public_header.version_flag = false; |
3721 ack_header.entropy_flag = !kEntropyFlag; | 3721 ack_header.entropy_flag = !kEntropyFlag; |
3722 ack_header.fec_flag = true; | 3722 ack_header.fec_flag = true; |
3723 ack_header.packet_sequence_number = 1; | 3723 ack_header.packet_sequence_number = 1; |
3724 ack_header.is_in_fec_group = IN_FEC_GROUP; | 3724 ack_header.is_in_fec_group = IN_FEC_GROUP; |
3725 ack_header.fec_group = 1; | 3725 ack_header.fec_group = 1; |
3726 | 3726 |
3727 QuicPacket* packet = | 3727 QuicPacket* packet = |
3728 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 Loading... |
3793 scoped_ptr<MockQuicConnectionDebugVisitor> | 3793 scoped_ptr<MockQuicConnectionDebugVisitor> |
3794 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>); | 3794 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>); |
3795 connection_.set_debug_visitor(debug_visitor.get()); | 3795 connection_.set_debug_visitor(debug_visitor.get()); |
3796 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); | 3796 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); |
3797 connection_.OnPacketHeader(header); | 3797 connection_.OnPacketHeader(header); |
3798 } | 3798 } |
3799 | 3799 |
3800 TEST_P(QuicConnectionTest, Pacing) { | 3800 TEST_P(QuicConnectionTest, Pacing) { |
3801 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true); | 3801 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true); |
3802 | 3802 |
3803 TestConnection server(guid_, IPEndPoint(), helper_.get(), writer_.get(), | 3803 TestConnection server(connection_id_, IPEndPoint(), helper_.get(), |
3804 true, version()); | 3804 writer_.get(), true, version()); |
3805 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(), | 3805 TestConnection client(connection_id_, IPEndPoint(), helper_.get(), |
3806 false, version()); | 3806 writer_.get(), false, version()); |
3807 EXPECT_TRUE(client.sent_packet_manager().using_pacing()); | 3807 EXPECT_TRUE(client.sent_packet_manager().using_pacing()); |
3808 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); | 3808 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); |
3809 } | 3809 } |
3810 | 3810 |
3811 TEST_P(QuicConnectionTest, ControlFramesInstigateAcks) { | 3811 TEST_P(QuicConnectionTest, ControlFramesInstigateAcks) { |
3812 if (version() < QUIC_VERSION_14) { | 3812 if (version() < QUIC_VERSION_14) { |
3813 return; | 3813 return; |
3814 } | 3814 } |
3815 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3815 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3816 | 3816 |
(...skipping 13 matching lines...) Expand all Loading... |
3830 QuicBlockedFrame blocked; | 3830 QuicBlockedFrame blocked; |
3831 blocked.stream_id = 3; | 3831 blocked.stream_id = 3; |
3832 EXPECT_CALL(visitor_, OnBlockedFrames(_)); | 3832 EXPECT_CALL(visitor_, OnBlockedFrames(_)); |
3833 ProcessFramePacket(QuicFrame(&blocked)); | 3833 ProcessFramePacket(QuicFrame(&blocked)); |
3834 EXPECT_TRUE(ack_alarm->IsSet()); | 3834 EXPECT_TRUE(ack_alarm->IsSet()); |
3835 } | 3835 } |
3836 | 3836 |
3837 } // namespace | 3837 } // namespace |
3838 } // namespace test | 3838 } // namespace test |
3839 } // namespace net | 3839 } // namespace net |
OLD | NEW |