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

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

Issue 786123002: Update from https://crrev.com/307330 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_crypto_client_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 13 matching lines...) Expand all
24 #include "net/quic/test_tools/quic_framer_peer.h" 24 #include "net/quic/test_tools/quic_framer_peer.h"
25 #include "net/quic/test_tools/quic_packet_creator_peer.h" 25 #include "net/quic/test_tools/quic_packet_creator_peer.h"
26 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 26 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
27 #include "net/quic/test_tools/quic_test_utils.h" 27 #include "net/quic/test_tools/quic_test_utils.h"
28 #include "net/quic/test_tools/simple_quic_framer.h" 28 #include "net/quic/test_tools/simple_quic_framer.h"
29 #include "testing/gmock/include/gmock/gmock.h" 29 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
31 31
32 using base::StringPiece; 32 using base::StringPiece;
33 using std::map; 33 using std::map;
34 using std::string;
34 using std::vector; 35 using std::vector;
35 using testing::AnyNumber; 36 using testing::AnyNumber;
36 using testing::AtLeast; 37 using testing::AtLeast;
37 using testing::ContainerEq; 38 using testing::ContainerEq;
38 using testing::Contains; 39 using testing::Contains;
39 using testing::DoAll; 40 using testing::DoAll;
40 using testing::InSequence; 41 using testing::InSequence;
41 using testing::InvokeWithoutArgs; 42 using testing::InvokeWithoutArgs;
42 using testing::NiceMock; 43 using testing::NiceMock;
43 using testing::Ref; 44 using testing::Ref;
(...skipping 2936 matching lines...) Expand 10 before | Expand all | Expand 10 after
2980 SendAckPacketToPeer(); 2981 SendAckPacketToPeer();
2981 2982
2982 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); 2983 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet());
2983 } 2984 }
2984 2985
2985 TEST_P(QuicConnectionTest, TimeoutAfterSend) { 2986 TEST_P(QuicConnectionTest, TimeoutAfterSend) {
2986 EXPECT_TRUE(connection_.connected()); 2987 EXPECT_TRUE(connection_.connected());
2987 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); 2988 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _));
2988 QuicConfig config; 2989 QuicConfig config;
2989 connection_.SetFromConfig(config); 2990 connection_.SetFromConfig(config);
2991 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_));
2990 2992
2991 const QuicTime::Delta initial_idle_timeout = 2993 const QuicTime::Delta initial_idle_timeout =
2992 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); 2994 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1);
2993 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); 2995 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5);
2994 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); 2996 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout);
2995 2997
2996 // When we send a packet, the timeout will change to 5ms + 2998 // When we send a packet, the timeout will change to 5ms +
2997 // kInitialIdleTimeoutSecs. 2999 // kInitialIdleTimeoutSecs.
2998 clock_.AdvanceTime(five_ms); 3000 clock_.AdvanceTime(five_ms);
2999 3001
(...skipping 14 matching lines...) Expand all
3014 // This time, we should time out. 3016 // This time, we should time out.
3015 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); 3017 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false));
3016 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3018 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3017 clock_.AdvanceTime(five_ms); 3019 clock_.AdvanceTime(five_ms);
3018 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); 3020 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow());
3019 connection_.GetTimeoutAlarm()->Fire(); 3021 connection_.GetTimeoutAlarm()->Fire();
3020 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 3022 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3021 EXPECT_FALSE(connection_.connected()); 3023 EXPECT_FALSE(connection_.connected());
3022 } 3024 }
3023 3025
3026 TEST_P(QuicConnectionTest, TimeoutAfterSendSilentClose) {
3027 // Same test as above, but complete a handshake which enables silent close,
3028 // causing no connection close packet to be sent.
3029 ValueRestore<bool> old_flag(&FLAGS_quic_allow_silent_close, true);
3030 EXPECT_TRUE(connection_.connected());
3031 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _));
3032 QuicConfig config;
3033
3034 // Create a handshake message that also enables silent close.
3035 CryptoHandshakeMessage msg;
3036 string error_details;
3037 QuicConfig client_config;
3038 client_config.SetInitialFlowControlWindowToSend(
3039 kInitialSessionFlowControlWindowForTest);
3040 client_config.SetInitialStreamFlowControlWindowToSend(
3041 kInitialStreamFlowControlWindowForTest);
3042 client_config.SetInitialSessionFlowControlWindowToSend(
3043 kInitialSessionFlowControlWindowForTest);
3044 client_config.SetIdleConnectionStateLifetime(
3045 QuicTime::Delta::FromSeconds(kDefaultIdleTimeoutSecs),
3046 QuicTime::Delta::FromSeconds(kDefaultIdleTimeoutSecs));
3047 client_config.ToHandshakeMessage(&msg);
3048 const QuicErrorCode error =
3049 config.ProcessPeerHello(msg, CLIENT, &error_details);
3050 EXPECT_EQ(QUIC_NO_ERROR, error);
3051
3052 connection_.SetFromConfig(config);
3053 EXPECT_TRUE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_));
3054
3055 const QuicTime::Delta default_idle_timeout =
3056 QuicTime::Delta::FromSeconds(kDefaultIdleTimeoutSecs - 1);
3057 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5);
3058 QuicTime default_timeout = clock_.ApproximateNow().Add(default_idle_timeout);
3059
3060 // When we send a packet, the timeout will change to 5ms +
3061 // kInitialIdleTimeoutSecs.
3062 clock_.AdvanceTime(five_ms);
3063
3064 // Send an ack so we don't set the retransmission alarm.
3065 SendAckPacketToPeer();
3066 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
3067
3068 // The original alarm will fire. We should not time out because we had a
3069 // network event at t=5ms. The alarm will reregister.
3070 clock_.AdvanceTime(default_idle_timeout.Subtract(five_ms));
3071 EXPECT_EQ(default_timeout, clock_.ApproximateNow());
3072 connection_.GetTimeoutAlarm()->Fire();
3073 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
3074 EXPECT_TRUE(connection_.connected());
3075 EXPECT_EQ(default_timeout.Add(five_ms),
3076 connection_.GetTimeoutAlarm()->deadline());
3077
3078 // This time, we should time out.
3079 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false));
3080 clock_.AdvanceTime(five_ms);
3081 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow());
3082 connection_.GetTimeoutAlarm()->Fire();
3083 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3084 EXPECT_FALSE(connection_.connected());
3085 }
3086
3024 TEST_P(QuicConnectionTest, SendScheduler) { 3087 TEST_P(QuicConnectionTest, SendScheduler) {
3025 // Test that if we send a packet without delay, it is not queued. 3088 // Test that if we send a packet without delay, it is not queued.
3026 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag); 3089 QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag);
3027 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 3090 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
3028 connection_.SendPacket( 3091 connection_.SendPacket(
3029 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA); 3092 ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA);
3030 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 3093 EXPECT_EQ(0u, connection_.NumQueuedPackets());
3031 } 3094 }
3032 3095
3033 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) { 3096 TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) {
(...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after
4192 QuicBlockedFrame blocked; 4255 QuicBlockedFrame blocked;
4193 blocked.stream_id = 3; 4256 blocked.stream_id = 3;
4194 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 4257 EXPECT_CALL(visitor_, OnBlockedFrames(_));
4195 ProcessFramePacket(QuicFrame(&blocked)); 4258 ProcessFramePacket(QuicFrame(&blocked));
4196 EXPECT_TRUE(ack_alarm->IsSet()); 4259 EXPECT_TRUE(ack_alarm->IsSet());
4197 } 4260 }
4198 4261
4199 } // namespace 4262 } // namespace
4200 } // namespace test 4263 } // namespace test
4201 } // namespace net 4264 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_crypto_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698