| 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 |