| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <sys/epoll.h> | 7 #include <sys/epoll.h> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 server_address_ = IPEndPoint(ip, 0); | 194 server_address_ = IPEndPoint(ip, 0); |
| 195 | 195 |
| 196 client_supported_versions_ = GetParam().client_supported_versions; | 196 client_supported_versions_ = GetParam().client_supported_versions; |
| 197 server_supported_versions_ = GetParam().server_supported_versions; | 197 server_supported_versions_ = GetParam().server_supported_versions; |
| 198 negotiated_version_ = GetParam().negotiated_version; | 198 negotiated_version_ = GetParam().negotiated_version; |
| 199 FLAGS_enable_quic_fec = GetParam().use_fec; | 199 FLAGS_enable_quic_fec = GetParam().use_fec; |
| 200 | 200 |
| 201 VLOG(1) << "Using Configuration: " << GetParam(); | 201 VLOG(1) << "Using Configuration: " << GetParam(); |
| 202 | 202 |
| 203 // Use different flow control windows for client/server. | 203 // Use different flow control windows for client/server. |
| 204 client_config_.SetInitialFlowControlWindowToSend( | |
| 205 2 * kInitialSessionFlowControlWindowForTest); | |
| 206 client_config_.SetInitialStreamFlowControlWindowToSend( | 204 client_config_.SetInitialStreamFlowControlWindowToSend( |
| 207 2 * kInitialStreamFlowControlWindowForTest); | 205 2 * kInitialStreamFlowControlWindowForTest); |
| 208 client_config_.SetInitialSessionFlowControlWindowToSend( | 206 client_config_.SetInitialSessionFlowControlWindowToSend( |
| 209 2 * kInitialSessionFlowControlWindowForTest); | 207 2 * kInitialSessionFlowControlWindowForTest); |
| 210 server_config_.SetInitialFlowControlWindowToSend( | |
| 211 3 * kInitialSessionFlowControlWindowForTest); | |
| 212 server_config_.SetInitialStreamFlowControlWindowToSend( | 208 server_config_.SetInitialStreamFlowControlWindowToSend( |
| 213 3 * kInitialStreamFlowControlWindowForTest); | 209 3 * kInitialStreamFlowControlWindowForTest); |
| 214 server_config_.SetInitialSessionFlowControlWindowToSend( | 210 server_config_.SetInitialSessionFlowControlWindowToSend( |
| 215 3 * kInitialSessionFlowControlWindowForTest); | 211 3 * kInitialSessionFlowControlWindowForTest); |
| 216 | 212 |
| 217 QuicInMemoryCachePeer::ResetForTests(); | 213 QuicInMemoryCachePeer::ResetForTests(); |
| 218 AddToCache("GET", "https://www.google.com/foo", | 214 AddToCache("GET", "https://www.google.com/foo", |
| 219 "HTTP/1.1", "200", "OK", kFooResponseBody); | 215 "HTTP/1.1", "200", "OK", kFooResponseBody); |
| 220 AddToCache("GET", "https://www.google.com/bar", | 216 AddToCache("GET", "https://www.google.com/bar", |
| 221 "HTTP/1.1", "200", "OK", kBarResponseBody); | 217 "HTTP/1.1", "200", "OK", kBarResponseBody); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 232 server_address_, | 228 server_address_, |
| 233 server_hostname_, | 229 server_hostname_, |
| 234 false, // not secure | 230 false, // not secure |
| 235 client_config_, | 231 client_config_, |
| 236 client_supported_versions_); | 232 client_supported_versions_); |
| 237 client->UseWriter(writer); | 233 client->UseWriter(writer); |
| 238 client->Connect(); | 234 client->Connect(); |
| 239 return client; | 235 return client; |
| 240 } | 236 } |
| 241 | 237 |
| 242 void set_client_initial_flow_control_receive_window(uint32 window) { | |
| 243 CHECK(client_.get() == nullptr); | |
| 244 DVLOG(1) << "Setting client initial flow control window: " << window; | |
| 245 client_config_.SetInitialFlowControlWindowToSend(window); | |
| 246 } | |
| 247 | |
| 248 void set_client_initial_stream_flow_control_receive_window(uint32 window) { | 238 void set_client_initial_stream_flow_control_receive_window(uint32 window) { |
| 249 CHECK(client_.get() == nullptr); | 239 CHECK(client_.get() == nullptr); |
| 250 DVLOG(1) << "Setting client initial stream flow control window: " << window; | 240 DVLOG(1) << "Setting client initial stream flow control window: " << window; |
| 251 client_config_.SetInitialStreamFlowControlWindowToSend(window); | 241 client_config_.SetInitialStreamFlowControlWindowToSend(window); |
| 252 } | 242 } |
| 253 | 243 |
| 254 void set_client_initial_session_flow_control_receive_window(uint32 window) { | 244 void set_client_initial_session_flow_control_receive_window(uint32 window) { |
| 255 CHECK(client_.get() == nullptr); | 245 CHECK(client_.get() == nullptr); |
| 256 DVLOG(1) << "Setting client initial session flow control window: " | 246 DVLOG(1) << "Setting client initial session flow control window: " |
| 257 << window; | 247 << window; |
| 258 client_config_.SetInitialSessionFlowControlWindowToSend(window); | 248 client_config_.SetInitialSessionFlowControlWindowToSend(window); |
| 259 } | 249 } |
| 260 | 250 |
| 261 void set_server_initial_flow_control_receive_window(uint32 window) { | |
| 262 CHECK(server_thread_.get() == nullptr); | |
| 263 DVLOG(1) << "Setting server initial flow control window: " << window; | |
| 264 server_config_.SetInitialFlowControlWindowToSend(window); | |
| 265 } | |
| 266 | |
| 267 void set_server_initial_stream_flow_control_receive_window(uint32 window) { | 251 void set_server_initial_stream_flow_control_receive_window(uint32 window) { |
| 268 CHECK(server_thread_.get() == nullptr); | 252 CHECK(server_thread_.get() == nullptr); |
| 269 DVLOG(1) << "Setting server initial stream flow control window: " | 253 DVLOG(1) << "Setting server initial stream flow control window: " |
| 270 << window; | 254 << window; |
| 271 server_config_.SetInitialStreamFlowControlWindowToSend(window); | 255 server_config_.SetInitialStreamFlowControlWindowToSend(window); |
| 272 } | 256 } |
| 273 | 257 |
| 274 void set_server_initial_session_flow_control_receive_window(uint32 window) { | 258 void set_server_initial_session_flow_control_receive_window(uint32 window) { |
| 275 CHECK(server_thread_.get() == nullptr); | 259 CHECK(server_thread_.get() == nullptr); |
| 276 DVLOG(1) << "Setting server initial session flow control window: " | 260 DVLOG(1) << "Setting server initial session flow control window: " |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 759 // Test that the resume write alarm is not set in QuicConnection::OnCanWrite | 743 // Test that the resume write alarm is not set in QuicConnection::OnCanWrite |
| 760 // if currently connection level flow control blocked. If set, this results in | 744 // if currently connection level flow control blocked. If set, this results in |
| 761 // an infinite loop in the EpollServer, as the alarm fires and is immediately | 745 // an infinite loop in the EpollServer, as the alarm fires and is immediately |
| 762 // rescheduled. | 746 // rescheduled. |
| 763 ASSERT_TRUE(Initialize()); | 747 ASSERT_TRUE(Initialize()); |
| 764 client_->client()->WaitForCryptoHandshakeConfirmed(); | 748 client_->client()->WaitForCryptoHandshakeConfirmed(); |
| 765 | 749 |
| 766 // Ensure both stream and connection level are flow control blocked by setting | 750 // Ensure both stream and connection level are flow control blocked by setting |
| 767 // the send window offset to 0. | 751 // the send window offset to 0. |
| 768 const uint64 kFlowControlWindow = | 752 const uint64 kFlowControlWindow = |
| 769 server_config_.GetInitialFlowControlWindowToSend(); | 753 server_config_.GetInitialStreamFlowControlWindowToSend(); |
| 770 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); | 754 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); |
| 771 QuicSession* session = client_->client()->session(); | 755 QuicSession* session = client_->client()->session(); |
| 772 QuicFlowControllerPeer::SetSendWindowOffset(stream->flow_controller(), 0); | 756 QuicFlowControllerPeer::SetSendWindowOffset(stream->flow_controller(), 0); |
| 773 QuicFlowControllerPeer::SetSendWindowOffset(session->flow_controller(), 0); | 757 QuicFlowControllerPeer::SetSendWindowOffset(session->flow_controller(), 0); |
| 774 EXPECT_TRUE(stream->flow_controller()->IsBlocked()); | 758 EXPECT_TRUE(stream->flow_controller()->IsBlocked()); |
| 775 EXPECT_TRUE(session->flow_controller()->IsBlocked()); | 759 EXPECT_TRUE(session->flow_controller()->IsBlocked()); |
| 776 | 760 |
| 777 // Make sure that the stream has data pending so that it will be marked as | 761 // Make sure that the stream has data pending so that it will be marked as |
| 778 // write blocked when it receives a stream level WINDOW_UPDATE. | 762 // write blocked when it receives a stream level WINDOW_UPDATE. |
| 779 stream->SendBody("hello", false); | 763 stream->SendBody("hello", false); |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite()); | 994 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite()); |
| 1011 // Expect the default rtt of 100ms. | 995 // Expect the default rtt of 100ms. |
| 1012 EXPECT_EQ(static_cast<int64>(100 * kNumMicrosPerMilli), | 996 EXPECT_EQ(static_cast<int64>(100 * kNumMicrosPerMilli), |
| 1013 server_sent_packet_manager.GetRttStats()->initial_rtt_us()); | 997 server_sent_packet_manager.GetRttStats()->initial_rtt_us()); |
| 1014 // Ensure the bandwidth is valid. | 998 // Ensure the bandwidth is valid. |
| 1015 client_sent_packet_manager.BandwidthEstimate(); | 999 client_sent_packet_manager.BandwidthEstimate(); |
| 1016 server_sent_packet_manager.BandwidthEstimate(); | 1000 server_sent_packet_manager.BandwidthEstimate(); |
| 1017 server_thread_->Resume(); | 1001 server_thread_->Resume(); |
| 1018 } | 1002 } |
| 1019 | 1003 |
| 1004 TEST_P(EndToEndTest, 0ByteConnectionId) { |
| 1005 ValueRestore<bool> old_flag(&FLAGS_allow_truncated_connection_ids_for_quic, |
| 1006 true); |
| 1007 client_config_.SetBytesForConnectionIdToSend(0); |
| 1008 ASSERT_TRUE(Initialize()); |
| 1009 |
| 1010 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1011 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1012 |
| 1013 QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader( |
| 1014 client_->client()->session()->connection()); |
| 1015 EXPECT_EQ(PACKET_0BYTE_CONNECTION_ID, |
| 1016 header->public_header.connection_id_length); |
| 1017 } |
| 1018 |
| 1019 TEST_P(EndToEndTest, 1ByteConnectionId) { |
| 1020 ValueRestore<bool> old_flag(&FLAGS_allow_truncated_connection_ids_for_quic, |
| 1021 true); |
| 1022 client_config_.SetBytesForConnectionIdToSend(1); |
| 1023 ASSERT_TRUE(Initialize()); |
| 1024 |
| 1025 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1026 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1027 QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader( |
| 1028 client_->client()->session()->connection()); |
| 1029 EXPECT_EQ(PACKET_1BYTE_CONNECTION_ID, |
| 1030 header->public_header.connection_id_length); |
| 1031 } |
| 1032 |
| 1033 TEST_P(EndToEndTest, 4ByteConnectionId) { |
| 1034 ValueRestore<bool> old_flag(&FLAGS_allow_truncated_connection_ids_for_quic, |
| 1035 true); |
| 1036 client_config_.SetBytesForConnectionIdToSend(4); |
| 1037 ASSERT_TRUE(Initialize()); |
| 1038 |
| 1039 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1040 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1041 QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader( |
| 1042 client_->client()->session()->connection()); |
| 1043 EXPECT_EQ(PACKET_4BYTE_CONNECTION_ID, |
| 1044 header->public_header.connection_id_length); |
| 1045 } |
| 1046 |
| 1047 TEST_P(EndToEndTest, 8ByteConnectionId) { |
| 1048 ValueRestore<bool> old_flag(&FLAGS_allow_truncated_connection_ids_for_quic, |
| 1049 true); |
| 1050 client_config_.SetBytesForConnectionIdToSend(8); |
| 1051 ASSERT_TRUE(Initialize()); |
| 1052 |
| 1053 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1054 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1055 QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader( |
| 1056 client_->client()->session()->connection()); |
| 1057 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, |
| 1058 header->public_header.connection_id_length); |
| 1059 } |
| 1060 |
| 1061 TEST_P(EndToEndTest, 15ByteConnectionId) { |
| 1062 ValueRestore<bool> old_flag(&FLAGS_allow_truncated_connection_ids_for_quic, |
| 1063 true); |
| 1064 client_config_.SetBytesForConnectionIdToSend(15); |
| 1065 ASSERT_TRUE(Initialize()); |
| 1066 |
| 1067 // Our server is permissive and allows for out of bounds values. |
| 1068 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1069 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1070 QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader( |
| 1071 client_->client()->session()->connection()); |
| 1072 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, |
| 1073 header->public_header.connection_id_length); |
| 1074 } |
| 1075 |
| 1020 TEST_P(EndToEndTest, ResetConnection) { | 1076 TEST_P(EndToEndTest, ResetConnection) { |
| 1021 ASSERT_TRUE(Initialize()); | 1077 ASSERT_TRUE(Initialize()); |
| 1022 client_->client()->WaitForCryptoHandshakeConfirmed(); | 1078 client_->client()->WaitForCryptoHandshakeConfirmed(); |
| 1023 | 1079 |
| 1024 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); | 1080 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
| 1025 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); | 1081 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1026 client_->ResetConnection(); | 1082 client_->ResetConnection(); |
| 1027 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar")); | 1083 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar")); |
| 1028 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); | 1084 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1029 } | 1085 } |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 // Send a second request, using the new FD. | 1222 // Send a second request, using the new FD. |
| 1167 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar")); | 1223 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar")); |
| 1168 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); | 1224 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); |
| 1169 | 1225 |
| 1170 // Verify that the client's ephemeral port is different. | 1226 // Verify that the client's ephemeral port is different. |
| 1171 IPEndPoint new_address = client_->client()->client_address(); | 1227 IPEndPoint new_address = client_->client()->client_address(); |
| 1172 EXPECT_EQ(old_address.address(), new_address.address()); | 1228 EXPECT_EQ(old_address.address(), new_address.address()); |
| 1173 EXPECT_NE(old_address.port(), new_address.port()); | 1229 EXPECT_NE(old_address.port(), new_address.port()); |
| 1174 } | 1230 } |
| 1175 | 1231 |
| 1176 | 1232 TEST_P(EndToEndTest, DifferentFlowControlWindows) { |
| 1177 TEST_P(EndToEndTest, DifferentFlowControlWindowsQ019) { | |
| 1178 // TODO(rjshade): Remove this test when removing QUIC_VERSION_19. | |
| 1179 // Client and server can set different initial flow control receive windows. | 1233 // Client and server can set different initial flow control receive windows. |
| 1180 // These are sent in CHLO/SHLO. Tests that these values are exchanged properly | 1234 // These are sent in CHLO/SHLO. Tests that these values are exchanged properly |
| 1181 // in the crypto handshake. | 1235 // in the crypto handshake. |
| 1182 | |
| 1183 const uint32 kClientIFCW = 123456; | |
| 1184 set_client_initial_flow_control_receive_window(kClientIFCW); | |
| 1185 | |
| 1186 const uint32 kServerIFCW = 654321; | |
| 1187 set_server_initial_flow_control_receive_window(kServerIFCW); | |
| 1188 | |
| 1189 ASSERT_TRUE(Initialize()); | |
| 1190 if (negotiated_version_ > QUIC_VERSION_19) { | |
| 1191 return; | |
| 1192 } | |
| 1193 | |
| 1194 // Values are exchanged during crypto handshake, so wait for that to finish. | |
| 1195 client_->client()->WaitForCryptoHandshakeConfirmed(); | |
| 1196 server_thread_->WaitForCryptoHandshakeConfirmed(); | |
| 1197 | |
| 1198 // Client should have the right value for server's receive window. | |
| 1199 EXPECT_EQ(kServerIFCW, client_->client() | |
| 1200 ->session() | |
| 1201 ->config() | |
| 1202 ->ReceivedInitialFlowControlWindowBytes()); | |
| 1203 | |
| 1204 // Server should have the right value for client's receive window. | |
| 1205 server_thread_->Pause(); | |
| 1206 QuicDispatcher* dispatcher = | |
| 1207 QuicServerPeer::GetDispatcher(server_thread_->server()); | |
| 1208 QuicSession* session = dispatcher->session_map().begin()->second; | |
| 1209 EXPECT_EQ(kClientIFCW, | |
| 1210 session->config()->ReceivedInitialFlowControlWindowBytes()); | |
| 1211 server_thread_->Resume(); | |
| 1212 } | |
| 1213 | |
| 1214 TEST_P(EndToEndTest, DifferentFlowControlWindowsQ020) { | |
| 1215 // TODO(rjshade): Rename to DifferentFlowControlWindows when removing | |
| 1216 // QUIC_VERSION_19. | |
| 1217 // Client and server can set different initial flow control receive windows. | |
| 1218 // These are sent in CHLO/SHLO. Tests that these values are exchanged properly | |
| 1219 // in the crypto handshake. | |
| 1220 const uint32 kClientStreamIFCW = 123456; | 1236 const uint32 kClientStreamIFCW = 123456; |
| 1221 const uint32 kClientSessionIFCW = 234567; | 1237 const uint32 kClientSessionIFCW = 234567; |
| 1222 set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW); | 1238 set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW); |
| 1223 set_client_initial_session_flow_control_receive_window(kClientSessionIFCW); | 1239 set_client_initial_session_flow_control_receive_window(kClientSessionIFCW); |
| 1224 | 1240 |
| 1225 const uint32 kServerStreamIFCW = 654321; | 1241 const uint32 kServerStreamIFCW = 654321; |
| 1226 const uint32 kServerSessionIFCW = 765432; | 1242 const uint32 kServerSessionIFCW = 765432; |
| 1227 set_server_initial_stream_flow_control_receive_window(kServerStreamIFCW); | 1243 set_server_initial_stream_flow_control_receive_window(kServerStreamIFCW); |
| 1228 set_server_initial_session_flow_control_receive_window(kServerSessionIFCW); | 1244 set_server_initial_session_flow_control_receive_window(kServerSessionIFCW); |
| 1229 | 1245 |
| 1230 ASSERT_TRUE(Initialize()); | 1246 ASSERT_TRUE(Initialize()); |
| 1231 if (negotiated_version_ == QUIC_VERSION_19) { | |
| 1232 return; | |
| 1233 } | |
| 1234 | 1247 |
| 1235 // Values are exchanged during crypto handshake, so wait for that to finish. | 1248 // Values are exchanged during crypto handshake, so wait for that to finish. |
| 1236 client_->client()->WaitForCryptoHandshakeConfirmed(); | 1249 client_->client()->WaitForCryptoHandshakeConfirmed(); |
| 1237 server_thread_->WaitForCryptoHandshakeConfirmed(); | 1250 server_thread_->WaitForCryptoHandshakeConfirmed(); |
| 1238 | 1251 |
| 1239 // Open a data stream to make sure the stream level flow control is updated. | 1252 // Open a data stream to make sure the stream level flow control is updated. |
| 1240 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); | 1253 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); |
| 1241 stream->SendBody("hello", false); | 1254 stream->SendBody("hello", false); |
| 1242 | 1255 |
| 1243 // Client should have the right values for server's receive window. | 1256 // Client should have the right values for server's receive window. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1275 // The special headers and crypto streams should be subject to per-stream flow | 1288 // The special headers and crypto streams should be subject to per-stream flow |
| 1276 // control limits, but should not be subject to connection level flow control. | 1289 // control limits, but should not be subject to connection level flow control. |
| 1277 const uint32 kStreamIFCW = 123456; | 1290 const uint32 kStreamIFCW = 123456; |
| 1278 const uint32 kSessionIFCW = 234567; | 1291 const uint32 kSessionIFCW = 234567; |
| 1279 set_client_initial_stream_flow_control_receive_window(kStreamIFCW); | 1292 set_client_initial_stream_flow_control_receive_window(kStreamIFCW); |
| 1280 set_client_initial_session_flow_control_receive_window(kSessionIFCW); | 1293 set_client_initial_session_flow_control_receive_window(kSessionIFCW); |
| 1281 set_server_initial_stream_flow_control_receive_window(kStreamIFCW); | 1294 set_server_initial_stream_flow_control_receive_window(kStreamIFCW); |
| 1282 set_server_initial_session_flow_control_receive_window(kSessionIFCW); | 1295 set_server_initial_session_flow_control_receive_window(kSessionIFCW); |
| 1283 | 1296 |
| 1284 ASSERT_TRUE(Initialize()); | 1297 ASSERT_TRUE(Initialize()); |
| 1285 if (negotiated_version_ < QUIC_VERSION_21) { | |
| 1286 return; | |
| 1287 } | |
| 1288 | 1298 |
| 1289 // Wait for crypto handshake to finish. This should have contributed to the | 1299 // Wait for crypto handshake to finish. This should have contributed to the |
| 1290 // crypto stream flow control window, but not affected the session flow | 1300 // crypto stream flow control window, but not affected the session flow |
| 1291 // control window. | 1301 // control window. |
| 1292 client_->client()->WaitForCryptoHandshakeConfirmed(); | 1302 client_->client()->WaitForCryptoHandshakeConfirmed(); |
| 1293 server_thread_->WaitForCryptoHandshakeConfirmed(); | 1303 server_thread_->WaitForCryptoHandshakeConfirmed(); |
| 1294 | 1304 |
| 1295 QuicCryptoStream* crypto_stream = | 1305 QuicCryptoStream* crypto_stream = |
| 1296 QuicSessionPeer::GetCryptoStream(client_->client()->session()); | 1306 QuicSessionPeer::GetCryptoStream(client_->client()->session()); |
| 1297 EXPECT_LT( | 1307 EXPECT_LT( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 const QuicSentPacketManager& server_sent_packet_manager = | 1375 const QuicSentPacketManager& server_sent_packet_manager = |
| 1366 *GetSentPacketManagerFromFirstServerSession(); | 1376 *GetSentPacketManagerFromFirstServerSession(); |
| 1367 EXPECT_TRUE(server_sent_packet_manager.using_pacing()); | 1377 EXPECT_TRUE(server_sent_packet_manager.using_pacing()); |
| 1368 EXPECT_TRUE(client_sent_packet_manager.using_pacing()); | 1378 EXPECT_TRUE(client_sent_packet_manager.using_pacing()); |
| 1369 } | 1379 } |
| 1370 | 1380 |
| 1371 } // namespace | 1381 } // namespace |
| 1372 } // namespace test | 1382 } // namespace test |
| 1373 } // namespace tools | 1383 } // namespace tools |
| 1374 } // namespace net | 1384 } // namespace net |
| OLD | NEW |