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

Unified Diff: net/spdy/spdy_stream_unittest.cc

Issue 9582034: Fork SPDY/2 and SPDY/3 versions of our SPDY tests, in preparation for landing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix merge bug Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_stream_spdy3_unittest.cc ('k') | net/spdy/spdy_test_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_stream_unittest.cc
===================================================================
--- net/spdy/spdy_stream_unittest.cc (revision 124866)
+++ net/spdy/spdy_stream_unittest.cc (working copy)
@@ -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
« no previous file with comments | « net/spdy/spdy_stream_spdy3_unittest.cc ('k') | net/spdy/spdy_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698