diff options
author | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 00:50:04 +0000 |
---|---|---|
committer | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 00:50:04 +0000 |
commit | 38dfd13a2886bd4f002d79d807883c9762f06f44 (patch) | |
tree | b784bd7aa409350de95207c4f256a3a2a8905713 /net/spdy/spdy_session_spdy2_unittest.cc | |
parent | a71d32455848293246db0766650151a2db3c13d4 (diff) | |
download | chromium_src-38dfd13a2886bd4f002d79d807883c9762f06f44.zip chromium_src-38dfd13a2886bd4f002d79d807883c9762f06f44.tar.gz chromium_src-38dfd13a2886bd4f002d79d807883c9762f06f44.tar.bz2 |
Correctly handle SPDY GOAWAY frames.
Review URL: https://chromiumcodereview.appspot.com/14232014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195032 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_session_spdy2_unittest.cc')
-rw-r--r-- | net/spdy/spdy_session_spdy2_unittest.cc | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/net/spdy/spdy_session_spdy2_unittest.cc b/net/spdy/spdy_session_spdy2_unittest.cc index cd676bc..0978f06 100644 --- a/net/spdy/spdy_session_spdy2_unittest.cc +++ b/net/spdy/spdy_session_spdy2_unittest.cc @@ -110,32 +110,76 @@ TEST_F(SpdySessionSpdy2Test, GoAway) { session_deps_.host_resolver->set_synchronous_mode(true); MockConnect connect_data(SYNCHRONOUS, OK); - scoped_ptr<SpdyFrame> goaway(ConstructSpdyGoAway()); + scoped_ptr<SpdyFrame> goaway(ConstructSpdyGoAway(1)); MockRead reads[] = { - CreateMockRead(*goaway), - MockRead(SYNCHRONOUS, 0, 0) // EOF + CreateMockRead(*goaway, 2), + MockRead(ASYNC, 0, 3) // EOF }; - StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); + scoped_ptr<SpdyFrame> req1(ConstructSpdyGet(NULL, 0, false, 1, MEDIUM)); + scoped_ptr<SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, MEDIUM)); + MockWrite writes[] = { + CreateMockWrite(*req1, 0), + CreateMockWrite(*req2, 1), + }; + DeterministicSocketData data(reads, arraysize(reads), + writes, arraysize(writes)); data.set_connect_data(connect_data); - session_deps_.socket_factory->AddSocketDataProvider(&data); + session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.SetNextProto(kProtoSPDY2); - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); + session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); - CreateNetworkSession(); + CreateDeterministicNetworkSession(); scoped_refptr<SpdySession> session = CreateInitializedSession(); EXPECT_EQ(2, session->GetProtocolVersion()); - // Flush the SpdySession::OnReadComplete() task. - MessageLoop::current()->RunUntilIdle(); + GURL url("http://www.google.com"); + scoped_refptr<SpdyStream> spdy_stream1 = + CreateStreamSynchronously(session, url, MEDIUM, BoundNetLog()); + + scoped_refptr<SpdyStream> spdy_stream2 = + CreateStreamSynchronously(session, url, MEDIUM, BoundNetLog()); + + scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock); + (*headers)["method"] = "GET"; + (*headers)["scheme"] = url.scheme(); + (*headers)["host"] = url.host(); + (*headers)["url"] = url.path(); + (*headers)["version"] = "HTTP/1.1"; + scoped_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock); + *headers2 = *headers; + + spdy_stream1->set_spdy_headers(headers.Pass()); + EXPECT_TRUE(spdy_stream1->HasUrl()); + + spdy_stream2->set_spdy_headers(headers2.Pass()); + EXPECT_TRUE(spdy_stream2->HasUrl()); + + spdy_stream1->SendRequest(false); + spdy_stream2->SendRequest(false); + data.RunFor(2); + + EXPECT_EQ(1u, spdy_stream1->stream_id()); + EXPECT_EQ(3u, spdy_stream2->stream_id()); + + EXPECT_TRUE(spdy_session_pool_->HasSession(pair_)); + + // Read and process the GOAWAY frame. + data.RunFor(1); EXPECT_FALSE(spdy_session_pool_->HasSession(pair_)); + EXPECT_TRUE(session->IsStreamActive(1)); + EXPECT_FALSE(session->IsStreamActive(3)); + scoped_refptr<SpdySession> session2 = GetSession(pair_); + spdy_stream1->Close(); + spdy_stream1 = NULL; + spdy_stream2 = NULL; + // Delete the first session. session = NULL; |