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

Side by Side Diff: net/tools/quic/end_to_end_test.cc

Issue 1535363003: Switch to standard integer types in net/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: stddef Created 5 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/tools/net_watcher/net_watcher.cc ('k') | net/tools/quic/quic_client.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 <stddef.h> 5 #include <stddef.h>
6 #include <sys/epoll.h> 6 #include <sys/epoll.h>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h"
11 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/singleton.h" 11 #include "base/memory/singleton.h"
13 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
14 #include "base/synchronization/waitable_event.h" 13 #include "base/synchronization/waitable_event.h"
15 #include "base/threading/platform_thread.h" 14 #include "base/threading/platform_thread.h"
16 #include "base/time/time.h" 15 #include "base/time/time.h"
17 #include "net/base/ip_endpoint.h" 16 #include "net/base/ip_endpoint.h"
18 #include "net/quic/congestion_control/tcp_cubic_sender.h" 17 #include "net/quic/congestion_control/tcp_cubic_sender.h"
19 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h" 18 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
20 #include "net/quic/crypto/null_encrypter.h" 19 #include "net/quic/crypto/null_encrypter.h"
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 QuicTestClient* CreateQuicClient(QuicPacketWriterWrapper* writer) { 296 QuicTestClient* CreateQuicClient(QuicPacketWriterWrapper* writer) {
298 QuicTestClient* client = 297 QuicTestClient* client =
299 new QuicTestClient(server_address_, server_hostname_, client_config_, 298 new QuicTestClient(server_address_, server_hostname_, client_config_,
300 client_supported_versions_); 299 client_supported_versions_);
301 client->UseWriter(writer); 300 client->UseWriter(writer);
302 client->Connect(); 301 client->Connect();
303 return client; 302 return client;
304 } 303 }
305 304
306 void set_smaller_flow_control_receive_window() { 305 void set_smaller_flow_control_receive_window() {
307 const uint32 kClientIFCW = 64 * 1024; 306 const uint32_t kClientIFCW = 64 * 1024;
308 const uint32 kServerIFCW = 1024 * 1024; 307 const uint32_t kServerIFCW = 1024 * 1024;
309 set_client_initial_stream_flow_control_receive_window(kClientIFCW); 308 set_client_initial_stream_flow_control_receive_window(kClientIFCW);
310 set_client_initial_session_flow_control_receive_window( 309 set_client_initial_session_flow_control_receive_window(
311 kSessionToStreamRatio * kClientIFCW); 310 kSessionToStreamRatio * kClientIFCW);
312 set_server_initial_stream_flow_control_receive_window(kServerIFCW); 311 set_server_initial_stream_flow_control_receive_window(kServerIFCW);
313 set_server_initial_session_flow_control_receive_window( 312 set_server_initial_session_flow_control_receive_window(
314 kSessionToStreamRatio * kServerIFCW); 313 kSessionToStreamRatio * kServerIFCW);
315 } 314 }
316 315
317 void set_client_initial_stream_flow_control_receive_window(uint32 window) { 316 void set_client_initial_stream_flow_control_receive_window(uint32_t window) {
318 CHECK(client_.get() == nullptr); 317 CHECK(client_.get() == nullptr);
319 DVLOG(1) << "Setting client initial stream flow control window: " << window; 318 DVLOG(1) << "Setting client initial stream flow control window: " << window;
320 client_config_.SetInitialStreamFlowControlWindowToSend(window); 319 client_config_.SetInitialStreamFlowControlWindowToSend(window);
321 } 320 }
322 321
323 void set_client_initial_session_flow_control_receive_window(uint32 window) { 322 void set_client_initial_session_flow_control_receive_window(uint32_t window) {
324 CHECK(client_.get() == nullptr); 323 CHECK(client_.get() == nullptr);
325 DVLOG(1) << "Setting client initial session flow control window: " 324 DVLOG(1) << "Setting client initial session flow control window: "
326 << window; 325 << window;
327 client_config_.SetInitialSessionFlowControlWindowToSend(window); 326 client_config_.SetInitialSessionFlowControlWindowToSend(window);
328 } 327 }
329 328
330 void set_server_initial_stream_flow_control_receive_window(uint32 window) { 329 void set_server_initial_stream_flow_control_receive_window(uint32_t window) {
331 CHECK(server_thread_.get() == nullptr); 330 CHECK(server_thread_.get() == nullptr);
332 DVLOG(1) << "Setting server initial stream flow control window: " << window; 331 DVLOG(1) << "Setting server initial stream flow control window: " << window;
333 server_config_.SetInitialStreamFlowControlWindowToSend(window); 332 server_config_.SetInitialStreamFlowControlWindowToSend(window);
334 } 333 }
335 334
336 void set_server_initial_session_flow_control_receive_window(uint32 window) { 335 void set_server_initial_session_flow_control_receive_window(uint32_t window) {
337 CHECK(server_thread_.get() == nullptr); 336 CHECK(server_thread_.get() == nullptr);
338 DVLOG(1) << "Setting server initial session flow control window: " 337 DVLOG(1) << "Setting server initial session flow control window: "
339 << window; 338 << window;
340 server_config_.SetInitialSessionFlowControlWindowToSend(window); 339 server_config_.SetInitialSessionFlowControlWindowToSend(window);
341 } 340 }
342 341
343 const QuicSentPacketManager* GetSentPacketManagerFromFirstServerSession() 342 const QuicSentPacketManager* GetSentPacketManagerFromFirstServerSession()
344 const { 343 const {
345 QuicDispatcher* dispatcher = 344 QuicDispatcher* dispatcher =
346 QuicServerPeer::GetDispatcher(server_thread_->server()); 345 QuicServerPeer::GetDispatcher(server_thread_->server());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 server_thread_->Quit(); 439 server_thread_->Quit();
441 server_thread_->Join(); 440 server_thread_->Join();
442 } 441 }
443 } 442 }
444 443
445 void AddToCache(StringPiece path, int response_code, StringPiece body) { 444 void AddToCache(StringPiece path, int response_code, StringPiece body) {
446 QuicInMemoryCache::GetInstance()->AddSimpleResponse("www.google.com", path, 445 QuicInMemoryCache::GetInstance()->AddSimpleResponse("www.google.com", path,
447 response_code, body); 446 response_code, body);
448 } 447 }
449 448
450 void SetPacketLossPercentage(int32 loss) { 449 void SetPacketLossPercentage(int32_t loss) {
451 // TODO(rtenneti): enable when we can do random packet loss tests in 450 // TODO(rtenneti): enable when we can do random packet loss tests in
452 // chrome's tree. 451 // chrome's tree.
453 if (loss != 0 && loss != 100) 452 if (loss != 0 && loss != 100)
454 return; 453 return;
455 client_writer_->set_fake_packet_loss_percentage(loss); 454 client_writer_->set_fake_packet_loss_percentage(loss);
456 server_writer_->set_fake_packet_loss_percentage(loss); 455 server_writer_->set_fake_packet_loss_percentage(loss);
457 } 456 }
458 457
459 void SetPacketSendDelay(QuicTime::Delta delay) { 458 void SetPacketSendDelay(QuicTime::Delta delay) {
460 // TODO(rtenneti): enable when we can do random packet send delay tests in 459 // TODO(rtenneti): enable when we can do random packet send delay tests in
461 // chrome's tree. 460 // chrome's tree.
462 // client_writer_->set_fake_packet_delay(delay); 461 // client_writer_->set_fake_packet_delay(delay);
463 // server_writer_->set_fake_packet_delay(delay); 462 // server_writer_->set_fake_packet_delay(delay);
464 } 463 }
465 464
466 void SetReorderPercentage(int32 reorder) { 465 void SetReorderPercentage(int32_t reorder) {
467 // TODO(rtenneti): enable when we can do random packet reorder tests in 466 // TODO(rtenneti): enable when we can do random packet reorder tests in
468 // chrome's tree. 467 // chrome's tree.
469 // client_writer_->set_fake_reorder_percentage(reorder); 468 // client_writer_->set_fake_reorder_percentage(reorder);
470 // server_writer_->set_fake_reorder_percentage(reorder); 469 // server_writer_->set_fake_reorder_percentage(reorder);
471 } 470 }
472 471
473 // Verifies that the client and server connections were both free of packets 472 // Verifies that the client and server connections were both free of packets
474 // being discarded, based on connection stats. 473 // being discarded, based on connection stats.
475 // Calls server_thread_ Pause() and Resume(), which may only be called once 474 // Calls server_thread_ Pause() and Resume(), which may only be called once
476 // per test. 475 // per test.
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 // Regression test for b/14677858. 1032 // Regression test for b/14677858.
1034 // Test that the resume write alarm is not set in QuicConnection::OnCanWrite 1033 // Test that the resume write alarm is not set in QuicConnection::OnCanWrite
1035 // if currently connection level flow control blocked. If set, this results in 1034 // if currently connection level flow control blocked. If set, this results in
1036 // an infinite loop in the EpollServer, as the alarm fires and is immediately 1035 // an infinite loop in the EpollServer, as the alarm fires and is immediately
1037 // rescheduled. 1036 // rescheduled.
1038 ASSERT_TRUE(Initialize()); 1037 ASSERT_TRUE(Initialize());
1039 client_->client()->WaitForCryptoHandshakeConfirmed(); 1038 client_->client()->WaitForCryptoHandshakeConfirmed();
1040 1039
1041 // Ensure both stream and connection level are flow control blocked by setting 1040 // Ensure both stream and connection level are flow control blocked by setting
1042 // the send window offset to 0. 1041 // the send window offset to 0.
1043 const uint64 flow_control_window = 1042 const uint64_t flow_control_window =
1044 server_config_.GetInitialStreamFlowControlWindowToSend(); 1043 server_config_.GetInitialStreamFlowControlWindowToSend();
1045 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); 1044 QuicSpdyClientStream* stream = client_->GetOrCreateStream();
1046 QuicSession* session = client_->client()->session(); 1045 QuicSession* session = client_->client()->session();
1047 QuicFlowControllerPeer::SetSendWindowOffset(stream->flow_controller(), 0); 1046 QuicFlowControllerPeer::SetSendWindowOffset(stream->flow_controller(), 0);
1048 QuicFlowControllerPeer::SetSendWindowOffset(session->flow_controller(), 0); 1047 QuicFlowControllerPeer::SetSendWindowOffset(session->flow_controller(), 0);
1049 EXPECT_TRUE(stream->flow_controller()->IsBlocked()); 1048 EXPECT_TRUE(stream->flow_controller()->IsBlocked());
1050 EXPECT_TRUE(session->flow_controller()->IsBlocked()); 1049 EXPECT_TRUE(session->flow_controller()->IsBlocked());
1051 1050
1052 // Make sure that the stream has data pending so that it will be marked as 1051 // Make sure that the stream has data pending so that it will be marked as
1053 // write blocked when it receives a stream level WINDOW_UPDATE. 1052 // write blocked when it receives a stream level WINDOW_UPDATE.
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 client_config_.SetMaxStreamsPerConnection(10, 5); 1213 client_config_.SetMaxStreamsPerConnection(10, 5);
1215 1214
1216 ASSERT_TRUE(Initialize()); 1215 ASSERT_TRUE(Initialize());
1217 client_->client()->WaitForCryptoHandshakeConfirmed(); 1216 client_->client()->WaitForCryptoHandshakeConfirmed();
1218 QuicConfig* client_negotiated_config = client_->client()->session()->config(); 1217 QuicConfig* client_negotiated_config = client_->client()->session()->config();
1219 EXPECT_EQ(2u, client_negotiated_config->MaxStreamsPerConnection()); 1218 EXPECT_EQ(2u, client_negotiated_config->MaxStreamsPerConnection());
1220 } 1219 }
1221 1220
1222 TEST_P(EndToEndTest, ClientSuggestsRTT) { 1221 TEST_P(EndToEndTest, ClientSuggestsRTT) {
1223 // Client suggests initial RTT, verify it is used. 1222 // Client suggests initial RTT, verify it is used.
1224 const uint32 kInitialRTT = 20000; 1223 const uint32_t kInitialRTT = 20000;
1225 client_config_.SetInitialRoundTripTimeUsToSend(kInitialRTT); 1224 client_config_.SetInitialRoundTripTimeUsToSend(kInitialRTT);
1226 1225
1227 ASSERT_TRUE(Initialize()); 1226 ASSERT_TRUE(Initialize());
1228 client_->client()->WaitForCryptoHandshakeConfirmed(); 1227 client_->client()->WaitForCryptoHandshakeConfirmed();
1229 server_thread_->WaitForCryptoHandshakeConfirmed(); 1228 server_thread_->WaitForCryptoHandshakeConfirmed();
1230 1229
1231 // Pause the server so we can access the server's internals without races. 1230 // Pause the server so we can access the server's internals without races.
1232 server_thread_->Pause(); 1231 server_thread_->Pause();
1233 QuicDispatcher* dispatcher = 1232 QuicDispatcher* dispatcher =
1234 QuicServerPeer::GetDispatcher(server_thread_->server()); 1233 QuicServerPeer::GetDispatcher(server_thread_->server());
(...skipping 28 matching lines...) Expand all
1263 QuicSession* session = dispatcher->session_map().begin()->second; 1262 QuicSession* session = dispatcher->session_map().begin()->second;
1264 const QuicSentPacketManager& client_sent_packet_manager = 1263 const QuicSentPacketManager& client_sent_packet_manager =
1265 client_->client()->session()->connection()->sent_packet_manager(); 1264 client_->client()->session()->connection()->sent_packet_manager();
1266 1265
1267 // Now that acks have been exchanged, the RTT estimate has decreased on the 1266 // Now that acks have been exchanged, the RTT estimate has decreased on the
1268 // server and is not infinite on the client. 1267 // server and is not infinite on the client.
1269 EXPECT_FALSE( 1268 EXPECT_FALSE(
1270 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite()); 1269 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite());
1271 const RttStats& server_rtt_stats = 1270 const RttStats& server_rtt_stats =
1272 *session->connection()->sent_packet_manager().GetRttStats(); 1271 *session->connection()->sent_packet_manager().GetRttStats();
1273 EXPECT_EQ(static_cast<int64>(kMaxInitialRoundTripTimeUs), 1272 EXPECT_EQ(static_cast<int64_t>(kMaxInitialRoundTripTimeUs),
1274 server_rtt_stats.initial_rtt_us()); 1273 server_rtt_stats.initial_rtt_us());
1275 EXPECT_GE(static_cast<int64>(kMaxInitialRoundTripTimeUs), 1274 EXPECT_GE(static_cast<int64_t>(kMaxInitialRoundTripTimeUs),
1276 server_rtt_stats.smoothed_rtt().ToMicroseconds()); 1275 server_rtt_stats.smoothed_rtt().ToMicroseconds());
1277 server_thread_->Resume(); 1276 server_thread_->Resume();
1278 } 1277 }
1279 1278
1280 TEST_P(EndToEndTest, MinInitialRTT) { 1279 TEST_P(EndToEndTest, MinInitialRTT) {
1281 // Client tries to suggest 0 and the server uses the default. 1280 // Client tries to suggest 0 and the server uses the default.
1282 client_config_.SetInitialRoundTripTimeUsToSend(0); 1281 client_config_.SetInitialRoundTripTimeUsToSend(0);
1283 1282
1284 ASSERT_TRUE(Initialize()); 1283 ASSERT_TRUE(Initialize());
1285 client_->client()->WaitForCryptoHandshakeConfirmed(); 1284 client_->client()->WaitForCryptoHandshakeConfirmed();
1286 server_thread_->WaitForCryptoHandshakeConfirmed(); 1285 server_thread_->WaitForCryptoHandshakeConfirmed();
1287 1286
1288 // Pause the server so we can access the server's internals without races. 1287 // Pause the server so we can access the server's internals without races.
1289 server_thread_->Pause(); 1288 server_thread_->Pause();
1290 QuicDispatcher* dispatcher = 1289 QuicDispatcher* dispatcher =
1291 QuicServerPeer::GetDispatcher(server_thread_->server()); 1290 QuicServerPeer::GetDispatcher(server_thread_->server());
1292 ASSERT_EQ(1u, dispatcher->session_map().size()); 1291 ASSERT_EQ(1u, dispatcher->session_map().size());
1293 QuicSession* session = dispatcher->session_map().begin()->second; 1292 QuicSession* session = dispatcher->session_map().begin()->second;
1294 const QuicSentPacketManager& client_sent_packet_manager = 1293 const QuicSentPacketManager& client_sent_packet_manager =
1295 client_->client()->session()->connection()->sent_packet_manager(); 1294 client_->client()->session()->connection()->sent_packet_manager();
1296 const QuicSentPacketManager& server_sent_packet_manager = 1295 const QuicSentPacketManager& server_sent_packet_manager =
1297 session->connection()->sent_packet_manager(); 1296 session->connection()->sent_packet_manager();
1298 1297
1299 // Now that acks have been exchanged, the RTT estimate has decreased on the 1298 // Now that acks have been exchanged, the RTT estimate has decreased on the
1300 // server and is not infinite on the client. 1299 // server and is not infinite on the client.
1301 EXPECT_FALSE( 1300 EXPECT_FALSE(
1302 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite()); 1301 client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite());
1303 // Expect the default rtt of 100ms. 1302 // Expect the default rtt of 100ms.
1304 EXPECT_EQ(static_cast<int64>(100 * kNumMicrosPerMilli), 1303 EXPECT_EQ(static_cast<int64_t>(100 * kNumMicrosPerMilli),
1305 server_sent_packet_manager.GetRttStats()->initial_rtt_us()); 1304 server_sent_packet_manager.GetRttStats()->initial_rtt_us());
1306 // Ensure the bandwidth is valid. 1305 // Ensure the bandwidth is valid.
1307 client_sent_packet_manager.BandwidthEstimate(); 1306 client_sent_packet_manager.BandwidthEstimate();
1308 server_sent_packet_manager.BandwidthEstimate(); 1307 server_sent_packet_manager.BandwidthEstimate();
1309 server_thread_->Resume(); 1308 server_thread_->Resume();
1310 } 1309 }
1311 1310
1312 TEST_P(EndToEndTest, 0ByteConnectionId) { 1311 TEST_P(EndToEndTest, 0ByteConnectionId) {
1313 client_config_.SetBytesForConnectionIdToSend(0); 1312 client_config_.SetBytesForConnectionIdToSend(0);
1314 ASSERT_TRUE(Initialize()); 1313 ASSERT_TRUE(Initialize());
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 // Verify that the client's ephemeral port is different. 1527 // Verify that the client's ephemeral port is different.
1529 IPEndPoint new_address = client_->client()->client_address(); 1528 IPEndPoint new_address = client_->client()->client_address();
1530 EXPECT_EQ(old_address.address(), new_address.address()); 1529 EXPECT_EQ(old_address.address(), new_address.address());
1531 EXPECT_NE(old_address.port(), new_address.port()); 1530 EXPECT_NE(old_address.port(), new_address.port());
1532 } 1531 }
1533 1532
1534 TEST_P(EndToEndTest, DifferentFlowControlWindows) { 1533 TEST_P(EndToEndTest, DifferentFlowControlWindows) {
1535 // Client and server can set different initial flow control receive windows. 1534 // Client and server can set different initial flow control receive windows.
1536 // These are sent in CHLO/SHLO. Tests that these values are exchanged properly 1535 // These are sent in CHLO/SHLO. Tests that these values are exchanged properly
1537 // in the crypto handshake. 1536 // in the crypto handshake.
1538 const uint32 kClientStreamIFCW = 123456; 1537 const uint32_t kClientStreamIFCW = 123456;
1539 const uint32 kClientSessionIFCW = 234567; 1538 const uint32_t kClientSessionIFCW = 234567;
1540 set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW); 1539 set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW);
1541 set_client_initial_session_flow_control_receive_window(kClientSessionIFCW); 1540 set_client_initial_session_flow_control_receive_window(kClientSessionIFCW);
1542 1541
1543 uint32 kServerStreamIFCW = 1542 uint32_t kServerStreamIFCW =
1544 GetParam().auto_tune_flow_control_window ? 32 * 1024 : 654321; 1543 GetParam().auto_tune_flow_control_window ? 32 * 1024 : 654321;
1545 uint32 kServerSessionIFCW = 1544 uint32_t kServerSessionIFCW =
1546 GetParam().auto_tune_flow_control_window ? 48 * 1024 : 765432; 1545 GetParam().auto_tune_flow_control_window ? 48 * 1024 : 765432;
1547 set_server_initial_stream_flow_control_receive_window(kServerStreamIFCW); 1546 set_server_initial_stream_flow_control_receive_window(kServerStreamIFCW);
1548 set_server_initial_session_flow_control_receive_window(kServerSessionIFCW); 1547 set_server_initial_session_flow_control_receive_window(kServerSessionIFCW);
1549 1548
1550 ASSERT_TRUE(Initialize()); 1549 ASSERT_TRUE(Initialize());
1551 1550
1552 // Values are exchanged during crypto handshake, so wait for that to finish. 1551 // Values are exchanged during crypto handshake, so wait for that to finish.
1553 client_->client()->WaitForCryptoHandshakeConfirmed(); 1552 client_->client()->WaitForCryptoHandshakeConfirmed();
1554 server_thread_->WaitForCryptoHandshakeConfirmed(); 1553 server_thread_->WaitForCryptoHandshakeConfirmed();
1555 1554
(...skipping 28 matching lines...) Expand all
1584 EXPECT_EQ(kClientSessionIFCW, 1583 EXPECT_EQ(kClientSessionIFCW,
1585 session->config()->ReceivedInitialSessionFlowControlWindowBytes()); 1584 session->config()->ReceivedInitialSessionFlowControlWindowBytes());
1586 EXPECT_EQ(kClientSessionIFCW, QuicFlowControllerPeer::SendWindowOffset( 1585 EXPECT_EQ(kClientSessionIFCW, QuicFlowControllerPeer::SendWindowOffset(
1587 session->flow_controller())); 1586 session->flow_controller()));
1588 server_thread_->Resume(); 1587 server_thread_->Resume();
1589 } 1588 }
1590 1589
1591 TEST_P(EndToEndTest, HeadersAndCryptoStreamsNoConnectionFlowControl) { 1590 TEST_P(EndToEndTest, HeadersAndCryptoStreamsNoConnectionFlowControl) {
1592 // The special headers and crypto streams should be subject to per-stream flow 1591 // The special headers and crypto streams should be subject to per-stream flow
1593 // control limits, but should not be subject to connection level flow control. 1592 // control limits, but should not be subject to connection level flow control.
1594 const uint32 kStreamIFCW = 1593 const uint32_t kStreamIFCW =
1595 GetParam().auto_tune_flow_control_window ? 32 * 1024 : 123456; 1594 GetParam().auto_tune_flow_control_window ? 32 * 1024 : 123456;
1596 const uint32 kSessionIFCW = 1595 const uint32_t kSessionIFCW =
1597 GetParam().auto_tune_flow_control_window ? 48 * 1024 : 234567; 1596 GetParam().auto_tune_flow_control_window ? 48 * 1024 : 234567;
1598 set_client_initial_stream_flow_control_receive_window(kStreamIFCW); 1597 set_client_initial_stream_flow_control_receive_window(kStreamIFCW);
1599 set_client_initial_session_flow_control_receive_window(kSessionIFCW); 1598 set_client_initial_session_flow_control_receive_window(kSessionIFCW);
1600 set_server_initial_stream_flow_control_receive_window(kStreamIFCW); 1599 set_server_initial_stream_flow_control_receive_window(kStreamIFCW);
1601 set_server_initial_session_flow_control_receive_window(kSessionIFCW); 1600 set_server_initial_session_flow_control_receive_window(kSessionIFCW);
1602 1601
1603 ASSERT_TRUE(Initialize()); 1602 ASSERT_TRUE(Initialize());
1604 1603
1605 // Wait for crypto handshake to finish. This should have contributed to the 1604 // Wait for crypto handshake to finish. This should have contributed to the
1606 // crypto stream flow control window, but not affected the session flow 1605 // crypto stream flow control window, but not affected the session flow
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
2013 // locally_close_streams_highest_offset_ (which will never be deleted). 2012 // locally_close_streams_highest_offset_ (which will never be deleted).
2014 // To set up the test condition, the server must do the following in order: 2013 // To set up the test condition, the server must do the following in order:
2015 // start sending the response and call CloseReadSide 2014 // start sending the response and call CloseReadSide
2016 // receive the FIN of the request 2015 // receive the FIN of the request
2017 // send the FIN of the response 2016 // send the FIN of the response
2018 2017
2019 string response_body; 2018 string response_body;
2020 // The response body must be larger than the flow control window so the server 2019 // The response body must be larger than the flow control window so the server
2021 // must receive a window update from the client before it can finish sending 2020 // must receive a window update from the client before it can finish sending
2022 // it. 2021 // it.
2023 uint32 response_body_size = 2022 uint32_t response_body_size =
2024 2 * client_config_.GetInitialStreamFlowControlWindowToSend(); 2023 2 * client_config_.GetInitialStreamFlowControlWindowToSend();
2025 GenerateBody(&response_body, response_body_size); 2024 GenerateBody(&response_body, response_body_size);
2026 2025
2027 StreamWithErrorFactory stream_factory(response_body); 2026 StreamWithErrorFactory stream_factory(response_body);
2028 SetSpdyStreamFactory(&stream_factory); 2027 SetSpdyStreamFactory(&stream_factory);
2029 2028
2030 ASSERT_TRUE(Initialize()); 2029 ASSERT_TRUE(Initialize());
2031 2030
2032 client_->client()->WaitForCryptoHandshakeConfirmed(); 2031 client_->client()->WaitForCryptoHandshakeConfirmed();
2033 2032
2034 // A POST that gets an early error response, after the headers are received 2033 // A POST that gets an early error response, after the headers are received
2035 // and before the body is received, due to invalid content-length. 2034 // and before the body is received, due to invalid content-length.
2036 HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage"); 2035 HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
2037 // The body must be large enough that the FIN will be in a different packet 2036 // The body must be large enough that the FIN will be in a different packet
2038 // than the end of the headers, but short enough to not require a flow control 2037 // than the end of the headers, but short enough to not require a flow control
2039 // update. This allows headers processing to trigger the error response 2038 // update. This allows headers processing to trigger the error response
2040 // before the request FIN is processed but receive the request FIN before the 2039 // before the request FIN is processed but receive the request FIN before the
2041 // response is sent completely. 2040 // response is sent completely.
2042 const uint32 kRequestBodySize = kMaxPacketSize + 10; 2041 const uint32_t kRequestBodySize = kMaxPacketSize + 10;
2043 string request_body; 2042 string request_body;
2044 GenerateBody(&request_body, kRequestBodySize); 2043 GenerateBody(&request_body, kRequestBodySize);
2045 request.AddBody(request_body, false); 2044 request.AddBody(request_body, false);
2046 // Set an invalid content-length, so the request will receive an early 500 2045 // Set an invalid content-length, so the request will receive an early 500
2047 // response. Must be done after AddBody, which also sets content-length. 2046 // response. Must be done after AddBody, which also sets content-length.
2048 request.AddHeader("content-length", "-1"); 2047 request.AddHeader("content-length", "-1");
2049 request.set_skip_message_validation(true); 2048 request.set_skip_message_validation(true);
2050 2049
2051 // Send the request. 2050 // Send the request.
2052 client_->SendMessage(request); 2051 client_->SendMessage(request);
(...skipping 13 matching lines...) Expand all
2066 2065
2067 // The stream is not waiting for the arrival of the peer's final offset. 2066 // The stream is not waiting for the arrival of the peer's final offset.
2068 EXPECT_EQ( 2067 EXPECT_EQ(
2069 0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(server_session) 2068 0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(server_session)
2070 .size()); 2069 .size());
2071 2070
2072 server_thread_->Resume(); 2071 server_thread_->Resume();
2073 } 2072 }
2074 2073
2075 TEST_P(EndToEndTest, LargePostEarlyResponse) { 2074 TEST_P(EndToEndTest, LargePostEarlyResponse) {
2076 const uint32 kWindowSize = 65536; 2075 const uint32_t kWindowSize = 65536;
2077 set_client_initial_stream_flow_control_receive_window(kWindowSize); 2076 set_client_initial_stream_flow_control_receive_window(kWindowSize);
2078 set_client_initial_session_flow_control_receive_window(kWindowSize); 2077 set_client_initial_session_flow_control_receive_window(kWindowSize);
2079 set_server_initial_stream_flow_control_receive_window(kWindowSize); 2078 set_server_initial_stream_flow_control_receive_window(kWindowSize);
2080 set_server_initial_session_flow_control_receive_window(kWindowSize); 2079 set_server_initial_session_flow_control_receive_window(kWindowSize);
2081 2080
2082 ASSERT_TRUE(Initialize()); 2081 ASSERT_TRUE(Initialize());
2083 2082
2084 client_->client()->WaitForCryptoHandshakeConfirmed(); 2083 client_->client()->WaitForCryptoHandshakeConfirmed();
2085 2084
2086 // POST to a URL that gets an early error response, after the headers are 2085 // POST to a URL that gets an early error response, after the headers are
2087 // received and before the body is received. 2086 // received and before the body is received.
2088 HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage"); 2087 HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
2089 const uint32 kBodySize = 2 * kWindowSize; 2088 const uint32_t kBodySize = 2 * kWindowSize;
2090 // Invalid content-length so the request will receive an early 500 response. 2089 // Invalid content-length so the request will receive an early 500 response.
2091 request.AddHeader("content-length", "-1"); 2090 request.AddHeader("content-length", "-1");
2092 request.set_skip_message_validation(true); 2091 request.set_skip_message_validation(true);
2093 request.set_has_complete_message(false); 2092 request.set_has_complete_message(false);
2094 2093
2095 // Tell the client to not close the stream if it receives an early response. 2094 // Tell the client to not close the stream if it receives an early response.
2096 client_->set_allow_bidirectional_data(true); 2095 client_->set_allow_bidirectional_data(true);
2097 // Send the headers. 2096 // Send the headers.
2098 client_->SendMessage(request); 2097 client_->SendMessage(request);
2099 // Receive the response and let the server close writing. 2098 // Receive the response and let the server close writing.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2150 2149
2151 EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url")); 2150 EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url"));
2152 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 2151 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
2153 EXPECT_EQ(trailers, client_->response_trailers()); 2152 EXPECT_EQ(trailers, client_->response_trailers());
2154 } 2153 }
2155 2154
2156 } // namespace 2155 } // namespace
2157 } // namespace test 2156 } // namespace test
2158 } // namespace tools 2157 } // namespace tools
2159 } // namespace net 2158 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/net_watcher/net_watcher.cc ('k') | net/tools/quic/quic_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698