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

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

Issue 2681793002: Landing Recent QUIC changes until 5:30 PM, Feb 3, 2017 UTC-5 (Closed)
Patch Set: sync and rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_connection.cc ('k') | net/quic/core/quic_crypto_client_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/core/quic_connection.h" 5 #include "net/quic/core/quic_connection.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <memory> 8 #include <memory>
9 #include <ostream> 9 #include <ostream>
10 #include <utility> 10 #include <utility>
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 explicit TaggingEncrypter(uint8_t tag) : tag_(tag) {} 83 explicit TaggingEncrypter(uint8_t tag) : tag_(tag) {}
84 84
85 ~TaggingEncrypter() override {} 85 ~TaggingEncrypter() override {}
86 86
87 // QuicEncrypter interface. 87 // QuicEncrypter interface.
88 bool SetKey(StringPiece key) override { return true; } 88 bool SetKey(StringPiece key) override { return true; }
89 89
90 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 90 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
91 91
92 bool EncryptPacket(QuicVersion /*version*/, 92 bool EncryptPacket(QuicVersion /*version*/,
93 QuicPathId path_id,
94 QuicPacketNumber packet_number, 93 QuicPacketNumber packet_number,
95 StringPiece associated_data, 94 StringPiece associated_data,
96 StringPiece plaintext, 95 StringPiece plaintext,
97 char* output, 96 char* output,
98 size_t* output_length, 97 size_t* output_length,
99 size_t max_output_length) override { 98 size_t max_output_length) override {
100 const size_t len = plaintext.size() + kTagSize; 99 const size_t len = plaintext.size() + kTagSize;
101 if (max_output_length < len) { 100 if (max_output_length < len) {
102 return false; 101 return false;
103 } 102 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 bool SetPreliminaryKey(StringPiece key) override { 147 bool SetPreliminaryKey(StringPiece key) override {
149 QUIC_BUG << "should not be called"; 148 QUIC_BUG << "should not be called";
150 return false; 149 return false;
151 } 150 }
152 151
153 bool SetDiversificationNonce(const DiversificationNonce& key) override { 152 bool SetDiversificationNonce(const DiversificationNonce& key) override {
154 return true; 153 return true;
155 } 154 }
156 155
157 bool DecryptPacket(QuicVersion /*version*/, 156 bool DecryptPacket(QuicVersion /*version*/,
158 QuicPathId path_id,
159 QuicPacketNumber packet_number, 157 QuicPacketNumber packet_number,
160 StringPiece associated_data, 158 StringPiece associated_data,
161 StringPiece ciphertext, 159 StringPiece ciphertext,
162 char* output, 160 char* output,
163 size_t* output_length, 161 size_t* output_length,
164 size_t max_output_length) override { 162 size_t max_output_length) override {
165 if (ciphertext.size() < kTagSize) { 163 if (ciphertext.size() < kTagSize) {
166 return false; 164 return false;
167 } 165 }
168 if (!CheckTag(ciphertext, GetTag(ciphertext))) { 166 if (!CheckTag(ciphertext, GetTag(ciphertext))) {
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 void SendPacket(EncryptionLevel level, 490 void SendPacket(EncryptionLevel level,
493 QuicPathId path_id, 491 QuicPathId path_id,
494 QuicPacketNumber packet_number, 492 QuicPacketNumber packet_number,
495 QuicPacket* packet, 493 QuicPacket* packet,
496 HasRetransmittableData retransmittable, 494 HasRetransmittableData retransmittable,
497 bool has_ack, 495 bool has_ack,
498 bool has_pending_frames) { 496 bool has_pending_frames) {
499 char buffer[kMaxPacketSize]; 497 char buffer[kMaxPacketSize];
500 size_t encrypted_length = 498 size_t encrypted_length =
501 QuicConnectionPeer::GetFramer(this)->EncryptPayload( 499 QuicConnectionPeer::GetFramer(this)->EncryptPayload(
502 ENCRYPTION_NONE, path_id, packet_number, *packet, buffer, 500 ENCRYPTION_NONE, packet_number, *packet, buffer, kMaxPacketSize);
503 kMaxPacketSize);
504 delete packet; 501 delete packet;
505 SerializedPacket serialized_packet( 502 SerializedPacket serialized_packet(
506 kDefaultPathId, packet_number, PACKET_6BYTE_PACKET_NUMBER, buffer, 503 kDefaultPathId, packet_number, PACKET_6BYTE_PACKET_NUMBER, buffer,
507 encrypted_length, has_ack, has_pending_frames); 504 encrypted_length, has_ack, has_pending_frames);
508 if (retransmittable == HAS_RETRANSMITTABLE_DATA) { 505 if (retransmittable == HAS_RETRANSMITTABLE_DATA) {
509 serialized_packet.retransmittable_frames.push_back( 506 serialized_packet.retransmittable_frames.push_back(
510 QuicFrame(new QuicStreamFrame())); 507 QuicFrame(new QuicStreamFrame()));
511 } 508 }
512 OnSerializedPacket(&serialized_packet); 509 OnSerializedPacket(&serialized_packet);
513 } 510 }
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 header.public_header.packet_number_length = packet_number_length_; 829 header.public_header.packet_number_length = packet_number_length_;
833 header.public_header.connection_id_length = connection_id_length_; 830 header.public_header.connection_id_length = connection_id_length_;
834 header.public_header.multipath_flag = path_id != kDefaultPathId; 831 header.public_header.multipath_flag = path_id != kDefaultPathId;
835 header.path_id = path_id; 832 header.path_id = path_id;
836 header.packet_number = number; 833 header.packet_number = number;
837 QuicFrames frames; 834 QuicFrames frames;
838 frames.push_back(frame); 835 frames.push_back(frame);
839 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 836 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
840 837
841 char buffer[kMaxPacketSize]; 838 char buffer[kMaxPacketSize];
842 size_t encrypted_length = framer_.EncryptPayload( 839 size_t encrypted_length =
843 level, path_id, number, *packet, buffer, kMaxPacketSize); 840 framer_.EncryptPayload(level, number, *packet, buffer, kMaxPacketSize);
844 connection_.ProcessUdpPacket( 841 connection_.ProcessUdpPacket(
845 kSelfAddress, kPeerAddress, 842 kSelfAddress, kPeerAddress,
846 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 843 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
847 return encrypted_length; 844 return encrypted_length;
848 } 845 }
849 846
850 size_t ProcessDataPacket(QuicPathId path_id, QuicPacketNumber number) { 847 size_t ProcessDataPacket(QuicPathId path_id, QuicPacketNumber number) {
851 return ProcessDataPacketAtLevel(path_id, number, false, ENCRYPTION_NONE); 848 return ProcessDataPacketAtLevel(path_id, number, false, ENCRYPTION_NONE);
852 } 849 }
853 850
854 size_t ProcessDataPacketAtLevel(QuicPathId path_id, 851 size_t ProcessDataPacketAtLevel(QuicPathId path_id,
855 QuicPacketNumber number, 852 QuicPacketNumber number,
856 bool has_stop_waiting, 853 bool has_stop_waiting,
857 EncryptionLevel level) { 854 EncryptionLevel level) {
858 std::unique_ptr<QuicPacket> packet( 855 std::unique_ptr<QuicPacket> packet(
859 ConstructDataPacket(path_id, number, has_stop_waiting)); 856 ConstructDataPacket(path_id, number, has_stop_waiting));
860 char buffer[kMaxPacketSize]; 857 char buffer[kMaxPacketSize];
861 size_t encrypted_length = peer_framer_.EncryptPayload( 858 size_t encrypted_length = peer_framer_.EncryptPayload(
862 level, path_id, number, *packet, buffer, kMaxPacketSize); 859 level, number, *packet, buffer, kMaxPacketSize);
863 connection_.ProcessUdpPacket( 860 connection_.ProcessUdpPacket(
864 kSelfAddress, kPeerAddress, 861 kSelfAddress, kPeerAddress,
865 QuicReceivedPacket(buffer, encrypted_length, clock_.Now(), false)); 862 QuicReceivedPacket(buffer, encrypted_length, clock_.Now(), false));
866 if (connection_.GetSendAlarm()->IsSet()) { 863 if (connection_.GetSendAlarm()->IsSet()) {
867 connection_.GetSendAlarm()->Fire(); 864 connection_.GetSendAlarm()->Fire();
868 } 865 }
869 return encrypted_length; 866 return encrypted_length;
870 } 867 }
871 868
872 void ProcessClosePacket(QuicPathId path_id, QuicPacketNumber number) { 869 void ProcessClosePacket(QuicPathId path_id, QuicPacketNumber number) {
873 std::unique_ptr<QuicPacket> packet(ConstructClosePacket(number)); 870 std::unique_ptr<QuicPacket> packet(ConstructClosePacket(number));
874 char buffer[kMaxPacketSize]; 871 char buffer[kMaxPacketSize];
875 size_t encrypted_length = peer_framer_.EncryptPayload( 872 size_t encrypted_length = peer_framer_.EncryptPayload(
876 ENCRYPTION_NONE, path_id, number, *packet, buffer, kMaxPacketSize); 873 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize);
877 connection_.ProcessUdpPacket( 874 connection_.ProcessUdpPacket(
878 kSelfAddress, kPeerAddress, 875 kSelfAddress, kPeerAddress,
879 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 876 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
880 } 877 }
881 878
882 QuicByteCount SendStreamDataToPeer(QuicStreamId id, 879 QuicByteCount SendStreamDataToPeer(QuicStreamId id,
883 StringPiece data, 880 StringPiece data,
884 QuicStreamOffset offset, 881 QuicStreamOffset offset,
885 bool fin, 882 bool fin,
886 QuicPacketNumber* last_packet) { 883 QuicPacketNumber* last_packet) {
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 header.path_id = kDefaultPathId; 1206 header.path_id = kDefaultPathId;
1210 header.packet_number = 1; 1207 header.packet_number = 1;
1211 1208
1212 QuicFrames frames; 1209 QuicFrames frames;
1213 QuicPaddingFrame padding; 1210 QuicPaddingFrame padding;
1214 frames.push_back(QuicFrame(&frame1_)); 1211 frames.push_back(QuicFrame(&frame1_));
1215 frames.push_back(QuicFrame(padding)); 1212 frames.push_back(QuicFrame(padding));
1216 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 1213 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
1217 char buffer[kMaxPacketSize]; 1214 char buffer[kMaxPacketSize];
1218 size_t encrypted_length = peer_framer_.EncryptPayload( 1215 size_t encrypted_length = peer_framer_.EncryptPayload(
1219 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 1216 ENCRYPTION_NONE, 12, *packet, buffer, kMaxPacketSize);
1220 EXPECT_EQ(kMaxPacketSize, encrypted_length); 1217 EXPECT_EQ(kMaxPacketSize, encrypted_length);
1221 1218
1222 framer_.set_version(version()); 1219 framer_.set_version(version());
1223 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 1220 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
1224 connection_.ProcessUdpPacket( 1221 connection_.ProcessUdpPacket(
1225 kSelfAddress, kPeerAddress, 1222 kSelfAddress, kPeerAddress,
1226 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 1223 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
1227 1224
1228 EXPECT_EQ(kMaxPacketSize, connection_.max_packet_length()); 1225 EXPECT_EQ(kMaxPacketSize, connection_.max_packet_length());
1229 } 1226 }
(...skipping 13 matching lines...) Expand all
1243 header.path_id = kDefaultPathId; 1240 header.path_id = kDefaultPathId;
1244 header.packet_number = 1; 1241 header.packet_number = 1;
1245 1242
1246 QuicFrames frames; 1243 QuicFrames frames;
1247 QuicPaddingFrame padding; 1244 QuicPaddingFrame padding;
1248 frames.push_back(QuicFrame(&frame1_)); 1245 frames.push_back(QuicFrame(&frame1_));
1249 frames.push_back(QuicFrame(padding)); 1246 frames.push_back(QuicFrame(padding));
1250 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 1247 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
1251 char buffer[kMaxPacketSize]; 1248 char buffer[kMaxPacketSize];
1252 size_t encrypted_length = peer_framer_.EncryptPayload( 1249 size_t encrypted_length = peer_framer_.EncryptPayload(
1253 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 1250 ENCRYPTION_NONE, 12, *packet, buffer, kMaxPacketSize);
1254 EXPECT_EQ(kMaxPacketSize, encrypted_length); 1251 EXPECT_EQ(kMaxPacketSize, encrypted_length);
1255 1252
1256 framer_.set_version(version()); 1253 framer_.set_version(version());
1257 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 1254 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
1258 connection_.ProcessUdpPacket( 1255 connection_.ProcessUdpPacket(
1259 kSelfAddress, kPeerAddress, 1256 kSelfAddress, kPeerAddress,
1260 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 1257 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
1261 1258
1262 // Here, the limit imposed by the writer is lower than the size of the packet 1259 // Here, the limit imposed by the writer is lower than the size of the packet
1263 // received, so the writer max packet size is used. 1260 // received, so the writer max packet size is used.
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
2035 clock_.AdvanceTime(DefaultRetransmissionTime()); 2032 clock_.AdvanceTime(DefaultRetransmissionTime());
2036 connection_.GetRetransmissionAlarm()->Fire(); 2033 connection_.GetRetransmissionAlarm()->Fire();
2037 EXPECT_EQ(1u, writer_->frame_count()); 2034 EXPECT_EQ(1u, writer_->frame_count());
2038 EXPECT_EQ(1u, writer_->rst_stream_frames().size()); 2035 EXPECT_EQ(1u, writer_->rst_stream_frames().size());
2039 EXPECT_EQ(stream_id, writer_->rst_stream_frames().front().stream_id); 2036 EXPECT_EQ(stream_id, writer_->rst_stream_frames().front().stream_id);
2040 } 2037 }
2041 2038
2042 // Ensure that if the only data in flight is non-retransmittable, the 2039 // Ensure that if the only data in flight is non-retransmittable, the
2043 // retransmission alarm is not set. 2040 // retransmission alarm is not set.
2044 TEST_P(QuicConnectionTest, CancelRetransmissionAlarmAfterResetStream) { 2041 TEST_P(QuicConnectionTest, CancelRetransmissionAlarmAfterResetStream) {
2045 FLAGS_quic_reloadable_flag_quic_more_conservative_retransmission_alarm = true;
2046 QuicStreamId stream_id = 2; 2042 QuicStreamId stream_id = 2;
2047 QuicPacketNumber last_data_packet; 2043 QuicPacketNumber last_data_packet;
2048 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_data_packet); 2044 SendStreamDataToPeer(stream_id, "foo", 0, !kFin, &last_data_packet);
2049 2045
2050 // Cancel the stream. 2046 // Cancel the stream.
2051 const QuicPacketNumber rst_packet = last_data_packet + 1; 2047 const QuicPacketNumber rst_packet = last_data_packet + 1;
2052 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, rst_packet, _, _)).Times(1); 2048 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, rst_packet, _, _)).Times(1);
2053 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14); 2049 connection_.SendRstStream(stream_id, QUIC_ERROR_PROCESSING_STREAM, 14);
2054 2050
2055 // Ack the RST_STREAM frame (since it's retransmittable), but not the data 2051 // Ack the RST_STREAM frame (since it's retransmittable), but not the data
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 2276
2281 // Ack the sent packet before the callback returns, which happens in 2277 // Ack the sent packet before the callback returns, which happens in
2282 // rare circumstances with write blocked sockets. 2278 // rare circumstances with write blocked sockets.
2283 QuicAckFrame ack = InitAckFrame(1); 2279 QuicAckFrame ack = InitAckFrame(1);
2284 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); 2280 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
2285 ProcessAckPacket(&ack); 2281 ProcessAckPacket(&ack);
2286 2282
2287 writer_->SetWritable(); 2283 writer_->SetWritable();
2288 connection_.OnCanWrite(); 2284 connection_.OnCanWrite();
2289 // There is now a pending packet, but with no retransmittable frames. 2285 // There is now a pending packet, but with no retransmittable frames.
2290 EXPECT_EQ( 2286 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
2291 FLAGS_quic_reloadable_flag_quic_more_conservative_retransmission_alarm,
2292 !connection_.GetRetransmissionAlarm()->IsSet());
2293 EXPECT_FALSE(QuicConnectionPeer::HasRetransmittableFrames(&connection_, 2287 EXPECT_FALSE(QuicConnectionPeer::HasRetransmittableFrames(&connection_,
2294 ack.path_id, 2)); 2288 ack.path_id, 2));
2295 } 2289 }
2296 2290
2297 TEST_P(QuicConnectionTest, AlarmsWhenWriteBlocked) { 2291 TEST_P(QuicConnectionTest, AlarmsWhenWriteBlocked) {
2298 // Block the connection. 2292 // Block the connection.
2299 BlockOnNextWrite(); 2293 BlockOnNextWrite();
2300 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 2294 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
2301 EXPECT_EQ(1u, writer_->packets_write_attempts()); 2295 EXPECT_EQ(1u, writer_->packets_write_attempts());
2302 EXPECT_TRUE(writer_->IsWriteBlocked()); 2296 EXPECT_TRUE(writer_->IsWriteBlocked());
(...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after
3494 EXPECT_EQ(4u, connection_.sent_packet_manager().GetConsecutiveRtoCount()); 3488 EXPECT_EQ(4u, connection_.sent_packet_manager().GetConsecutiveRtoCount());
3495 // This time, we should time out. 3489 // This time, we should time out.
3496 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_TOO_MANY_RTOS, _, 3490 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_TOO_MANY_RTOS, _,
3497 ConnectionCloseSource::FROM_SELF)); 3491 ConnectionCloseSource::FROM_SELF));
3498 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3492 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3499 connection_.GetRetransmissionAlarm()->Fire(); 3493 connection_.GetRetransmissionAlarm()->Fire();
3500 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 3494 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3501 EXPECT_FALSE(connection_.connected()); 3495 EXPECT_FALSE(connection_.connected());
3502 } 3496 }
3503 3497
3504 TEST_P(QuicConnectionTest, TimeoutAfter5ServerRTOs) {
3505 FLAGS_quic_reloadable_flag_quic_only_5rto_client_side = true;
3506 connection_.SetMaxTailLossProbes(2);
3507 set_perspective(Perspective::IS_SERVER);
3508 QuicFramerPeer::SetPerspective(QuicConnectionPeer::GetFramer(&connection_),
3509 Perspective::IS_SERVER);
3510 creator_->StopSendingVersion();
3511 EXPECT_TRUE(connection_.connected());
3512 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
3513 QuicConfig config;
3514 QuicTagVector connection_options;
3515 connection_options.push_back(k5RTO);
3516 config.SetConnectionOptionsToSend(connection_options);
3517 connection_.SetFromConfig(config);
3518
3519 // Send stream data.
3520 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr);
3521
3522 EXPECT_CALL(visitor_, OnPathDegrading());
3523 // Fire the retransmission alarm 6 times, twice for TLP and 4 times for RTO.
3524 for (int i = 0; i < 6; ++i) {
3525 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3526 connection_.GetRetransmissionAlarm()->Fire();
3527 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
3528 EXPECT_TRUE(connection_.connected());
3529 }
3530
3531 EXPECT_EQ(2u, connection_.sent_packet_manager().GetConsecutiveTlpCount());
3532 EXPECT_EQ(4u, connection_.sent_packet_manager().GetConsecutiveRtoCount());
3533 // The 5th RTO should not time out server side.
3534 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3535 connection_.GetRetransmissionAlarm()->Fire();
3536 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
3537 EXPECT_TRUE(connection_.connected());
3538 }
3539
3540 TEST_P(QuicConnectionTest, SendScheduler) { 3498 TEST_P(QuicConnectionTest, SendScheduler) {
3541 // Test that if we send a packet without delay, it is not queued. 3499 // Test that if we send a packet without delay, it is not queued.
3542 QuicPacket* packet = ConstructDataPacket(kDefaultPathId, 1, !kHasStopWaiting); 3500 QuicPacket* packet = ConstructDataPacket(kDefaultPathId, 1, !kHasStopWaiting);
3543 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3544 connection_.SendPacket(ENCRYPTION_NONE, kDefaultPathId, 1, packet, 3502 connection_.SendPacket(ENCRYPTION_NONE, kDefaultPathId, 1, packet,
3545 HAS_RETRANSMITTABLE_DATA, false, false); 3503 HAS_RETRANSMITTABLE_DATA, false, false);
3546 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 3504 EXPECT_EQ(0u, connection_.NumQueuedPackets());
3547 } 3505 }
3548 3506
3549 TEST_P(QuicConnectionTest, FailToSendFirstPacket) { 3507 TEST_P(QuicConnectionTest, FailToSendFirstPacket) {
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after
4325 QuicPacketHeader header; 4283 QuicPacketHeader header;
4326 header.public_header.connection_id = connection_id_; 4284 header.public_header.connection_id = connection_id_;
4327 header.public_header.version_flag = true; 4285 header.public_header.version_flag = true;
4328 header.path_id = kDefaultPathId; 4286 header.path_id = kDefaultPathId;
4329 header.packet_number = 12; 4287 header.packet_number = 12;
4330 4288
4331 QuicFrames frames; 4289 QuicFrames frames;
4332 frames.push_back(QuicFrame(&frame1_)); 4290 frames.push_back(QuicFrame(&frame1_));
4333 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 4291 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
4334 char buffer[kMaxPacketSize]; 4292 char buffer[kMaxPacketSize];
4335 size_t encrypted_length = framer_.EncryptPayload( 4293 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
4336 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 4294 buffer, kMaxPacketSize);
4337 4295
4338 framer_.set_version(version()); 4296 framer_.set_version(version());
4339 connection_.ProcessUdpPacket( 4297 connection_.ProcessUdpPacket(
4340 kSelfAddress, kPeerAddress, 4298 kSelfAddress, kPeerAddress,
4341 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 4299 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
4342 EXPECT_TRUE(writer_->version_negotiation_packet() != nullptr); 4300 EXPECT_TRUE(writer_->version_negotiation_packet() != nullptr);
4343 4301
4344 size_t num_versions = arraysize(kSupportedQuicVersions); 4302 size_t num_versions = arraysize(kSupportedQuicVersions);
4345 ASSERT_EQ(num_versions, 4303 ASSERT_EQ(num_versions,
4346 writer_->version_negotiation_packet()->versions.size()); 4304 writer_->version_negotiation_packet()->versions.size());
(...skipping 13 matching lines...) Expand all
4360 4318
4361 QuicPacketHeader header; 4319 QuicPacketHeader header;
4362 header.public_header.connection_id = connection_id_; 4320 header.public_header.connection_id = connection_id_;
4363 header.public_header.version_flag = true; 4321 header.public_header.version_flag = true;
4364 header.packet_number = 12; 4322 header.packet_number = 12;
4365 4323
4366 QuicFrames frames; 4324 QuicFrames frames;
4367 frames.push_back(QuicFrame(&frame1_)); 4325 frames.push_back(QuicFrame(&frame1_));
4368 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 4326 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
4369 char buffer[kMaxPacketSize]; 4327 char buffer[kMaxPacketSize];
4370 size_t encrypted_length = framer_.EncryptPayload( 4328 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
4371 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 4329 buffer, kMaxPacketSize);
4372 4330
4373 framer_.set_version(version()); 4331 framer_.set_version(version());
4374 BlockOnNextWrite(); 4332 BlockOnNextWrite();
4375 connection_.ProcessUdpPacket( 4333 connection_.ProcessUdpPacket(
4376 kSelfAddress, kPeerAddress, 4334 kSelfAddress, kPeerAddress,
4377 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 4335 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
4378 EXPECT_EQ(0u, writer_->last_packet_size()); 4336 EXPECT_EQ(0u, writer_->last_packet_size());
4379 EXPECT_TRUE(connection_.HasQueuedData()); 4337 EXPECT_TRUE(connection_.HasQueuedData());
4380 4338
4381 writer_->SetWritable(); 4339 writer_->SetWritable();
(...skipping 20 matching lines...) Expand all
4402 4360
4403 QuicPacketHeader header; 4361 QuicPacketHeader header;
4404 header.public_header.connection_id = connection_id_; 4362 header.public_header.connection_id = connection_id_;
4405 header.public_header.version_flag = true; 4363 header.public_header.version_flag = true;
4406 header.packet_number = 12; 4364 header.packet_number = 12;
4407 4365
4408 QuicFrames frames; 4366 QuicFrames frames;
4409 frames.push_back(QuicFrame(&frame1_)); 4367 frames.push_back(QuicFrame(&frame1_));
4410 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 4368 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
4411 char buffer[kMaxPacketSize]; 4369 char buffer[kMaxPacketSize];
4412 size_t encryped_length = framer_.EncryptPayload( 4370 size_t encryped_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
4413 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 4371 buffer, kMaxPacketSize);
4414 4372
4415 framer_.set_version(version()); 4373 framer_.set_version(version());
4416 set_perspective(Perspective::IS_SERVER); 4374 set_perspective(Perspective::IS_SERVER);
4417 BlockOnNextWrite(); 4375 BlockOnNextWrite();
4418 writer_->set_is_write_blocked_data_buffered(true); 4376 writer_->set_is_write_blocked_data_buffered(true);
4419 connection_.ProcessUdpPacket( 4377 connection_.ProcessUdpPacket(
4420 kSelfAddress, kPeerAddress, 4378 kSelfAddress, kPeerAddress,
4421 QuicReceivedPacket(buffer, encryped_length, QuicTime::Zero(), false)); 4379 QuicReceivedPacket(buffer, encryped_length, QuicTime::Zero(), false));
4422 EXPECT_EQ(0u, writer_->last_packet_size()); 4380 EXPECT_EQ(0u, writer_->last_packet_size());
4423 EXPECT_FALSE(connection_.HasQueuedData()); 4381 EXPECT_FALSE(connection_.HasQueuedData());
(...skipping 17 matching lines...) Expand all
4441 QuicPacketHeader header; 4399 QuicPacketHeader header;
4442 header.public_header.connection_id = connection_id_; 4400 header.public_header.connection_id = connection_id_;
4443 header.path_id = kDefaultPathId; 4401 header.path_id = kDefaultPathId;
4444 header.packet_number = 12; 4402 header.packet_number = 12;
4445 header.public_header.version_flag = false; 4403 header.public_header.version_flag = false;
4446 QuicFrames frames; 4404 QuicFrames frames;
4447 frames.push_back(QuicFrame(&frame1_)); 4405 frames.push_back(QuicFrame(&frame1_));
4448 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 4406 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
4449 char buffer[kMaxPacketSize]; 4407 char buffer[kMaxPacketSize];
4450 size_t encrypted_length = peer_framer_.EncryptPayload( 4408 size_t encrypted_length = peer_framer_.EncryptPayload(
4451 ENCRYPTION_NONE, kDefaultPathId, 12, *packet, buffer, kMaxPacketSize); 4409 ENCRYPTION_NONE, 12, *packet, buffer, kMaxPacketSize);
4452 ASSERT_NE(0u, encrypted_length); 4410 ASSERT_NE(0u, encrypted_length);
4453 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4411 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4454 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4412 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
4455 connection_.ProcessUdpPacket( 4413 connection_.ProcessUdpPacket(
4456 kSelfAddress, kPeerAddress, 4414 kSelfAddress, kPeerAddress,
4457 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 4415 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
4458 4416
4459 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_)); 4417 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_));
4460 } 4418 }
4461 4419
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
4530 QuicConnectionCloseFrame qccf; 4488 QuicConnectionCloseFrame qccf;
4531 qccf.error_code = QUIC_PEER_GOING_AWAY; 4489 qccf.error_code = QUIC_PEER_GOING_AWAY;
4532 4490
4533 QuicFrames frames; 4491 QuicFrames frames;
4534 frames.push_back(QuicFrame(&frame1_)); 4492 frames.push_back(QuicFrame(&frame1_));
4535 frames.push_back(QuicFrame(&qccf)); 4493 frames.push_back(QuicFrame(&qccf));
4536 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); 4494 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
4537 EXPECT_TRUE(nullptr != packet.get()); 4495 EXPECT_TRUE(nullptr != packet.get());
4538 char buffer[kMaxPacketSize]; 4496 char buffer[kMaxPacketSize];
4539 size_t encrypted_length = peer_framer_.EncryptPayload( 4497 size_t encrypted_length = peer_framer_.EncryptPayload(
4540 ENCRYPTION_NONE, kDefaultPathId, 1, *packet, buffer, kMaxPacketSize); 4498 ENCRYPTION_NONE, 1, *packet, buffer, kMaxPacketSize);
4541 4499
4542 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _, 4500 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _,
4543 ConnectionCloseSource::FROM_PEER)); 4501 ConnectionCloseSource::FROM_PEER));
4544 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); 4502 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
4545 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4503 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
4546 4504
4547 connection_.ProcessUdpPacket( 4505 connection_.ProcessUdpPacket(
4548 kSelfAddress, kPeerAddress, 4506 kSelfAddress, kPeerAddress,
4549 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 4507 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
4550 } 4508 }
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
5115 error_details, ConnectionCloseSource::FROM_PEER)); 5073 error_details, ConnectionCloseSource::FROM_PEER));
5116 connection_.set_perspective(Perspective::IS_CLIENT); 5074 connection_.set_perspective(Perspective::IS_CLIENT);
5117 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, 5075 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT,
5118 error_details, 5076 error_details,
5119 ConnectionCloseBehavior::SILENT_CLOSE); 5077 ConnectionCloseBehavior::SILENT_CLOSE);
5120 } 5078 }
5121 5079
5122 } // namespace 5080 } // namespace
5123 } // namespace test 5081 } // namespace test
5124 } // namespace net 5082 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_connection.cc ('k') | net/quic/core/quic_crypto_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698