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

Side by Side Diff: net/spdy/spdy_session_unittest.cc

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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/spdy/spdy_session.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('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 "net/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 // Verify that there is one unclaimed push stream. 1228 // Verify that there is one unclaimed push stream.
1229 EXPECT_EQ(1u, session->num_unclaimed_pushed_streams()); 1229 EXPECT_EQ(1u, session->num_unclaimed_pushed_streams());
1230 SpdySession::PushedStreamMap::iterator iter = 1230 SpdySession::PushedStreamMap::iterator iter =
1231 session->unclaimed_pushed_streams_.find( 1231 session->unclaimed_pushed_streams_.find(
1232 GURL("http://www.google.com/a.dat")); 1232 GURL("http://www.google.com/a.dat"));
1233 EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter); 1233 EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter);
1234 1234
1235 if (session->flow_control_state_ == 1235 if (session->flow_control_state_ ==
1236 SpdySession::FLOW_CONTROL_STREAM_AND_SESSION) { 1236 SpdySession::FLOW_CONTROL_STREAM_AND_SESSION) {
1237 // Unclaimed push body consumed bytes from the session window. 1237 // Unclaimed push body consumed bytes from the session window.
1238 EXPECT_EQ(kSpdySessionInitialWindowSize - kUploadDataSize, 1238 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()) - kUploadDataSize,
1239 session->session_recv_window_size_); 1239 session->session_recv_window_size_);
1240 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 1240 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
1241 } 1241 }
1242 1242
1243 // Shift time to expire the push stream. Read the second SYN_STREAM, 1243 // Shift time to expire the push stream. Read the second SYN_STREAM,
1244 // and verify a RST_STREAM was written. 1244 // and verify a RST_STREAM was written.
1245 g_time_delta = base::TimeDelta::FromSeconds(301); 1245 g_time_delta = base::TimeDelta::FromSeconds(301);
1246 data.RunFor(2); 1246 data.RunFor(2);
1247 1247
1248 // Verify that the second pushed stream evicted the first pushed stream. 1248 // Verify that the second pushed stream evicted the first pushed stream.
1249 EXPECT_EQ(1u, session->num_unclaimed_pushed_streams()); 1249 EXPECT_EQ(1u, session->num_unclaimed_pushed_streams());
1250 iter = session->unclaimed_pushed_streams_.find( 1250 iter = session->unclaimed_pushed_streams_.find(
1251 GURL("http://www.google.com/b.dat")); 1251 GURL("http://www.google.com/b.dat"));
1252 EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter); 1252 EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter);
1253 1253
1254 if (session->flow_control_state_ == 1254 if (session->flow_control_state_ ==
1255 SpdySession::FLOW_CONTROL_STREAM_AND_SESSION) { 1255 SpdySession::FLOW_CONTROL_STREAM_AND_SESSION) {
1256 // Verify that the session window reclaimed the evicted stream body. 1256 // Verify that the session window reclaimed the evicted stream body.
1257 EXPECT_EQ(kSpdySessionInitialWindowSize, 1257 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()),
1258 session->session_recv_window_size_); 1258 session->session_recv_window_size_);
1259 EXPECT_EQ(kUploadDataSize, session->session_unacked_recv_window_bytes_); 1259 EXPECT_EQ(kUploadDataSize, session->session_unacked_recv_window_bytes_);
1260 } 1260 }
1261 1261
1262 // Read and process EOF. 1262 // Read and process EOF.
1263 data.RunFor(1); 1263 data.RunFor(1);
1264 base::MessageLoop::current()->RunUntilIdle(); 1264 base::MessageLoop::current()->RunUntilIdle();
1265 EXPECT_TRUE(session == NULL); 1265 EXPECT_TRUE(session == NULL);
1266 } 1266 }
1267 1267
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 if (spdy_util_.spdy_version() >= SPDY3) { 1546 if (spdy_util_.spdy_version() >= SPDY3) {
1547 settings[kSpdySettingsIds2] = 1547 settings[kSpdySettingsIds2] =
1548 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kInitialRecvWindowSize); 1548 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kInitialRecvWindowSize);
1549 } 1549 }
1550 MockConnect connect_data(SYNCHRONOUS, OK); 1550 MockConnect connect_data(SYNCHRONOUS, OK);
1551 scoped_ptr<SpdyFrame> settings_frame( 1551 scoped_ptr<SpdyFrame> settings_frame(
1552 spdy_util_.ConstructSpdySettings(settings)); 1552 spdy_util_.ConstructSpdySettings(settings));
1553 scoped_ptr<SpdyFrame> initial_window_update( 1553 scoped_ptr<SpdyFrame> initial_window_update(
1554 spdy_util_.ConstructSpdyWindowUpdate( 1554 spdy_util_.ConstructSpdyWindowUpdate(
1555 kSessionFlowControlStreamId, 1555 kSessionFlowControlStreamId,
1556 kDefaultInitialRecvWindowSize - kSpdySessionInitialWindowSize)); 1556 kDefaultInitialRecvWindowSize -
1557 SpdySession::GetInitialWindowSize(GetParam())));
1557 std::vector<MockWrite> writes; 1558 std::vector<MockWrite> writes;
1558 if ((GetParam() >= kProtoSPDY4MinimumVersion) && 1559 if ((GetParam() >= kProtoSPDY4MinimumVersion) &&
1559 (GetParam() <= kProtoSPDY4MaximumVersion)) { 1560 (GetParam() <= kProtoSPDY4MaximumVersion)) {
1560 writes.push_back( 1561 writes.push_back(
1561 MockWrite(ASYNC, 1562 MockWrite(ASYNC,
1562 kHttp2ConnectionHeaderPrefix, 1563 kHttp2ConnectionHeaderPrefix,
1563 kHttp2ConnectionHeaderPrefixSize)); 1564 kHttp2ConnectionHeaderPrefixSize));
1564 } 1565 }
1565 writes.push_back(CreateMockWrite(*settings_frame)); 1566 writes.push_back(CreateMockWrite(*settings_frame));
1566 if (GetParam() >= kProtoSPDY31) { 1567 if (GetParam() >= kProtoSPDY31) {
(...skipping 1507 matching lines...) Expand 10 before | Expand all | Expand 10 after
3074 session_deps_.socket_factory->AddSocketDataProvider(&data); 3075 session_deps_.socket_factory->AddSocketDataProvider(&data);
3075 3076
3076 CreateNetworkSession(); 3077 CreateNetworkSession();
3077 base::WeakPtr<SpdySession> session = 3078 base::WeakPtr<SpdySession> session =
3078 CreateFakeSpdySession(spdy_session_pool_, key_); 3079 CreateFakeSpdySession(spdy_session_pool_, key_);
3079 3080
3080 EXPECT_EQ(spdy_util_.spdy_version(), 3081 EXPECT_EQ(spdy_util_.spdy_version(),
3081 session->buffered_spdy_framer_->protocol_version()); 3082 session->buffered_spdy_framer_->protocol_version());
3082 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, 3083 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
3083 session->flow_control_state()); 3084 session->flow_control_state());
3084 EXPECT_EQ(kSpdySessionInitialWindowSize, 3085 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()),
3085 session->session_send_window_size_); 3086 session->session_send_window_size_);
3086 EXPECT_EQ(kSpdySessionInitialWindowSize, 3087 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()),
3087 session->session_recv_window_size_); 3088 session->session_recv_window_size_);
3088 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3089 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3089 } 3090 }
3090 3091
3091 // Tests the case of a non-SPDY request closing an idle SPDY session when no 3092 // Tests the case of a non-SPDY request closing an idle SPDY session when no
3092 // pointers to the idle session are currently held. 3093 // pointers to the idle session are currently held.
3093 TEST_P(SpdySessionTest, CloseOneIdleConnection) { 3094 TEST_P(SpdySessionTest, CloseOneIdleConnection) {
3094 ClientSocketPoolManager::set_max_sockets_per_group( 3095 ClientSocketPoolManager::set_max_sockets_per_group(
3095 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3096 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3096 ClientSocketPoolManager::set_max_sockets_per_pool( 3097 ClientSocketPoolManager::set_max_sockets_per_pool(
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
3503 // SpdySession::{Increase,Decrease}RecvWindowSize should properly 3504 // SpdySession::{Increase,Decrease}RecvWindowSize should properly
3504 // adjust the session receive window size for SPDY 3.1 and higher. In 3505 // adjust the session receive window size for SPDY 3.1 and higher. In
3505 // addition, SpdySession::IncreaseRecvWindowSize should trigger 3506 // addition, SpdySession::IncreaseRecvWindowSize should trigger
3506 // sending a WINDOW_UPDATE frame for a large enough delta. 3507 // sending a WINDOW_UPDATE frame for a large enough delta.
3507 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { 3508 TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
3508 if (GetParam() < kProtoSPDY31) 3509 if (GetParam() < kProtoSPDY31)
3509 return; 3510 return;
3510 3511
3511 session_deps_.host_resolver->set_synchronous_mode(true); 3512 session_deps_.host_resolver->set_synchronous_mode(true);
3512 3513
3514 const int32 initial_window_size =
3515 SpdySession::GetInitialWindowSize(GetParam());
3513 const int32 delta_window_size = 100; 3516 const int32 delta_window_size = 100;
3514 3517
3515 MockConnect connect_data(SYNCHRONOUS, OK); 3518 MockConnect connect_data(SYNCHRONOUS, OK);
3516 MockRead reads[] = { 3519 MockRead reads[] = {
3517 MockRead(ASYNC, 0, 1) // EOF 3520 MockRead(ASYNC, 0, 1) // EOF
3518 }; 3521 };
3519 scoped_ptr<SpdyFrame> window_update( 3522 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate(
3520 spdy_util_.ConstructSpdyWindowUpdate( 3523 kSessionFlowControlStreamId, initial_window_size + delta_window_size));
3521 kSessionFlowControlStreamId,
3522 kSpdySessionInitialWindowSize + delta_window_size));
3523 MockWrite writes[] = { 3524 MockWrite writes[] = {
3524 CreateMockWrite(*window_update, 0), 3525 CreateMockWrite(*window_update, 0),
3525 }; 3526 };
3526 DeterministicSocketData data(reads, arraysize(reads), 3527 DeterministicSocketData data(reads, arraysize(reads),
3527 writes, arraysize(writes)); 3528 writes, arraysize(writes));
3528 data.set_connect_data(connect_data); 3529 data.set_connect_data(connect_data);
3529 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 3530 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
3530 3531
3531 CreateDeterministicNetworkSession(); 3532 CreateDeterministicNetworkSession();
3532 base::WeakPtr<SpdySession> session = 3533 base::WeakPtr<SpdySession> session =
3533 CreateInsecureSpdySession(http_session_, key_, BoundNetLog()); 3534 CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
3534 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, 3535 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
3535 session->flow_control_state()); 3536 session->flow_control_state());
3536 3537
3537 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3538 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3538 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3539 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3539 3540
3540 session->IncreaseRecvWindowSize(delta_window_size); 3541 session->IncreaseRecvWindowSize(delta_window_size);
3541 EXPECT_EQ(kSpdySessionInitialWindowSize + delta_window_size, 3542 EXPECT_EQ(initial_window_size + delta_window_size,
3542 session->session_recv_window_size_); 3543 session->session_recv_window_size_);
3543 EXPECT_EQ(delta_window_size, session->session_unacked_recv_window_bytes_); 3544 EXPECT_EQ(delta_window_size, session->session_unacked_recv_window_bytes_);
3544 3545
3545 // Should trigger sending a WINDOW_UPDATE frame. 3546 // Should trigger sending a WINDOW_UPDATE frame.
3546 session->IncreaseRecvWindowSize(kSpdySessionInitialWindowSize); 3547 session->IncreaseRecvWindowSize(initial_window_size);
3547 EXPECT_EQ(kSpdySessionInitialWindowSize + delta_window_size + 3548 EXPECT_EQ(initial_window_size + delta_window_size + initial_window_size,
3548 kSpdySessionInitialWindowSize,
3549 session->session_recv_window_size_); 3549 session->session_recv_window_size_);
3550 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3550 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3551 3551
3552 data.RunFor(1); 3552 data.RunFor(1);
3553 3553
3554 // DecreaseRecvWindowSize() expects |in_io_loop_| to be true. 3554 // DecreaseRecvWindowSize() expects |in_io_loop_| to be true.
3555 session->in_io_loop_ = true; 3555 session->in_io_loop_ = true;
3556 session->DecreaseRecvWindowSize( 3556 session->DecreaseRecvWindowSize(initial_window_size + delta_window_size +
3557 kSpdySessionInitialWindowSize + delta_window_size + 3557 initial_window_size);
3558 kSpdySessionInitialWindowSize);
3559 session->in_io_loop_ = false; 3558 session->in_io_loop_ = false;
3560 EXPECT_EQ(0, session->session_recv_window_size_); 3559 EXPECT_EQ(0, session->session_recv_window_size_);
3561 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3560 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3562 } 3561 }
3563 3562
3564 // SpdySession::{Increase,Decrease}SendWindowSize should properly 3563 // SpdySession::{Increase,Decrease}SendWindowSize should properly
3565 // adjust the session send window size when the "enable_spdy_31" flag 3564 // adjust the session send window size when the "enable_spdy_31" flag
3566 // is set. 3565 // is set.
3567 TEST_P(SpdySessionTest, AdjustSendWindowSize) { 3566 TEST_P(SpdySessionTest, AdjustSendWindowSize) {
3568 if (GetParam() < kProtoSPDY31) 3567 if (GetParam() < kProtoSPDY31)
3569 return; 3568 return;
3570 3569
3571 session_deps_.host_resolver->set_synchronous_mode(true); 3570 session_deps_.host_resolver->set_synchronous_mode(true);
3572 3571
3573 MockConnect connect_data(SYNCHRONOUS, OK); 3572 MockConnect connect_data(SYNCHRONOUS, OK);
3574 MockRead reads[] = { 3573 MockRead reads[] = {
3575 MockRead(SYNCHRONOUS, 0, 0) // EOF 3574 MockRead(SYNCHRONOUS, 0, 0) // EOF
3576 }; 3575 };
3577 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); 3576 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
3578 data.set_connect_data(connect_data); 3577 data.set_connect_data(connect_data);
3579 session_deps_.socket_factory->AddSocketDataProvider(&data); 3578 session_deps_.socket_factory->AddSocketDataProvider(&data);
3580 3579
3581 CreateNetworkSession(); 3580 CreateNetworkSession();
3582 base::WeakPtr<SpdySession> session = 3581 base::WeakPtr<SpdySession> session =
3583 CreateFakeSpdySession(spdy_session_pool_, key_); 3582 CreateFakeSpdySession(spdy_session_pool_, key_);
3584 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, 3583 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
3585 session->flow_control_state()); 3584 session->flow_control_state());
3586 3585
3586 const int32 initial_window_size =
3587 SpdySession::GetInitialWindowSize(GetParam());
3587 const int32 delta_window_size = 100; 3588 const int32 delta_window_size = 100;
3588 3589
3589 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3590 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3590 3591
3591 session->IncreaseSendWindowSize(delta_window_size); 3592 session->IncreaseSendWindowSize(delta_window_size);
3592 EXPECT_EQ(kSpdySessionInitialWindowSize + delta_window_size, 3593 EXPECT_EQ(initial_window_size + delta_window_size,
3593 session->session_send_window_size_); 3594 session->session_send_window_size_);
3594 3595
3595 session->DecreaseSendWindowSize(delta_window_size); 3596 session->DecreaseSendWindowSize(delta_window_size);
3596 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3597 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3597 } 3598 }
3598 3599
3599 // Incoming data for an inactive stream should not cause the session 3600 // Incoming data for an inactive stream should not cause the session
3600 // receive window size to decrease, but it should cause the unacked 3601 // receive window size to decrease, but it should cause the unacked
3601 // bytes to increase. 3602 // bytes to increase.
3602 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) { 3603 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) {
3603 if (GetParam() < kProtoSPDY31) 3604 if (GetParam() < kProtoSPDY31)
3604 return; 3605 return;
3605 3606
3606 session_deps_.host_resolver->set_synchronous_mode(true); 3607 session_deps_.host_resolver->set_synchronous_mode(true);
3607 3608
3608 MockConnect connect_data(SYNCHRONOUS, OK); 3609 MockConnect connect_data(SYNCHRONOUS, OK);
3609 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame(1, false)); 3610 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame(1, false));
3610 MockRead reads[] = { 3611 MockRead reads[] = {
3611 CreateMockRead(*resp, 0), 3612 CreateMockRead(*resp, 0),
3612 MockRead(ASYNC, 0, 1) // EOF 3613 MockRead(ASYNC, 0, 1) // EOF
3613 }; 3614 };
3614 DeterministicSocketData data(reads, arraysize(reads), NULL, 0); 3615 DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
3615 data.set_connect_data(connect_data); 3616 data.set_connect_data(connect_data);
3616 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 3617 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
3617 3618
3618 CreateDeterministicNetworkSession(); 3619 CreateDeterministicNetworkSession();
3619 base::WeakPtr<SpdySession> session = 3620 base::WeakPtr<SpdySession> session =
3620 CreateInsecureSpdySession(http_session_, key_, BoundNetLog()); 3621 CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
3621 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, 3622 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
3622 session->flow_control_state()); 3623 session->flow_control_state());
3623 3624
3624 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3625 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()),
3626 session->session_recv_window_size_);
3625 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3627 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3626 3628
3627 data.RunFor(1); 3629 data.RunFor(1);
3628 3630
3629 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3631 EXPECT_EQ(SpdySession::GetInitialWindowSize(GetParam()),
3632 session->session_recv_window_size_);
3630 EXPECT_EQ(kUploadDataSize, session->session_unacked_recv_window_bytes_); 3633 EXPECT_EQ(kUploadDataSize, session->session_unacked_recv_window_bytes_);
3631 3634
3632 data.RunFor(1); 3635 data.RunFor(1);
3633 } 3636 }
3634 3637
3635 // A delegate that drops any received data. 3638 // A delegate that drops any received data.
3636 class DropReceivedDataDelegate : public test::StreamDelegateSendImmediate { 3639 class DropReceivedDataDelegate : public test::StreamDelegateSendImmediate {
3637 public: 3640 public:
3638 DropReceivedDataDelegate(const base::WeakPtr<SpdyStream>& stream, 3641 DropReceivedDataDelegate(const base::WeakPtr<SpdyStream>& stream,
3639 base::StringPiece data) 3642 base::StringPiece data)
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
3704 3707
3705 DropReceivedDataDelegate delegate(stream, msg_data); 3708 DropReceivedDataDelegate delegate(stream, msg_data);
3706 stream->SetDelegate(&delegate); 3709 stream->SetDelegate(&delegate);
3707 3710
3708 scoped_ptr<SpdyHeaderBlock> headers( 3711 scoped_ptr<SpdyHeaderBlock> headers(
3709 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size)); 3712 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size));
3710 EXPECT_EQ(ERR_IO_PENDING, 3713 EXPECT_EQ(ERR_IO_PENDING,
3711 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); 3714 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
3712 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3715 EXPECT_TRUE(stream->HasUrlFromHeaders());
3713 3716
3714 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3717 const int32 initial_window_size =
3718 SpdySession::GetInitialWindowSize(GetParam());
3719 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3715 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3720 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3716 3721
3717 data.RunFor(4); 3722 data.RunFor(4);
3718 3723
3719 EXPECT_TRUE(data.at_write_eof()); 3724 EXPECT_TRUE(data.at_write_eof());
3720 EXPECT_TRUE(data.at_read_eof()); 3725 EXPECT_TRUE(data.at_read_eof());
3721 3726
3722 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3727 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3723 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_); 3728 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
3724 3729
3725 stream->Close(); 3730 stream->Close();
3726 EXPECT_EQ(NULL, stream.get()); 3731 EXPECT_EQ(NULL, stream.get());
3727 3732
3728 EXPECT_EQ(OK, delegate.WaitForClose()); 3733 EXPECT_EQ(OK, delegate.WaitForClose());
3729 3734
3730 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3735 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3731 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_); 3736 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
3732 } 3737 }
3733 3738
3734 // Send data back and forth but close the stream before its data frame 3739 // Send data back and forth but close the stream before its data frame
3735 // can be written to the socket. The send window should then increase 3740 // can be written to the socket. The send window should then increase
3736 // to its original value, i.e. we shouldn't "leak" send window bytes. 3741 // to its original value, i.e. we shouldn't "leak" send window bytes.
3737 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { 3742 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
3738 if (GetParam() < kProtoSPDY31) 3743 if (GetParam() < kProtoSPDY31)
3739 return; 3744 return;
3740 3745
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3779 3784
3780 test::StreamDelegateSendImmediate delegate(stream, msg_data); 3785 test::StreamDelegateSendImmediate delegate(stream, msg_data);
3781 stream->SetDelegate(&delegate); 3786 stream->SetDelegate(&delegate);
3782 3787
3783 scoped_ptr<SpdyHeaderBlock> headers( 3788 scoped_ptr<SpdyHeaderBlock> headers(
3784 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size)); 3789 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size));
3785 EXPECT_EQ(ERR_IO_PENDING, 3790 EXPECT_EQ(ERR_IO_PENDING,
3786 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); 3791 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
3787 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3792 EXPECT_TRUE(stream->HasUrlFromHeaders());
3788 3793
3789 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3794 const int32 initial_window_size =
3795 SpdySession::GetInitialWindowSize(GetParam());
3796 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3790 3797
3791 data.RunFor(1); 3798 data.RunFor(1);
3792 3799
3793 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3800 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3794 3801
3795 data.RunFor(1); 3802 data.RunFor(1);
3796 3803
3797 EXPECT_TRUE(data.at_write_eof()); 3804 EXPECT_TRUE(data.at_write_eof());
3798 EXPECT_TRUE(data.at_read_eof()); 3805 EXPECT_TRUE(data.at_read_eof());
3799 3806
3800 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3807 EXPECT_EQ(initial_window_size - msg_data_size,
3801 session->session_send_window_size_); 3808 session->session_send_window_size_);
3802 3809
3803 // Closing the stream should increase the session's send window. 3810 // Closing the stream should increase the session's send window.
3804 stream->Close(); 3811 stream->Close();
3805 EXPECT_EQ(NULL, stream.get()); 3812 EXPECT_EQ(NULL, stream.get());
3806 3813
3807 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3814 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3808 3815
3809 EXPECT_EQ(OK, delegate.WaitForClose()); 3816 EXPECT_EQ(OK, delegate.WaitForClose());
3810 } 3817 }
3811 3818
3812 // Send data back and forth; the send and receive windows should 3819 // Send data back and forth; the send and receive windows should
3813 // change appropriately. 3820 // change appropriately.
3814 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { 3821 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
3815 if (GetParam() < kProtoSPDY31) 3822 if (GetParam() < kProtoSPDY31)
3816 return; 3823 return;
3817 3824
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3868 3875
3869 test::StreamDelegateSendImmediate delegate(stream, msg_data); 3876 test::StreamDelegateSendImmediate delegate(stream, msg_data);
3870 stream->SetDelegate(&delegate); 3877 stream->SetDelegate(&delegate);
3871 3878
3872 scoped_ptr<SpdyHeaderBlock> headers( 3879 scoped_ptr<SpdyHeaderBlock> headers(
3873 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size)); 3880 spdy_util_.ConstructPostHeaderBlock(url.spec(), msg_data_size));
3874 EXPECT_EQ(ERR_IO_PENDING, 3881 EXPECT_EQ(ERR_IO_PENDING,
3875 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); 3882 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
3876 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3883 EXPECT_TRUE(stream->HasUrlFromHeaders());
3877 3884
3878 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3885 const int32 initial_window_size =
3879 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3886 SpdySession::GetInitialWindowSize(GetParam());
3887 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3888 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3880 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3889 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3881 3890
3882 data.RunFor(1); 3891 data.RunFor(1);
3883 3892
3884 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3893 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3885 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3894 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3886 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3895 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3887 3896
3888 data.RunFor(1); 3897 data.RunFor(1);
3889 3898
3890 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3899 EXPECT_EQ(initial_window_size - msg_data_size,
3891 session->session_send_window_size_); 3900 session->session_send_window_size_);
3892 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3901 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3893 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3902 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3894 3903
3895 data.RunFor(1); 3904 data.RunFor(1);
3896 3905
3897 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3906 EXPECT_EQ(initial_window_size - msg_data_size,
3898 session->session_send_window_size_); 3907 session->session_send_window_size_);
3899 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3908 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3900 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3909 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3901 3910
3902 data.RunFor(1); 3911 data.RunFor(1);
3903 3912
3904 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3913 EXPECT_EQ(initial_window_size - msg_data_size,
3905 session->session_send_window_size_); 3914 session->session_send_window_size_);
3906 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3915 EXPECT_EQ(initial_window_size - msg_data_size,
3907 session->session_recv_window_size_); 3916 session->session_recv_window_size_);
3908 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3917 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3909 3918
3910 data.RunFor(1); 3919 data.RunFor(1);
3911 3920
3912 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3921 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3913 EXPECT_EQ(kSpdySessionInitialWindowSize - msg_data_size, 3922 EXPECT_EQ(initial_window_size - msg_data_size,
3914 session->session_recv_window_size_); 3923 session->session_recv_window_size_);
3915 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 3924 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
3916 3925
3917 EXPECT_TRUE(data.at_write_eof()); 3926 EXPECT_TRUE(data.at_write_eof());
3918 EXPECT_TRUE(data.at_read_eof()); 3927 EXPECT_TRUE(data.at_read_eof());
3919 3928
3920 EXPECT_EQ(msg_data, delegate.TakeReceivedData()); 3929 EXPECT_EQ(msg_data, delegate.TakeReceivedData());
3921 3930
3922 // Draining the delegate's read queue should increase the session's 3931 // Draining the delegate's read queue should increase the session's
3923 // receive window. 3932 // receive window.
3924 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3933 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3925 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3934 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3926 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_); 3935 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
3927 3936
3928 stream->Close(); 3937 stream->Close();
3929 EXPECT_EQ(NULL, stream.get()); 3938 EXPECT_EQ(NULL, stream.get());
3930 3939
3931 EXPECT_EQ(OK, delegate.WaitForClose()); 3940 EXPECT_EQ(OK, delegate.WaitForClose());
3932 3941
3933 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_send_window_size_); 3942 EXPECT_EQ(initial_window_size, session->session_send_window_size_);
3934 EXPECT_EQ(kSpdySessionInitialWindowSize, session->session_recv_window_size_); 3943 EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
3935 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_); 3944 EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
3936 } 3945 }
3937 3946
3938 // Given a stall function and an unstall function, runs a test to make 3947 // Given a stall function and an unstall function, runs a test to make
3939 // sure that a stream resumes after unstall. 3948 // sure that a stream resumes after unstall.
3940 void SpdySessionTest::RunResumeAfterUnstallTest( 3949 void SpdySessionTest::RunResumeAfterUnstallTest(
3941 const base::Callback<void(SpdySession*, SpdyStream*)>& stall_function, 3950 const base::Callback<void(SpdySession*, SpdyStream*)>& stall_function,
3942 const base::Callback<void(SpdySession*, SpdyStream*, int32)>& 3951 const base::Callback<void(SpdySession*, SpdyStream*, int32)>&
3943 unstall_function) { 3952 unstall_function) {
3944 const char kStreamUrl[] = "http://www.google.com/"; 3953 const char kStreamUrl[] = "http://www.google.com/";
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
5120 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5129 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5121 "spdy_pooling.pem"); 5130 "spdy_pooling.pem");
5122 ssl_info.is_issued_by_known_root = true; 5131 ssl_info.is_issued_by_known_root = true;
5123 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5132 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5124 5133
5125 EXPECT_TRUE(SpdySession::CanPool( 5134 EXPECT_TRUE(SpdySession::CanPool(
5126 &tss, ssl_info, "www.example.org", "mail.example.org")); 5135 &tss, ssl_info, "www.example.org", "mail.example.org"));
5127 } 5136 }
5128 5137
5129 } // namespace net 5138 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698