OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/core/quic_config.h" | 5 #include "net/quic/core/quic_config.h" |
6 | 6 |
7 #include "net/quic/core/crypto/crypto_handshake_message.h" | 7 #include "net/quic/core/crypto/crypto_handshake_message.h" |
8 #include "net/quic/core/crypto/crypto_protocol.h" | 8 #include "net/quic/core/crypto/crypto_protocol.h" |
9 #include "net/quic/core/quic_packets.h" | 9 #include "net/quic/core/quic_packets.h" |
10 #include "net/quic/core/quic_time.h" | 10 #include "net/quic/core/quic_time.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 }; | 26 }; |
27 | 27 |
28 TEST_F(QuicConfigTest, ToHandshakeMessage) { | 28 TEST_F(QuicConfigTest, ToHandshakeMessage) { |
29 config_.SetInitialStreamFlowControlWindowToSend( | 29 config_.SetInitialStreamFlowControlWindowToSend( |
30 kInitialStreamFlowControlWindowForTest); | 30 kInitialStreamFlowControlWindowForTest); |
31 config_.SetInitialSessionFlowControlWindowToSend( | 31 config_.SetInitialSessionFlowControlWindowToSend( |
32 kInitialSessionFlowControlWindowForTest); | 32 kInitialSessionFlowControlWindowForTest); |
33 config_.SetIdleNetworkTimeout(QuicTime::Delta::FromSeconds(5), | 33 config_.SetIdleNetworkTimeout(QuicTime::Delta::FromSeconds(5), |
34 QuicTime::Delta::FromSeconds(2)); | 34 QuicTime::Delta::FromSeconds(2)); |
35 config_.SetMaxStreamsPerConnection(4, 2); | 35 config_.SetMaxStreamsPerConnection(4, 2); |
36 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
37 config_.SetSocketReceiveBufferToSend(kDefaultSocketReceiveBuffer); | |
38 } | |
39 CryptoHandshakeMessage msg; | 36 CryptoHandshakeMessage msg; |
40 config_.ToHandshakeMessage(&msg); | 37 config_.ToHandshakeMessage(&msg); |
41 | 38 |
42 uint32_t value; | 39 uint32_t value; |
43 QuicErrorCode error = msg.GetUint32(kICSL, &value); | 40 QuicErrorCode error = msg.GetUint32(kICSL, &value); |
44 EXPECT_EQ(QUIC_NO_ERROR, error); | 41 EXPECT_EQ(QUIC_NO_ERROR, error); |
45 EXPECT_EQ(5u, value); | 42 EXPECT_EQ(5u, value); |
46 | 43 |
47 error = msg.GetUint32(kMSPC, &value); | 44 error = msg.GetUint32(kMSPC, &value); |
48 EXPECT_EQ(QUIC_NO_ERROR, error); | 45 EXPECT_EQ(QUIC_NO_ERROR, error); |
49 EXPECT_EQ(4u, value); | 46 EXPECT_EQ(4u, value); |
50 | 47 |
51 error = msg.GetUint32(kSFCW, &value); | 48 error = msg.GetUint32(kSFCW, &value); |
52 EXPECT_EQ(QUIC_NO_ERROR, error); | 49 EXPECT_EQ(QUIC_NO_ERROR, error); |
53 EXPECT_EQ(kInitialStreamFlowControlWindowForTest, value); | 50 EXPECT_EQ(kInitialStreamFlowControlWindowForTest, value); |
54 | 51 |
55 error = msg.GetUint32(kCFCW, &value); | 52 error = msg.GetUint32(kCFCW, &value); |
56 EXPECT_EQ(QUIC_NO_ERROR, error); | 53 EXPECT_EQ(QUIC_NO_ERROR, error); |
57 EXPECT_EQ(kInitialSessionFlowControlWindowForTest, value); | 54 EXPECT_EQ(kInitialSessionFlowControlWindowForTest, value); |
58 | |
59 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
60 error = msg.GetUint32(kSRBF, &value); | |
61 EXPECT_EQ(QUIC_NO_ERROR, error); | |
62 EXPECT_EQ(kDefaultSocketReceiveBuffer, value); | |
63 } | |
64 } | 55 } |
65 | 56 |
66 TEST_F(QuicConfigTest, ProcessClientHello) { | 57 TEST_F(QuicConfigTest, ProcessClientHello) { |
67 QuicConfig client_config; | 58 QuicConfig client_config; |
68 QuicTagVector cgst; | 59 QuicTagVector cgst; |
69 cgst.push_back(kQBIC); | 60 cgst.push_back(kQBIC); |
70 client_config.SetIdleNetworkTimeout( | 61 client_config.SetIdleNetworkTimeout( |
71 QuicTime::Delta::FromSeconds(2 * kMaximumIdleTimeoutSecs), | 62 QuicTime::Delta::FromSeconds(2 * kMaximumIdleTimeoutSecs), |
72 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs)); | 63 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs)); |
73 client_config.SetMaxStreamsPerConnection(2 * kDefaultMaxStreamsPerConnection, | 64 client_config.SetMaxStreamsPerConnection(2 * kDefaultMaxStreamsPerConnection, |
74 kDefaultMaxStreamsPerConnection); | 65 kDefaultMaxStreamsPerConnection); |
75 client_config.SetInitialRoundTripTimeUsToSend(10 * kNumMicrosPerMilli); | 66 client_config.SetInitialRoundTripTimeUsToSend(10 * kNumMicrosPerMilli); |
76 client_config.SetInitialStreamFlowControlWindowToSend( | 67 client_config.SetInitialStreamFlowControlWindowToSend( |
77 2 * kInitialStreamFlowControlWindowForTest); | 68 2 * kInitialStreamFlowControlWindowForTest); |
78 client_config.SetInitialSessionFlowControlWindowToSend( | 69 client_config.SetInitialSessionFlowControlWindowToSend( |
79 2 * kInitialSessionFlowControlWindowForTest); | 70 2 * kInitialSessionFlowControlWindowForTest); |
80 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
81 client_config.SetSocketReceiveBufferToSend(kDefaultSocketReceiveBuffer); | |
82 } | |
83 client_config.SetForceHolBlocking(); | 71 client_config.SetForceHolBlocking(); |
84 QuicTagVector copt; | 72 QuicTagVector copt; |
85 copt.push_back(kTBBR); | 73 copt.push_back(kTBBR); |
86 client_config.SetConnectionOptionsToSend(copt); | 74 client_config.SetConnectionOptionsToSend(copt); |
87 CryptoHandshakeMessage msg; | 75 CryptoHandshakeMessage msg; |
88 client_config.ToHandshakeMessage(&msg); | 76 client_config.ToHandshakeMessage(&msg); |
89 | 77 |
90 string error_details; | 78 string error_details; |
91 QuicTagVector initial_received_options; | 79 QuicTagVector initial_received_options; |
92 initial_received_options.push_back(kIW50); | 80 initial_received_options.push_back(kIW50); |
(...skipping 15 matching lines...) Expand all Loading... |
108 EXPECT_EQ(10 * kNumMicrosPerMilli, config_.ReceivedInitialRoundTripTimeUs()); | 96 EXPECT_EQ(10 * kNumMicrosPerMilli, config_.ReceivedInitialRoundTripTimeUs()); |
109 EXPECT_TRUE(config_.ForceHolBlocking(Perspective::IS_SERVER)); | 97 EXPECT_TRUE(config_.ForceHolBlocking(Perspective::IS_SERVER)); |
110 EXPECT_TRUE(config_.HasReceivedConnectionOptions()); | 98 EXPECT_TRUE(config_.HasReceivedConnectionOptions()); |
111 EXPECT_EQ(2u, config_.ReceivedConnectionOptions().size()); | 99 EXPECT_EQ(2u, config_.ReceivedConnectionOptions().size()); |
112 EXPECT_EQ(config_.ReceivedConnectionOptions()[0], kIW50); | 100 EXPECT_EQ(config_.ReceivedConnectionOptions()[0], kIW50); |
113 EXPECT_EQ(config_.ReceivedConnectionOptions()[1], kTBBR); | 101 EXPECT_EQ(config_.ReceivedConnectionOptions()[1], kTBBR); |
114 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), | 102 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), |
115 2 * kInitialStreamFlowControlWindowForTest); | 103 2 * kInitialStreamFlowControlWindowForTest); |
116 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), | 104 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), |
117 2 * kInitialSessionFlowControlWindowForTest); | 105 2 * kInitialSessionFlowControlWindowForTest); |
118 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
119 EXPECT_EQ(config_.ReceivedSocketReceiveBuffer(), | |
120 kDefaultSocketReceiveBuffer); | |
121 } | |
122 } | 106 } |
123 | 107 |
124 TEST_F(QuicConfigTest, ProcessServerHello) { | 108 TEST_F(QuicConfigTest, ProcessServerHello) { |
125 QuicIpAddress host; | 109 QuicIpAddress host; |
126 host.FromString("127.0.3.1"); | 110 host.FromString("127.0.3.1"); |
127 const QuicSocketAddress kTestServerAddress = QuicSocketAddress(host, 1234); | 111 const QuicSocketAddress kTestServerAddress = QuicSocketAddress(host, 1234); |
128 QuicConfig server_config; | 112 QuicConfig server_config; |
129 QuicTagVector cgst; | 113 QuicTagVector cgst; |
130 cgst.push_back(kQBIC); | 114 cgst.push_back(kQBIC); |
131 server_config.SetIdleNetworkTimeout( | 115 server_config.SetIdleNetworkTimeout( |
132 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2), | 116 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2), |
133 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2)); | 117 QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2)); |
134 server_config.SetMaxStreamsPerConnection(kDefaultMaxStreamsPerConnection / 2, | 118 server_config.SetMaxStreamsPerConnection(kDefaultMaxStreamsPerConnection / 2, |
135 kDefaultMaxStreamsPerConnection / 2); | 119 kDefaultMaxStreamsPerConnection / 2); |
136 server_config.SetInitialRoundTripTimeUsToSend(10 * kNumMicrosPerMilli); | 120 server_config.SetInitialRoundTripTimeUsToSend(10 * kNumMicrosPerMilli); |
137 server_config.SetInitialStreamFlowControlWindowToSend( | 121 server_config.SetInitialStreamFlowControlWindowToSend( |
138 2 * kInitialStreamFlowControlWindowForTest); | 122 2 * kInitialStreamFlowControlWindowForTest); |
139 server_config.SetInitialSessionFlowControlWindowToSend( | 123 server_config.SetInitialSessionFlowControlWindowToSend( |
140 2 * kInitialSessionFlowControlWindowForTest); | 124 2 * kInitialSessionFlowControlWindowForTest); |
141 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
142 server_config.SetSocketReceiveBufferToSend(kDefaultSocketReceiveBuffer); | |
143 } | |
144 server_config.SetAlternateServerAddressToSend(kTestServerAddress); | 125 server_config.SetAlternateServerAddressToSend(kTestServerAddress); |
145 CryptoHandshakeMessage msg; | 126 CryptoHandshakeMessage msg; |
146 server_config.ToHandshakeMessage(&msg); | 127 server_config.ToHandshakeMessage(&msg); |
147 string error_details; | 128 string error_details; |
148 const QuicErrorCode error = | 129 const QuicErrorCode error = |
149 config_.ProcessPeerHello(msg, SERVER, &error_details); | 130 config_.ProcessPeerHello(msg, SERVER, &error_details); |
150 EXPECT_EQ(QUIC_NO_ERROR, error); | 131 EXPECT_EQ(QUIC_NO_ERROR, error); |
151 EXPECT_TRUE(config_.negotiated()); | 132 EXPECT_TRUE(config_.negotiated()); |
152 EXPECT_EQ(QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2), | 133 EXPECT_EQ(QuicTime::Delta::FromSeconds(kMaximumIdleTimeoutSecs / 2), |
153 config_.IdleNetworkTimeout()); | 134 config_.IdleNetworkTimeout()); |
154 EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2, | 135 EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2, |
155 config_.MaxStreamsPerConnection()); | 136 config_.MaxStreamsPerConnection()); |
156 EXPECT_EQ(10 * kNumMicrosPerMilli, config_.ReceivedInitialRoundTripTimeUs()); | 137 EXPECT_EQ(10 * kNumMicrosPerMilli, config_.ReceivedInitialRoundTripTimeUs()); |
157 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), | 138 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), |
158 2 * kInitialStreamFlowControlWindowForTest); | 139 2 * kInitialStreamFlowControlWindowForTest); |
159 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), | 140 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), |
160 2 * kInitialSessionFlowControlWindowForTest); | 141 2 * kInitialSessionFlowControlWindowForTest); |
161 if (!FLAGS_quic_reloadable_flag_quic_no_socket_receive_buffer) { | |
162 EXPECT_EQ(config_.ReceivedSocketReceiveBuffer(), | |
163 kDefaultSocketReceiveBuffer); | |
164 } | |
165 EXPECT_TRUE(config_.HasReceivedAlternateServerAddress()); | 142 EXPECT_TRUE(config_.HasReceivedAlternateServerAddress()); |
166 EXPECT_EQ(kTestServerAddress, config_.ReceivedAlternateServerAddress()); | 143 EXPECT_EQ(kTestServerAddress, config_.ReceivedAlternateServerAddress()); |
167 } | 144 } |
168 | 145 |
169 TEST_F(QuicConfigTest, MissingOptionalValuesInCHLO) { | 146 TEST_F(QuicConfigTest, MissingOptionalValuesInCHLO) { |
170 CryptoHandshakeMessage msg; | 147 CryptoHandshakeMessage msg; |
171 msg.SetValue(kICSL, 1); | 148 msg.SetValue(kICSL, 1); |
172 | 149 |
173 // Set all REQUIRED tags. | 150 // Set all REQUIRED tags. |
174 msg.SetValue(kICSL, 1); | 151 msg.SetValue(kICSL, 1); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 EXPECT_EQ(1u, config_.ReceivedConnectionOptions().size()); | 288 EXPECT_EQ(1u, config_.ReceivedConnectionOptions().size()); |
312 EXPECT_FALSE(config_.HasClientRequestedIndependentOption( | 289 EXPECT_FALSE(config_.HasClientRequestedIndependentOption( |
313 kRENO, Perspective::IS_SERVER)); | 290 kRENO, Perspective::IS_SERVER)); |
314 EXPECT_TRUE(config_.HasClientRequestedIndependentOption( | 291 EXPECT_TRUE(config_.HasClientRequestedIndependentOption( |
315 kTBBR, Perspective::IS_SERVER)); | 292 kTBBR, Perspective::IS_SERVER)); |
316 } | 293 } |
317 | 294 |
318 } // namespace | 295 } // namespace |
319 } // namespace test | 296 } // namespace test |
320 } // namespace net | 297 } // namespace net |
OLD | NEW |