diff options
author | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-04 04:12:23 +0000 |
---|---|---|
committer | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-04 04:12:23 +0000 |
commit | 448d4ca50bf2216c6217acc13d000f4e451d485a (patch) | |
tree | a747072a0641d9488ef77b2a3c598e17a1f2c604 /net/spdy/spdy_stream_unittest.cc | |
parent | f259ea51f61f8e97117ab142606d33d859de7763 (diff) | |
download | chromium_src-448d4ca50bf2216c6217acc13d000f4e451d485a.zip chromium_src-448d4ca50bf2216c6217acc13d000f4e451d485a.tar.gz chromium_src-448d4ca50bf2216c6217acc13d000f4e451d485a.tar.bz2 |
Fork SPDY/2 and SPDY/3 versions of our SPDY tests, in preparation for landing
spdy 3 framer changes.
Review URL: https://chromiumcodereview.appspot.com/9582034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_stream_unittest.cc')
-rw-r--r-- | net/spdy/spdy_stream_unittest.cc | 405 |
1 files changed, 0 insertions, 405 deletions
diff --git a/net/spdy/spdy_stream_unittest.cc b/net/spdy/spdy_stream_unittest.cc deleted file mode 100644 index f29b99e..0000000 --- a/net/spdy/spdy_stream_unittest.cc +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/memory/ref_counted.h" -#include "net/base/completion_callback.h" -#include "net/base/net_log_unittest.h" -#include "net/spdy/spdy_stream.h" -#include "net/spdy/spdy_http_utils.h" -#include "net/spdy/spdy_session.h" -#include "net/spdy/spdy_test_util.h" -#include "testing/gtest/include/gtest/gtest.h" - -// TODO(ukai): factor out common part with spdy_http_stream_unittest.cc -// -namespace net { - -namespace { - -class TestSpdyStreamDelegate : public SpdyStream::Delegate { - public: - TestSpdyStreamDelegate(SpdyStream* stream, - IOBufferWithSize* buf, - const CompletionCallback& callback) - : stream_(stream), - buf_(buf), - callback_(callback), - send_headers_completed_(false), - response_(new spdy::SpdyHeaderBlock), - data_sent_(0), - closed_(false) {} - virtual ~TestSpdyStreamDelegate() {} - - virtual bool OnSendHeadersComplete(int status) { - send_headers_completed_ = true; - return true; - } - virtual int OnSendBody() { - ADD_FAILURE() << "OnSendBody should not be called"; - return ERR_UNEXPECTED; - } - virtual int OnSendBodyComplete(int /*status*/, bool* /*eof*/) { - ADD_FAILURE() << "OnSendBodyComplete should not be called"; - return ERR_UNEXPECTED; - } - - virtual int OnResponseReceived(const spdy::SpdyHeaderBlock& response, - base::Time response_time, - int status) { - EXPECT_TRUE(send_headers_completed_); - *response_ = response; - if (buf_) { - EXPECT_EQ(ERR_IO_PENDING, - stream_->WriteStreamData(buf_.get(), buf_->size(), - spdy::DATA_FLAG_NONE)); - } - return status; - } - virtual void OnDataReceived(const char* buffer, int bytes) { - received_data_ += std::string(buffer, bytes); - } - virtual void OnDataSent(int length) { - data_sent_ += length; - } - virtual void OnClose(int status) { - closed_ = true; - CompletionCallback callback = callback_; - callback_.Reset(); - callback.Run(OK); - } - virtual void set_chunk_callback(net::ChunkCallback *) {} - - bool send_headers_completed() const { return send_headers_completed_; } - const linked_ptr<spdy::SpdyHeaderBlock>& response() const { - return response_; - } - const std::string& received_data() const { return received_data_; } - int data_sent() const { return data_sent_; } - bool closed() const { return closed_; } - - private: - SpdyStream* stream_; - scoped_refptr<IOBufferWithSize> buf_; - CompletionCallback callback_; - bool send_headers_completed_; - linked_ptr<spdy::SpdyHeaderBlock> response_; - std::string received_data_; - int data_sent_; - bool closed_; -}; - -spdy::SpdyFrame* ConstructSpdyBodyFrame(const char* data, int length) { - spdy::SpdyFramer framer; - return framer.CreateDataFrame(1, data, length, spdy::DATA_FLAG_NONE); -} - -} // anonymous namespace - -class SpdyStreamTest : public testing::Test { - protected: - SpdyStreamTest() { - } - - scoped_refptr<SpdySession> CreateSpdySession() { - spdy::SpdyFramer::set_enable_compression_default(false); - HostPortPair host_port_pair("www.google.com", 80); - HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); - scoped_refptr<SpdySession> session( - session_->spdy_session_pool()->Get(pair, BoundNetLog())); - return session; - } - - virtual void TearDown() { - MessageLoop::current()->RunAllPending(); - } - - scoped_refptr<HttpNetworkSession> session_; -}; - -TEST_F(SpdyStreamTest, SendDataAfterOpen) { - SpdySessionDependencies session_deps; - - session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps); - SpdySessionPoolPeer pool_peer_(session_->spdy_session_pool()); - - const SpdyHeaderInfo kSynStartHeader = { - spdy::SYN_STREAM, - 1, - 0, - net::ConvertRequestPriorityToSpdyPriority(LOWEST), - spdy::CONTROL_FLAG_NONE, - false, - spdy::INVALID, - NULL, - 0, - spdy::DATA_FLAG_NONE - }; - static const char* const kGetHeaders[] = { - "method", - "GET", - "scheme", - "http", - "host", - "www.google.com", - "path", - "/", - "version", - "HTTP/1.1", - }; - scoped_ptr<spdy::SpdyFrame> req( - ConstructSpdyPacket( - kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); - scoped_ptr<spdy::SpdyFrame> msg( - ConstructSpdyBodyFrame("\0hello!\xff", 8)); - MockWrite writes[] = { - CreateMockWrite(*req), - CreateMockWrite(*msg), - }; - writes[0].sequence_number = 0; - writes[1].sequence_number = 2; - - scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); - scoped_ptr<spdy::SpdyFrame> echo( - ConstructSpdyBodyFrame("\0hello!\xff", 8)); - MockRead reads[] = { - CreateMockRead(*resp), - CreateMockRead(*echo), - MockRead(ASYNC, 0, 0), // EOF - }; - reads[0].sequence_number = 1; - reads[1].sequence_number = 3; - reads[2].sequence_number = 4; - - scoped_ptr<OrderedSocketData> data( - new OrderedSocketData(reads, arraysize(reads), - writes, arraysize(writes))); - MockConnect connect_data(SYNCHRONOUS, OK); - data->set_connect_data(connect_data); - - session_deps.socket_factory->AddSocketDataProvider(data.get()); - SpdySession::SetSSLMode(false); - - scoped_refptr<SpdySession> session(CreateSpdySession()); - const char* kStreamUrl = "http://www.google.com/"; - GURL url(kStreamUrl); - - HostPortPair host_port_pair("www.google.com", 80); - scoped_refptr<TransportSocketParams> transport_params( - new TransportSocketParams(host_port_pair, LOWEST, false, false)); - - scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); - EXPECT_EQ(OK, connection->Init(host_port_pair.ToString(), transport_params, - LOWEST, CompletionCallback(), - session_->GetTransportSocketPool(), - BoundNetLog())); - session->InitializeWithSocket(connection.release(), false, OK); - - scoped_refptr<SpdyStream> stream; - ASSERT_EQ( - OK, - session->CreateStream(url, LOWEST, &stream, BoundNetLog(), - CompletionCallback())); - scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8)); - memcpy(buf->data(), "\0hello!\xff", 8); - TestCompletionCallback callback; - - scoped_ptr<TestSpdyStreamDelegate> delegate( - new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); - stream->SetDelegate(delegate.get()); - - EXPECT_FALSE(stream->HasUrl()); - - linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); - (*headers)["method"] = "GET"; - (*headers)["scheme"] = url.scheme(); - (*headers)["host"] = url.host(); - (*headers)["path"] = url.path(); - (*headers)["version"] = "HTTP/1.1"; - stream->set_spdy_headers(headers); - EXPECT_TRUE(stream->HasUrl()); - EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); - - EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); - - EXPECT_EQ(OK, callback.WaitForResult()); - - EXPECT_TRUE(delegate->send_headers_completed()); - EXPECT_EQ("200", (*delegate->response())["status"]); - EXPECT_EQ("HTTP/1.1", (*delegate->response())["version"]); - EXPECT_EQ(std::string("\0hello!\xff", 8), delegate->received_data()); - EXPECT_EQ(8, delegate->data_sent()); - EXPECT_TRUE(delegate->closed()); -} - -TEST_F(SpdyStreamTest, PushedStream) { - const char kStreamUrl[] = "http://www.google.com/"; - - SpdySessionDependencies session_deps; - session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps); - SpdySessionPoolPeer pool_peer_(session_->spdy_session_pool()); - scoped_refptr<SpdySession> spdy_session(CreateSpdySession()); - BoundNetLog net_log; - - // Conjure up a stream. - scoped_refptr<SpdyStream> stream = new SpdyStream(spdy_session, - 2, - true, - net_log); - EXPECT_FALSE(stream->response_received()); - EXPECT_FALSE(stream->HasUrl()); - - // Set a couple of headers. - spdy::SpdyHeaderBlock response; - response["url"] = kStreamUrl; - stream->OnResponseReceived(response); - - // Send some basic headers. - spdy::SpdyHeaderBlock headers; - response["status"] = "200"; - response["version"] = "OK"; - stream->OnHeaders(headers); - - stream->set_response_received(); - EXPECT_TRUE(stream->response_received()); - EXPECT_TRUE(stream->HasUrl()); - EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); -} - -TEST_F(SpdyStreamTest, StreamError) { - SpdySessionDependencies session_deps; - - session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps); - SpdySessionPoolPeer pool_peer_(session_->spdy_session_pool()); - - const SpdyHeaderInfo kSynStartHeader = { - spdy::SYN_STREAM, - 1, - 0, - net::ConvertRequestPriorityToSpdyPriority(LOWEST), - spdy::CONTROL_FLAG_NONE, - false, - spdy::INVALID, - NULL, - 0, - spdy::DATA_FLAG_NONE - }; - static const char* const kGetHeaders[] = { - "method", - "GET", - "scheme", - "http", - "host", - "www.google.com", - "path", - "/", - "version", - "HTTP/1.1", - }; - scoped_ptr<spdy::SpdyFrame> req( - ConstructSpdyPacket( - kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); - scoped_ptr<spdy::SpdyFrame> msg( - ConstructSpdyBodyFrame("\0hello!\xff", 8)); - MockWrite writes[] = { - CreateMockWrite(*req), - CreateMockWrite(*msg), - }; - writes[0].sequence_number = 0; - writes[1].sequence_number = 2; - - scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); - scoped_ptr<spdy::SpdyFrame> echo( - ConstructSpdyBodyFrame("\0hello!\xff", 8)); - MockRead reads[] = { - CreateMockRead(*resp), - CreateMockRead(*echo), - MockRead(ASYNC, 0, 0), // EOF - }; - reads[0].sequence_number = 1; - reads[1].sequence_number = 3; - reads[2].sequence_number = 4; - - net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); - - scoped_ptr<OrderedSocketData> data( - new OrderedSocketData(reads, arraysize(reads), - writes, arraysize(writes))); - MockConnect connect_data(SYNCHRONOUS, OK); - data->set_connect_data(connect_data); - - session_deps.socket_factory->AddSocketDataProvider(data.get()); - SpdySession::SetSSLMode(false); - - scoped_refptr<SpdySession> session(CreateSpdySession()); - const char* kStreamUrl = "http://www.google.com/"; - GURL url(kStreamUrl); - - HostPortPair host_port_pair("www.google.com", 80); - scoped_refptr<TransportSocketParams> transport_params( - new TransportSocketParams(host_port_pair, LOWEST, false, false)); - - scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); - EXPECT_EQ(OK, connection->Init(host_port_pair.ToString(), transport_params, - LOWEST, CompletionCallback(), - session_->GetTransportSocketPool(), - log.bound())); - session->InitializeWithSocket(connection.release(), false, OK); - - scoped_refptr<SpdyStream> stream; - ASSERT_EQ( - OK, - session->CreateStream(url, LOWEST, &stream, log.bound(), - CompletionCallback())); - scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8)); - memcpy(buf->data(), "\0hello!\xff", 8); - TestCompletionCallback callback; - - scoped_ptr<TestSpdyStreamDelegate> delegate( - new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); - stream->SetDelegate(delegate.get()); - - EXPECT_FALSE(stream->HasUrl()); - - linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); - (*headers)["method"] = "GET"; - (*headers)["scheme"] = url.scheme(); - (*headers)["host"] = url.host(); - (*headers)["path"] = url.path(); - (*headers)["version"] = "HTTP/1.1"; - stream->set_spdy_headers(headers); - EXPECT_TRUE(stream->HasUrl()); - EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); - - EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); - - const spdy::SpdyStreamId stream_id = stream->stream_id(); - - EXPECT_EQ(OK, callback.WaitForResult()); - - EXPECT_TRUE(delegate->send_headers_completed()); - EXPECT_EQ("200", (*delegate->response())["status"]); - EXPECT_EQ("HTTP/1.1", (*delegate->response())["version"]); - EXPECT_EQ(std::string("\0hello!\xff", 8), delegate->received_data()); - EXPECT_EQ(8, delegate->data_sent()); - EXPECT_TRUE(delegate->closed()); - - // Check that the NetLog was filled reasonably. - net::CapturingNetLog::EntryList entries; - log.GetEntries(&entries); - EXPECT_LT(0u, entries.size()); - - // Check that we logged SPDY_STREAM_ERROR correctly. - int pos = net::ExpectLogContainsSomewhere( - entries, 0, - net::NetLog::TYPE_SPDY_STREAM_ERROR, - net::NetLog::PHASE_NONE); - - CapturingNetLog::Entry entry = entries[pos]; - NetLogSpdyStreamErrorParameter* request_params = - static_cast<NetLogSpdyStreamErrorParameter*>( - entry.extra_parameters.get()); - EXPECT_EQ(stream_id, request_params->stream_id()); -} - -} // namespace net |