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

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

Issue 47283002: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compilation error Created 7 years, 1 month 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_helper_test.cc ('k') | net/quic/quic_crypto_client_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 const IPEndPoint& peer_address, 289 const IPEndPoint& peer_address,
290 QuicBlockedWriterInterface* blocked_writer) OVERRIDE { 290 QuicBlockedWriterInterface* blocked_writer) OVERRIDE {
291 QuicEncryptedPacket packet(buffer, buf_len); 291 QuicEncryptedPacket packet(buffer, buf_len);
292 ++packets_write_attempts_; 292 ++packets_write_attempts_;
293 293
294 if (packet.length() >= sizeof(final_bytes_of_last_packet_)) { 294 if (packet.length() >= sizeof(final_bytes_of_last_packet_)) {
295 memcpy(&final_bytes_of_last_packet_, packet.data() + packet.length() - 4, 295 memcpy(&final_bytes_of_last_packet_, packet.data() + packet.length() - 4,
296 sizeof(final_bytes_of_last_packet_)); 296 sizeof(final_bytes_of_last_packet_));
297 } 297 }
298 298
299 QuicFramer framer(QuicVersionMax(), QuicTime::Zero(), !is_server_); 299 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), !is_server_);
300 if (use_tagging_decrypter_) { 300 if (use_tagging_decrypter_) {
301 framer.SetDecrypter(new TaggingDecrypter); 301 framer.SetDecrypter(new TaggingDecrypter);
302 } 302 }
303 FramerVisitorCapturingFrames visitor; 303 FramerVisitorCapturingFrames visitor;
304 framer.set_visitor(&visitor); 304 framer.set_visitor(&visitor);
305 EXPECT_TRUE(framer.ProcessPacket(packet)); 305 EXPECT_TRUE(framer.ProcessPacket(packet));
306 header_ = *visitor.header(); 306 header_ = *visitor.header();
307 frame_count_ = visitor.frame_count(); 307 frame_count_ = visitor.frame_count();
308 if (visitor.ack()) { 308 if (visitor.ack()) {
309 ack_.reset(new QuicAckFrame(*visitor.ack())); 309 ack_.reset(new QuicAckFrame(*visitor.ack()));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 }; 395 };
396 396
397 class TestConnection : public QuicConnection { 397 class TestConnection : public QuicConnection {
398 public: 398 public:
399 TestConnection(QuicGuid guid, 399 TestConnection(QuicGuid guid,
400 IPEndPoint address, 400 IPEndPoint address,
401 TestConnectionHelper* helper, 401 TestConnectionHelper* helper,
402 TestPacketWriter* writer, 402 TestPacketWriter* writer,
403 bool is_server) 403 bool is_server)
404 : QuicConnection(guid, address, helper, writer, is_server, 404 : QuicConnection(guid, address, helper, writer, is_server,
405 QuicVersionMax()), 405 QuicSupportedVersions()),
406 helper_(helper), 406 helper_(helper),
407 writer_(writer) { 407 writer_(writer) {
408 writer_->set_is_server(is_server); 408 writer_->set_is_server(is_server);
409 } 409 }
410 410
411 void SendAck() { 411 void SendAck() {
412 QuicConnectionPeer::SendAck(this); 412 QuicConnectionPeer::SendAck(this);
413 } 413 }
414 414
415 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) { 415 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 TestConnectionHelper* helper_; 526 TestConnectionHelper* helper_;
527 TestPacketWriter* writer_; 527 TestPacketWriter* writer_;
528 528
529 DISALLOW_COPY_AND_ASSIGN(TestConnection); 529 DISALLOW_COPY_AND_ASSIGN(TestConnection);
530 }; 530 };
531 531
532 class QuicConnectionTest : public ::testing::TestWithParam<bool> { 532 class QuicConnectionTest : public ::testing::TestWithParam<bool> {
533 protected: 533 protected:
534 QuicConnectionTest() 534 QuicConnectionTest()
535 : guid_(42), 535 : guid_(42),
536 framer_(QuicVersionMax(), QuicTime::Zero(), false), 536 framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
537 creator_(guid_, &framer_, QuicRandom::GetInstance(), false), 537 creator_(guid_, &framer_, QuicRandom::GetInstance(), false),
538 send_algorithm_(new StrictMock<MockSendAlgorithm>), 538 send_algorithm_(new StrictMock<MockSendAlgorithm>),
539 helper_(new TestConnectionHelper(&clock_, &random_generator_)), 539 helper_(new TestConnectionHelper(&clock_, &random_generator_)),
540 writer_(new TestPacketWriter()), 540 writer_(new TestPacketWriter()),
541 connection_(guid_, IPEndPoint(), helper_.get(), writer_.get(), false), 541 connection_(guid_, IPEndPoint(), helper_.get(), writer_.get(), false),
542 frame1_(1, false, 0, data1), 542 frame1_(1, false, 0, data1),
543 frame2_(1, false, 3, data2), 543 frame2_(1, false, 3, data2),
544 accept_packet_(true) { 544 accept_packet_(true) {
545 // TODO(rtenneti): remove g_* flags. 545 // TODO(rtenneti): remove g_* flags.
546 FLAGS_track_retransmission_history = true; 546 FLAGS_track_retransmission_history = true;
(...skipping 2290 matching lines...) Expand 10 before | Expand all | Expand 10 after
2837 framer_.BuildUnsizedDataPacket(header, frames).packet); 2837 framer_.BuildUnsizedDataPacket(header, frames).packet);
2838 scoped_ptr<QuicEncryptedPacket> encrypted( 2838 scoped_ptr<QuicEncryptedPacket> encrypted(
2839 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 2839 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
2840 2840
2841 framer_.set_version(QuicVersionMax()); 2841 framer_.set_version(QuicVersionMax());
2842 connection_.set_is_server(true); 2842 connection_.set_is_server(true);
2843 writer_->set_blocked(true); 2843 writer_->set_blocked(true);
2844 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 2844 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
2845 EXPECT_EQ(0u, writer_->last_packet_size()); 2845 EXPECT_EQ(0u, writer_->last_packet_size());
2846 EXPECT_TRUE(connection_.HasQueuedData()); 2846 EXPECT_TRUE(connection_.HasQueuedData());
2847 EXPECT_TRUE(QuicConnectionPeer::IsWriteBlocked(&connection_));
2847 2848
2848 writer_->set_blocked(false); 2849 writer_->set_blocked(false);
2849 connection_.OnCanWrite(); 2850 connection_.OnCanWrite();
2850 EXPECT_TRUE(writer_->version_negotiation_packet() != NULL); 2851 EXPECT_TRUE(writer_->version_negotiation_packet() != NULL);
2851 2852
2852 size_t num_versions = arraysize(kSupportedQuicVersions); 2853 size_t num_versions = arraysize(kSupportedQuicVersions);
2853 EXPECT_EQ(num_versions, 2854 EXPECT_EQ(num_versions,
2854 writer_->version_negotiation_packet()->versions.size()); 2855 writer_->version_negotiation_packet()->versions.size());
2855 2856
2856 // We expect all versions in kSupportedQuicVersions to be 2857 // We expect all versions in kSupportedQuicVersions to be
2857 // included in the packet. 2858 // included in the packet.
2858 for (size_t i = 0; i < num_versions; ++i) { 2859 for (size_t i = 0; i < num_versions; ++i) {
2859 EXPECT_EQ(kSupportedQuicVersions[i], 2860 EXPECT_EQ(kSupportedQuicVersions[i],
2860 writer_->version_negotiation_packet()->versions[i]); 2861 writer_->version_negotiation_packet()->versions[i]);
2861 } 2862 }
2862 } 2863 }
2863 2864
2865 TEST_P(QuicConnectionTest,
2866 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) {
2867 framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED);
2868
2869 QuicPacketHeader header;
2870 header.public_header.guid = guid_;
2871 header.public_header.reset_flag = false;
2872 header.public_header.version_flag = true;
2873 header.entropy_flag = false;
2874 header.fec_flag = false;
2875 header.packet_sequence_number = 12;
2876 header.fec_group = 0;
2877
2878 QuicFrames frames;
2879 QuicFrame frame(&frame1_);
2880 frames.push_back(frame);
2881 scoped_ptr<QuicPacket> packet(
2882 framer_.BuildUnsizedDataPacket(header, frames).packet);
2883 scoped_ptr<QuicEncryptedPacket> encrypted(
2884 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
2885
2886 framer_.set_version(QuicVersionMax());
2887 connection_.set_is_server(true);
2888 writer_->set_blocked(true);
2889 writer_->set_is_write_blocked_data_buffered(true);
2890 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
2891 EXPECT_EQ(0u, writer_->last_packet_size());
2892 EXPECT_FALSE(connection_.HasQueuedData());
2893 EXPECT_TRUE(QuicConnectionPeer::IsWriteBlocked(&connection_));
2894 }
2895
2864 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { 2896 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) {
2865 // Start out with some unsupported version. 2897 // Start out with some unsupported version.
2866 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests( 2898 QuicConnectionPeer::GetFramer(&connection_)->set_version_for_tests(
2867 QUIC_VERSION_UNSUPPORTED); 2899 QUIC_VERSION_UNSUPPORTED);
2868 2900
2869 QuicPacketHeader header; 2901 QuicPacketHeader header;
2870 header.public_header.guid = guid_; 2902 header.public_header.guid = guid_;
2871 header.public_header.reset_flag = false; 2903 header.public_header.reset_flag = false;
2872 header.public_header.version_flag = true; 2904 header.public_header.version_flag = true;
2873 header.entropy_flag = false; 2905 header.entropy_flag = false;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 3090
3059 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); 3091 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true));
3060 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(0); 3092 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(0);
3061 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3093 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3062 3094
3063 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3095 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3064 } 3096 }
3065 3097
3066 TEST_P(QuicConnectionTest, SelectMutualVersion) { 3098 TEST_P(QuicConnectionTest, SelectMutualVersion) {
3067 // Set the connection to speak the lowest quic version. 3099 // Set the connection to speak the lowest quic version.
3068 connection_.set_version(QuicVersionMin()); 3100 connection_.set_version(test::QuicVersionMin());
3069 EXPECT_EQ(QuicVersionMin(), connection_.version()); 3101 EXPECT_EQ(test::QuicVersionMin(), connection_.version());
3070 3102
3071 // Pass in available versions which includes a higher mutually supported 3103 // Pass in available versions which includes a higher mutually supported
3072 // version. The higher mutually supported version should be selected. 3104 // version. The higher mutually supported version should be selected.
3073 QuicVersionVector supported_versions; 3105 QuicVersionVector supported_versions;
3074 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { 3106 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
3075 supported_versions.push_back(kSupportedQuicVersions[i]); 3107 supported_versions.push_back(kSupportedQuicVersions[i]);
3076 } 3108 }
3077 EXPECT_TRUE(connection_.SelectMutualVersion(supported_versions)); 3109 EXPECT_TRUE(connection_.SelectMutualVersion(supported_versions));
3078 EXPECT_EQ(QuicVersionMax(), connection_.version()); 3110 EXPECT_EQ(QuicVersionMax(), connection_.version());
3079 3111
3080 // Expect that the lowest version is selected. 3112 // Expect that the lowest version is selected.
3081 // Ensure the lowest supported version is less than the max, unless they're 3113 // Ensure the lowest supported version is less than the max, unless they're
3082 // the same. 3114 // the same.
3083 EXPECT_LE(QuicVersionMin(), QuicVersionMax()); 3115 EXPECT_LE(test::QuicVersionMin(), QuicVersionMax());
3084 QuicVersionVector lowest_version_vector; 3116 QuicVersionVector lowest_version_vector;
3085 lowest_version_vector.push_back(QuicVersionMin()); 3117 lowest_version_vector.push_back(test::QuicVersionMin());
3086 EXPECT_TRUE(connection_.SelectMutualVersion(lowest_version_vector)); 3118 EXPECT_TRUE(connection_.SelectMutualVersion(lowest_version_vector));
3087 EXPECT_EQ(QuicVersionMin(), connection_.version()); 3119 EXPECT_EQ(test::QuicVersionMin(), connection_.version());
3088 3120
3089 // Shouldn't be able to find a mutually supported version. 3121 // Shouldn't be able to find a mutually supported version.
3090 QuicVersionVector unsupported_version; 3122 QuicVersionVector unsupported_version;
3091 unsupported_version.push_back(QUIC_VERSION_UNSUPPORTED); 3123 unsupported_version.push_back(QUIC_VERSION_UNSUPPORTED);
3092 EXPECT_FALSE(connection_.SelectMutualVersion(unsupported_version)); 3124 EXPECT_FALSE(connection_.SelectMutualVersion(unsupported_version));
3093 } 3125 }
3094 3126
3095 TEST_P(QuicConnectionTest, ConnectionCloseWhenNotWriteBlocked) { 3127 TEST_P(QuicConnectionTest, ConnectionCloseWhenNotWriteBlocked) {
3096 writer_->set_blocked(false); // Already default. 3128 writer_->set_blocked(false); // Already default.
3097 3129
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
3315 scoped_ptr<MockQuicConnectionDebugVisitor> 3347 scoped_ptr<MockQuicConnectionDebugVisitor>
3316 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>); 3348 debug_visitor(new StrictMock<MockQuicConnectionDebugVisitor>);
3317 connection_.set_debug_visitor(debug_visitor.get()); 3349 connection_.set_debug_visitor(debug_visitor.get());
3318 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1); 3350 EXPECT_CALL(*debug_visitor, OnPacketHeader(Ref(header))).Times(1);
3319 connection_.OnPacketHeader(header); 3351 connection_.OnPacketHeader(header);
3320 } 3352 }
3321 3353
3322 } // namespace 3354 } // namespace
3323 } // namespace test 3355 } // namespace test
3324 } // namespace net 3356 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_helper_test.cc ('k') | net/quic/quic_crypto_client_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698