| Index: net/spdy/spdy_session_unittest.cc
|
| diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc
|
| index a8196e42cacd5af4cb78eeff93cf65d0943a2e20..5ed45ae2e6e657d9d93d312c81a33acf791c433a 100644
|
| --- a/net/spdy/spdy_session_unittest.cc
|
| +++ b/net/spdy/spdy_session_unittest.cc
|
| @@ -107,12 +107,12 @@ class SpdySessionTest : public PlatformTest,
|
| HttpNetworkSession::NORMAL_SOCKET_POOL)),
|
| spdy_util_(GetParam()),
|
| session_deps_(GetParam()),
|
| - spdy_session_pool_(NULL),
|
| + spdy_session_pool_(nullptr),
|
| test_url_(kTestUrl),
|
| test_host_port_pair_(kTestHost, kTestPort),
|
| - key_(test_host_port_pair_, ProxyServer::Direct(),
|
| - PRIVACY_MODE_DISABLED) {
|
| - }
|
| + key_(test_host_port_pair_,
|
| + ProxyServer::Direct(),
|
| + PRIVACY_MODE_DISABLED) {}
|
|
|
| virtual ~SpdySessionTest() {
|
| // Important to restore the per-pool limit first, since the pool limit must
|
| @@ -125,12 +125,6 @@ class SpdySessionTest : public PlatformTest,
|
|
|
| void SetUp() override { g_time_delta = base::TimeDelta(); }
|
|
|
| - void CreateDeterministicNetworkSession() {
|
| - http_session_ =
|
| - SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
|
| - spdy_session_pool_ = http_session_->spdy_session_pool();
|
| - }
|
| -
|
| void CreateNetworkSession() {
|
| http_session_ =
|
| SpdySessionDependencies::SpdyCreateSession(&session_deps_);
|
| @@ -189,7 +183,7 @@ INSTANTIATE_TEST_CASE_P(NextProto,
|
| // Try to create a SPDY session that will fail during
|
| // initialization. Nothing should blow up.
|
| TEST_P(SpdySessionTest, InitialReadError) {
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session = TryCreateFakeSpdySessionExpectingFailure(
|
| spdy_session_pool_, key_, ERR_CONNECTION_CLOSED);
|
| @@ -238,12 +232,10 @@ TEST_P(SpdySessionTest, PendingStreamCancellingAnother) {
|
|
|
| MockRead reads[] = {MockRead(ASYNC, 0, 0), };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -252,7 +244,7 @@ TEST_P(SpdySessionTest, PendingStreamCancellingAnother) {
|
| for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) {
|
| base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
|
| SPDY_BIDIRECTIONAL_STREAM, session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream != NULL);
|
| + ASSERT_TRUE(spdy_stream != nullptr);
|
| }
|
|
|
| SpdyStreamRequest request1;
|
| @@ -288,16 +280,14 @@ TEST_P(SpdySessionTest, PendingStreamCancellingAnother) {
|
| TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| MockRead reads[] = {
|
| CreateMockRead(*goaway, 0),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -307,10 +297,9 @@ TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the GOAWAY frame.
|
| - data.RunFor(1);
|
| - EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| base::RunLoop().RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // A session receiving a GOAWAY frame immediately with no active
|
| @@ -318,18 +307,14 @@ TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
|
| TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway, 0, SYNCHRONOUS),
|
| + CreateMockRead(*goaway, 0, SYNCHRONOUS), MockRead(ASYNC, 0, 1) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| -
|
| - CreateDeterministicNetworkSession();
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - data.StopAfter(1);
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| TryCreateInsecureSpdySessionExpectingFailure(
|
| @@ -338,6 +323,7 @@ TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) {
|
|
|
| EXPECT_FALSE(session);
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| + EXPECT_FALSE(data.AllReadDataConsumed());
|
| }
|
|
|
| // A session receiving a GOAWAY frame with active streams should close
|
| @@ -345,26 +331,25 @@ TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) {
|
| TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway, 2),
|
| - MockRead(ASYNC, 0, 3) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*goaway, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + MockRead(ASYNC, 0, 5) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| CreateMockWrite(*req2, 1),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -393,7 +378,7 @@ TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
|
| spdy_stream2->SendRequestHeaders(headers2.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders());
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
| EXPECT_EQ(3u, spdy_stream2->stream_id());
|
| @@ -401,22 +386,25 @@ TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the GOAWAY frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| EXPECT_FALSE(session->IsStreamActive(3));
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
|
|
| EXPECT_TRUE(session->IsGoingAway());
|
|
|
| // Should close the session.
|
| spdy_stream1->Close();
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Have a session receive two GOAWAY frames, with the last one causing
|
| @@ -425,28 +413,28 @@ TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
|
| TEST_P(SpdySessionTest, GoAwayTwice) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway1(spdy_util_.ConstructSpdyGoAway(1));
|
| scoped_ptr<SpdyFrame> goaway2(spdy_util_.ConstructSpdyGoAway(0));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway1, 2),
|
| - CreateMockRead(*goaway2, 3),
|
| - MockRead(ASYNC, 0, 4) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*goaway1, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + CreateMockRead(*goaway2, 5),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 6),
|
| + MockRead(ASYNC, 0, 7) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| CreateMockWrite(*req2, 1),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -475,7 +463,7 @@ TEST_P(SpdySessionTest, GoAwayTwice) {
|
| spdy_stream2->SendRequestHeaders(headers2.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders());
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
| EXPECT_EQ(3u, spdy_stream2->stream_id());
|
| @@ -483,20 +471,21 @@ TEST_P(SpdySessionTest, GoAwayTwice) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the first GOAWAY frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| EXPECT_FALSE(session->IsStreamActive(3));
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
| EXPECT_TRUE(session->IsGoingAway());
|
|
|
| // Read and process the second GOAWAY frame, which should close the
|
| // session.
|
| - data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Have a session with active streams receive a GOAWAY frame and then
|
| @@ -505,26 +494,25 @@ TEST_P(SpdySessionTest, GoAwayTwice) {
|
| TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway, 2),
|
| - MockRead(ASYNC, 0, 3) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*goaway, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + MockRead(ASYNC, 0, 5) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| CreateMockWrite(*req2, 1),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -553,7 +541,7 @@ TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) {
|
| spdy_stream2->SendRequestHeaders(headers2.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders());
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
| EXPECT_EQ(3u, spdy_stream2->stream_id());
|
| @@ -561,20 +549,22 @@ TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the GOAWAY frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| EXPECT_FALSE(session->IsStreamActive(3));
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
| EXPECT_TRUE(session->IsGoingAway());
|
|
|
| session->CloseSessionOnError(ERR_ABORTED, "Aborting session");
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Process a joint read buffer which causes the session to begin draining, and
|
| @@ -584,12 +574,13 @@ TEST_P(SpdySessionTest, GoAwayWhileDraining) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req, 0),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
|
| size_t joint_size = goaway->size() * 2 + body->size();
|
| @@ -613,13 +604,10 @@ TEST_P(SpdySessionTest, GoAwayWhileDraining) {
|
| MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| @@ -634,14 +622,13 @@ TEST_P(SpdySessionTest, GoAwayWhileDraining) {
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
|
|
|
| - data.RunFor(3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Stream and session closed gracefully.
|
| EXPECT_TRUE(delegate.StreamIsClosed());
|
| EXPECT_EQ(OK, delegate.WaitForClose());
|
| EXPECT_EQ(kUploadData, delegate.TakeReceivedData());
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Try to create a stream after receiving a GOAWAY frame. It should
|
| @@ -649,23 +636,22 @@ TEST_P(SpdySessionTest, GoAwayWhileDraining) {
|
| TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway, 1),
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*goaway, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + MockRead(ASYNC, 0, 4) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req, 0),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -684,14 +670,15 @@ TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the GOAWAY frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
| @@ -702,10 +689,10 @@ TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
|
| CompletionCallback());
|
| EXPECT_EQ(ERR_FAILED, rv);
|
|
|
| - // Read and process EOF.
|
| - data.RunFor(1);
|
| -
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Receiving a SYN_STREAM frame after a GOAWAY frame should result in
|
| @@ -713,29 +700,25 @@ TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
|
| TEST_P(SpdySessionTest, SynStreamAfterGoAway) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
|
| - scoped_ptr<SpdyFrame>
|
| - push(spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kDefaultURL));
|
| + scoped_ptr<SpdyFrame> push(
|
| + spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultURL));
|
| MockRead reads[] = {
|
| - CreateMockRead(*goaway, 1),
|
| - CreateMockRead(*push, 2),
|
| - MockRead(ASYNC, 0, 4) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*goaway, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*push, 4),
|
| + MockRead(ASYNC, 0, 6) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
|
| - MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0),
|
| - CreateMockWrite(*rst, 3)
|
| - };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -754,23 +737,24 @@ TEST_P(SpdySessionTest, SynStreamAfterGoAway) {
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Read and process the GOAWAY frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
|
|
| // Read and process the SYN_STREAM frame, the subsequent RST_STREAM,
|
| // and EOF.
|
| - data.RunFor(3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // A session observing a network change with active streams should close
|
| @@ -778,21 +762,18 @@ TEST_P(SpdySessionTest, SynStreamAfterGoAway) {
|
| TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 1) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -811,7 +792,7 @@ TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) {
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| @@ -835,32 +816,31 @@ TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) {
|
| // Should close the session.
|
| spdy_stream->Close();
|
| #endif
|
| - EXPECT_EQ(NULL, spdy_stream.get());
|
| + EXPECT_FALSE(spdy_stream);
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, ClientPing) {
|
| session_deps_.enable_ping = true;
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(1, true));
|
| MockRead reads[] = {
|
| - CreateMockRead(*read_ping, 1),
|
| - MockRead(ASYNC, 0, 0, 2) // EOF
|
| + CreateMockRead(*read_ping, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + MockRead(ASYNC, 0, 3) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*write_ping, 0),
|
| };
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -868,8 +848,8 @@ TEST_P(SpdySessionTest, ClientPing) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| - test::StreamDelegateSendImmediate delegate(spdy_stream1, NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| + test::StreamDelegateSendImmediate delegate(spdy_stream1, nullptr);
|
| spdy_stream1->SetDelegate(&delegate);
|
|
|
| base::TimeTicks before_ping_time = base::TimeTicks::Now();
|
| @@ -880,7 +860,7 @@ TEST_P(SpdySessionTest, ClientPing) {
|
|
|
| session->SendPrefacePingIfNoneInFlight();
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| session->CheckPingStatus(before_ping_time);
|
|
|
| @@ -889,18 +869,18 @@ TEST_P(SpdySessionTest, ClientPing) {
|
| EXPECT_FALSE(session->check_ping_status_pending());
|
| EXPECT_GE(session->last_activity_time(), before_ping_time);
|
|
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, ServerPing) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(2, false));
|
| MockRead reads[] = {
|
| CreateMockRead(*read_ping),
|
| @@ -912,7 +892,6 @@ TEST_P(SpdySessionTest, ServerPing) {
|
| };
|
| StaticSocketDataProvider data(
|
| reads, arraysize(reads), writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -923,17 +902,17 @@ TEST_P(SpdySessionTest, ServerPing) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| - test::StreamDelegateSendImmediate delegate(spdy_stream1, NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| + test::StreamDelegateSendImmediate delegate(spdy_stream1, nullptr);
|
| spdy_stream1->SetDelegate(&delegate);
|
|
|
| // Flush the read completion task.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| - EXPECT_TRUE(session == NULL);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(session);
|
| + EXPECT_FALSE(spdy_stream1);
|
| }
|
|
|
| // Cause a ping to be sent out while producing a write. The write loop
|
| @@ -944,27 +923,24 @@ TEST_P(SpdySessionTest, PingAndWriteLoop) {
|
| session_deps_.enable_ping = true;
|
| session_deps_.time_func = TheNearFuture;
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false));
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req, 0),
|
| CreateMockWrite(*write_ping, 1),
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -983,9 +959,12 @@ TEST_P(SpdySessionTest, PingAndWriteLoop) {
|
| // Shift time so that a ping will be sent out.
|
| g_time_delta = base::TimeDelta::FromSeconds(11);
|
|
|
| - data.RunFor(2);
|
| -
|
| + base::RunLoop().RunUntilIdle();
|
| session->CloseSessionOnError(ERR_ABORTED, "Aborting");
|
| +
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| @@ -1000,18 +979,18 @@ TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| // at which point the session closes.
|
|
|
| scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyGet(
|
| - NULL, 0, false, kLastStreamId - 2, MEDIUM, true));
|
| - scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, kLastStreamId, MEDIUM, true));
|
| + nullptr, 0, false, kLastStreamId - 2, MEDIUM, true));
|
| + scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyGet(
|
| + nullptr, 0, false, kLastStreamId, MEDIUM, true));
|
|
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0), CreateMockWrite(*req2, 1),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> resp1(
|
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, kLastStreamId - 2));
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId - 2));
|
| scoped_ptr<SpdyFrame> resp2(
|
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, kLastStreamId));
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId));
|
|
|
| scoped_ptr<SpdyFrame> body1(
|
| spdy_util_.ConstructSpdyBodyFrame(kLastStreamId - 2, true));
|
| @@ -1019,19 +998,18 @@ TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| spdy_util_.ConstructSpdyBodyFrame(kLastStreamId, true));
|
|
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 2), CreateMockRead(*resp2, 3),
|
| - CreateMockRead(*body1, 4), CreateMockRead(*body2, 5),
|
| - MockRead(ASYNC, 0, 6) // EOF
|
| + CreateMockRead(*resp1, 2),
|
| + CreateMockRead(*resp2, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + CreateMockRead(*body1, 5),
|
| + CreateMockRead(*body2, 6),
|
| + MockRead(ASYNC, 0, 7) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| -
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| @@ -1077,7 +1055,7 @@ TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| scoped_ptr<SpdyHeaderBlock>(
|
| spdy_util_.ConstructGetHeaderBlock(url.spec())),
|
| NO_MORE_DATA_TO_SEND);
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(kLastStreamId - 2u, stream1->stream_id());
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| @@ -1089,7 +1067,7 @@ TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| scoped_ptr<SpdyHeaderBlock>(
|
| spdy_util_.ConstructGetHeaderBlock(url.spec())),
|
| NO_MORE_DATA_TO_SEND);
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Active streams remain active.
|
| EXPECT_EQ(kLastStreamId, stream2->stream_id());
|
| @@ -1103,15 +1081,15 @@ TEST_P(SpdySessionTest, StreamIdSpaceExhausted) {
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(MEDIUM));
|
|
|
| // Read responses on remaining active streams.
|
| - data.RunFor(4);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(OK, delegate1.WaitForClose());
|
| EXPECT_EQ(kUploadData, delegate1.TakeReceivedData());
|
| EXPECT_EQ(OK, delegate2.WaitForClose());
|
| EXPECT_EQ(kUploadData, delegate2.TakeReceivedData());
|
|
|
| // Session was destroyed.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_FALSE(session.get());
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Verifies that an unstalled pending stream creation racing with a new stream
|
| @@ -1124,10 +1102,7 @@ TEST_P(SpdySessionTest, UnstallRacesWithStreamCreation) {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| -
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1169,15 +1144,15 @@ TEST_P(SpdySessionTest, UnstallRacesWithStreamCreation) {
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(MEDIUM));
|
|
|
| - // NOW run the message loop. The unstalled stream will re-stall itself.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + // Now run the message loop. The unstalled stream will re-stall itself.
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->pending_create_stream_queue_size(MEDIUM));
|
|
|
| // Cancel the third stream and run the message loop. Verify that the second
|
| // stream creation now completes.
|
| stream3->Cancel();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(MEDIUM));
|
| @@ -1189,31 +1164,32 @@ TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
|
| session_deps_.time_func = TheNearFuture;
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
|
| + MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
|
|
|
| scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 2, 1, "http://www.example.org/a.dat"));
|
| + nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
|
| scoped_ptr<SpdyFrame> push_a_body(
|
| spdy_util_.ConstructSpdyBodyFrame(2, false));
|
| // In ascii "0" < "a". We use it to verify that we properly handle std::map
|
| // iterators inside. See http://crbug.com/443490
|
| scoped_ptr<SpdyFrame> push_b(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 4, 1, "http://www.example.org/0.dat"));
|
| - MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4)};
|
| + nullptr, 0, 4, 1, "http://www.example.org/0.dat"));
|
| MockRead reads[] = {
|
| - CreateMockRead(*push_a, 1), CreateMockRead(*push_a_body, 2),
|
| - CreateMockRead(*push_b, 3), MockRead(ASYNC, 0, 5), // EOF
|
| + CreateMockRead(*push_a, 1),
|
| + CreateMockRead(*push_a_body, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*push_b, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 6),
|
| + MockRead(ASYNC, 0, 7) // EOF
|
| };
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| @@ -1228,7 +1204,7 @@ TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
|
| spdy_util_.ConstructGetHeaderBlock(url.spec()));
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
|
|
| - data.RunFor(3);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Verify that there is one unclaimed push stream.
|
| EXPECT_EQ(1u, session->num_unclaimed_pushed_streams());
|
| @@ -1249,7 +1225,8 @@ TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
|
| // Shift time to expire the push stream. Read the second SYN_STREAM,
|
| // and verify a RST_STREAM was written.
|
| g_time_delta = base::TimeDelta::FromSeconds(301);
|
| - data.RunFor(2);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Verify that the second pushed stream evicted the first pushed stream.
|
| EXPECT_EQ(1u, session->num_unclaimed_pushed_streams());
|
| @@ -1266,15 +1243,15 @@ TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
|
| }
|
|
|
| // Read and process EOF.
|
| - data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, FailedPing) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
| @@ -1282,9 +1259,9 @@ TEST_P(SpdySessionTest, FailedPing) {
|
| scoped_ptr<SpdyFrame> goaway(
|
| spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Failed ping."));
|
| MockWrite writes[] = {CreateMockWrite(*write_ping), CreateMockWrite(*goaway)};
|
| +
|
| StaticSocketDataProvider data(
|
| reads, arraysize(reads), writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1295,8 +1272,8 @@ TEST_P(SpdySessionTest, FailedPing) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| - test::StreamDelegateSendImmediate delegate(spdy_stream1, NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| + test::StreamDelegateSendImmediate delegate(spdy_stream1, nullptr);
|
| spdy_stream1->SetDelegate(&delegate);
|
|
|
| session->set_connection_at_risk_of_loss_time(base::TimeDelta::FromSeconds(0));
|
| @@ -1318,11 +1295,11 @@ TEST_P(SpdySessionTest, FailedPing) {
|
| base::TimeTicks now = base::TimeTicks::Now();
|
| session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1);
|
| session->CheckPingStatus(now);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
| }
|
|
|
| // Request kInitialMaxConcurrentStreams + 1 streams. Receive a
|
| @@ -1334,6 +1311,13 @@ TEST_P(SpdySessionTest, OnSettings) {
|
|
|
| const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS;
|
|
|
| + int seq = 0;
|
| + std::vector<MockWrite> writes;
|
| + scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
|
| + if (GetParam() >= kProtoSPDY4MinimumVersion) {
|
| + writes.push_back(CreateMockWrite(*settings_ack, ++seq));
|
| + }
|
| +
|
| SettingsMap new_settings;
|
| const uint32 max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
|
| new_settings[kSpdySettingsIds] =
|
| @@ -1341,22 +1325,16 @@ TEST_P(SpdySessionTest, OnSettings) {
|
| scoped_ptr<SpdyFrame> settings_frame(
|
| spdy_util_.ConstructSpdySettings(new_settings));
|
| MockRead reads[] = {
|
| - CreateMockRead(*settings_frame, 0),
|
| - MockRead(ASYNC, 0, 1),
|
| - };
|
| -
|
| - scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
|
| - MockWrite writes[] = {
|
| - CreateMockWrite(*settings_ack, 2),
|
| + CreateMockRead(*settings_frame, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, ++seq),
|
| + MockRead(ASYNC, 0, ++seq),
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), vector_as_array(&writes),
|
| + writes.size());
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -1366,7 +1344,7 @@ TEST_P(SpdySessionTest, OnSettings) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream != NULL);
|
| + ASSERT_TRUE(spdy_stream != nullptr);
|
| }
|
|
|
| StreamReleaserCallback stream_releaser;
|
| @@ -1377,17 +1355,16 @@ TEST_P(SpdySessionTest, OnSettings) {
|
| BoundNetLog(),
|
| stream_releaser.MakeCallback(&request)));
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(OK, stream_releaser.WaitForResult());
|
|
|
| - data.RunFor(1);
|
| - if (spdy_util_.spdy_version() >= SPDY4) {
|
| - // Allow the SETTINGS+ACK to write, so the session finishes draining.
|
| - data.RunFor(1);
|
| - }
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| +
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| // Start with a persisted value for max concurrent streams. Receive a
|
| @@ -1411,16 +1388,15 @@ TEST_P(SpdySessionTest, ClearSettings) {
|
| uint8 flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS;
|
| test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version());
|
| MockRead reads[] = {
|
| - CreateMockRead(*settings_frame, 0),
|
| - MockRead(ASYNC, 0, 1),
|
| + CreateMockRead(*settings_frame, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + MockRead(ASYNC, 0, 2),
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| // Initialize the SpdySetting with the default.
|
| spdy_session_pool_->http_server_properties()->SetSpdySetting(
|
| @@ -1441,7 +1417,7 @@ TEST_P(SpdySessionTest, ClearSettings) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream != NULL);
|
| + ASSERT_TRUE(spdy_stream != nullptr);
|
| }
|
|
|
| StreamReleaserCallback stream_releaser;
|
| @@ -1453,7 +1429,7 @@ TEST_P(SpdySessionTest, ClearSettings) {
|
| BoundNetLog(),
|
| stream_releaser.MakeCallback(&request)));
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(OK, stream_releaser.WaitForResult());
|
|
|
| @@ -1466,8 +1442,9 @@ TEST_P(SpdySessionTest, ClearSettings) {
|
| EXPECT_EQ(kInitialMaxConcurrentStreams + 1,
|
| session->max_concurrent_streams());
|
|
|
| - data.RunFor(1);
|
| - EXPECT_TRUE(session == NULL);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Start with max concurrent streams set to 1. Request two streams.
|
| @@ -1482,10 +1459,7 @@ TEST_P(SpdySessionTest, CancelPendingCreateStream) {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1505,14 +1479,14 @@ TEST_P(SpdySessionTest, CancelPendingCreateStream) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream != NULL);
|
| + ASSERT_TRUE(spdy_stream != nullptr);
|
| }
|
|
|
| // Create 2 more streams. First will succeed. Second will be pending.
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
|
|
| // Use scoped_ptr to let us invalidate the memory when we want to, to trigger
|
| // a valgrind error if the callback is invoked when it's not supposed to be.
|
| @@ -1527,13 +1501,13 @@ TEST_P(SpdySessionTest, CancelPendingCreateStream) {
|
|
|
| // Release the first one, this will allow the second to be created.
|
| spdy_stream1->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| request.CancelRequest();
|
| callback.reset();
|
|
|
| // Should not crash when running the pending callback.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
|
| @@ -1546,7 +1520,6 @@ TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
|
| SettingsMap settings;
|
| settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
|
| SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams);
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> settings_frame(
|
| spdy_util_.ConstructSpdySettings(settings));
|
| std::vector<MockWrite> writes;
|
| @@ -1572,7 +1545,6 @@ TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
|
|
|
| StaticSocketDataProvider data(reads, arraysize(reads),
|
| vector_as_array(&writes), writes.size());
|
| - data.set_connect_data(connect_data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1589,7 +1561,7 @@ TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(data.AllWriteDataConsumed());
|
| }
|
|
|
| @@ -1616,13 +1588,11 @@ TEST_P(SpdySessionTest, Initialize) {
|
| session_deps_.net_log = log.bound().net_log();
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(ASYNC, 0, 0) // EOF
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1632,7 +1602,7 @@ TEST_P(SpdySessionTest, Initialize) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Flush the read completion task.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| TestNetLogEntry::List entries;
|
| log.GetEntries(&entries);
|
| @@ -1654,15 +1624,13 @@ TEST_P(SpdySessionTest, Initialize) {
|
| TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway());
|
| MockRead reads[] = {
|
| CreateMockRead(*goaway),
|
| MockRead(SYNCHRONOUS, 0, 0) // EOF
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1673,10 +1641,10 @@ TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Flush the read completion task.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
|
|
| // Check that the NetLog was filled reasonably.
|
| TestNetLogEntry::List entries;
|
| @@ -1700,13 +1668,11 @@ TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
|
| TEST_P(SpdySessionTest, NetLogOnSessionEOF) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, 0, 0) // EOF
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -1717,10 +1683,10 @@ TEST_P(SpdySessionTest, NetLogOnSessionEOF) {
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| // Flush the read completion task.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
|
|
| // Check that the NetLog was filled reasonably.
|
| TestNetLogEntry::List entries;
|
| @@ -1745,20 +1711,17 @@ TEST_P(SpdySessionTest, SynCompressionHistograms) {
|
| session_deps_.enable_compression = true;
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, true, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, true, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req, 0),
|
| };
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 1) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| @@ -1777,7 +1740,7 @@ TEST_P(SpdySessionTest, SynCompressionHistograms) {
|
| // Write request headers & capture resulting histogram update.
|
| base::HistogramTester histogram_tester;
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| // Regression test of compression performance under the request fixture.
|
| switch (spdy_util_.spdy_version()) {
|
| case SPDY3:
|
| @@ -1793,9 +1756,10 @@ TEST_P(SpdySessionTest, SynCompressionHistograms) {
|
| }
|
|
|
| // Read and process EOF.
|
| - data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Queue up a low-priority SYN_STREAM followed by a high-priority
|
| @@ -1803,22 +1767,21 @@ TEST_P(SpdySessionTest, SynCompressionHistograms) {
|
| // first.
|
| TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
|
| // Construct the request.
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> req_highest(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, HIGHEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, HIGHEST, true));
|
| scoped_ptr<SpdyFrame> req_lowest(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, LOWEST, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req_highest, 0),
|
| CreateMockWrite(*req_lowest, 1),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> resp_highest(
|
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> body_highest(
|
| spdy_util_.ConstructSpdyBodyFrame(1, true));
|
| scoped_ptr<SpdyFrame> resp_lowest(
|
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
|
| scoped_ptr<SpdyFrame> body_lowest(
|
| spdy_util_.ConstructSpdyBodyFrame(3, true));
|
| MockRead reads[] = {
|
| @@ -1831,12 +1794,10 @@ TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -1873,7 +1834,7 @@ TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
|
| headers_highest.Pass(), NO_MORE_DATA_TO_SEND);
|
| EXPECT_TRUE(spdy_stream_highest->HasUrlFromHeaders());
|
|
|
| - data.RunFor(7);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(spdy_stream_lowest);
|
| EXPECT_FALSE(spdy_stream_highest);
|
| @@ -1882,31 +1843,30 @@ TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
|
| }
|
|
|
| TEST_P(SpdySessionTest, CancelStream) {
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| // Request 1, at HIGHEST priority, will be cancelled before it writes data.
|
| // Request 2, at LOWEST priority, will be a full request and will be id 1.
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req2, 0),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp2(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp2, 1),
|
| - CreateMockRead(*body2, 2),
|
| - MockRead(ASYNC, 0, 3) // EOF
|
| + CreateMockRead(*resp2, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*body2, 3),
|
| + MockRead(ASYNC, 0, 4) // EOF
|
| };
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -1915,7 +1875,7 @@ TEST_P(SpdySessionTest, CancelStream) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, HIGHEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -1924,7 +1884,7 @@ TEST_P(SpdySessionTest, CancelStream) {
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url2, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
| test::StreamDelegateDoNothing delegate2(spdy_stream2);
|
| spdy_stream2->SetDelegate(&delegate2);
|
| @@ -1942,17 +1902,17 @@ TEST_P(SpdySessionTest, CancelStream) {
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| spdy_stream1->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| EXPECT_EQ(1u, delegate2.stream_id());
|
|
|
| spdy_stream2->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
| }
|
|
|
| // Create two streams that are set to re-close themselves on close,
|
| @@ -1961,7 +1921,6 @@ TEST_P(SpdySessionTest, CancelStream) {
|
| TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedSelfClosingStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
|
|
| // No actual data will be sent.
|
| MockWrite writes[] = {
|
| @@ -1971,12 +1930,10 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedSelfClosingStreams) {
|
| MockRead reads[] = {
|
| MockRead(ASYNC, 0, 0) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -1985,14 +1942,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedSelfClosingStreams) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url1, HIGHEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| GURL url2(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url2, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| test::ClosingDelegate delegate1(spdy_stream1);
|
| @@ -2018,14 +1975,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedSelfClosingStreams) {
|
| // Ensure we don't crash while closing the session.
|
| session->CloseSessionOnError(ERR_ABORTED, std::string());
|
|
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
| + EXPECT_FALSE(spdy_stream2);
|
|
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Create two streams that are set to close each other on close, and
|
| @@ -2033,22 +1990,10 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedSelfClosingStreams) {
|
| TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedMutuallyClosingStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - // No actual data will be sent.
|
| - MockWrite writes[] = {
|
| - MockWrite(ASYNC, 0, 1) // EOF
|
| - };
|
| -
|
| - MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 0) // EOF
|
| - };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(nullptr, 0, nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2057,14 +2002,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedMutuallyClosingStreams) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url1, HIGHEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| GURL url2(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url2, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2);
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| // Make |spdy_stream1| close |spdy_stream2|.
|
| @@ -2092,14 +2037,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedMutuallyClosingStreams) {
|
| // Ensure we don't crash while closing the session.
|
| session->CloseSessionOnError(ERR_ABORTED, std::string());
|
|
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
| + EXPECT_FALSE(spdy_stream2);
|
|
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Create two streams that are set to re-close themselves on close,
|
| @@ -2107,27 +2052,23 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoCreatedMutuallyClosingStreams) {
|
| TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| CreateMockWrite(*req2, 1),
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2136,14 +2077,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| GURL url2(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url2, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| test::ClosingDelegate delegate1(spdy_stream1);
|
| @@ -2166,7 +2107,7 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
| EXPECT_EQ(3u, spdy_stream2->stream_id());
|
| @@ -2174,14 +2115,16 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
|
| // Ensure we don't crash while closing the session.
|
| session->CloseSessionOnError(ERR_ABORTED, std::string());
|
|
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
| + EXPECT_FALSE(spdy_stream2);
|
|
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Create two streams that are set to close each other on close,
|
| @@ -2189,27 +2132,23 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
|
| TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| CreateMockWrite(*req2, 1),
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2218,14 +2157,14 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| GURL url2(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url2, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2);
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| // Make |spdy_stream1| close |spdy_stream2|.
|
| @@ -2250,7 +2189,7 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| EXPECT_EQ(0u, spdy_stream2->stream_id());
|
|
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
| EXPECT_EQ(3u, spdy_stream2->stream_id());
|
| @@ -2258,14 +2197,16 @@ TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
|
| // Ensure we don't crash while closing the session.
|
| session->CloseSessionOnError(ERR_ABORTED, std::string());
|
|
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
| + EXPECT_FALSE(spdy_stream2);
|
|
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Delegate that closes a given session when the stream is closed.
|
| @@ -2287,14 +2228,12 @@ class SessionClosingDelegate : public test::StreamDelegateDoNothing {
|
| };
|
|
|
| // Close an activated stream that closes its session. Nothing should
|
| -// blow up. This is a regression test for http://crbug.com/263691 .
|
| +// blow up. This is a regression test for https://crbug.com/263691.
|
| TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
|
| scoped_ptr<SpdyFrame> goaway(
|
| @@ -2302,19 +2241,18 @@ TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
|
| // The GOAWAY has higher-priority than the RST_STREAM, and is written first
|
| // despite being queued second.
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 1),
|
| - CreateMockWrite(*rst, 2),
|
| + CreateMockWrite(*req, 0),
|
| + CreateMockWrite(*goaway, 1),
|
| + CreateMockWrite(*rst, 3),
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 3) // EOF
|
| + MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2323,7 +2261,7 @@ TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream->stream_id());
|
|
|
| SessionClosingDelegate delegate(spdy_stream, session);
|
| @@ -2336,7 +2274,7 @@ TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
|
|
|
| EXPECT_EQ(0u, spdy_stream->stream_id());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| @@ -2344,31 +2282,20 @@ TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
|
| // session).
|
| spdy_stream->Cancel();
|
|
|
| - EXPECT_EQ(NULL, spdy_stream.get());
|
| + EXPECT_FALSE(spdy_stream);
|
| EXPECT_TRUE(delegate.StreamIsClosed());
|
|
|
| - data.RunFor(2); // Write the RST_STREAM & GOAWAY.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + // Write the RST_STREAM & GOAWAY.
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| TEST_P(SpdySessionTest, VerifyDomainAuthentication) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - // No actual data will be sent.
|
| - MockWrite writes[] = {
|
| - MockWrite(ASYNC, 0, 1) // EOF
|
| - };
|
| -
|
| - MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 0) // EOF
|
| - };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(nullptr, 0, nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| // Load a cert that is valid for:
|
| // www.example.org
|
| @@ -2377,13 +2304,13 @@ TEST_P(SpdySessionTest, VerifyDomainAuthentication) {
|
| base::FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "spdy_pooling.pem"));
|
| - ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
|
| + ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get());
|
|
|
| SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
|
| ssl.cert = test_cert;
|
| - session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl);
|
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateSecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2397,20 +2324,8 @@ TEST_P(SpdySessionTest, VerifyDomainAuthentication) {
|
| TEST_P(SpdySessionTest, ConnectionPooledWithTlsChannelId) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - // No actual data will be sent.
|
| - MockWrite writes[] = {
|
| - MockWrite(ASYNC, 0, 1) // EOF
|
| - };
|
| -
|
| - MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 0) // EOF
|
| - };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(nullptr, 0, nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| // Load a cert that is valid for:
|
| // www.example.org
|
| @@ -2419,14 +2334,14 @@ TEST_P(SpdySessionTest, ConnectionPooledWithTlsChannelId) {
|
| base::FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "spdy_pooling.pem"));
|
| - ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
|
| + ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get());
|
|
|
| SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
|
| ssl.channel_id_sent = true;
|
| ssl.cert = test_cert;
|
| - session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl);
|
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateSecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2440,8 +2355,6 @@ TEST_P(SpdySessionTest, ConnectionPooledWithTlsChannelId) {
|
| TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
| // TODO(rtenneti): Define a helper class/methods and move the common code in
|
| // this file.
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| SettingsMap new_settings;
|
| const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS;
|
| const uint32 max_concurrent_streams = 1;
|
| @@ -2450,11 +2363,11 @@ TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
|
|
| scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, LOWEST, true));
|
| scoped_ptr<SpdyFrame> req3(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 5, LOWEST, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*settings_ack, 1),
|
| CreateMockWrite(*req1, 2),
|
| @@ -2467,44 +2380,46 @@ TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
| scoped_ptr<SpdyFrame> settings_frame(
|
| spdy_util_.ConstructSpdySettings(new_settings));
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true));
|
|
|
| - scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
|
| + scoped_ptr<SpdyFrame> resp2(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
|
| scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true));
|
|
|
| - scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5));
|
| + scoped_ptr<SpdyFrame> resp3(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 5));
|
| scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, true));
|
|
|
| MockRead reads[] = {
|
| - CreateMockRead(*settings_frame),
|
| - CreateMockRead(*resp1, 3),
|
| - CreateMockRead(*body1, 4),
|
| - CreateMockRead(*resp2, 6),
|
| - CreateMockRead(*body2, 7),
|
| - CreateMockRead(*resp3, 9),
|
| - CreateMockRead(*body3, 10),
|
| - MockRead(ASYNC, 0, 11) // EOF
|
| + CreateMockRead(*settings_frame, 0),
|
| + CreateMockRead(*resp1, 3),
|
| + CreateMockRead(*body1, 4),
|
| + CreateMockRead(*resp2, 6),
|
| + CreateMockRead(*body2, 7),
|
| + CreateMockRead(*resp3, 9),
|
| + CreateMockRead(*body3, 10),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 11),
|
| + MockRead(ASYNC, 0, 12) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| // Read the settings frame.
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -2536,17 +2451,16 @@ TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
|
|
| // Run until 1st stream is activated and then closed.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(4);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream1);
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
|
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| - EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->pending_create_stream_queue_size(LOWEST));
|
|
|
| // Pump loop for SpdySession::ProcessPendingStreamRequests() to
|
| // create the 2nd stream.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| @@ -2562,17 +2476,16 @@ TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
|
|
| // Run until 2nd stream is activated and then closed.
|
| EXPECT_EQ(0u, delegate2.stream_id());
|
| - data.RunFor(3);
|
| - EXPECT_EQ(NULL, stream2.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(stream2);
|
| EXPECT_EQ(3u, delegate2.stream_id());
|
|
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| - EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(LOWEST));
|
|
|
| // Pump loop for SpdySession::ProcessPendingStreamRequests() to
|
| // create the 3rd stream.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| @@ -2588,15 +2501,16 @@ TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
|
|
|
| // Run until 2nd stream is activated and then closed.
|
| EXPECT_EQ(0u, delegate3.stream_id());
|
| - data.RunFor(3);
|
| - EXPECT_EQ(NULL, stream3.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(stream3);
|
| EXPECT_EQ(5u, delegate3.stream_id());
|
|
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(LOWEST));
|
|
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| @@ -2606,10 +2520,7 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -2622,14 +2533,14 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream != NULL);
|
| + ASSERT_TRUE(spdy_stream != nullptr);
|
| }
|
|
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| TestCompletionCallback callback2;
|
| @@ -2653,9 +2564,9 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| EXPECT_EQ(2u, session->pending_create_stream_queue_size(LOWEST));
|
|
|
| // Cancel the first stream; this will allow the second stream to be created.
|
| - EXPECT_TRUE(spdy_stream1.get() != NULL);
|
| + EXPECT_TRUE(spdy_stream1);
|
| spdy_stream1->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| EXPECT_EQ(OK, callback2.WaitForResult());
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| @@ -2665,7 +2576,7 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| // Cancel the second stream; this will allow the third stream to be created.
|
| base::WeakPtr<SpdyStream> spdy_stream2 = request2.ReleaseStream();
|
| spdy_stream2->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
|
|
| EXPECT_EQ(OK, callback3.WaitForResult());
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| @@ -2675,7 +2586,7 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| // Cancel the third stream.
|
| base::WeakPtr<SpdyStream> spdy_stream3 = request3.ReleaseStream();
|
| spdy_stream3->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream3.get());
|
| + EXPECT_FALSE(spdy_stream3);
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| EXPECT_EQ(kInitialMaxConcurrentStreams - 1, session->num_created_streams());
|
| EXPECT_EQ(0u, session->pending_create_stream_queue_size(LOWEST));
|
| @@ -2686,11 +2597,12 @@ TEST_P(SpdySessionTest, CancelTwoStalledCreateStream) {
|
| // on the socket for reading. It then verifies that it has read all
|
| // the available data without yielding.
|
| TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| + session_deps_.host_resolver->set_synchronous_mode(true);
|
| +
|
| BufferedSpdyFramer framer(spdy_util_.spdy_version(), false);
|
|
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| };
|
| @@ -2710,27 +2622,26 @@ TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
|
| scoped_ptr<SpdyFrame> finish_data_frame(
|
| framer.CreateDataFrame(1, payload_data, kPayloadSize - 1, DATA_FLAG_FIN));
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
|
|
| // Write 1 byte less than kMaxReadBytes to check that DoRead reads up to 32k
|
| // bytes.
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 1),
|
| - CreateMockRead(*partial_data_frame, 2),
|
| - CreateMockRead(*partial_data_frame, 3, SYNCHRONOUS),
|
| - CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
|
| - CreateMockRead(*finish_data_frame, 5, SYNCHRONOUS),
|
| - MockRead(ASYNC, 0, 6) // EOF
|
| + CreateMockRead(*resp1, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*partial_data_frame, 3),
|
| + CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
|
| + CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
|
| + CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS),
|
| + MockRead(ASYNC, 0, 7) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2739,7 +2650,7 @@ TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -2755,14 +2666,15 @@ TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
|
|
|
| // Run until 1st read.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(0u, observer.executed_count());
|
|
|
| // Read all the data and verify SpdySession::DoReadLoop has not
|
| // posted a task.
|
| - data.RunFor(4);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| // Verify task observer's executed_count is zero, which indicates DoRead read
|
| // all the available data.
|
| @@ -2777,11 +2689,12 @@ TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
|
| // there is data available for it to read (i.e, socket()->Read didn't
|
| // return ERR_IO_PENDING during socket reads).
|
| TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| + session_deps_.host_resolver->set_synchronous_mode(true);
|
| +
|
| BufferedSpdyFramer framer(spdy_util_.spdy_version(), false);
|
|
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| };
|
| @@ -2801,27 +2714,26 @@ TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
|
| scoped_ptr<SpdyFrame> finish_data_frame(
|
| framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN));
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
|
|
| // Write 1 byte more than kMaxReadBytes to check that DoRead yields.
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 1),
|
| - CreateMockRead(*partial_data_frame, 2),
|
| - CreateMockRead(*partial_data_frame, 3, SYNCHRONOUS),
|
| - CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
|
| - CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
|
| - CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS),
|
| - MockRead(ASYNC, 0, 7) // EOF
|
| + CreateMockRead(*resp1, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*partial_data_frame, 3),
|
| + CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
|
| + CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
|
| + CreateMockRead(*partial_data_frame, 6, SYNCHRONOUS),
|
| + CreateMockRead(*finish_data_frame, 7, SYNCHRONOUS),
|
| + MockRead(ASYNC, 0, 8) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2830,7 +2742,7 @@ TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -2846,14 +2758,15 @@ TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
|
|
|
| // Run until 1st read.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(0u, observer.executed_count());
|
|
|
| // Read all the data and verify SpdySession::DoReadLoop has posted a
|
| // task.
|
| - data.RunFor(6);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| // Verify task observer's executed_count is 1, which indicates DoRead has
|
| // posted only one task and thus yielded though there is data available for it
|
| @@ -2875,11 +2788,12 @@ TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
|
| // yield. When we come back, DoRead() will read the results from the
|
| // async read, and rest of the data synchronously.
|
| TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| + session_deps_.host_resolver->set_synchronous_mode(true);
|
| +
|
| BufferedSpdyFramer framer(spdy_util_.spdy_version(), false);
|
|
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| };
|
| @@ -2908,31 +2822,30 @@ TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
|
| scoped_ptr<SpdyFrame> finish_data_frame(framer.CreateDataFrame(
|
| 1, "h", 1, DATA_FLAG_FIN));
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
|
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 1),
|
| - CreateMockRead(*eightk_data_frame, 2),
|
| - CreateMockRead(*eightk_data_frame, 3, SYNCHRONOUS),
|
| - CreateMockRead(*eightk_data_frame, 4, SYNCHRONOUS),
|
| - CreateMockRead(*twok_data_frame, 5, SYNCHRONOUS),
|
| - CreateMockRead(*eightk_data_frame, 6, ASYNC),
|
| - CreateMockRead(*eightk_data_frame, 7, SYNCHRONOUS),
|
| - CreateMockRead(*eightk_data_frame, 8, SYNCHRONOUS),
|
| - CreateMockRead(*eightk_data_frame, 9, SYNCHRONOUS),
|
| - CreateMockRead(*twok_data_frame, 10, SYNCHRONOUS),
|
| - CreateMockRead(*finish_data_frame, 11, SYNCHRONOUS),
|
| - MockRead(ASYNC, 0, 12) // EOF
|
| + CreateMockRead(*resp1, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*eightk_data_frame, 3),
|
| + CreateMockRead(*eightk_data_frame, 4, SYNCHRONOUS),
|
| + CreateMockRead(*eightk_data_frame, 5, SYNCHRONOUS),
|
| + CreateMockRead(*twok_data_frame, 6, SYNCHRONOUS),
|
| + CreateMockRead(*eightk_data_frame, 7, ASYNC),
|
| + CreateMockRead(*eightk_data_frame, 8, SYNCHRONOUS),
|
| + CreateMockRead(*eightk_data_frame, 9, SYNCHRONOUS),
|
| + CreateMockRead(*eightk_data_frame, 10, SYNCHRONOUS),
|
| + CreateMockRead(*twok_data_frame, 11, SYNCHRONOUS),
|
| + CreateMockRead(*finish_data_frame, 12, SYNCHRONOUS),
|
| + MockRead(ASYNC, 0, 13) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -2941,7 +2854,7 @@ TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url1, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -2957,14 +2870,15 @@ TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
|
|
|
| // Run until 1st read.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(0u, observer.executed_count());
|
|
|
| // Read all the data and verify SpdySession::DoReadLoop has posted a
|
| // task.
|
| - data.RunFor(12);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| // Verify task observer's executed_count is 1, which indicates DoRead has
|
| // posted only one task and thus yielded though there is data available for
|
| @@ -2977,33 +2891,33 @@ TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
|
| // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure
|
| // nothing blows up.
|
| TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| + session_deps_.host_resolver->set_synchronous_mode(true);
|
| +
|
| BufferedSpdyFramer framer(spdy_util_.spdy_version(), false);
|
|
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req1, 0),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true));
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway());
|
|
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 1),
|
| - CreateMockRead(*body1, 2),
|
| - CreateMockRead(*goaway, 3),
|
| + CreateMockRead(*resp1, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*body1, 3),
|
| + CreateMockRead(*goaway, 4),
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -3014,7 +2928,7 @@ TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
|
| session, url1, MEDIUM, BoundNetLog());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
|
|
| scoped_ptr<SpdyHeaderBlock> headers1(
|
| @@ -3024,15 +2938,16 @@ TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
|
|
|
| // Run until 1st read.
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, spdy_stream1->stream_id());
|
|
|
| // Run until GoAway.
|
| - data.RunFor(3);
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream1);
|
| EXPECT_TRUE(data.AllWriteDataConsumed());
|
| EXPECT_TRUE(data.AllReadDataConsumed());
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Within this framework, a SpdySession should be initialized with
|
| @@ -3042,12 +2957,10 @@ TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
|
| TEST_P(SpdySessionTest, ProtocolNegotiation) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, 0, 0) // EOF
|
| };
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -3073,12 +2986,10 @@ TEST_P(SpdySessionTest, CloseOneIdleConnection) {
|
| ClientSocketPoolManager::set_max_sockets_per_pool(
|
| HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| @@ -3113,7 +3024,7 @@ TEST_P(SpdySessionTest, CloseOneIdleConnection) {
|
| // new connection.
|
| EXPECT_EQ(OK, callback2.WaitForResult());
|
| EXPECT_FALSE(pool->IsStalled());
|
| - EXPECT_TRUE(session1 == NULL);
|
| + EXPECT_FALSE(session1);
|
| }
|
|
|
| // Tests the case of a non-SPDY request closing an idle SPDY session when no
|
| @@ -3125,12 +3036,10 @@ TEST_P(SpdySessionTest, CloseOneIdleConnectionWithAlias) {
|
| ClientSocketPoolManager::set_max_sockets_per_pool(
|
| HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| @@ -3163,11 +3072,8 @@ TEST_P(SpdySessionTest, CloseOneIdleConnectionWithAlias) {
|
| AddressList addresses;
|
| // Pre-populate the DNS cache, since a synchronous resolution is required in
|
| // order to create the alias.
|
| - session_deps_.host_resolver->Resolve(info,
|
| - DEFAULT_PRIORITY,
|
| - &addresses,
|
| - CompletionCallback(),
|
| - NULL,
|
| + session_deps_.host_resolver->Resolve(info, DEFAULT_PRIORITY, &addresses,
|
| + CompletionCallback(), nullptr,
|
| BoundNetLog());
|
| // Get a session for |key2|, which should return the session created earlier.
|
| base::WeakPtr<SpdySession> session2 =
|
| @@ -3193,8 +3099,8 @@ TEST_P(SpdySessionTest, CloseOneIdleConnectionWithAlias) {
|
| // new connection.
|
| EXPECT_EQ(OK, callback3.WaitForResult());
|
| EXPECT_FALSE(pool->IsStalled());
|
| - EXPECT_TRUE(session1 == NULL);
|
| - EXPECT_TRUE(session2 == NULL);
|
| + EXPECT_FALSE(session1);
|
| + EXPECT_FALSE(session2);
|
| }
|
|
|
| // Tests that when a SPDY session becomes idle, it closes itself if there is
|
| @@ -3205,12 +3111,11 @@ TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
|
| ClientSocketPoolManager::set_max_sockets_per_pool(
|
| HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
| scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> cancel1(
|
| spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
|
| MockWrite writes[] = {
|
| @@ -3219,15 +3124,13 @@ TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
|
| };
|
| StaticSocketDataProvider data(reads, arraysize(reads),
|
| writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| MockRead http_reads[] = {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
| - StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
|
| - NULL, 0);
|
| - http_data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
|
| + 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&http_data);
|
|
|
|
|
| @@ -3263,7 +3166,7 @@ TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
|
| headers1.Pass(), NO_MORE_DATA_TO_SEND));
|
| EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Trying to create a new connection should cause the pool to be stalled, and
|
| // post a task asynchronously to try and close the session.
|
| @@ -3298,7 +3201,7 @@ TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
|
| // Verify that SpdySessionKey and therefore SpdySession is different when
|
| // privacy mode is enabled or disabled.
|
| TEST_P(SpdySessionTest, SpdySessionKeyPrivacyMode) {
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| HostPortPair host_port_pair("www.example.org", 443);
|
| SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(),
|
| @@ -3359,10 +3262,8 @@ class StreamCreatingDelegate : public test::StreamDelegateDoNothing {
|
| TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, MEDIUM, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*req, 0),
|
| };
|
| @@ -3370,15 +3271,15 @@ TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
|
| MockRead reads[] = {
|
| - CreateMockRead(*rst, 1),
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*rst, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + MockRead(ASYNC, 0, 4) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -3387,7 +3288,7 @@ TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
|
| base::WeakPtr<SpdyStream> spdy_stream =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream->stream_id());
|
|
|
| StreamCreatingDelegate delegate(spdy_stream, session);
|
| @@ -3400,18 +3301,23 @@ TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
|
|
|
| EXPECT_EQ(0u, spdy_stream->stream_id());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| // Cause the stream to be reset, which should cause another stream
|
| // to be created.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| - EXPECT_EQ(NULL, spdy_stream.get());
|
| + EXPECT_FALSE(spdy_stream);
|
| EXPECT_TRUE(delegate.StreamIsClosed());
|
| EXPECT_EQ(0u, session->num_active_streams());
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| +
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // The tests below are only for SPDY/3 and above.
|
| @@ -3426,60 +3332,63 @@ TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) {
|
|
|
| // Set up the socket so we read a SETTINGS frame that sets
|
| // INITIAL_WINDOW_SIZE.
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> settings_frame(
|
| spdy_util_.ConstructSpdySettings(new_settings));
|
| MockRead reads[] = {
|
| - CreateMockRead(*settings_frame, 0),
|
| - MockRead(ASYNC, 0, 1) // EOF
|
| + CreateMockRead(*settings_frame, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + MockRead(ASYNC, 0, 2) // EOF
|
| };
|
|
|
| scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*settings_ack, 2),
|
| + CreateMockWrite(*settings_ack, 3),
|
| };
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| base::WeakPtr<SpdyStream> spdy_stream1 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| TestCompletionCallback callback1;
|
| EXPECT_NE(spdy_stream1->send_window_size(), window_size);
|
|
|
| - data.RunFor(1); // Process the SETTINGS frame, but not the EOF
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + // Process the SETTINGS frame.
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(session->stream_initial_send_window_size(), window_size);
|
| EXPECT_EQ(spdy_stream1->send_window_size(), window_size);
|
|
|
| // Release the first one, this will allow the second to be created.
|
| spdy_stream1->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
| + EXPECT_FALSE(spdy_stream1);
|
|
|
| base::WeakPtr<SpdyStream> spdy_stream2 =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, test_url_, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream2.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream2.get() != nullptr);
|
| EXPECT_EQ(spdy_stream2->send_window_size(), window_size);
|
| spdy_stream2->Cancel();
|
| - EXPECT_EQ(NULL, spdy_stream2.get());
|
| + EXPECT_FALSE(spdy_stream2);
|
| +
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // The tests below are only for SPDY/3.1 and above.
|
|
|
| // SpdySession::{Increase,Decrease}RecvWindowSize should properly
|
| -// adjust the session receive window size for SPDY 3.1 and higher. In
|
| -// addition, SpdySession::IncreaseRecvWindowSize should trigger
|
| +// adjust the session receive window size. In addition,
|
| +// SpdySession::IncreaseRecvWindowSize should trigger
|
| // sending a WINDOW_UPDATE frame for a large enough delta.
|
| TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
|
| if (GetParam() < kProtoSPDY31)
|
| @@ -3491,21 +3400,18 @@ TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
|
| SpdySession::GetDefaultInitialWindowSize(GetParam());
|
| const int32 delta_window_size = 100;
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 1) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate(
|
| kSessionFlowControlStreamId, initial_window_size + delta_window_size));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*window_update, 0),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -3525,7 +3431,7 @@ TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // DecreaseRecvWindowSize() expects |in_io_loop_| to be true.
|
| session->in_io_loop_ = true;
|
| @@ -3534,6 +3440,11 @@ TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
|
| session->in_io_loop_ = false;
|
| EXPECT_EQ(0, session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
| +
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // SpdySession::{Increase,Decrease}SendWindowSize should properly
|
| @@ -3545,12 +3456,10 @@ TEST_P(SpdySessionTest, AdjustSendWindowSize) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| MockRead(SYNCHRONOUS, 0, 0) // EOF
|
| };
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
| @@ -3582,17 +3491,16 @@ TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame(1, false));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 0),
|
| - MockRead(ASYNC, 0, 1) // EOF
|
| + CreateMockRead(*resp, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -3602,13 +3510,16 @@ TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) {
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetParam()),
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(kUploadDataSize, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // The frame header is not included in flow control, but frame payload
|
| @@ -3621,17 +3532,17 @@ TEST_P(SpdySessionTest, SessionFlowControlPadding) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| const int padding_length = 42;
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame(
|
| 1, kUploadData, kUploadDataSize, false, padding_length));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 0), MockRead(ASYNC, 0, 1) // EOF
|
| + CreateMockRead(*resp, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + MockRead(ASYNC, 0, 2) // EOF
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -3641,14 +3552,16 @@ TEST_P(SpdySessionTest, SessionFlowControlPadding) {
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetParam()),
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(kUploadDataSize + padding_length,
|
| session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Peer sends more data than stream level receiving flow control window.
|
| @@ -3657,26 +3570,29 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) {
|
| const int32 data_frame_size = 2 * stream_max_recv_window_size;
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| + scoped_ptr<SpdyFrame> rst(
|
| + spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| const std::string payload(data_frame_size, 'a');
|
| scoped_ptr<SpdyFrame> data_frame(spdy_util_.ConstructSpdyBodyFrame(
|
| 1, payload.data(), data_frame_size, false));
|
| MockRead reads[] = {
|
| CreateMockRead(*resp, 1),
|
| - CreateMockRead(*data_frame, 2),
|
| - MockRead(ASYNC, 0, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*data_frame, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 5),
|
| + MockRead(ASYNC, 0, 6),
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads), writes,
|
| - arraysize(writes));
|
| - data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| - CreateDeterministicNetworkSession();
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| + CreateNetworkSession();
|
|
|
| SpdySessionPoolPeer pool_peer(spdy_session_pool_);
|
| pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size);
|
| @@ -3698,12 +3614,18 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) {
|
| headers.Pass(), NO_MORE_DATA_TO_SEND));
|
|
|
| // Request and response.
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, spdy_stream->stream_id());
|
|
|
| // Too large data frame causes flow control error, should close stream.
|
| - data.RunFor(1);
|
| - EXPECT_EQ(nullptr, spdy_stream.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(spdy_stream);
|
| +
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Regression test for a bug that was caused by including unsent WINDOW_UPDATE
|
| @@ -3728,6 +3650,14 @@ TEST_P(SpdySessionTest, SessionFlowControlTooMuchDataTwoDataFrames) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| + scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
|
| + 0, GOAWAY_FLOW_CONTROL_ERROR,
|
| + "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger "
|
| + "than the receive window size of 500"));
|
| + MockWrite writes[] = {
|
| + CreateMockWrite(*goaway, 4),
|
| + };
|
| +
|
| const std::string first_data_frame(first_data_frame_size, 'a');
|
| scoped_ptr<SpdyFrame> first(spdy_util_.ConstructSpdyBodyFrame(
|
| 1, first_data_frame.data(), first_data_frame_size, false));
|
| @@ -3736,14 +3666,14 @@ TEST_P(SpdySessionTest, SessionFlowControlTooMuchDataTwoDataFrames) {
|
| 1, second_data_frame.data(), second_data_frame_size, false));
|
| MockRead reads[] = {
|
| CreateMockRead(*first, 0),
|
| - CreateMockRead(*second, 1),
|
| - MockRead(ASYNC, 0, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*second, 2),
|
| + MockRead(ASYNC, 0, 3),
|
| };
|
| - DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| - data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -3754,13 +3684,14 @@ TEST_P(SpdySessionTest, SessionFlowControlTooMuchDataTwoDataFrames) {
|
|
|
| // First data frame is immediately consumed and does not trigger
|
| // WINDOW_UPDATE.
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(first_data_frame_size, session->session_unacked_recv_window_bytes_);
|
| EXPECT_EQ(session_max_recv_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(SpdySession::STATE_AVAILABLE, session->availability_state_);
|
|
|
| // Second data frame overflows receiving window, causes session to close.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(SpdySession::STATE_DRAINING, session->availability_state_);
|
| }
|
|
|
| @@ -3784,14 +3715,15 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) {
|
| first_data_frame_size + second_data_frame_size);
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*rst, 6),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| const std::string first_data_frame(first_data_frame_size, 'a');
|
| scoped_ptr<SpdyFrame> first(spdy_util_.ConstructSpdyBodyFrame(
|
| 1, first_data_frame.data(), first_data_frame_size, false));
|
| @@ -3800,17 +3732,18 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) {
|
| 1, second_data_frame.data(), second_data_frame_size, false));
|
| MockRead reads[] = {
|
| CreateMockRead(*resp, 1),
|
| - CreateMockRead(*first, 2),
|
| - CreateMockRead(*second, 3),
|
| - MockRead(ASYNC, 0, 5),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2),
|
| + CreateMockRead(*first, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + CreateMockRead(*second, 5),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 7),
|
| + MockRead(ASYNC, 0, 8),
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads), writes,
|
| - arraysize(writes));
|
| - data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| SpdySessionPoolPeer pool_peer(spdy_session_pool_);
|
| pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size);
|
|
|
| @@ -3829,12 +3762,13 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) {
|
| headers.Pass(), NO_MORE_DATA_TO_SEND));
|
|
|
| // Request and response.
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(spdy_stream->IsLocallyClosed());
|
| EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size());
|
|
|
| // First data frame.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(spdy_stream->IsLocallyClosed());
|
| EXPECT_EQ(stream_max_recv_window_size - first_data_frame_size,
|
| spdy_stream->recv_window_size());
|
| @@ -3845,11 +3779,15 @@ TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) {
|
| EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size());
|
|
|
| // Second data frame overflows receiving window, causes the stream to close.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_FALSE(spdy_stream.get());
|
|
|
| // RST_STREAM
|
| - data.RunFor(1);
|
| + EXPECT_TRUE(session);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // A delegate that drops any received data.
|
| @@ -3877,11 +3815,8 @@ TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
|
| const int32 msg_data_size = 100;
|
| const std::string msg_data(msg_data_size, 'a');
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, msg_data_size, MEDIUM, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, msg_data_size, MEDIUM, nullptr, 0));
|
| scoped_ptr<SpdyFrame> msg(
|
| spdy_util_.ConstructSpdyBodyFrame(
|
| 1, msg_data.data(), msg_data_size, false));
|
| @@ -3890,7 +3825,8 @@ TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
|
| CreateMockWrite(*msg, 2),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> echo(
|
| spdy_util_.ConstructSpdyBodyFrame(
|
| 1, msg_data.data(), msg_data_size, false));
|
| @@ -3898,19 +3834,18 @@ TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
|
| spdy_util_.ConstructSpdyWindowUpdate(
|
| kSessionFlowControlStreamId, msg_data_size));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 1),
|
| - CreateMockRead(*echo, 3),
|
| - MockRead(ASYNC, 0, 4) // EOF
|
| + CreateMockRead(*resp, 1),
|
| + CreateMockRead(*echo, 3),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 4),
|
| + MockRead(ASYNC, 0, 5) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -3919,7 +3854,7 @@ TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
|
| base::WeakPtr<SpdyStream> stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(stream.get() != NULL);
|
| + ASSERT_TRUE(stream.get() != nullptr);
|
| EXPECT_EQ(0u, stream->stream_id());
|
|
|
| DropReceivedDataDelegate delegate(stream, msg_data);
|
| @@ -3936,21 +3871,22 @@ TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(4);
|
| -
|
| - EXPECT_TRUE(data.AllWriteDataConsumed());
|
| - EXPECT_TRUE(data.AllReadDataConsumed());
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
|
|
|
| stream->Close();
|
| - EXPECT_EQ(NULL, stream.get());
|
| + EXPECT_FALSE(stream);
|
|
|
| EXPECT_EQ(OK, delegate.WaitForClose());
|
|
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
|
| +
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Send data back and forth but close the stream before its data frame
|
| @@ -3965,29 +3901,26 @@ TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
|
| const int32 msg_data_size = 100;
|
| const std::string msg_data(msg_data_size, 'a');
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, msg_data_size, MEDIUM, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, msg_data_size, MEDIUM, nullptr, 0));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0),
|
| + CreateMockWrite(*req, 0),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 1),
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*resp, 2),
|
| + MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -3996,7 +3929,7 @@ TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
|
| base::WeakPtr<SpdyStream> stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(stream.get() != NULL);
|
| + ASSERT_TRUE(stream.get() != nullptr);
|
| EXPECT_EQ(0u, stream->stream_id());
|
|
|
| test::StreamDelegateSendImmediate delegate(stream, msg_data);
|
| @@ -4012,25 +3945,31 @@ TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
|
| SpdySession::GetDefaultInitialWindowSize(GetParam());
|
| EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
|
|
| - data.RunFor(1);
|
| + // Write request.
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
|
|
| - data.RunFor(1);
|
| -
|
| - EXPECT_TRUE(data.AllWriteDataConsumed());
|
| - EXPECT_TRUE(data.AllReadDataConsumed());
|
| + // Read response, but do not run the message loop, so that the body is not
|
| + // written to the socket.
|
| + data.CompleteRead();
|
|
|
| EXPECT_EQ(initial_window_size - msg_data_size,
|
| session->session_send_window_size_);
|
|
|
| // Closing the stream should increase the session's send window.
|
| stream->Close();
|
| - EXPECT_EQ(NULL, stream.get());
|
| + EXPECT_FALSE(stream);
|
|
|
| EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
|
|
| EXPECT_EQ(OK, delegate.WaitForClose());
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| +
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| // Send data back and forth; the send and receive windows should
|
| @@ -4044,11 +3983,8 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| const int32 msg_data_size = 100;
|
| const std::string msg_data(msg_data_size, 'a');
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| - scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, msg_data_size, MEDIUM, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, msg_data_size, MEDIUM, nullptr, 0));
|
| scoped_ptr<SpdyFrame> msg(
|
| spdy_util_.ConstructSpdyBodyFrame(
|
| 1, msg_data.data(), msg_data_size, false));
|
| @@ -4057,7 +3993,8 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| CreateMockWrite(*msg, 2),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> echo(
|
| spdy_util_.ConstructSpdyBodyFrame(
|
| 1, msg_data.data(), msg_data_size, false));
|
| @@ -4065,20 +4002,21 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| spdy_util_.ConstructSpdyWindowUpdate(
|
| kSessionFlowControlStreamId, msg_data_size));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 1),
|
| - CreateMockRead(*echo, 3),
|
| - CreateMockRead(*window_update, 4),
|
| - MockRead(ASYNC, 0, 5) // EOF
|
| + CreateMockRead(*resp, 1),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*echo, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 5),
|
| + CreateMockRead(*window_update, 6),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 7),
|
| + MockRead(ASYNC, 0, 8) // EOF
|
| };
|
|
|
| // Create SpdySession and SpdyStream and send the request.
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -4087,7 +4025,7 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| base::WeakPtr<SpdyStream> stream =
|
| CreateStreamSynchronously(SPDY_BIDIRECTIONAL_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(stream.get() != NULL);
|
| + ASSERT_TRUE(stream.get() != nullptr);
|
| EXPECT_EQ(0u, stream->stream_id());
|
|
|
| test::StreamDelegateSendImmediate delegate(stream, msg_data);
|
| @@ -4105,27 +4043,17 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| -
|
| - EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
| - EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| - EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
| -
|
| - data.RunFor(1);
|
| -
|
| - EXPECT_EQ(initial_window_size - msg_data_size,
|
| - session->session_send_window_size_);
|
| - EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| - EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
| -
|
| - data.RunFor(1);
|
| + // Send request and message.
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(initial_window_size - msg_data_size,
|
| session->session_send_window_size_);
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + // Read echo.
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(initial_window_size - msg_data_size,
|
| session->session_send_window_size_);
|
| @@ -4133,16 +4061,15 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - data.RunFor(1);
|
| + // Read window update.
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
| EXPECT_EQ(initial_window_size - msg_data_size,
|
| session->session_recv_window_size_);
|
| EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
|
|
|
| - EXPECT_TRUE(data.AllWriteDataConsumed());
|
| - EXPECT_TRUE(data.AllReadDataConsumed());
|
| -
|
| EXPECT_EQ(msg_data, delegate.TakeReceivedData());
|
|
|
| // Draining the delegate's read queue should increase the session's
|
| @@ -4152,13 +4079,17 @@ TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
|
| EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
|
|
|
| stream->Close();
|
| - EXPECT_EQ(NULL, stream.get());
|
| + EXPECT_FALSE(stream);
|
|
|
| EXPECT_EQ(OK, delegate.WaitForClose());
|
|
|
| EXPECT_EQ(initial_window_size, session->session_send_window_size_);
|
| EXPECT_EQ(initial_window_size, session->session_recv_window_size_);
|
| EXPECT_EQ(msg_data_size, session->session_unacked_recv_window_bytes_);
|
| +
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| // Given a stall function and an unstall function, runs a test to make
|
| @@ -4172,9 +4103,8 @@ void SpdySessionTest::RunResumeAfterUnstallTest(
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, kBodyDataSize, LOWEST, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
|
| scoped_ptr<SpdyFrame> body(
|
| spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true));
|
| MockWrite writes[] = {
|
| @@ -4183,22 +4113,17 @@ void SpdySessionTest::RunResumeAfterUnstallTest(
|
| };
|
|
|
| scoped_ptr<SpdyFrame> resp(
|
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> echo(
|
| spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 2),
|
| - MockRead(ASYNC, 0, 0, 3), // EOF
|
| + CreateMockRead(*resp, 2), MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| -
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -4207,7 +4132,7 @@ void SpdySessionTest::RunResumeAfterUnstallTest(
|
| base::WeakPtr<SpdyStream> stream =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream.get() != NULL);
|
| + ASSERT_TRUE(stream.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate(stream, kBodyDataStringPiece);
|
| stream->SetDelegate(&delegate);
|
| @@ -4224,7 +4149,7 @@ void SpdySessionTest::RunResumeAfterUnstallTest(
|
|
|
| stall_function.Run(session.get(), stream.get());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_TRUE(stream->send_stalled_by_flow_control());
|
|
|
| @@ -4232,13 +4157,12 @@ void SpdySessionTest::RunResumeAfterUnstallTest(
|
|
|
| EXPECT_FALSE(stream->send_stalled_by_flow_control());
|
|
|
| - data.RunFor(3);
|
| -
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
|
|
|
| EXPECT_TRUE(delegate.send_headers_completed());
|
| EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
|
| EXPECT_EQ(std::string(), delegate.TakeReceivedData());
|
| + EXPECT_FALSE(session);
|
| EXPECT_TRUE(data.AllWriteDataConsumed());
|
| }
|
|
|
| @@ -4325,12 +4249,10 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, kBodyDataSize, LOWEST, NULL, 0));
|
| - scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 3, kBodyDataSize, MEDIUM, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
|
| + scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 3, kBodyDataSize, MEDIUM, nullptr, 0));
|
| scoped_ptr<SpdyFrame> body1(
|
| spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true));
|
| scoped_ptr<SpdyFrame> body2(
|
| @@ -4342,22 +4264,20 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| CreateMockWrite(*body1, 3),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| - scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
|
| + scoped_ptr<SpdyFrame> resp1(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp2(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp1, 4),
|
| - CreateMockRead(*resp2, 5),
|
| - MockRead(ASYNC, 0, 0, 6), // EOF
|
| + CreateMockRead(*resp1, 4),
|
| + CreateMockRead(*resp2, 5),
|
| + MockRead(ASYNC, 0, 6) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| -
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -4366,7 +4286,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| base::WeakPtr<SpdyStream> stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream1.get() != NULL);
|
| + ASSERT_TRUE(stream1.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate1(stream1, kBodyDataStringPiece);
|
| stream1->SetDelegate(&delegate1);
|
| @@ -4376,7 +4296,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| base::WeakPtr<SpdyStream> stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, MEDIUM, BoundNetLog());
|
| - ASSERT_TRUE(stream2.get() != NULL);
|
| + ASSERT_TRUE(stream2.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate2(stream2, kBodyDataStringPiece);
|
| stream2->SetDelegate(&delegate2);
|
| @@ -4395,7 +4315,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| EXPECT_TRUE(stream1->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream1->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, stream1->stream_id());
|
| EXPECT_TRUE(stream1->send_stalled_by_flow_control());
|
|
|
| @@ -4406,7 +4326,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| EXPECT_TRUE(stream2->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream2->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(3u, stream2->stream_id());
|
| EXPECT_TRUE(stream2->send_stalled_by_flow_control());
|
|
|
| @@ -4416,7 +4336,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| EXPECT_TRUE(stream1->send_stalled_by_flow_control());
|
| EXPECT_FALSE(stream2->send_stalled_by_flow_control());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_TRUE(stream1->send_stalled_by_flow_control());
|
| EXPECT_FALSE(stream2->send_stalled_by_flow_control());
|
| @@ -4427,7 +4347,7 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| EXPECT_FALSE(stream1->send_stalled_by_flow_control());
|
| EXPECT_FALSE(stream2->send_stalled_by_flow_control());
|
|
|
| - data.RunFor(4);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate1.WaitForClose());
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate2.WaitForClose());
|
| @@ -4440,7 +4360,9 @@ TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
|
| EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status"));
|
| EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
|
|
|
| + EXPECT_FALSE(session);
|
| EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| // Delegate that closes a given stream after sending its body.
|
| @@ -4460,7 +4382,7 @@ class StreamClosingDelegate : public test::StreamDelegateWithBody {
|
| test::StreamDelegateWithBody::OnDataSent();
|
| if (stream_to_close_.get()) {
|
| stream_to_close_->Close();
|
| - EXPECT_EQ(NULL, stream_to_close_.get());
|
| + EXPECT_FALSE(stream_to_close_);
|
| }
|
| }
|
|
|
| @@ -4479,15 +4401,12 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, kBodyDataSize, LOWEST, NULL, 0));
|
| - scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 3, kBodyDataSize, LOWEST, NULL, 0));
|
| - scoped_ptr<SpdyFrame> req3(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 5, kBodyDataSize, LOWEST, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
|
| + scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 3, kBodyDataSize, LOWEST, nullptr, 0));
|
| + scoped_ptr<SpdyFrame> req3(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 5, kBodyDataSize, LOWEST, nullptr, 0));
|
| scoped_ptr<SpdyFrame> body2(
|
| spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true));
|
| MockWrite writes[] = {
|
| @@ -4497,20 +4416,18 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| CreateMockWrite(*body2, 3),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
|
| + scoped_ptr<SpdyFrame> resp2(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp2, 4),
|
| - MockRead(ASYNC, 0, 0, 5), // EOF
|
| + CreateMockRead(*resp2, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 5),
|
| + MockRead(ASYNC, 0, 6) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| -
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -4519,7 +4436,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| base::WeakPtr<SpdyStream> stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream1.get() != NULL);
|
| + ASSERT_TRUE(stream1.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate1(stream1, kBodyDataStringPiece);
|
| stream1->SetDelegate(&delegate1);
|
| @@ -4529,7 +4446,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| base::WeakPtr<SpdyStream> stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream2.get() != NULL);
|
| + ASSERT_TRUE(stream2.get() != nullptr);
|
|
|
| StreamClosingDelegate delegate2(stream2, kBodyDataStringPiece);
|
| stream2->SetDelegate(&delegate2);
|
| @@ -4539,7 +4456,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| base::WeakPtr<SpdyStream> stream3 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream3.get() != NULL);
|
| + ASSERT_TRUE(stream3.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate3(stream3, kBodyDataStringPiece);
|
| stream3->SetDelegate(&delegate3);
|
| @@ -4559,7 +4476,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| EXPECT_TRUE(stream1->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream1->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, stream1->stream_id());
|
| EXPECT_TRUE(stream1->send_stalled_by_flow_control());
|
|
|
| @@ -4570,7 +4487,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| EXPECT_TRUE(stream2->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream2->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(3u, stream2->stream_id());
|
| EXPECT_TRUE(stream2->send_stalled_by_flow_control());
|
|
|
| @@ -4581,7 +4498,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| EXPECT_TRUE(stream3->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream3->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(5u, stream3->stream_id());
|
| EXPECT_TRUE(stream3->send_stalled_by_flow_control());
|
|
|
| @@ -4591,7 +4508,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
|
|
| // Close stream1 preemptively.
|
| session->CloseActiveStream(stream_id1, ERR_CONNECTION_CLOSED);
|
| - EXPECT_EQ(NULL, stream1.get());
|
| + EXPECT_FALSE(stream1);
|
|
|
| EXPECT_FALSE(session->IsStreamActive(stream_id1));
|
| EXPECT_TRUE(session->IsStreamActive(stream_id2));
|
| @@ -4601,16 +4518,18 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
|
| delegate2.set_stream_to_close(stream3);
|
| UnstallSessionSend(session.get(), kBodyDataSize);
|
|
|
| - data.RunFor(1);
|
| - EXPECT_EQ(NULL, stream3.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(stream3);
|
|
|
| EXPECT_FALSE(stream2->send_stalled_by_flow_control());
|
| EXPECT_FALSE(session->IsStreamActive(stream_id1));
|
| EXPECT_TRUE(session->IsStreamActive(stream_id2));
|
| EXPECT_FALSE(session->IsStreamActive(stream_id3));
|
|
|
| - data.RunFor(2);
|
| - EXPECT_EQ(NULL, stream2.get());
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(stream2);
|
| + EXPECT_FALSE(session);
|
|
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate1.WaitForClose());
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate2.WaitForClose());
|
| @@ -4641,12 +4560,10 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
|
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| - scoped_ptr<SpdyFrame> req1(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 1, kBodyDataSize, LOWEST, NULL, 0));
|
| - scoped_ptr<SpdyFrame> req2(
|
| - spdy_util_.ConstructSpdyPost(
|
| - kStreamUrl, 3, kBodyDataSize, LOWEST, NULL, 0));
|
| + scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
|
| + scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost(
|
| + kStreamUrl, 3, kBodyDataSize, LOWEST, nullptr, 0));
|
| scoped_ptr<SpdyFrame> body1(
|
| spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false));
|
| MockWrite writes[] = {
|
| @@ -4655,17 +4572,13 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 0, 2), // EOF
|
| + MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| -
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION,
|
| @@ -4674,7 +4587,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| base::WeakPtr<SpdyStream> stream1 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream1.get() != NULL);
|
| + ASSERT_TRUE(stream1.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate1(stream1, kBodyDataStringPiece);
|
| stream1->SetDelegate(&delegate1);
|
| @@ -4684,7 +4597,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| base::WeakPtr<SpdyStream> stream2 =
|
| CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM,
|
| session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(stream2.get() != NULL);
|
| + ASSERT_TRUE(stream2.get() != nullptr);
|
|
|
| test::StreamDelegateWithBody delegate2(stream2, kBodyDataStringPiece);
|
| stream2->SetDelegate(&delegate2);
|
| @@ -4703,7 +4616,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| EXPECT_TRUE(stream1->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream1->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, stream1->stream_id());
|
| EXPECT_TRUE(stream1->send_stalled_by_flow_control());
|
|
|
| @@ -4714,7 +4627,7 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| EXPECT_TRUE(stream2->HasUrlFromHeaders());
|
| EXPECT_EQ(kStreamUrl, stream2->GetUrlFromHeaders().spec());
|
|
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(3u, stream2->stream_id());
|
| EXPECT_TRUE(stream2->send_stalled_by_flow_control());
|
|
|
| @@ -4726,8 +4639,9 @@ TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
|
| // Close the session (since we can't do it from within the delegate
|
| // method, since it's in the stream's loop).
|
| session->CloseSessionOnError(ERR_CONNECTION_CLOSED, "Closing session");
|
| + data.CompleteRead();
|
| base::RunLoop().RunUntilIdle();
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| @@ -4747,31 +4661,29 @@ TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) {
|
| if (GetParam() < kProtoSPDY31)
|
| return;
|
|
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| -
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
|
| - 0,
|
| - GOAWAY_FLOW_CONTROL_ERROR,
|
| + 0, GOAWAY_FLOW_CONTROL_ERROR,
|
| "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than "
|
| "the receive window size of 1"));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 3),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 4),
|
| };
|
|
|
| - scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| + scoped_ptr<SpdyFrame> resp(
|
| + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
|
| scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
|
| MockRead reads[] = {
|
| - CreateMockRead(*resp, 1), CreateMockRead(*body, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*resp, 2),
|
| + CreateMockRead(*body, 3),
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -4779,7 +4691,7 @@ TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) {
|
| GURL url(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream.get() != nullptr);
|
| test::StreamDelegateDoNothing delegate(spdy_stream);
|
| spdy_stream->SetDelegate(&delegate);
|
|
|
| @@ -4787,18 +4699,19 @@ TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) {
|
| spdy_util_.ConstructGetHeaderBlock(url.spec()));
|
| spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND);
|
|
|
| - data.RunFor(1); // Write request.
|
| + // Write request.
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Put session on the edge of overflowing it's recv window.
|
| session->session_recv_window_size_ = 1;
|
|
|
| // Read response headers & body. Body overflows the session window, and a
|
| // goaway is written.
|
| - data.RunFor(3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(ERR_SPDY_FLOW_CONTROL_ERROR, delegate.WaitForClose());
|
| - EXPECT_TRUE(session == NULL);
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, SplitHeaders) {
|
| @@ -4832,37 +4745,37 @@ TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
|
| scoped_ptr<SpdyFrame> settings_frame(
|
| spdy_util_.ConstructSpdySettings(new_settings));
|
| scoped_ptr<SpdyFrame> pushed(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 2, 1, "http://www.example.org/a.dat"));
|
| + nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
|
| MockRead reads[] = {
|
| - CreateMockRead(*settings_frame), CreateMockRead(*pushed, 3),
|
| - MockRead(ASYNC, 0, 4),
|
| + CreateMockRead(*settings_frame, 0),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*pushed, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 5),
|
| + MockRead(ASYNC, 0, 6),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| MockWrite writes[] = {
|
| CreateMockWrite(*settings_ack, 1), CreateMockWrite(*req, 2),
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
|
|
| // Read the settings frame.
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -4879,7 +4792,7 @@ TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
|
|
|
| // Run until 1st stream is activated.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(2);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| @@ -4887,7 +4800,8 @@ TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
|
| EXPECT_EQ(0u, session->num_active_pushed_streams());
|
|
|
| // Run until pushed stream is created.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| @@ -4898,41 +4812,44 @@ TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
|
| // create streams on the client.
|
| base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url1, LOWEST, BoundNetLog());
|
| - EXPECT_TRUE(spdy_stream2.get() != NULL);
|
| + EXPECT_TRUE(spdy_stream2);
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(1u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| EXPECT_EQ(1u, session->num_active_pushed_streams());
|
|
|
| // Read EOF.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
|
| scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 2, 1, "http://www.example.org/a.dat"));
|
| + nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
|
| scoped_ptr<SpdyFrame> push_b(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 4, 1, "http://www.example.org/b.dat"));
|
| + nullptr, 0, 4, 1, "http://www.example.org/b.dat"));
|
| MockRead reads[] = {
|
| - CreateMockRead(*push_a, 1), CreateMockRead(*push_b, 2),
|
| - MockRead(ASYNC, 0, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*push_a, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*push_b, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 6),
|
| + MockRead(ASYNC, 0, 7),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -4941,7 +4858,7 @@ TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -4958,7 +4875,7 @@ TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
|
|
|
| // Run until 1st stream is activated.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| @@ -4966,21 +4883,25 @@ TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
|
| EXPECT_EQ(0u, session->num_active_pushed_streams());
|
|
|
| // Run until pushed stream is created.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| EXPECT_EQ(1u, session->num_active_pushed_streams());
|
|
|
| // Reset incoming pushed stream.
|
| - data.RunFor(2);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| EXPECT_EQ(1u, session->num_active_pushed_streams());
|
|
|
| // Read EOF.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
| @@ -4989,34 +4910,37 @@ TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
| return;
|
|
|
| scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush(
|
| - NULL, 0, 2, 1, "http://www.example.org/a.dat"));
|
| + nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
|
| scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock);
|
| spdy_util_.AddUrlToHeaderBlock("http://www.example.org/b.dat",
|
| push_headers.get());
|
| scoped_ptr<SpdyFrame> push_b(
|
| spdy_util_.ConstructInitialSpdyPushFrame(push_headers.Pass(), 4, 1));
|
| scoped_ptr<SpdyFrame> headers_b(
|
| - spdy_util_.ConstructSpdyPushHeaders(4, NULL, 0));
|
| + spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0));
|
| MockRead reads[] = {
|
| - CreateMockRead(*push_a, 1), CreateMockRead(*push_b, 2),
|
| - CreateMockRead(*headers_b, 3), MockRead(ASYNC, 0, 5),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*push_a, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*push_b, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 5),
|
| + CreateMockRead(*headers_b, 6),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 8),
|
| + MockRead(ASYNC, 0, 9),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*rst, 7),
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -5025,7 +4949,7 @@ TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -5042,7 +4966,7 @@ TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
|
|
| // Run until 1st stream is activated.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| @@ -5050,14 +4974,16 @@ TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
| EXPECT_EQ(0u, session->num_active_pushed_streams());
|
|
|
| // Run until pushed stream is created.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| EXPECT_EQ(1u, session->num_active_pushed_streams());
|
|
|
| // Accept promised stream. It should not count towards pushed stream limit.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(3u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(2u, session->num_pushed_streams());
|
| @@ -5065,14 +4991,17 @@ TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
|
|
|
| // Reset last pushed stream upon headers reception as it is going to be 2nd,
|
| // while we accept only one.
|
| - data.RunFor(2);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| EXPECT_EQ(1u, session->num_active_pushed_streams());
|
|
|
| // Read EOF.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(session);
|
| }
|
|
|
| TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
| @@ -5086,27 +5015,28 @@ TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
| scoped_ptr<SpdyFrame> push_promise(
|
| spdy_util_.ConstructInitialSpdyPushFrame(push_headers.Pass(), 2, 1));
|
| scoped_ptr<SpdyFrame> headers_frame(
|
| - spdy_util_.ConstructSpdyPushHeaders(2, NULL, 0));
|
| + spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
|
| MockRead reads[] = {
|
| - CreateMockRead(*push_promise, 1), CreateMockRead(*headers_frame, 2),
|
| - MockRead(ASYNC, 0, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 1),
|
| + CreateMockRead(*push_promise, 2),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 3),
|
| + CreateMockRead(*headers_frame, 4),
|
| + MockRead(ASYNC, ERR_IO_PENDING, 6),
|
| + MockRead(ASYNC, 0, 7),
|
| };
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| - spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true));
|
| scoped_ptr<SpdyFrame> rst(
|
| spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
|
| + CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
|
| };
|
|
|
| - DeterministicSocketData data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| - session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateDeterministicNetworkSession();
|
| + CreateNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -5114,7 +5044,7 @@ TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
| GURL url1(kDefaultURL);
|
| base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
|
| SPDY_REQUEST_RESPONSE_STREAM, session, url1, LOWEST, BoundNetLog());
|
| - ASSERT_TRUE(spdy_stream1.get() != NULL);
|
| + ASSERT_TRUE(spdy_stream1.get() != nullptr);
|
| EXPECT_EQ(0u, spdy_stream1->stream_id());
|
| test::StreamDelegateDoNothing delegate1(spdy_stream1);
|
| spdy_stream1->SetDelegate(&delegate1);
|
| @@ -5131,7 +5061,7 @@ TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
|
|
| // Run until 1st stream is activated.
|
| EXPECT_EQ(0u, delegate1.stream_id());
|
| - data.RunFor(1);
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, delegate1.stream_id());
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| @@ -5139,7 +5069,8 @@ TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
| EXPECT_EQ(0u, session->num_active_pushed_streams());
|
|
|
| // Run until pushed stream is created.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(2u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(1u, session->num_pushed_streams());
|
| @@ -5149,20 +5080,24 @@ TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
|
| int rv =
|
| session->GetPushStream(GURL(kPushedUrl), &pushed_stream, BoundNetLog());
|
| ASSERT_EQ(OK, rv);
|
| - ASSERT_TRUE(pushed_stream.get() != NULL);
|
| + ASSERT_TRUE(pushed_stream.get() != nullptr);
|
| test::StreamDelegateCloseOnHeaders delegate2(pushed_stream);
|
| pushed_stream->SetDelegate(&delegate2);
|
|
|
| // Receive headers for pushed stream. Delegate will cancel the stream, ensure
|
| // that all our counters are in consistent state.
|
| - data.RunFor(1);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1u, session->num_active_streams());
|
| EXPECT_EQ(0u, session->num_created_streams());
|
| EXPECT_EQ(0u, session->num_pushed_streams());
|
| EXPECT_EQ(0u, session->num_active_pushed_streams());
|
|
|
| // Read EOF.
|
| - data.RunFor(2);
|
| + data.CompleteRead();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| TEST_P(SpdySessionTest, RejectInvalidUnknownFrames) {
|
| @@ -5172,10 +5107,7 @@ TEST_P(SpdySessionTest, RejectInvalidUnknownFrames) {
|
| MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| };
|
|
|
| - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
|
| -
|
| - MockConnect connect_data(SYNCHRONOUS, OK);
|
| - data.set_connect_data(connect_data);
|
| + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
|
| session_deps_.socket_factory->AddSocketDataProvider(&data);
|
|
|
| CreateNetworkSession();
|
|
|