| 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 <ostream> | 7 #include <ostream> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 HasRetransmittableData retransmittable, | 458 HasRetransmittableData retransmittable, |
| 459 bool has_ack, | 459 bool has_ack, |
| 460 bool has_pending_frames) { | 460 bool has_pending_frames) { |
| 461 char buffer[kMaxPacketSize]; | 461 char buffer[kMaxPacketSize]; |
| 462 size_t encrypted_length = | 462 size_t encrypted_length = |
| 463 QuicConnectionPeer::GetFramer(this)->EncryptPayload( | 463 QuicConnectionPeer::GetFramer(this)->EncryptPayload( |
| 464 ENCRYPTION_NONE, path_id, packet_number, *packet, buffer, | 464 ENCRYPTION_NONE, path_id, packet_number, *packet, buffer, |
| 465 kMaxPacketSize); | 465 kMaxPacketSize); |
| 466 delete packet; | 466 delete packet; |
| 467 SerializedPacket serialized_packet( | 467 SerializedPacket serialized_packet( |
| 468 kDefaultPathId, packet_number, PACKET_6BYTE_PACKET_NUMBER, | 468 kDefaultPathId, packet_number, PACKET_6BYTE_PACKET_NUMBER, buffer, |
| 469 new QuicEncryptedPacket(buffer, encrypted_length, false), entropy_hash, | 469 encrypted_length, entropy_hash, has_ack, has_pending_frames); |
| 470 has_ack, has_pending_frames); | |
| 471 if (retransmittable == HAS_RETRANSMITTABLE_DATA) { | 470 if (retransmittable == HAS_RETRANSMITTABLE_DATA) { |
| 472 serialized_packet.retransmittable_frames.push_back( | 471 serialized_packet.retransmittable_frames.push_back( |
| 473 QuicFrame(new QuicStreamFrame())); | 472 QuicFrame(new QuicStreamFrame())); |
| 474 } | 473 } |
| 475 OnSerializedPacket(&serialized_packet); | 474 OnSerializedPacket(&serialized_packet); |
| 476 } | 475 } |
| 477 | 476 |
| 478 QuicConsumedData SendStreamDataWithString( | 477 QuicConsumedData SendStreamDataWithString( |
| 479 QuicStreamId id, | 478 QuicStreamId id, |
| 480 StringPiece data, | 479 StringPiece data, |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) { | 765 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) { |
| 767 QuicFrames frames; | 766 QuicFrames frames; |
| 768 frames.push_back(QuicFrame(frame)); | 767 frames.push_back(QuicFrame(frame)); |
| 769 QuicPacketCreatorPeer::SetSendVersionInPacket( | 768 QuicPacketCreatorPeer::SetSendVersionInPacket( |
| 770 &peer_creator_, connection_.perspective() == Perspective::IS_SERVER); | 769 &peer_creator_, connection_.perspective() == Perspective::IS_SERVER); |
| 771 | 770 |
| 772 char buffer[kMaxPacketSize]; | 771 char buffer[kMaxPacketSize]; |
| 773 SerializedPacket serialized_packet = | 772 SerializedPacket serialized_packet = |
| 774 QuicPacketCreatorPeer::SerializeAllFrames(&peer_creator_, frames, | 773 QuicPacketCreatorPeer::SerializeAllFrames(&peer_creator_, frames, |
| 775 buffer, kMaxPacketSize); | 774 buffer, kMaxPacketSize); |
| 776 scoped_ptr<QuicEncryptedPacket> encrypted(serialized_packet.packet); | 775 connection_.ProcessUdpPacket( |
| 777 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *encrypted); | 776 kSelfAddress, kPeerAddress, |
| 777 QuicEncryptedPacket(serialized_packet.encrypted_buffer, |
| 778 serialized_packet.encrypted_length)); |
| 778 return serialized_packet.entropy_hash; | 779 return serialized_packet.entropy_hash; |
| 779 } | 780 } |
| 780 | 781 |
| 781 QuicPacketEntropyHash ProcessFramePacketAtLevel(QuicPathId path_id, | 782 QuicPacketEntropyHash ProcessFramePacketAtLevel(QuicPathId path_id, |
| 782 QuicPacketNumber number, | 783 QuicPacketNumber number, |
| 783 QuicFrame frame, | 784 QuicFrame frame, |
| 784 EncryptionLevel level) { | 785 EncryptionLevel level) { |
| 785 QuicPacketHeader header; | 786 QuicPacketHeader header; |
| 786 header.public_header.connection_id = connection_id_; | 787 header.public_header.connection_id = connection_id_; |
| 787 header.public_header.packet_number_length = packet_number_length_; | 788 header.public_header.packet_number_length = packet_number_length_; |
| (...skipping 2723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3511 | 3512 |
| 3512 // SetFromConfig sets the initial timeouts before negotiation. | 3513 // SetFromConfig sets the initial timeouts before negotiation. |
| 3513 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3514 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 3514 QuicConfig config; | 3515 QuicConfig config; |
| 3515 connection_.SetFromConfig(config); | 3516 connection_.SetFromConfig(config); |
| 3516 // Subtract a second from the idle timeout on the client side. | 3517 // Subtract a second from the idle timeout on the client side. |
| 3517 QuicTime default_timeout = clock_.ApproximateNow().Add( | 3518 QuicTime default_timeout = clock_.ApproximateNow().Add( |
| 3518 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 3519 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); |
| 3519 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3520 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
| 3520 | 3521 |
| 3521 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 3522 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 3522 // Simulate the timeout alarm firing. | 3523 // Simulate the timeout alarm firing. |
| 3523 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 3524 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); |
| 3524 connection_.GetTimeoutAlarm()->Fire(); | 3525 connection_.GetTimeoutAlarm()->Fire(); |
| 3525 | 3526 |
| 3526 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3527 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3527 EXPECT_FALSE(connection_.connected()); | 3528 EXPECT_FALSE(connection_.connected()); |
| 3528 | 3529 |
| 3529 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3530 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
| 3530 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); | 3531 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
| 3531 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); | 3532 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); |
| 3532 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); | 3533 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
| 3533 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); | 3534 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
| 3534 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); | 3535 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
| 3535 EXPECT_FALSE(connection_.GetMtuDiscoveryAlarm()->IsSet()); | 3536 EXPECT_FALSE(connection_.GetMtuDiscoveryAlarm()->IsSet()); |
| 3536 } | 3537 } |
| 3537 | 3538 |
| 3538 TEST_P(QuicConnectionTest, OverallTimeout) { | 3539 TEST_P(QuicConnectionTest, HandshakeTimeout) { |
| 3539 // Use a shorter overall connection timeout than idle timeout for this test. | 3540 // Use a shorter handshake timeout than idle timeout for this test. |
| 3540 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(5); | 3541 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(5); |
| 3541 connection_.SetNetworkTimeouts(timeout, timeout); | 3542 connection_.SetNetworkTimeouts(timeout, timeout); |
| 3542 EXPECT_TRUE(connection_.connected()); | 3543 EXPECT_TRUE(connection_.connected()); |
| 3543 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 3544 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
| 3544 | 3545 |
| 3545 QuicTime overall_timeout = clock_.ApproximateNow().Add(timeout).Subtract( | 3546 QuicTime handshake_timeout = clock_.ApproximateNow().Add(timeout).Subtract( |
| 3546 QuicTime::Delta::FromSeconds(1)); | 3547 QuicTime::Delta::FromSeconds(1)); |
| 3547 EXPECT_EQ(overall_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3548 EXPECT_EQ(handshake_timeout, connection_.GetTimeoutAlarm()->deadline()); |
| 3548 EXPECT_TRUE(connection_.connected()); | 3549 EXPECT_TRUE(connection_.connected()); |
| 3549 | 3550 |
| 3550 // Send and ack new data 3 seconds later to lengthen the idle timeout. | 3551 // Send and ack new data 3 seconds later to lengthen the idle timeout. |
| 3551 SendStreamDataToPeer(1, "GET /", 0, kFin, nullptr); | 3552 SendStreamDataToPeer(1, "GET /", 0, kFin, nullptr); |
| 3552 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(3)); | 3553 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(3)); |
| 3553 QuicAckFrame frame = InitAckFrame(1); | 3554 QuicAckFrame frame = InitAckFrame(1); |
| 3554 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3555 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 3555 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 3556 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
| 3556 ProcessAckPacket(&frame); | 3557 ProcessAckPacket(&frame); |
| 3557 | 3558 |
| 3558 // Fire early to verify it wouldn't timeout yet. | 3559 // Fire early to verify it wouldn't timeout yet. |
| 3559 connection_.GetTimeoutAlarm()->Fire(); | 3560 connection_.GetTimeoutAlarm()->Fire(); |
| 3560 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3561 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3561 EXPECT_TRUE(connection_.connected()); | 3562 EXPECT_TRUE(connection_.connected()); |
| 3562 | 3563 |
| 3563 clock_.AdvanceTime(timeout.Subtract(QuicTime::Delta::FromSeconds(2))); | 3564 clock_.AdvanceTime(timeout.Subtract(QuicTime::Delta::FromSeconds(2))); |
| 3564 | 3565 |
| 3565 EXPECT_CALL(visitor_, | 3566 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_HANDSHAKE_TIMEOUT, false)); |
| 3566 OnConnectionClosed(QUIC_CONNECTION_OVERALL_TIMED_OUT, false)); | |
| 3567 // Simulate the timeout alarm firing. | 3567 // Simulate the timeout alarm firing. |
| 3568 connection_.GetTimeoutAlarm()->Fire(); | 3568 connection_.GetTimeoutAlarm()->Fire(); |
| 3569 | 3569 |
| 3570 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3570 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3571 EXPECT_FALSE(connection_.connected()); | 3571 EXPECT_FALSE(connection_.connected()); |
| 3572 | 3572 |
| 3573 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3573 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
| 3574 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); | 3574 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
| 3575 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); | 3575 EXPECT_FALSE(connection_.GetFecAlarm()->IsSet()); |
| 3576 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); | 3576 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3877 // network event at t=5ms. The alarm will reregister. | 3877 // network event at t=5ms. The alarm will reregister. |
| 3878 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); | 3878 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); |
| 3879 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3879 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 3880 connection_.GetTimeoutAlarm()->Fire(); | 3880 connection_.GetTimeoutAlarm()->Fire(); |
| 3881 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3881 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3882 EXPECT_TRUE(connection_.connected()); | 3882 EXPECT_TRUE(connection_.connected()); |
| 3883 EXPECT_EQ(default_timeout.Add(five_ms), | 3883 EXPECT_EQ(default_timeout.Add(five_ms), |
| 3884 connection_.GetTimeoutAlarm()->deadline()); | 3884 connection_.GetTimeoutAlarm()->deadline()); |
| 3885 | 3885 |
| 3886 // This time, we should time out. | 3886 // This time, we should time out. |
| 3887 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 3887 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 3888 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3888 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
| 3889 clock_.AdvanceTime(five_ms); | 3889 clock_.AdvanceTime(five_ms); |
| 3890 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3890 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); |
| 3891 connection_.GetTimeoutAlarm()->Fire(); | 3891 connection_.GetTimeoutAlarm()->Fire(); |
| 3892 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3892 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3893 EXPECT_FALSE(connection_.connected()); | 3893 EXPECT_FALSE(connection_.connected()); |
| 3894 } | 3894 } |
| 3895 | 3895 |
| 3896 TEST_P(QuicConnectionTest, OldTimeoutAfterSendSilentClose) { | 3896 TEST_P(QuicConnectionTest, OldTimeoutAfterSendSilentClose) { |
| 3897 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, false); | 3897 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, false); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3937 // network event at t=5ms. The alarm will reregister. | 3937 // network event at t=5ms. The alarm will reregister. |
| 3938 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms)); | 3938 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms)); |
| 3939 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3939 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 3940 connection_.GetTimeoutAlarm()->Fire(); | 3940 connection_.GetTimeoutAlarm()->Fire(); |
| 3941 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3941 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3942 EXPECT_TRUE(connection_.connected()); | 3942 EXPECT_TRUE(connection_.connected()); |
| 3943 EXPECT_EQ(default_timeout.Add(five_ms), | 3943 EXPECT_EQ(default_timeout.Add(five_ms), |
| 3944 connection_.GetTimeoutAlarm()->deadline()); | 3944 connection_.GetTimeoutAlarm()->deadline()); |
| 3945 | 3945 |
| 3946 // This time, we should time out. | 3946 // This time, we should time out. |
| 3947 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 3947 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 3948 clock_.AdvanceTime(five_ms); | 3948 clock_.AdvanceTime(five_ms); |
| 3949 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3949 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); |
| 3950 connection_.GetTimeoutAlarm()->Fire(); | 3950 connection_.GetTimeoutAlarm()->Fire(); |
| 3951 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3951 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3952 EXPECT_FALSE(connection_.connected()); | 3952 EXPECT_FALSE(connection_.connected()); |
| 3953 } | 3953 } |
| 3954 | 3954 |
| 3955 TEST_P(QuicConnectionTest, TimeoutAfterSend) { | 3955 TEST_P(QuicConnectionTest, TimeoutAfterSend) { |
| 3956 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); | 3956 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); |
| 3957 EXPECT_TRUE(connection_.connected()); | 3957 EXPECT_TRUE(connection_.connected()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3981 // network event at t=5ms. The alarm will reregister. | 3981 // network event at t=5ms. The alarm will reregister. |
| 3982 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms).Subtract(five_ms)); | 3982 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms).Subtract(five_ms)); |
| 3983 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3983 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 3984 connection_.GetTimeoutAlarm()->Fire(); | 3984 connection_.GetTimeoutAlarm()->Fire(); |
| 3985 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3985 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3986 EXPECT_TRUE(connection_.connected()); | 3986 EXPECT_TRUE(connection_.connected()); |
| 3987 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), | 3987 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), |
| 3988 connection_.GetTimeoutAlarm()->deadline()); | 3988 connection_.GetTimeoutAlarm()->deadline()); |
| 3989 | 3989 |
| 3990 // This time, we should time out. | 3990 // This time, we should time out. |
| 3991 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 3991 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 3992 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3992 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
| 3993 clock_.AdvanceTime(five_ms); | 3993 clock_.AdvanceTime(five_ms); |
| 3994 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3994 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); |
| 3995 connection_.GetTimeoutAlarm()->Fire(); | 3995 connection_.GetTimeoutAlarm()->Fire(); |
| 3996 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3996 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 3997 EXPECT_FALSE(connection_.connected()); | 3997 EXPECT_FALSE(connection_.connected()); |
| 3998 } | 3998 } |
| 3999 | 3999 |
| 4000 TEST_P(QuicConnectionTest, NewTimeoutAfterSendSilentClose) { | 4000 TEST_P(QuicConnectionTest, NewTimeoutAfterSendSilentClose) { |
| 4001 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); | 4001 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4045 // network event at t=5ms. The alarm will reregister. | 4045 // network event at t=5ms. The alarm will reregister. |
| 4046 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms).Subtract(five_ms)); | 4046 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms).Subtract(five_ms)); |
| 4047 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 4047 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 4048 connection_.GetTimeoutAlarm()->Fire(); | 4048 connection_.GetTimeoutAlarm()->Fire(); |
| 4049 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 4049 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 4050 EXPECT_TRUE(connection_.connected()); | 4050 EXPECT_TRUE(connection_.connected()); |
| 4051 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), | 4051 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), |
| 4052 connection_.GetTimeoutAlarm()->deadline()); | 4052 connection_.GetTimeoutAlarm()->deadline()); |
| 4053 | 4053 |
| 4054 // This time, we should time out. | 4054 // This time, we should time out. |
| 4055 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 4055 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 4056 clock_.AdvanceTime(five_ms); | 4056 clock_.AdvanceTime(five_ms); |
| 4057 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 4057 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); |
| 4058 connection_.GetTimeoutAlarm()->Fire(); | 4058 connection_.GetTimeoutAlarm()->Fire(); |
| 4059 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 4059 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 4060 EXPECT_FALSE(connection_.connected()); | 4060 EXPECT_FALSE(connection_.connected()); |
| 4061 } | 4061 } |
| 4062 | 4062 |
| 4063 TEST_P(QuicConnectionTest, TimeoutAfterReceive) { | 4063 TEST_P(QuicConnectionTest, TimeoutAfterReceive) { |
| 4064 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 4064 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 4065 EXPECT_TRUE(connection_.connected()); | 4065 EXPECT_TRUE(connection_.connected()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 4091 // network event at t=5ms. The alarm will reregister. | 4091 // network event at t=5ms. The alarm will reregister. |
| 4092 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); | 4092 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); |
| 4093 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 4093 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 4094 connection_.GetTimeoutAlarm()->Fire(); | 4094 connection_.GetTimeoutAlarm()->Fire(); |
| 4095 EXPECT_TRUE(connection_.connected()); | 4095 EXPECT_TRUE(connection_.connected()); |
| 4096 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 4096 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 4097 EXPECT_EQ(default_timeout.Add(five_ms), | 4097 EXPECT_EQ(default_timeout.Add(five_ms), |
| 4098 connection_.GetTimeoutAlarm()->deadline()); | 4098 connection_.GetTimeoutAlarm()->deadline()); |
| 4099 | 4099 |
| 4100 // This time, we should time out. | 4100 // This time, we should time out. |
| 4101 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 4101 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 4102 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 4102 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
| 4103 clock_.AdvanceTime(five_ms); | 4103 clock_.AdvanceTime(five_ms); |
| 4104 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 4104 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); |
| 4105 connection_.GetTimeoutAlarm()->Fire(); | 4105 connection_.GetTimeoutAlarm()->Fire(); |
| 4106 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 4106 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 4107 EXPECT_FALSE(connection_.connected()); | 4107 EXPECT_FALSE(connection_.connected()); |
| 4108 } | 4108 } |
| 4109 | 4109 |
| 4110 TEST_P(QuicConnectionTest, TimeoutAfterReceiveNotSendWhenUnacked) { | 4110 TEST_P(QuicConnectionTest, TimeoutAfterReceiveNotSendWhenUnacked) { |
| 4111 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); | 4111 ValueRestore<bool> old_flags(&FLAGS_quic_use_new_idle_timeout, true); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4146 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); | 4146 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); |
| 4147 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 4147 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
| 4148 connection_.GetTimeoutAlarm()->Fire(); | 4148 connection_.GetTimeoutAlarm()->Fire(); |
| 4149 EXPECT_TRUE(connection_.connected()); | 4149 EXPECT_TRUE(connection_.connected()); |
| 4150 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 4150 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
| 4151 EXPECT_EQ(default_timeout.Add(five_ms), | 4151 EXPECT_EQ(default_timeout.Add(five_ms), |
| 4152 connection_.GetTimeoutAlarm()->deadline()); | 4152 connection_.GetTimeoutAlarm()->deadline()); |
| 4153 | 4153 |
| 4154 // Now, send packets while advancing the time and verify that the connection | 4154 // Now, send packets while advancing the time and verify that the connection |
| 4155 // eventually times out. | 4155 // eventually times out. |
| 4156 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 4156 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, false)); |
| 4157 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 4157 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
| 4158 for (int i = 0; i < 100 && connection_.connected(); ++i) { | 4158 for (int i = 0; i < 100 && connection_.connected(); ++i) { |
| 4159 VLOG(1) << "sending data packet"; | 4159 VLOG(1) << "sending data packet"; |
| 4160 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 4160 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
| 4161 nullptr); | 4161 nullptr); |
| 4162 connection_.GetTimeoutAlarm()->Fire(); | 4162 connection_.GetTimeoutAlarm()->Fire(); |
| 4163 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); | 4163 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
| 4164 } | 4164 } |
| 4165 EXPECT_FALSE(connection_.connected()); | 4165 EXPECT_FALSE(connection_.connected()); |
| 4166 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 4166 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| (...skipping 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5506 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); | 5506 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); |
| 5507 EXPECT_DFATAL(ProcessFramePacket(QuicFrame(&stream_frame)), | 5507 EXPECT_DFATAL(ProcessFramePacket(QuicFrame(&stream_frame)), |
| 5508 "Received a packet with multipath flag on when multipath is " | 5508 "Received a packet with multipath flag on when multipath is " |
| 5509 "not enabled."); | 5509 "not enabled."); |
| 5510 EXPECT_FALSE(connection_.connected()); | 5510 EXPECT_FALSE(connection_.connected()); |
| 5511 } | 5511 } |
| 5512 | 5512 |
| 5513 } // namespace | 5513 } // namespace |
| 5514 } // namespace test | 5514 } // namespace test |
| 5515 } // namespace net | 5515 } // namespace net |
| OLD | NEW |