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 <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 2457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2468 | 2468 |
2469 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); | 2469 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); |
2470 EXPECT_EQ(1u, stop_waiting()->least_unacked); | 2470 EXPECT_EQ(1u, stop_waiting()->least_unacked); |
2471 QuicTime retransmission_time = | 2471 QuicTime retransmission_time = |
2472 connection_.GetRetransmissionAlarm()->deadline(); | 2472 connection_.GetRetransmissionAlarm()->deadline(); |
2473 EXPECT_NE(QuicTime::Zero(), retransmission_time); | 2473 EXPECT_NE(QuicTime::Zero(), retransmission_time); |
2474 | 2474 |
2475 EXPECT_EQ(1u, writer_->header().packet_number); | 2475 EXPECT_EQ(1u, writer_->header().packet_number); |
2476 // Simulate the retransmission alarm firing and sending a tlp, | 2476 // Simulate the retransmission alarm firing and sending a tlp, |
2477 // so send algorithm's OnRetransmissionTimeout is not called. | 2477 // so send algorithm's OnRetransmissionTimeout is not called. |
2478 clock_.AdvanceTime(retransmission_time.Subtract(clock_.Now())); | 2478 clock_.AdvanceTime(retransmission_time - clock_.Now()); |
2479 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); | 2479 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); |
2480 connection_.GetRetransmissionAlarm()->Fire(); | 2480 connection_.GetRetransmissionAlarm()->Fire(); |
2481 EXPECT_EQ(2u, writer_->header().packet_number); | 2481 EXPECT_EQ(2u, writer_->header().packet_number); |
2482 // We do not raise the high water mark yet. | 2482 // We do not raise the high water mark yet. |
2483 EXPECT_EQ(1u, stop_waiting()->least_unacked); | 2483 EXPECT_EQ(1u, stop_waiting()->least_unacked); |
2484 } | 2484 } |
2485 | 2485 |
2486 TEST_P(QuicConnectionTest, RTO) { | 2486 TEST_P(QuicConnectionTest, RTO) { |
2487 connection_.DisableTailLossProbe(); | 2487 connection_.DisableTailLossProbe(); |
2488 | 2488 |
2489 QuicTime default_retransmission_time = | 2489 QuicTime default_retransmission_time = |
2490 clock_.ApproximateNow().Add(DefaultRetransmissionTime()); | 2490 clock_.ApproximateNow() + DefaultRetransmissionTime(); |
2491 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); | 2491 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); |
2492 EXPECT_EQ(1u, stop_waiting()->least_unacked); | 2492 EXPECT_EQ(1u, stop_waiting()->least_unacked); |
2493 | 2493 |
2494 EXPECT_EQ(1u, writer_->header().packet_number); | 2494 EXPECT_EQ(1u, writer_->header().packet_number); |
2495 EXPECT_EQ(default_retransmission_time, | 2495 EXPECT_EQ(default_retransmission_time, |
2496 connection_.GetRetransmissionAlarm()->deadline()); | 2496 connection_.GetRetransmissionAlarm()->deadline()); |
2497 // Simulate the retransmission alarm firing. | 2497 // Simulate the retransmission alarm firing. |
2498 clock_.AdvanceTime(DefaultRetransmissionTime()); | 2498 clock_.AdvanceTime(DefaultRetransmissionTime()); |
2499 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); | 2499 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); |
2500 connection_.GetRetransmissionAlarm()->Fire(); | 2500 connection_.GetRetransmissionAlarm()->Fire(); |
2501 EXPECT_EQ(2u, writer_->header().packet_number); | 2501 EXPECT_EQ(2u, writer_->header().packet_number); |
2502 // We do not raise the high water mark yet. | 2502 // We do not raise the high water mark yet. |
2503 EXPECT_EQ(1u, stop_waiting()->least_unacked); | 2503 EXPECT_EQ(1u, stop_waiting()->least_unacked); |
2504 } | 2504 } |
2505 | 2505 |
2506 TEST_P(QuicConnectionTest, RTOWithSameEncryptionLevel) { | 2506 TEST_P(QuicConnectionTest, RTOWithSameEncryptionLevel) { |
2507 connection_.DisableTailLossProbe(); | 2507 connection_.DisableTailLossProbe(); |
2508 | 2508 |
2509 QuicTime default_retransmission_time = | 2509 QuicTime default_retransmission_time = |
2510 clock_.ApproximateNow().Add(DefaultRetransmissionTime()); | 2510 clock_.ApproximateNow() + DefaultRetransmissionTime(); |
2511 use_tagging_decrypter(); | 2511 use_tagging_decrypter(); |
2512 | 2512 |
2513 // A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at | 2513 // A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at |
2514 // the end of the packet. We can test this to check which encrypter was used. | 2514 // the end of the packet. We can test this to check which encrypter was used. |
2515 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01)); | 2515 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01)); |
2516 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); | 2516 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); |
2517 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet()); | 2517 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet()); |
2518 | 2518 |
2519 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); | 2519 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); |
2520 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2520 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2776 | 2776 |
2777 TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) { | 2777 TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) { |
2778 connection_.DisableTailLossProbe(); | 2778 connection_.DisableTailLossProbe(); |
2779 | 2779 |
2780 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 2780 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
2781 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); | 2781 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); |
2782 connection_.SendStreamDataWithString(2, "foo", 0, !kFin, nullptr); | 2782 connection_.SendStreamDataWithString(2, "foo", 0, !kFin, nullptr); |
2783 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, nullptr); | 2783 connection_.SendStreamDataWithString(3, "bar", 0, !kFin, nullptr); |
2784 QuicAlarm* retransmission_alarm = connection_.GetRetransmissionAlarm(); | 2784 QuicAlarm* retransmission_alarm = connection_.GetRetransmissionAlarm(); |
2785 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2785 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2786 EXPECT_EQ(clock_.Now().Add(DefaultRetransmissionTime()), | 2786 EXPECT_EQ(clock_.Now() + DefaultRetransmissionTime(), |
2787 retransmission_alarm->deadline()); | 2787 retransmission_alarm->deadline()); |
2788 | 2788 |
2789 // Advance the time right before the RTO, then receive an ack for the first | 2789 // Advance the time right before the RTO, then receive an ack for the first |
2790 // packet to delay the RTO. | 2790 // packet to delay the RTO. |
2791 clock_.AdvanceTime(DefaultRetransmissionTime()); | 2791 clock_.AdvanceTime(DefaultRetransmissionTime()); |
2792 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 2792 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
2793 QuicAckFrame ack = InitAckFrame(1); | 2793 QuicAckFrame ack = InitAckFrame(1); |
2794 ProcessAckPacket(&ack); | 2794 ProcessAckPacket(&ack); |
2795 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2795 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2796 EXPECT_GT(retransmission_alarm->deadline(), clock_.Now()); | 2796 EXPECT_GT(retransmission_alarm->deadline(), clock_.Now()); |
2797 | 2797 |
2798 // Move forward past the original RTO and ensure the RTO is still pending. | 2798 // Move forward past the original RTO and ensure the RTO is still pending. |
2799 clock_.AdvanceTime(DefaultRetransmissionTime().Multiply(2)); | 2799 clock_.AdvanceTime(2 * DefaultRetransmissionTime()); |
2800 | 2800 |
2801 // Ensure the second packet gets retransmitted when it finally fires. | 2801 // Ensure the second packet gets retransmitted when it finally fires. |
2802 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2802 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2803 EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow()); | 2803 EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow()); |
2804 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 2804 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
2805 // Manually cancel the alarm to simulate a real test. | 2805 // Manually cancel the alarm to simulate a real test. |
2806 connection_.GetRetransmissionAlarm()->Fire(); | 2806 connection_.GetRetransmissionAlarm()->Fire(); |
2807 | 2807 |
2808 // The new retransmitted packet number should set the RTO to a larger value | 2808 // The new retransmitted packet number should set the RTO to a larger value |
2809 // than previously. | 2809 // than previously. |
(...skipping 21 matching lines...) Expand all Loading... |
2831 TEST_P(QuicConnectionTest, InitialTimeout) { | 2831 TEST_P(QuicConnectionTest, InitialTimeout) { |
2832 EXPECT_TRUE(connection_.connected()); | 2832 EXPECT_TRUE(connection_.connected()); |
2833 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 2833 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
2834 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2834 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
2835 | 2835 |
2836 // SetFromConfig sets the initial timeouts before negotiation. | 2836 // SetFromConfig sets the initial timeouts before negotiation. |
2837 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 2837 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
2838 QuicConfig config; | 2838 QuicConfig config; |
2839 connection_.SetFromConfig(config); | 2839 connection_.SetFromConfig(config); |
2840 // Subtract a second from the idle timeout on the client side. | 2840 // Subtract a second from the idle timeout on the client side. |
2841 QuicTime default_timeout = clock_.ApproximateNow().Add( | 2841 QuicTime default_timeout = |
2842 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 2842 clock_.ApproximateNow() + |
| 2843 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
2843 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 2844 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
2844 | 2845 |
2845 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 2846 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
2846 ConnectionCloseSource::FROM_SELF)); | 2847 ConnectionCloseSource::FROM_SELF)); |
2847 // Simulate the timeout alarm firing. | 2848 // Simulate the timeout alarm firing. |
2848 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 2849 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); |
2849 connection_.GetTimeoutAlarm()->Fire(); | 2850 connection_.GetTimeoutAlarm()->Fire(); |
2850 | 2851 |
2851 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2852 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
2852 EXPECT_FALSE(connection_.connected()); | 2853 EXPECT_FALSE(connection_.connected()); |
2853 | 2854 |
2854 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 2855 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
2855 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); | 2856 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
2856 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); | 2857 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
2857 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); | 2858 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
2858 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); | 2859 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
2859 EXPECT_FALSE(connection_.GetMtuDiscoveryAlarm()->IsSet()); | 2860 EXPECT_FALSE(connection_.GetMtuDiscoveryAlarm()->IsSet()); |
2860 } | 2861 } |
2861 | 2862 |
2862 TEST_P(QuicConnectionTest, HandshakeTimeout) { | 2863 TEST_P(QuicConnectionTest, HandshakeTimeout) { |
2863 // Use a shorter handshake timeout than idle timeout for this test. | 2864 // Use a shorter handshake timeout than idle timeout for this test. |
2864 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(5); | 2865 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(5); |
2865 connection_.SetNetworkTimeouts(timeout, timeout); | 2866 connection_.SetNetworkTimeouts(timeout, timeout); |
2866 EXPECT_TRUE(connection_.connected()); | 2867 EXPECT_TRUE(connection_.connected()); |
2867 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 2868 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
2868 | 2869 |
2869 QuicTime handshake_timeout = clock_.ApproximateNow().Add(timeout).Subtract( | 2870 QuicTime handshake_timeout = |
2870 QuicTime::Delta::FromSeconds(1)); | 2871 clock_.ApproximateNow() + timeout - QuicTime::Delta::FromSeconds(1); |
2871 EXPECT_EQ(handshake_timeout, connection_.GetTimeoutAlarm()->deadline()); | 2872 EXPECT_EQ(handshake_timeout, connection_.GetTimeoutAlarm()->deadline()); |
2872 EXPECT_TRUE(connection_.connected()); | 2873 EXPECT_TRUE(connection_.connected()); |
2873 | 2874 |
2874 // Send and ack new data 3 seconds later to lengthen the idle timeout. | 2875 // Send and ack new data 3 seconds later to lengthen the idle timeout. |
2875 SendStreamDataToPeer(kHeadersStreamId, "GET /", 0, kFin, nullptr); | 2876 SendStreamDataToPeer(kHeadersStreamId, "GET /", 0, kFin, nullptr); |
2876 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(3)); | 2877 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(3)); |
2877 QuicAckFrame frame = InitAckFrame(1); | 2878 QuicAckFrame frame = InitAckFrame(1); |
2878 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 2879 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
2879 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 2880 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
2880 ProcessAckPacket(&frame); | 2881 ProcessAckPacket(&frame); |
2881 | 2882 |
2882 // Fire early to verify it wouldn't timeout yet. | 2883 // Fire early to verify it wouldn't timeout yet. |
2883 connection_.GetTimeoutAlarm()->Fire(); | 2884 connection_.GetTimeoutAlarm()->Fire(); |
2884 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 2885 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
2885 EXPECT_TRUE(connection_.connected()); | 2886 EXPECT_TRUE(connection_.connected()); |
2886 | 2887 |
2887 clock_.AdvanceTime(timeout.Subtract(QuicTime::Delta::FromSeconds(2))); | 2888 clock_.AdvanceTime(timeout - QuicTime::Delta::FromSeconds(2)); |
2888 | 2889 |
2889 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_HANDSHAKE_TIMEOUT, _, | 2890 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_HANDSHAKE_TIMEOUT, _, |
2890 ConnectionCloseSource::FROM_SELF)); | 2891 ConnectionCloseSource::FROM_SELF)); |
2891 // Simulate the timeout alarm firing. | 2892 // Simulate the timeout alarm firing. |
2892 connection_.GetTimeoutAlarm()->Fire(); | 2893 connection_.GetTimeoutAlarm()->Fire(); |
2893 | 2894 |
2894 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2895 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
2895 EXPECT_FALSE(connection_.connected()); | 2896 EXPECT_FALSE(connection_.connected()); |
2896 | 2897 |
2897 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 2898 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
2898 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); | 2899 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
2899 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); | 2900 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
2900 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); | 2901 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
2901 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); | 2902 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
2902 } | 2903 } |
2903 | 2904 |
2904 TEST_P(QuicConnectionTest, PingAfterSend) { | 2905 TEST_P(QuicConnectionTest, PingAfterSend) { |
2905 EXPECT_TRUE(connection_.connected()); | 2906 EXPECT_TRUE(connection_.connected()); |
2906 EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(true)); | 2907 EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(true)); |
2907 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); | 2908 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
2908 | 2909 |
2909 // Advance to 5ms, and send a packet to the peer, which will set | 2910 // Advance to 5ms, and send a packet to the peer, which will set |
2910 // the ping alarm. | 2911 // the ping alarm. |
2911 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); | 2912 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
2912 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); | 2913 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
2913 SendStreamDataToPeer(kHeadersStreamId, "GET /", 0, kFin, nullptr); | 2914 SendStreamDataToPeer(kHeadersStreamId, "GET /", 0, kFin, nullptr); |
2914 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); | 2915 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
2915 EXPECT_EQ(clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(15)), | 2916 EXPECT_EQ(clock_.ApproximateNow() + QuicTime::Delta::FromSeconds(15), |
2916 connection_.GetPingAlarm()->deadline()); | 2917 connection_.GetPingAlarm()->deadline()); |
2917 | 2918 |
2918 // Now recevie and ACK of the previous packet, which will move the | 2919 // Now recevie and ACK of the previous packet, which will move the |
2919 // ping alarm forward. | 2920 // ping alarm forward. |
2920 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); | 2921 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
2921 QuicAckFrame frame = InitAckFrame(1); | 2922 QuicAckFrame frame = InitAckFrame(1); |
2922 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 2923 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
2923 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 2924 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
2924 ProcessAckPacket(&frame); | 2925 ProcessAckPacket(&frame); |
2925 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); | 2926 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
2926 // The ping timer is set slightly less than 15 seconds in the future, because | 2927 // The ping timer is set slightly less than 15 seconds in the future, because |
2927 // of the 1s ping timer alarm granularity. | 2928 // of the 1s ping timer alarm granularity. |
2928 EXPECT_EQ(clock_.ApproximateNow() | 2929 EXPECT_EQ(clock_.ApproximateNow() + QuicTime::Delta::FromSeconds(15) - |
2929 .Add(QuicTime::Delta::FromSeconds(15)) | 2930 QuicTime::Delta::FromMilliseconds(5), |
2930 .Subtract(QuicTime::Delta::FromMilliseconds(5)), | |
2931 connection_.GetPingAlarm()->deadline()); | 2931 connection_.GetPingAlarm()->deadline()); |
2932 | 2932 |
2933 writer_->Reset(); | 2933 writer_->Reset(); |
2934 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(15)); | 2934 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(15)); |
2935 connection_.GetPingAlarm()->Fire(); | 2935 connection_.GetPingAlarm()->Fire(); |
2936 EXPECT_EQ(1u, writer_->frame_count()); | 2936 EXPECT_EQ(1u, writer_->frame_count()); |
2937 ASSERT_EQ(1u, writer_->ping_frames().size()); | 2937 ASSERT_EQ(1u, writer_->ping_frames().size()); |
2938 writer_->Reset(); | 2938 writer_->Reset(); |
2939 | 2939 |
2940 EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(false)); | 2940 EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(false)); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3179 TEST_P(QuicConnectionTest, TimeoutAfterSend) { | 3179 TEST_P(QuicConnectionTest, TimeoutAfterSend) { |
3180 EXPECT_TRUE(connection_.connected()); | 3180 EXPECT_TRUE(connection_.connected()); |
3181 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3181 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
3182 QuicConfig config; | 3182 QuicConfig config; |
3183 connection_.SetFromConfig(config); | 3183 connection_.SetFromConfig(config); |
3184 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); | 3184 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); |
3185 | 3185 |
3186 const QuicTime::Delta initial_idle_timeout = | 3186 const QuicTime::Delta initial_idle_timeout = |
3187 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); | 3187 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
3188 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); | 3188 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); |
3189 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); | 3189 QuicTime default_timeout = clock_.ApproximateNow() + initial_idle_timeout; |
3190 | 3190 |
3191 // When we send a packet, the timeout will change to 5ms + | 3191 // When we send a packet, the timeout will change to 5ms + |
3192 // kInitialIdleTimeoutSecs. | 3192 // kInitialIdleTimeoutSecs. |
3193 clock_.AdvanceTime(five_ms); | 3193 clock_.AdvanceTime(five_ms); |
3194 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3194 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3195 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3195 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3196 | 3196 |
3197 // Now send more data. This will not move the timeout becase | 3197 // Now send more data. This will not move the timeout becase |
3198 // no data has been recieved since the previous write. | 3198 // no data has been recieved since the previous write. |
3199 clock_.AdvanceTime(five_ms); | 3199 clock_.AdvanceTime(five_ms); |
3200 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3200 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3201 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3201 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3202 | 3202 |
3203 // The original alarm will fire. We should not time out because we had a | 3203 // The original alarm will fire. We should not time out because we had a |
3204 // network event at t=5ms. The alarm will reregister. | 3204 // network event at t=5ms. The alarm will reregister. |
3205 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms).Subtract(five_ms)); | 3205 clock_.AdvanceTime(initial_idle_timeout - five_ms - five_ms); |
3206 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3206 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3207 connection_.GetTimeoutAlarm()->Fire(); | 3207 connection_.GetTimeoutAlarm()->Fire(); |
3208 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3208 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3209 EXPECT_TRUE(connection_.connected()); | 3209 EXPECT_TRUE(connection_.connected()); |
3210 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), | 3210 EXPECT_EQ(default_timeout + five_ms + five_ms, |
3211 connection_.GetTimeoutAlarm()->deadline()); | 3211 connection_.GetTimeoutAlarm()->deadline()); |
3212 | 3212 |
3213 // This time, we should time out. | 3213 // This time, we should time out. |
3214 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3214 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3215 ConnectionCloseSource::FROM_SELF)); | 3215 ConnectionCloseSource::FROM_SELF)); |
3216 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3216 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
3217 clock_.AdvanceTime(five_ms); | 3217 clock_.AdvanceTime(five_ms); |
3218 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3218 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); |
3219 connection_.GetTimeoutAlarm()->Fire(); | 3219 connection_.GetTimeoutAlarm()->Fire(); |
3220 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3220 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
3221 EXPECT_FALSE(connection_.connected()); | 3221 EXPECT_FALSE(connection_.connected()); |
3222 } | 3222 } |
3223 | 3223 |
3224 TEST_P(QuicConnectionTest, NewTimeoutAfterSendSilentClose) { | 3224 TEST_P(QuicConnectionTest, NewTimeoutAfterSendSilentClose) { |
3225 // Same test as above, but complete a handshake which enables silent close, | 3225 // Same test as above, but complete a handshake which enables silent close, |
3226 // causing no connection close packet to be sent. | 3226 // causing no connection close packet to be sent. |
3227 EXPECT_TRUE(connection_.connected()); | 3227 EXPECT_TRUE(connection_.connected()); |
3228 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3228 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
(...skipping 14 matching lines...) Expand all Loading... |
3243 const QuicErrorCode error = | 3243 const QuicErrorCode error = |
3244 config.ProcessPeerHello(msg, CLIENT, &error_details); | 3244 config.ProcessPeerHello(msg, CLIENT, &error_details); |
3245 EXPECT_EQ(QUIC_NO_ERROR, error); | 3245 EXPECT_EQ(QUIC_NO_ERROR, error); |
3246 | 3246 |
3247 connection_.SetFromConfig(config); | 3247 connection_.SetFromConfig(config); |
3248 EXPECT_TRUE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); | 3248 EXPECT_TRUE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); |
3249 | 3249 |
3250 const QuicTime::Delta default_idle_timeout = | 3250 const QuicTime::Delta default_idle_timeout = |
3251 QuicTime::Delta::FromSeconds(kDefaultIdleTimeoutSecs - 1); | 3251 QuicTime::Delta::FromSeconds(kDefaultIdleTimeoutSecs - 1); |
3252 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); | 3252 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); |
3253 QuicTime default_timeout = clock_.ApproximateNow().Add(default_idle_timeout); | 3253 QuicTime default_timeout = clock_.ApproximateNow() + default_idle_timeout; |
3254 | 3254 |
3255 // When we send a packet, the timeout will change to 5ms + | 3255 // When we send a packet, the timeout will change to 5ms + |
3256 // kInitialIdleTimeoutSecs. | 3256 // kInitialIdleTimeoutSecs. |
3257 clock_.AdvanceTime(five_ms); | 3257 clock_.AdvanceTime(five_ms); |
3258 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3258 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3259 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3259 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3260 | 3260 |
3261 // Now send more data. This will not move the timeout becase | 3261 // Now send more data. This will not move the timeout becase |
3262 // no data has been recieved since the previous write. | 3262 // no data has been recieved since the previous write. |
3263 clock_.AdvanceTime(five_ms); | 3263 clock_.AdvanceTime(five_ms); |
3264 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3264 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3265 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3265 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3266 | 3266 |
3267 // The original alarm will fire. We should not time out because we had a | 3267 // The original alarm will fire. We should not time out because we had a |
3268 // network event at t=5ms. The alarm will reregister. | 3268 // network event at t=5ms. The alarm will reregister. |
3269 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms).Subtract(five_ms)); | 3269 clock_.AdvanceTime(default_idle_timeout - five_ms - five_ms); |
3270 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3270 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3271 connection_.GetTimeoutAlarm()->Fire(); | 3271 connection_.GetTimeoutAlarm()->Fire(); |
3272 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3272 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3273 EXPECT_TRUE(connection_.connected()); | 3273 EXPECT_TRUE(connection_.connected()); |
3274 EXPECT_EQ(default_timeout.Add(five_ms).Add(five_ms), | 3274 EXPECT_EQ(default_timeout + five_ms + five_ms, |
3275 connection_.GetTimeoutAlarm()->deadline()); | 3275 connection_.GetTimeoutAlarm()->deadline()); |
3276 | 3276 |
3277 // This time, we should time out. | 3277 // This time, we should time out. |
3278 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3278 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3279 ConnectionCloseSource::FROM_SELF)); | 3279 ConnectionCloseSource::FROM_SELF)); |
3280 clock_.AdvanceTime(five_ms); | 3280 clock_.AdvanceTime(five_ms); |
3281 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3281 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); |
3282 connection_.GetTimeoutAlarm()->Fire(); | 3282 connection_.GetTimeoutAlarm()->Fire(); |
3283 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3283 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
3284 EXPECT_FALSE(connection_.connected()); | 3284 EXPECT_FALSE(connection_.connected()); |
3285 } | 3285 } |
3286 | 3286 |
3287 TEST_P(QuicConnectionTest, TimeoutAfterReceive) { | 3287 TEST_P(QuicConnectionTest, TimeoutAfterReceive) { |
3288 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3288 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3289 EXPECT_TRUE(connection_.connected()); | 3289 EXPECT_TRUE(connection_.connected()); |
3290 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3290 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
3291 QuicConfig config; | 3291 QuicConfig config; |
3292 connection_.SetFromConfig(config); | 3292 connection_.SetFromConfig(config); |
3293 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); | 3293 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); |
3294 | 3294 |
3295 const QuicTime::Delta initial_idle_timeout = | 3295 const QuicTime::Delta initial_idle_timeout = |
3296 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); | 3296 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
3297 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); | 3297 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); |
3298 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); | 3298 QuicTime default_timeout = clock_.ApproximateNow() + initial_idle_timeout; |
3299 | 3299 |
3300 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 3300 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
3301 nullptr); | 3301 nullptr); |
3302 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, | 3302 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, |
3303 nullptr); | 3303 nullptr); |
3304 | 3304 |
3305 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3305 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3306 clock_.AdvanceTime(five_ms); | 3306 clock_.AdvanceTime(five_ms); |
3307 | 3307 |
3308 // When we receive a packet, the timeout will change to 5ms + | 3308 // When we receive a packet, the timeout will change to 5ms + |
3309 // kInitialIdleTimeoutSecs. | 3309 // kInitialIdleTimeoutSecs. |
3310 QuicAckFrame ack = InitAckFrame(2); | 3310 QuicAckFrame ack = InitAckFrame(2); |
3311 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 3311 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
3312 ProcessAckPacket(&ack); | 3312 ProcessAckPacket(&ack); |
3313 | 3313 |
3314 // The original alarm will fire. We should not time out because we had a | 3314 // The original alarm will fire. We should not time out because we had a |
3315 // network event at t=5ms. The alarm will reregister. | 3315 // network event at t=5ms. The alarm will reregister. |
3316 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); | 3316 clock_.AdvanceTime(initial_idle_timeout - five_ms); |
3317 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3317 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3318 connection_.GetTimeoutAlarm()->Fire(); | 3318 connection_.GetTimeoutAlarm()->Fire(); |
3319 EXPECT_TRUE(connection_.connected()); | 3319 EXPECT_TRUE(connection_.connected()); |
3320 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3320 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3321 EXPECT_EQ(default_timeout.Add(five_ms), | 3321 EXPECT_EQ(default_timeout + five_ms, |
3322 connection_.GetTimeoutAlarm()->deadline()); | 3322 connection_.GetTimeoutAlarm()->deadline()); |
3323 | 3323 |
3324 // This time, we should time out. | 3324 // This time, we should time out. |
3325 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3325 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3326 ConnectionCloseSource::FROM_SELF)); | 3326 ConnectionCloseSource::FROM_SELF)); |
3327 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3327 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
3328 clock_.AdvanceTime(five_ms); | 3328 clock_.AdvanceTime(five_ms); |
3329 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); | 3329 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); |
3330 connection_.GetTimeoutAlarm()->Fire(); | 3330 connection_.GetTimeoutAlarm()->Fire(); |
3331 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3331 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
3332 EXPECT_FALSE(connection_.connected()); | 3332 EXPECT_FALSE(connection_.connected()); |
3333 } | 3333 } |
3334 | 3334 |
3335 TEST_P(QuicConnectionTest, TimeoutAfterReceiveNotSendWhenUnacked) { | 3335 TEST_P(QuicConnectionTest, TimeoutAfterReceiveNotSendWhenUnacked) { |
3336 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3336 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3337 EXPECT_TRUE(connection_.connected()); | 3337 EXPECT_TRUE(connection_.connected()); |
3338 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3338 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
3339 QuicConfig config; | 3339 QuicConfig config; |
3340 connection_.SetFromConfig(config); | 3340 connection_.SetFromConfig(config); |
3341 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); | 3341 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); |
3342 | 3342 |
3343 const QuicTime::Delta initial_idle_timeout = | 3343 const QuicTime::Delta initial_idle_timeout = |
3344 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); | 3344 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
3345 connection_.SetNetworkTimeouts( | 3345 connection_.SetNetworkTimeouts( |
3346 QuicTime::Delta::Infinite(), | 3346 QuicTime::Delta::Infinite(), |
3347 initial_idle_timeout.Add(QuicTime::Delta::FromSeconds(1))); | 3347 initial_idle_timeout + QuicTime::Delta::FromSeconds(1)); |
3348 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); | 3348 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); |
3349 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); | 3349 QuicTime default_timeout = clock_.ApproximateNow() + initial_idle_timeout; |
3350 | 3350 |
3351 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3351 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
3352 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 3352 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
3353 nullptr); | 3353 nullptr); |
3354 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3354 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
3355 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, | 3355 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, |
3356 nullptr); | 3356 nullptr); |
3357 | 3357 |
3358 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3358 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3359 | 3359 |
3360 clock_.AdvanceTime(five_ms); | 3360 clock_.AdvanceTime(five_ms); |
3361 | 3361 |
3362 // When we receive a packet, the timeout will change to 5ms + | 3362 // When we receive a packet, the timeout will change to 5ms + |
3363 // kInitialIdleTimeoutSecs. | 3363 // kInitialIdleTimeoutSecs. |
3364 QuicAckFrame ack = InitAckFrame(2); | 3364 QuicAckFrame ack = InitAckFrame(2); |
3365 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 3365 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
3366 ProcessAckPacket(&ack); | 3366 ProcessAckPacket(&ack); |
3367 | 3367 |
3368 // The original alarm will fire. We should not time out because we had a | 3368 // The original alarm will fire. We should not time out because we had a |
3369 // network event at t=5ms. The alarm will reregister. | 3369 // network event at t=5ms. The alarm will reregister. |
3370 clock_.AdvanceTime(initial_idle_timeout.Subtract(five_ms)); | 3370 clock_.AdvanceTime(initial_idle_timeout - five_ms); |
3371 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3371 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3372 connection_.GetTimeoutAlarm()->Fire(); | 3372 connection_.GetTimeoutAlarm()->Fire(); |
3373 EXPECT_TRUE(connection_.connected()); | 3373 EXPECT_TRUE(connection_.connected()); |
3374 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3374 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3375 EXPECT_EQ(default_timeout.Add(five_ms), | 3375 EXPECT_EQ(default_timeout + five_ms, |
3376 connection_.GetTimeoutAlarm()->deadline()); | 3376 connection_.GetTimeoutAlarm()->deadline()); |
3377 | 3377 |
3378 // Now, send packets while advancing the time and verify that the connection | 3378 // Now, send packets while advancing the time and verify that the connection |
3379 // eventually times out. | 3379 // eventually times out. |
3380 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3380 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3381 ConnectionCloseSource::FROM_SELF)); | 3381 ConnectionCloseSource::FROM_SELF)); |
3382 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 3382 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
3383 for (int i = 0; i < 100 && connection_.connected(); ++i) { | 3383 for (int i = 0; i < 100 && connection_.connected(); ++i) { |
3384 VLOG(1) << "sending data packet"; | 3384 VLOG(1) << "sending data packet"; |
3385 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 3385 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3521 connection_.SetFromConfig(config); | 3521 connection_.SetFromConfig(config); |
3522 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); | 3522 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); |
3523 EXPECT_EQ(payload.size(), | 3523 EXPECT_EQ(payload.size(), |
3524 connection_.SendStreamDataWithString(3, payload, 0, !kFin, nullptr) | 3524 connection_.SendStreamDataWithString(3, payload, 0, !kFin, nullptr) |
3525 .bytes_consumed); | 3525 .bytes_consumed); |
3526 // Just like above, we save 8 bytes on payload, and 8 on truncation. | 3526 // Just like above, we save 8 bytes on payload, and 8 on truncation. |
3527 EXPECT_EQ(non_truncated_packet_size, writer_->last_packet_size() + 8 * 2); | 3527 EXPECT_EQ(non_truncated_packet_size, writer_->last_packet_size() + 8 * 2); |
3528 } | 3528 } |
3529 | 3529 |
3530 TEST_P(QuicConnectionTest, SendDelayedAck) { | 3530 TEST_P(QuicConnectionTest, SendDelayedAck) { |
3531 QuicTime ack_time = clock_.ApproximateNow().Add(DefaultDelayedAckTime()); | 3531 QuicTime ack_time = clock_.ApproximateNow() + DefaultDelayedAckTime(); |
3532 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3532 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3533 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3533 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3534 const uint8_t tag = 0x07; | 3534 const uint8_t tag = 0x07; |
3535 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3535 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3536 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3536 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3537 // Process a packet from the non-crypto stream. | 3537 // Process a packet from the non-crypto stream. |
3538 frame1_.stream_id = 3; | 3538 frame1_.stream_id = 3; |
3539 | 3539 |
3540 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used | 3540 // The same as ProcessPacket(1) except that ENCRYPTION_INITIAL is used |
3541 // instead of ENCRYPTION_NONE. | 3541 // instead of ENCRYPTION_NONE. |
(...skipping 15 matching lines...) Expand all Loading... |
3557 | 3557 |
3558 TEST_P(QuicConnectionTest, SendDelayedAckDecimation) { | 3558 TEST_P(QuicConnectionTest, SendDelayedAckDecimation) { |
3559 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); | 3559 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); |
3560 | 3560 |
3561 const size_t kMinRttMs = 40; | 3561 const size_t kMinRttMs = 40; |
3562 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3562 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3563 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3563 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3564 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3564 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3565 // The ack time should be based on min_rtt/4, since it's less than the | 3565 // The ack time should be based on min_rtt/4, since it's less than the |
3566 // default delayed ack time. | 3566 // default delayed ack time. |
3567 QuicTime ack_time = clock_.ApproximateNow().Add( | 3567 QuicTime ack_time = clock_.ApproximateNow() + |
3568 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4)); | 3568 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4); |
3569 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3569 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3570 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3570 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3571 const uint8_t tag = 0x07; | 3571 const uint8_t tag = 0x07; |
3572 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3572 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3573 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3573 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3574 // Process a packet from the non-crypto stream. | 3574 // Process a packet from the non-crypto stream. |
3575 frame1_.stream_id = 3; | 3575 frame1_.stream_id = 3; |
3576 | 3576 |
3577 // Process all the initial packets in order so there aren't missing packets. | 3577 // Process all the initial packets in order so there aren't missing packets. |
3578 QuicPacketNumber kFirstDecimatedPacket = 101; | 3578 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3610 TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) { | 3610 TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) { |
3611 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); | 3611 QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION); |
3612 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 3612 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
3613 | 3613 |
3614 const size_t kMinRttMs = 40; | 3614 const size_t kMinRttMs = 40; |
3615 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3615 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3616 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3616 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3617 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3617 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3618 // The ack time should be based on min_rtt/8, since it's less than the | 3618 // The ack time should be based on min_rtt/8, since it's less than the |
3619 // default delayed ack time. | 3619 // default delayed ack time. |
3620 QuicTime ack_time = clock_.ApproximateNow().Add( | 3620 QuicTime ack_time = clock_.ApproximateNow() + |
3621 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8)); | 3621 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8); |
3622 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3622 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3623 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3623 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3624 const uint8_t tag = 0x07; | 3624 const uint8_t tag = 0x07; |
3625 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3625 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3626 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3626 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3627 // Process a packet from the non-crypto stream. | 3627 // Process a packet from the non-crypto stream. |
3628 frame1_.stream_id = 3; | 3628 frame1_.stream_id = 3; |
3629 | 3629 |
3630 // Process all the initial packets in order so there aren't missing packets. | 3630 // Process all the initial packets in order so there aren't missing packets. |
3631 QuicPacketNumber kFirstDecimatedPacket = 101; | 3631 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3663 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) { | 3663 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) { |
3664 QuicConnectionPeer::SetAckMode( | 3664 QuicConnectionPeer::SetAckMode( |
3665 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3665 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3666 | 3666 |
3667 const size_t kMinRttMs = 40; | 3667 const size_t kMinRttMs = 40; |
3668 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3668 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3669 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3669 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3670 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3670 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3671 // The ack time should be based on min_rtt/4, since it's less than the | 3671 // The ack time should be based on min_rtt/4, since it's less than the |
3672 // default delayed ack time. | 3672 // default delayed ack time. |
3673 QuicTime ack_time = clock_.ApproximateNow().Add( | 3673 QuicTime ack_time = clock_.ApproximateNow() + |
3674 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4)); | 3674 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4); |
3675 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3675 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3676 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3676 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3677 const uint8_t tag = 0x07; | 3677 const uint8_t tag = 0x07; |
3678 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3678 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3679 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3679 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3680 // Process a packet from the non-crypto stream. | 3680 // Process a packet from the non-crypto stream. |
3681 frame1_.stream_id = 3; | 3681 frame1_.stream_id = 3; |
3682 | 3682 |
3683 // Process all the initial packets in order so there aren't missing packets. | 3683 // Process all the initial packets in order so there aren't missing packets. |
3684 QuicPacketNumber kFirstDecimatedPacket = 101; | 3684 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 10 matching lines...) Expand all Loading... |
3695 !kHasStopWaiting, ENCRYPTION_INITIAL); | 3695 !kHasStopWaiting, ENCRYPTION_INITIAL); |
3696 | 3696 |
3697 // Check if delayed ack timer is running for the expected interval. | 3697 // Check if delayed ack timer is running for the expected interval. |
3698 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3698 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3699 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3699 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3700 | 3700 |
3701 // Process packet 10 first and ensure the alarm is one eighth min_rtt. | 3701 // Process packet 10 first and ensure the alarm is one eighth min_rtt. |
3702 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3702 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3703 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 9, | 3703 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 9, |
3704 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); | 3704 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); |
3705 ack_time = clock_.ApproximateNow().Add(QuicTime::Delta::FromMilliseconds(5)); | 3705 ack_time = clock_.ApproximateNow() + QuicTime::Delta::FromMilliseconds(5); |
3706 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3706 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3707 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3707 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3708 | 3708 |
3709 // The 10th received packet causes an ack to be sent. | 3709 // The 10th received packet causes an ack to be sent. |
3710 for (int i = 0; i < 8; ++i) { | 3710 for (int i = 0; i < 8; ++i) { |
3711 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3711 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3712 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3712 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3713 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, | 3713 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, |
3714 !kEntropyFlag, !kHasStopWaiting, | 3714 !kEntropyFlag, !kHasStopWaiting, |
3715 ENCRYPTION_INITIAL); | 3715 ENCRYPTION_INITIAL); |
3716 } | 3716 } |
3717 // Check that ack is sent and that delayed ack alarm is reset. | 3717 // Check that ack is sent and that delayed ack alarm is reset. |
3718 EXPECT_EQ(2u, writer_->frame_count()); | 3718 EXPECT_EQ(2u, writer_->frame_count()); |
3719 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3719 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3720 EXPECT_FALSE(writer_->ack_frames().empty()); | 3720 EXPECT_FALSE(writer_->ack_frames().empty()); |
3721 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3721 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3722 } | 3722 } |
3723 | 3723 |
3724 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) { | 3724 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) { |
3725 QuicConnectionPeer::SetAckMode( | 3725 QuicConnectionPeer::SetAckMode( |
3726 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3726 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3727 | 3727 |
3728 const size_t kMinRttMs = 40; | 3728 const size_t kMinRttMs = 40; |
3729 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3729 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3730 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3730 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3731 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3731 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3732 // The ack time should be based on min_rtt/4, since it's less than the | 3732 // The ack time should be based on min_rtt/4, since it's less than the |
3733 // default delayed ack time. | 3733 // default delayed ack time. |
3734 QuicTime ack_time = clock_.ApproximateNow().Add( | 3734 QuicTime ack_time = clock_.ApproximateNow() + |
3735 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4)); | 3735 QuicTime::Delta::FromMilliseconds(kMinRttMs / 4); |
3736 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3736 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3737 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3737 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3738 const uint8_t tag = 0x07; | 3738 const uint8_t tag = 0x07; |
3739 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3739 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3740 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3740 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3741 // Process a packet from the non-crypto stream. | 3741 // Process a packet from the non-crypto stream. |
3742 frame1_.stream_id = 3; | 3742 frame1_.stream_id = 3; |
3743 | 3743 |
3744 // Process all the initial packets in order so there aren't missing packets. | 3744 // Process all the initial packets in order so there aren't missing packets. |
3745 QuicPacketNumber kFirstDecimatedPacket = 101; | 3745 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 10 matching lines...) Expand all Loading... |
3756 !kHasStopWaiting, ENCRYPTION_INITIAL); | 3756 !kHasStopWaiting, ENCRYPTION_INITIAL); |
3757 | 3757 |
3758 // Check if delayed ack timer is running for the expected interval. | 3758 // Check if delayed ack timer is running for the expected interval. |
3759 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3759 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3760 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3760 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3761 | 3761 |
3762 // Process packet 10 first and ensure the alarm is one eighth min_rtt. | 3762 // Process packet 10 first and ensure the alarm is one eighth min_rtt. |
3763 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3763 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3764 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 19, | 3764 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 19, |
3765 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); | 3765 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); |
3766 ack_time = clock_.ApproximateNow().Add(QuicTime::Delta::FromMilliseconds(5)); | 3766 ack_time = clock_.ApproximateNow() + QuicTime::Delta::FromMilliseconds(5); |
3767 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3767 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3768 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3768 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3769 | 3769 |
3770 // The 10th received packet causes an ack to be sent. | 3770 // The 10th received packet causes an ack to be sent. |
3771 for (int i = 0; i < 8; ++i) { | 3771 for (int i = 0; i < 8; ++i) { |
3772 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3772 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3773 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3773 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3774 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, | 3774 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, |
3775 !kEntropyFlag, !kHasStopWaiting, | 3775 !kEntropyFlag, !kHasStopWaiting, |
3776 ENCRYPTION_INITIAL); | 3776 ENCRYPTION_INITIAL); |
(...skipping 21 matching lines...) Expand all Loading... |
3798 QuicConnectionPeer::SetAckMode( | 3798 QuicConnectionPeer::SetAckMode( |
3799 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3799 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3800 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 3800 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
3801 | 3801 |
3802 const size_t kMinRttMs = 40; | 3802 const size_t kMinRttMs = 40; |
3803 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3803 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3804 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3804 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3805 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3805 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3806 // The ack time should be based on min_rtt/8, since it's less than the | 3806 // The ack time should be based on min_rtt/8, since it's less than the |
3807 // default delayed ack time. | 3807 // default delayed ack time. |
3808 QuicTime ack_time = clock_.ApproximateNow().Add( | 3808 QuicTime ack_time = clock_.ApproximateNow() + |
3809 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8)); | 3809 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8); |
3810 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3810 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3811 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3811 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3812 const uint8_t tag = 0x07; | 3812 const uint8_t tag = 0x07; |
3813 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3813 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3814 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3814 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3815 // Process a packet from the non-crypto stream. | 3815 // Process a packet from the non-crypto stream. |
3816 frame1_.stream_id = 3; | 3816 frame1_.stream_id = 3; |
3817 | 3817 |
3818 // Process all the initial packets in order so there aren't missing packets. | 3818 // Process all the initial packets in order so there aren't missing packets. |
3819 QuicPacketNumber kFirstDecimatedPacket = 101; | 3819 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 10 matching lines...) Expand all Loading... |
3830 !kHasStopWaiting, ENCRYPTION_INITIAL); | 3830 !kHasStopWaiting, ENCRYPTION_INITIAL); |
3831 | 3831 |
3832 // Check if delayed ack timer is running for the expected interval. | 3832 // Check if delayed ack timer is running for the expected interval. |
3833 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3833 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3834 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3834 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3835 | 3835 |
3836 // Process packet 10 first and ensure the alarm is one eighth min_rtt. | 3836 // Process packet 10 first and ensure the alarm is one eighth min_rtt. |
3837 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3837 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3838 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 9, | 3838 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 9, |
3839 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); | 3839 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); |
3840 ack_time = clock_.ApproximateNow().Add(QuicTime::Delta::FromMilliseconds(5)); | 3840 ack_time = clock_.ApproximateNow() + QuicTime::Delta::FromMilliseconds(5); |
3841 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3841 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3842 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3842 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3843 | 3843 |
3844 // The 10th received packet causes an ack to be sent. | 3844 // The 10th received packet causes an ack to be sent. |
3845 for (int i = 0; i < 8; ++i) { | 3845 for (int i = 0; i < 8; ++i) { |
3846 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3846 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3847 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3847 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3848 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, | 3848 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, |
3849 !kEntropyFlag, !kHasStopWaiting, | 3849 !kEntropyFlag, !kHasStopWaiting, |
3850 ENCRYPTION_INITIAL); | 3850 ENCRYPTION_INITIAL); |
(...skipping 10 matching lines...) Expand all Loading... |
3861 QuicConnectionPeer::SetAckMode( | 3861 QuicConnectionPeer::SetAckMode( |
3862 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); | 3862 &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING); |
3863 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); | 3863 QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125); |
3864 | 3864 |
3865 const size_t kMinRttMs = 40; | 3865 const size_t kMinRttMs = 40; |
3866 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); | 3866 RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats()); |
3867 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), | 3867 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs), |
3868 QuicTime::Delta::Zero(), QuicTime::Zero()); | 3868 QuicTime::Delta::Zero(), QuicTime::Zero()); |
3869 // The ack time should be based on min_rtt/8, since it's less than the | 3869 // The ack time should be based on min_rtt/8, since it's less than the |
3870 // default delayed ack time. | 3870 // default delayed ack time. |
3871 QuicTime ack_time = clock_.ApproximateNow().Add( | 3871 QuicTime ack_time = clock_.ApproximateNow() + |
3872 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8)); | 3872 QuicTime::Delta::FromMilliseconds(kMinRttMs / 8); |
3873 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3873 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3874 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3874 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3875 const uint8_t tag = 0x07; | 3875 const uint8_t tag = 0x07; |
3876 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); | 3876 connection_.SetDecrypter(ENCRYPTION_INITIAL, new StrictTaggingDecrypter(tag)); |
3877 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 3877 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
3878 // Process a packet from the non-crypto stream. | 3878 // Process a packet from the non-crypto stream. |
3879 frame1_.stream_id = 3; | 3879 frame1_.stream_id = 3; |
3880 | 3880 |
3881 // Process all the initial packets in order so there aren't missing packets. | 3881 // Process all the initial packets in order so there aren't missing packets. |
3882 QuicPacketNumber kFirstDecimatedPacket = 101; | 3882 QuicPacketNumber kFirstDecimatedPacket = 101; |
(...skipping 10 matching lines...) Expand all Loading... |
3893 !kHasStopWaiting, ENCRYPTION_INITIAL); | 3893 !kHasStopWaiting, ENCRYPTION_INITIAL); |
3894 | 3894 |
3895 // Check if delayed ack timer is running for the expected interval. | 3895 // Check if delayed ack timer is running for the expected interval. |
3896 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3896 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3897 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3897 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3898 | 3898 |
3899 // Process packet 10 first and ensure the alarm is one eighth min_rtt. | 3899 // Process packet 10 first and ensure the alarm is one eighth min_rtt. |
3900 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3900 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3901 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 19, | 3901 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 19, |
3902 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); | 3902 !kEntropyFlag, !kHasStopWaiting, ENCRYPTION_INITIAL); |
3903 ack_time = clock_.ApproximateNow().Add(QuicTime::Delta::FromMilliseconds(5)); | 3903 ack_time = clock_.ApproximateNow() + QuicTime::Delta::FromMilliseconds(5); |
3904 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3904 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3905 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3905 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3906 | 3906 |
3907 // The 10th received packet causes an ack to be sent. | 3907 // The 10th received packet causes an ack to be sent. |
3908 for (int i = 0; i < 8; ++i) { | 3908 for (int i = 0; i < 8; ++i) { |
3909 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3909 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3910 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 3910 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
3911 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, | 3911 ProcessDataPacketAtLevel(kDefaultPathId, kFirstDecimatedPacket + 1 + i, |
3912 !kEntropyFlag, !kHasStopWaiting, | 3912 !kEntropyFlag, !kHasStopWaiting, |
3913 ENCRYPTION_INITIAL); | 3913 ENCRYPTION_INITIAL); |
(...skipping 15 matching lines...) Expand all Loading... |
3929 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 3929 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
3930 EXPECT_FALSE(writer_->ack_frames().empty()); | 3930 EXPECT_FALSE(writer_->ack_frames().empty()); |
3931 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 3931 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
3932 } | 3932 } |
3933 | 3933 |
3934 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) { | 3934 TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) { |
3935 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3935 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3936 ProcessPacket(kDefaultPathId, 1); | 3936 ProcessPacket(kDefaultPathId, 1); |
3937 // Check that ack is sent and that delayed ack alarm is set. | 3937 // Check that ack is sent and that delayed ack alarm is set. |
3938 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3938 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3939 QuicTime ack_time = clock_.ApproximateNow().Add(DefaultDelayedAckTime()); | 3939 QuicTime ack_time = clock_.ApproximateNow() + DefaultDelayedAckTime(); |
3940 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3940 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3941 | 3941 |
3942 // Completing the handshake as the server does nothing. | 3942 // Completing the handshake as the server does nothing. |
3943 QuicConnectionPeer::SetPerspective(&connection_, Perspective::IS_SERVER); | 3943 QuicConnectionPeer::SetPerspective(&connection_, Perspective::IS_SERVER); |
3944 connection_.OnHandshakeComplete(); | 3944 connection_.OnHandshakeComplete(); |
3945 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); | 3945 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
3946 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); | 3946 EXPECT_EQ(ack_time, connection_.GetAckAlarm()->deadline()); |
3947 | 3947 |
3948 // Complete the handshake as the client decreases the delayed ack time to 0ms. | 3948 // Complete the handshake as the client decreases the delayed ack time to 0ms. |
3949 QuicConnectionPeer::SetPerspective(&connection_, Perspective::IS_CLIENT); | 3949 QuicConnectionPeer::SetPerspective(&connection_, Perspective::IS_CLIENT); |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4654 // AckNotifierCallback is triggered by the ack of a packet that timed | 4654 // AckNotifierCallback is triggered by the ack of a packet that timed |
4655 // out and was retransmitted, even though the retransmission has a | 4655 // out and was retransmitted, even though the retransmission has a |
4656 // different packet number. | 4656 // different packet number. |
4657 TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) { | 4657 TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) { |
4658 connection_.DisableTailLossProbe(); | 4658 connection_.DisableTailLossProbe(); |
4659 | 4659 |
4660 // Create a listener which we expect to be called. | 4660 // Create a listener which we expect to be called. |
4661 scoped_refptr<MockAckListener> listener(new StrictMock<MockAckListener>); | 4661 scoped_refptr<MockAckListener> listener(new StrictMock<MockAckListener>); |
4662 | 4662 |
4663 QuicTime default_retransmission_time = | 4663 QuicTime default_retransmission_time = |
4664 clock_.ApproximateNow().Add(DefaultRetransmissionTime()); | 4664 clock_.ApproximateNow() + DefaultRetransmissionTime(); |
4665 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, listener.get()); | 4665 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, listener.get()); |
4666 EXPECT_EQ(1u, stop_waiting()->least_unacked); | 4666 EXPECT_EQ(1u, stop_waiting()->least_unacked); |
4667 | 4667 |
4668 EXPECT_EQ(1u, writer_->header().packet_number); | 4668 EXPECT_EQ(1u, writer_->header().packet_number); |
4669 EXPECT_EQ(default_retransmission_time, | 4669 EXPECT_EQ(default_retransmission_time, |
4670 connection_.GetRetransmissionAlarm()->deadline()); | 4670 connection_.GetRetransmissionAlarm()->deadline()); |
4671 // Simulate the retransmission alarm firing. | 4671 // Simulate the retransmission alarm firing. |
4672 clock_.AdvanceTime(DefaultRetransmissionTime()); | 4672 clock_.AdvanceTime(DefaultRetransmissionTime()); |
4673 EXPECT_CALL(*listener, OnPacketRetransmitted(3)); | 4673 EXPECT_CALL(*listener, OnPacketRetransmitted(3)); |
4674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); | 4674 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4810 TEST_P(QuicConnectionTest, ReevaluateTimeUntilSendOnAck) { | 4810 TEST_P(QuicConnectionTest, ReevaluateTimeUntilSendOnAck) { |
4811 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 4811 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
4812 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 4812 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
4813 nullptr); | 4813 nullptr); |
4814 | 4814 |
4815 // Evaluate CanWrite, and have it return a non-Zero value. | 4815 // Evaluate CanWrite, and have it return a non-Zero value. |
4816 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 4816 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
4817 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 4817 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); |
4818 connection_.OnCanWrite(); | 4818 connection_.OnCanWrite(); |
4819 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); | 4819 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); |
4820 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(1)), | 4820 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(1), |
4821 connection_.GetSendAlarm()->deadline()); | 4821 connection_.GetSendAlarm()->deadline()); |
4822 | 4822 |
4823 // Process an ack and the send alarm will be set to the new 2ms delay. | 4823 // Process an ack and the send alarm will be set to the new 2ms delay. |
4824 QuicAckFrame ack = InitAckFrame(1); | 4824 QuicAckFrame ack = InitAckFrame(1); |
4825 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _)); | 4825 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _)); |
4826 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 4826 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
4827 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 4827 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
4828 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(2))); | 4828 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(2))); |
4829 ProcessAckPacket(&ack); | 4829 ProcessAckPacket(&ack); |
4830 EXPECT_EQ(1u, writer_->frame_count()); | 4830 EXPECT_EQ(1u, writer_->frame_count()); |
4831 EXPECT_EQ(1u, writer_->stream_frames().size()); | 4831 EXPECT_EQ(1u, writer_->stream_frames().size()); |
4832 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); | 4832 EXPECT_TRUE(connection_.GetSendAlarm()->IsSet()); |
4833 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(2)), | 4833 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(2), |
4834 connection_.GetSendAlarm()->deadline()); | 4834 connection_.GetSendAlarm()->deadline()); |
4835 writer_->Reset(); | 4835 writer_->Reset(); |
4836 } | 4836 } |
4837 | 4837 |
4838 TEST_P(QuicConnectionTest, SendAcksImmediately) { | 4838 TEST_P(QuicConnectionTest, SendAcksImmediately) { |
4839 CongestionBlockWrites(); | 4839 CongestionBlockWrites(); |
4840 SendAckPacketToPeer(); | 4840 SendAckPacketToPeer(); |
4841 } | 4841 } |
4842 | 4842 |
4843 TEST_P(QuicConnectionTest, SendPingImmediately) { | 4843 TEST_P(QuicConnectionTest, SendPingImmediately) { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4975 frame1_.data_length = data->length(); | 4975 frame1_.data_length = data->length(); |
4976 | 4976 |
4977 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _, | 4977 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _, |
4978 ConnectionCloseSource::FROM_SELF)); | 4978 ConnectionCloseSource::FROM_SELF)); |
4979 ProcessFramePacket(QuicFrame(&frame1_)); | 4979 ProcessFramePacket(QuicFrame(&frame1_)); |
4980 } | 4980 } |
4981 | 4981 |
4982 } // namespace | 4982 } // namespace |
4983 } // namespace test | 4983 } // namespace test |
4984 } // namespace net | 4984 } // namespace net |
OLD | NEW |