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/quic_config.h" | 5 #include "net/quic/quic_config.h" |
6 | 6 |
7 #include "net/quic/crypto/crypto_handshake_message.h" | 7 #include "net/quic/crypto/crypto_handshake_message.h" |
8 #include "net/quic/crypto/crypto_protocol.h" | 8 #include "net/quic/crypto/crypto_protocol.h" |
9 #include "net/quic/quic_flags.h" | 9 #include "net/quic/quic_flags.h" |
10 #include "net/quic/quic_protocol.h" | 10 #include "net/quic/quic_protocol.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 QuicConfigTest() { | 26 QuicConfigTest() { |
27 config_.SetDefaults(); | 27 config_.SetDefaults(); |
28 } | 28 } |
29 | 29 |
30 QuicConfig config_; | 30 QuicConfig config_; |
31 }; | 31 }; |
32 | 32 |
33 TEST_F(QuicConfigTest, ToHandshakeMessage) { | 33 TEST_F(QuicConfigTest, ToHandshakeMessage) { |
34 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, false); | 34 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, false); |
35 config_.SetDefaults(); | 35 config_.SetDefaults(); |
36 config_.SetInitialFlowControlWindowToSend(kInitialFlowControlWindowForTest); | 36 config_.SetInitialFlowControlWindowToSend( |
| 37 kInitialSessionFlowControlWindowForTest); |
| 38 config_.SetInitialStreamFlowControlWindowToSend( |
| 39 kInitialStreamFlowControlWindowForTest); |
| 40 config_.SetInitialSessionFlowControlWindowToSend( |
| 41 kInitialSessionFlowControlWindowForTest); |
37 config_.set_idle_connection_state_lifetime(QuicTime::Delta::FromSeconds(5), | 42 config_.set_idle_connection_state_lifetime(QuicTime::Delta::FromSeconds(5), |
38 QuicTime::Delta::FromSeconds(2)); | 43 QuicTime::Delta::FromSeconds(2)); |
39 config_.set_max_streams_per_connection(4, 2); | 44 config_.set_max_streams_per_connection(4, 2); |
40 CryptoHandshakeMessage msg; | 45 CryptoHandshakeMessage msg; |
41 config_.ToHandshakeMessage(&msg); | 46 config_.ToHandshakeMessage(&msg); |
42 | 47 |
43 uint32 value; | 48 uint32 value; |
44 QuicErrorCode error = msg.GetUint32(kICSL, &value); | 49 QuicErrorCode error = msg.GetUint32(kICSL, &value); |
45 EXPECT_EQ(QUIC_NO_ERROR, error); | 50 EXPECT_EQ(QUIC_NO_ERROR, error); |
46 EXPECT_EQ(5u, value); | 51 EXPECT_EQ(5u, value); |
47 | 52 |
48 error = msg.GetUint32(kMSPC, &value); | 53 error = msg.GetUint32(kMSPC, &value); |
49 EXPECT_EQ(QUIC_NO_ERROR, error); | 54 EXPECT_EQ(QUIC_NO_ERROR, error); |
50 EXPECT_EQ(4u, value); | 55 EXPECT_EQ(4u, value); |
51 | 56 |
52 error = msg.GetUint32(kIFCW, &value); | 57 error = msg.GetUint32(kIFCW, &value); |
53 EXPECT_EQ(QUIC_NO_ERROR, error); | 58 EXPECT_EQ(QUIC_NO_ERROR, error); |
54 EXPECT_EQ(kInitialFlowControlWindowForTest, value); | 59 EXPECT_EQ(kInitialSessionFlowControlWindowForTest, value); |
| 60 |
| 61 error = msg.GetUint32(kSFCW, &value); |
| 62 EXPECT_EQ(QUIC_NO_ERROR, error); |
| 63 EXPECT_EQ(kInitialStreamFlowControlWindowForTest, value); |
| 64 |
| 65 error = msg.GetUint32(kCFCW, &value); |
| 66 EXPECT_EQ(QUIC_NO_ERROR, error); |
| 67 EXPECT_EQ(kInitialSessionFlowControlWindowForTest, value); |
55 | 68 |
56 const QuicTag* out; | 69 const QuicTag* out; |
57 size_t out_len; | 70 size_t out_len; |
58 error = msg.GetTaglist(kCGST, &out, &out_len); | 71 error = msg.GetTaglist(kCGST, &out, &out_len); |
59 EXPECT_EQ(1u, out_len); | 72 EXPECT_EQ(1u, out_len); |
60 EXPECT_EQ(kQBIC, *out); | 73 EXPECT_EQ(kQBIC, *out); |
61 } | 74 } |
62 | 75 |
63 TEST_F(QuicConfigTest, ToHandshakeMessageWithPacing) { | 76 TEST_F(QuicConfigTest, ToHandshakeMessageWithPacing) { |
64 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true); | 77 ValueRestore<bool> old_flag(&FLAGS_enable_quic_pacing, true); |
(...skipping 17 matching lines...) Expand all Loading... |
82 cgst.push_back(kQBIC); | 95 cgst.push_back(kQBIC); |
83 client_config.set_congestion_feedback(cgst, kQBIC); | 96 client_config.set_congestion_feedback(cgst, kQBIC); |
84 client_config.set_idle_connection_state_lifetime( | 97 client_config.set_idle_connection_state_lifetime( |
85 QuicTime::Delta::FromSeconds(2 * kDefaultTimeoutSecs), | 98 QuicTime::Delta::FromSeconds(2 * kDefaultTimeoutSecs), |
86 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs)); | 99 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs)); |
87 client_config.set_max_streams_per_connection( | 100 client_config.set_max_streams_per_connection( |
88 2 * kDefaultMaxStreamsPerConnection, kDefaultMaxStreamsPerConnection); | 101 2 * kDefaultMaxStreamsPerConnection, kDefaultMaxStreamsPerConnection); |
89 client_config.SetInitialRoundTripTimeUsToSend( | 102 client_config.SetInitialRoundTripTimeUsToSend( |
90 10 * base::Time::kMicrosecondsPerMillisecond); | 103 10 * base::Time::kMicrosecondsPerMillisecond); |
91 client_config.SetInitialFlowControlWindowToSend( | 104 client_config.SetInitialFlowControlWindowToSend( |
92 2 * kInitialFlowControlWindowForTest); | 105 2 * kInitialSessionFlowControlWindowForTest); |
| 106 client_config.SetInitialStreamFlowControlWindowToSend( |
| 107 2 * kInitialStreamFlowControlWindowForTest); |
| 108 client_config.SetInitialSessionFlowControlWindowToSend( |
| 109 2 * kInitialSessionFlowControlWindowForTest); |
93 QuicTagVector copt; | 110 QuicTagVector copt; |
94 copt.push_back(kTBBR); | 111 copt.push_back(kTBBR); |
95 client_config.SetCongestionOptionsToSend(copt); | 112 client_config.SetCongestionOptionsToSend(copt); |
96 CryptoHandshakeMessage msg; | 113 CryptoHandshakeMessage msg; |
97 client_config.ToHandshakeMessage(&msg); | 114 client_config.ToHandshakeMessage(&msg); |
98 string error_details; | 115 string error_details; |
99 const QuicErrorCode error = | 116 const QuicErrorCode error = |
100 config_.ProcessPeerHello(msg, CLIENT, &error_details); | 117 config_.ProcessPeerHello(msg, CLIENT, &error_details); |
101 EXPECT_EQ(QUIC_NO_ERROR, error); | 118 EXPECT_EQ(QUIC_NO_ERROR, error); |
102 EXPECT_TRUE(config_.negotiated()); | 119 EXPECT_TRUE(config_.negotiated()); |
103 EXPECT_EQ(kQBIC, config_.congestion_feedback()); | 120 EXPECT_EQ(kQBIC, config_.congestion_feedback()); |
104 EXPECT_EQ(QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs), | 121 EXPECT_EQ(QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs), |
105 config_.idle_connection_state_lifetime()); | 122 config_.idle_connection_state_lifetime()); |
106 EXPECT_EQ(kDefaultMaxStreamsPerConnection, | 123 EXPECT_EQ(kDefaultMaxStreamsPerConnection, |
107 config_.max_streams_per_connection()); | 124 config_.max_streams_per_connection()); |
108 EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout()); | 125 EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout()); |
109 EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond, | 126 EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond, |
110 config_.ReceivedInitialRoundTripTimeUs()); | 127 config_.ReceivedInitialRoundTripTimeUs()); |
111 EXPECT_FALSE(config_.HasReceivedLossDetection()); | 128 EXPECT_FALSE(config_.HasReceivedLossDetection()); |
112 EXPECT_TRUE(config_.HasReceivedCongestionOptions()); | 129 EXPECT_TRUE(config_.HasReceivedCongestionOptions()); |
113 EXPECT_EQ(1u, config_.ReceivedCongestionOptions().size()); | 130 EXPECT_EQ(1u, config_.ReceivedCongestionOptions().size()); |
114 EXPECT_EQ(config_.ReceivedCongestionOptions()[0], kTBBR); | 131 EXPECT_EQ(config_.ReceivedCongestionOptions()[0], kTBBR); |
115 EXPECT_EQ(config_.ReceivedInitialFlowControlWindowBytes(), | 132 EXPECT_EQ(config_.ReceivedInitialFlowControlWindowBytes(), |
116 2 * kInitialFlowControlWindowForTest); | 133 2 * kInitialSessionFlowControlWindowForTest); |
| 134 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), |
| 135 2 * kInitialStreamFlowControlWindowForTest); |
| 136 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), |
| 137 2 * kInitialSessionFlowControlWindowForTest); |
117 } | 138 } |
118 | 139 |
119 TEST_F(QuicConfigTest, ProcessServerHello) { | 140 TEST_F(QuicConfigTest, ProcessServerHello) { |
120 QuicConfig server_config; | 141 QuicConfig server_config; |
121 QuicTagVector cgst; | 142 QuicTagVector cgst; |
122 cgst.push_back(kQBIC); | 143 cgst.push_back(kQBIC); |
123 server_config.set_congestion_feedback(cgst, kQBIC); | 144 server_config.set_congestion_feedback(cgst, kQBIC); |
124 server_config.set_idle_connection_state_lifetime( | 145 server_config.set_idle_connection_state_lifetime( |
125 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2), | 146 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2), |
126 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2)); | 147 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2)); |
127 server_config.set_max_streams_per_connection( | 148 server_config.set_max_streams_per_connection( |
128 kDefaultMaxStreamsPerConnection / 2, | 149 kDefaultMaxStreamsPerConnection / 2, |
129 kDefaultMaxStreamsPerConnection / 2); | 150 kDefaultMaxStreamsPerConnection / 2); |
130 server_config.SetInitialCongestionWindowToSend(kDefaultInitialWindow / 2); | 151 server_config.SetInitialCongestionWindowToSend(kDefaultInitialWindow / 2); |
131 server_config.SetInitialRoundTripTimeUsToSend( | 152 server_config.SetInitialRoundTripTimeUsToSend( |
132 10 * base::Time::kMicrosecondsPerMillisecond); | 153 10 * base::Time::kMicrosecondsPerMillisecond); |
133 server_config.SetInitialFlowControlWindowToSend( | 154 server_config.SetInitialFlowControlWindowToSend( |
134 2 * kInitialFlowControlWindowForTest); | 155 2 * kInitialSessionFlowControlWindowForTest); |
| 156 server_config.SetInitialStreamFlowControlWindowToSend( |
| 157 2 * kInitialStreamFlowControlWindowForTest); |
| 158 server_config.SetInitialSessionFlowControlWindowToSend( |
| 159 2 * kInitialSessionFlowControlWindowForTest); |
135 CryptoHandshakeMessage msg; | 160 CryptoHandshakeMessage msg; |
136 server_config.ToHandshakeMessage(&msg); | 161 server_config.ToHandshakeMessage(&msg); |
137 string error_details; | 162 string error_details; |
138 const QuicErrorCode error = | 163 const QuicErrorCode error = |
139 config_.ProcessPeerHello(msg, SERVER, &error_details); | 164 config_.ProcessPeerHello(msg, SERVER, &error_details); |
140 EXPECT_EQ(QUIC_NO_ERROR, error); | 165 EXPECT_EQ(QUIC_NO_ERROR, error); |
141 EXPECT_TRUE(config_.negotiated()); | 166 EXPECT_TRUE(config_.negotiated()); |
142 EXPECT_EQ(kQBIC, config_.congestion_feedback()); | 167 EXPECT_EQ(kQBIC, config_.congestion_feedback()); |
143 EXPECT_EQ(QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2), | 168 EXPECT_EQ(QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs / 2), |
144 config_.idle_connection_state_lifetime()); | 169 config_.idle_connection_state_lifetime()); |
145 EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2, | 170 EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2, |
146 config_.max_streams_per_connection()); | 171 config_.max_streams_per_connection()); |
147 EXPECT_EQ(kDefaultInitialWindow / 2, | 172 EXPECT_EQ(kDefaultInitialWindow / 2, |
148 config_.ReceivedInitialCongestionWindow()); | 173 config_.ReceivedInitialCongestionWindow()); |
149 EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout()); | 174 EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout()); |
150 EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond, | 175 EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond, |
151 config_.ReceivedInitialRoundTripTimeUs()); | 176 config_.ReceivedInitialRoundTripTimeUs()); |
152 EXPECT_FALSE(config_.HasReceivedLossDetection()); | 177 EXPECT_FALSE(config_.HasReceivedLossDetection()); |
153 EXPECT_EQ(config_.ReceivedInitialFlowControlWindowBytes(), | 178 EXPECT_EQ(config_.ReceivedInitialFlowControlWindowBytes(), |
154 2 * kInitialFlowControlWindowForTest); | 179 2 * kInitialSessionFlowControlWindowForTest); |
| 180 EXPECT_EQ(config_.ReceivedInitialStreamFlowControlWindowBytes(), |
| 181 2 * kInitialStreamFlowControlWindowForTest); |
| 182 EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(), |
| 183 2 * kInitialSessionFlowControlWindowForTest); |
155 } | 184 } |
156 | 185 |
157 TEST_F(QuicConfigTest, MissingOptionalValuesInCHLO) { | 186 TEST_F(QuicConfigTest, MissingOptionalValuesInCHLO) { |
158 CryptoHandshakeMessage msg; | 187 CryptoHandshakeMessage msg; |
159 msg.SetValue(kICSL, 1); | 188 msg.SetValue(kICSL, 1); |
160 msg.SetVector(kCGST, QuicTagVector(1, kQBIC)); | 189 msg.SetVector(kCGST, QuicTagVector(1, kQBIC)); |
161 | 190 |
162 // Set all REQUIRED tags. | 191 // Set all REQUIRED tags. |
163 msg.SetValue(kICSL, 1); | 192 msg.SetValue(kICSL, 1); |
164 msg.SetVector(kCGST, QuicTagVector(1, kQBIC)); | 193 msg.SetVector(kCGST, QuicTagVector(1, kQBIC)); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 EXPECT_DFATAL(config.SetInitialFlowControlWindowToSend(kInvalidWindow), | 294 EXPECT_DFATAL(config.SetInitialFlowControlWindowToSend(kInvalidWindow), |
266 "Initial flow control receive window"); | 295 "Initial flow control receive window"); |
267 | 296 |
268 EXPECT_EQ(kDefaultFlowControlSendWindow, | 297 EXPECT_EQ(kDefaultFlowControlSendWindow, |
269 config.GetInitialFlowControlWindowToSend()); | 298 config.GetInitialFlowControlWindowToSend()); |
270 } | 299 } |
271 | 300 |
272 } // namespace | 301 } // namespace |
273 } // namespace test | 302 } // namespace test |
274 } // namespace net | 303 } // namespace net |
OLD | NEW |