| Index: trunk/src/net/spdy/spdy_session_unittest.cc
|
| ===================================================================
|
| --- trunk/src/net/spdy/spdy_session_unittest.cc (revision 274100)
|
| +++ trunk/src/net/spdy/spdy_session_unittest.cc (working copy)
|
| @@ -282,7 +282,8 @@
|
| EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult());
|
| }
|
|
|
| -// A session receiving a GOAWAY frame with no active streams should close.
|
| +// A session receiving a GOAWAY frame with no active streams should
|
| +// immediately close.
|
| TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| @@ -306,8 +307,9 @@
|
|
|
| // Read and process the GOAWAY frame.
|
| data.RunFor(1);
|
| +
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - base::RunLoop().RunUntilIdle();
|
| +
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -407,13 +409,12 @@
|
| EXPECT_EQ(NULL, spdy_stream2.get());
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
|
|
| - EXPECT_TRUE(session->IsGoingAway());
|
| + EXPECT_FALSE(session->IsClosed());
|
|
|
| // Should close the session.
|
| spdy_stream1->Close();
|
| EXPECT_EQ(NULL, spdy_stream1.get());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -488,12 +489,13 @@
|
| EXPECT_FALSE(session->IsStreamActive(3));
|
| EXPECT_EQ(NULL, spdy_stream2.get());
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
| - EXPECT_TRUE(session->IsGoingAway());
|
|
|
| + EXPECT_FALSE(session->IsClosed());
|
| +
|
| // Read and process the second GOAWAY frame, which should close the
|
| // session.
|
| data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| +
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -566,12 +568,12 @@
|
| EXPECT_FALSE(session->IsStreamActive(3));
|
| EXPECT_EQ(NULL, spdy_stream2.get());
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
| - EXPECT_TRUE(session->IsGoingAway());
|
|
|
| + EXPECT_FALSE(session->IsClosed());
|
| +
|
| session->CloseSessionOnError(ERR_ABORTED, "Aborting session");
|
| - EXPECT_EQ(NULL, spdy_stream1.get());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| + EXPECT_EQ(NULL, spdy_stream1.get());
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -700,7 +702,7 @@
|
| // Read and process the SYN_STREAM frame, the subsequent RST_STREAM,
|
| // and EOF.
|
| data.RunFor(3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| +
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -759,7 +761,7 @@
|
| // pre-existing stream is still active.
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| - EXPECT_TRUE(session->IsGoingAway());
|
| + EXPECT_FALSE(session->IsClosed());
|
|
|
| EXPECT_TRUE(session->IsStreamActive(1));
|
|
|
| @@ -768,7 +770,6 @@
|
| #endif
|
| EXPECT_EQ(NULL, spdy_stream.get());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -1041,7 +1042,6 @@
|
| EXPECT_EQ(kUploadData, delegate2.TakeReceivedData());
|
|
|
| // Session was destroyed.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_FALSE(session.get());
|
| }
|
|
|
| @@ -1195,7 +1195,6 @@
|
|
|
| // Read and process EOF.
|
| data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -1204,18 +1203,14 @@
|
|
|
| MockConnect connect_data(SYNCHRONOUS, OK);
|
| MockRead reads[] = {
|
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
|
| + MockRead(ASYNC, 0, 0, 0) // EOF
|
| };
|
| scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false));
|
| - MockWrite writes[] = {
|
| - CreateMockWrite(*write_ping),
|
| - };
|
| - StaticSocketDataProvider data(
|
| - reads, arraysize(reads), writes, arraysize(writes));
|
| + DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
|
| data.set_connect_data(connect_data);
|
| - session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| + session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
|
|
|
| - CreateNetworkSession();
|
| + CreateDeterministicNetworkSession();
|
|
|
| base::WeakPtr<SpdySession> session =
|
| CreateInsecureSpdySession(http_session_, key_, BoundNetLog());
|
| @@ -1237,7 +1232,7 @@
|
| EXPECT_TRUE(session->check_ping_status_pending());
|
|
|
| // Assert session is not closed.
|
| - EXPECT_TRUE(session->IsAvailable());
|
| + EXPECT_FALSE(session->IsClosed());
|
| EXPECT_LT(0u, session->num_active_streams() + session->num_created_streams());
|
| EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
|
|
| @@ -1246,7 +1241,6 @@
|
| base::TimeTicks now = base::TimeTicks::Now();
|
| session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1);
|
| session->CheckPingStatus(now);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
|
|
| EXPECT_TRUE(session == NULL);
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| @@ -1310,11 +1304,6 @@
|
| 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);
|
| }
|
|
|
| @@ -1594,7 +1583,7 @@
|
| EXPECT_NE(log.bound().source().id, socket_source.id);
|
| }
|
|
|
| -TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
|
| +TEST_P(SpdySessionTest, CloseSessionOnError) {
|
| session_deps_.host_resolver->set_synchronous_mode(true);
|
|
|
| MockConnect connect_data(SYNCHRONOUS, OK);
|
| @@ -1636,53 +1625,6 @@
|
| CapturingNetLog::CapturedEntry entry = entries[pos];
|
| int error_code = 0;
|
| ASSERT_TRUE(entry.GetNetErrorCode(&error_code));
|
| - EXPECT_EQ(OK, error_code);
|
| - } else {
|
| - ADD_FAILURE();
|
| - }
|
| -}
|
| -
|
| -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);
|
| - session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| -
|
| - CreateNetworkSession();
|
| -
|
| - CapturingBoundNetLog log;
|
| - base::WeakPtr<SpdySession> session =
|
| - CreateInsecureSpdySession(http_session_, key_, log.bound());
|
| - EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
|
| -
|
| - // Flush the read completion task.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
| - EXPECT_TRUE(session == NULL);
|
| -
|
| - // Check that the NetLog was filled reasonably.
|
| - net::CapturingNetLog::CapturedEntryList entries;
|
| - log.GetEntries(&entries);
|
| - EXPECT_LT(0u, entries.size());
|
| -
|
| - // Check that we logged SPDY_SESSION_CLOSE correctly.
|
| - int pos =
|
| - net::ExpectLogContainsSomewhere(entries,
|
| - 0,
|
| - net::NetLog::TYPE_SPDY_SESSION_CLOSE,
|
| - net::NetLog::PHASE_NONE);
|
| -
|
| - if (pos < static_cast<int>(entries.size())) {
|
| - CapturingNetLog::CapturedEntry entry = entries[pos];
|
| - int error_code = 0;
|
| - ASSERT_TRUE(entry.GetNetErrorCode(&error_code));
|
| EXPECT_EQ(ERR_CONNECTION_CLOSED, error_code);
|
| } else {
|
| ADD_FAILURE();
|
| @@ -1915,7 +1857,6 @@
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -1989,7 +1930,6 @@
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -2071,7 +2011,6 @@
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -2155,7 +2094,6 @@
|
| EXPECT_TRUE(delegate1.StreamIsClosed());
|
| EXPECT_TRUE(delegate2.StreamIsClosed());
|
|
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -2186,14 +2124,12 @@
|
|
|
| scoped_ptr<SpdyFrame> req(
|
| spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true));
|
| - scoped_ptr<SpdyFrame> rst(
|
| - spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
|
| MockWrite writes[] = {
|
| - CreateMockWrite(*req, 0), CreateMockWrite(*rst, 1),
|
| + CreateMockWrite(*req, 0),
|
| };
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 0, 2) // EOF
|
| + MockRead(ASYNC, 0, 1) // EOF
|
| };
|
| DeterministicSocketData data(reads, arraysize(reads),
|
| writes, arraysize(writes));
|
| @@ -2230,12 +2166,8 @@
|
| // session).
|
| spdy_stream->Cancel();
|
|
|
| - data.RunFor(1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| EXPECT_EQ(NULL, spdy_stream.get());
|
| EXPECT_TRUE(delegate.StreamIsClosed());
|
| -
|
| EXPECT_TRUE(session == NULL);
|
| }
|
|
|
| @@ -4376,7 +4308,6 @@
|
| // 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");
|
| - base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(session == NULL);
|
|
|
| EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
|
|
|