| Index: net/tools/flip_server/spdy_interface_test.cc
|
| diff --git a/net/tools/flip_server/spdy_interface_test.cc b/net/tools/flip_server/spdy_interface_test.cc
|
| deleted file mode 100644
|
| index d84543826253ae0c2ae8cb57270b1de9e43657f4..0000000000000000000000000000000000000000
|
| --- a/net/tools/flip_server/spdy_interface_test.cc
|
| +++ /dev/null
|
| @@ -1,606 +0,0 @@
|
| -// Copyright 2013 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 "net/tools/flip_server/spdy_interface.h"
|
| -
|
| -#include <list>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/strings/string_piece.h"
|
| -#include "net/spdy/buffered_spdy_framer.h"
|
| -#include "net/tools/balsa/balsa_enums.h"
|
| -#include "net/tools/balsa/balsa_headers.h"
|
| -#include "net/tools/flip_server/flip_config.h"
|
| -#include "net/tools/flip_server/flip_test_utils.h"
|
| -#include "net/tools/flip_server/mem_cache.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -
|
| -using ::base::StringPiece;
|
| -using ::testing::_;
|
| -using ::testing::InSequence;
|
| -using ::testing::InvokeWithoutArgs;
|
| -using ::testing::Return;
|
| -using ::testing::SaveArg;
|
| -using ::testing::Values;
|
| -
|
| -namespace {
|
| -
|
| -struct StringSaver {
|
| - public:
|
| - StringSaver() : data(NULL), size(0) {}
|
| - void Save() { string = std::string(data, size); }
|
| -
|
| - const char* data;
|
| - size_t size;
|
| - std::string string;
|
| -};
|
| -
|
| -class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface {
|
| - public:
|
| - virtual ~SpdyFramerVisitor() {}
|
| - MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError));
|
| - MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&));
|
| - MOCK_METHOD6(OnSynStream,
|
| - void(SpdyStreamId,
|
| - SpdyStreamId,
|
| - SpdyPriority,
|
| - bool,
|
| - bool,
|
| - const SpdyHeaderBlock&));
|
| - MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&));
|
| - MOCK_METHOD5(OnHeaders,
|
| - void(SpdyStreamId,
|
| - bool,
|
| - SpdyPriority,
|
| - bool,
|
| - const SpdyHeaderBlock&));
|
| - MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool));
|
| - MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId,
|
| - const char*,
|
| - size_t,
|
| - bool));
|
| - MOCK_METHOD1(OnSettings, void(bool clear_persisted));
|
| - MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32));
|
| - MOCK_METHOD2(OnPing, void(SpdyPingId unique_id, bool is_ack));
|
| - MOCK_METHOD2(OnRstStream, void(SpdyStreamId, SpdyRstStreamStatus));
|
| - MOCK_METHOD2(OnGoAway, void(SpdyStreamId, SpdyGoAwayStatus));
|
| - MOCK_METHOD2(OnWindowUpdate, void(SpdyStreamId, uint32));
|
| - MOCK_METHOD3(OnPushPromise,
|
| - void(SpdyStreamId, SpdyStreamId, const SpdyHeaderBlock&));
|
| - MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type));
|
| -};
|
| -
|
| -class FakeSMConnection : public SMConnection {
|
| - public:
|
| - FakeSMConnection(EpollServer* epoll_server,
|
| - SSLState* ssl_state,
|
| - MemoryCache* memory_cache,
|
| - FlipAcceptor* acceptor,
|
| - std::string log_prefix)
|
| - : SMConnection(epoll_server,
|
| - ssl_state,
|
| - memory_cache,
|
| - acceptor,
|
| - log_prefix) {}
|
| -
|
| - MOCK_METHOD0(Cleanup, void());
|
| - MOCK_METHOD8(InitSMConnection,
|
| - void(SMConnectionPoolInterface*,
|
| - SMInterface*,
|
| - EpollServer*,
|
| - int,
|
| - std::string,
|
| - std::string,
|
| - std::string,
|
| - bool));
|
| -};
|
| -
|
| -// This class is almost SpdySM, except one function.
|
| -// This class is the test target of tests in this file.
|
| -class TestSpdySM : public SpdySM {
|
| - public:
|
| - virtual ~TestSpdySM() {}
|
| - TestSpdySM(SMConnection* connection,
|
| - SMInterface* sm_http_interface,
|
| - EpollServer* epoll_server,
|
| - MemoryCache* memory_cache,
|
| - FlipAcceptor* acceptor,
|
| - SpdyMajorVersion version)
|
| - : SpdySM(connection,
|
| - sm_http_interface,
|
| - epoll_server,
|
| - memory_cache,
|
| - acceptor,
|
| - version) {}
|
| -
|
| - MOCK_METHOD2(FindOrMakeNewSMConnectionInterface,
|
| - SMInterface*(const std::string&, const std::string&));
|
| -};
|
| -
|
| -class SpdySMTestBase : public ::testing::TestWithParam<SpdyMajorVersion> {
|
| - public:
|
| - explicit SpdySMTestBase(FlipHandlerType type) {
|
| - SSLState* ssl_state = NULL;
|
| - mock_another_interface_.reset(new MockSMInterface);
|
| - memory_cache_.reset(new MemoryCache);
|
| - acceptor_.reset(new FlipAcceptor(type,
|
| - "127.0.0.1",
|
| - "8941",
|
| - "ssl_cert_filename",
|
| - "ssl_key_filename",
|
| - "127.0.0.1",
|
| - "8942",
|
| - "127.0.0.1",
|
| - "8943",
|
| - 1,
|
| - 0,
|
| - true,
|
| - 1,
|
| - false,
|
| - true,
|
| - NULL));
|
| - epoll_server_.reset(new EpollServer);
|
| - connection_.reset(new FakeSMConnection(epoll_server_.get(),
|
| - ssl_state,
|
| - memory_cache_.get(),
|
| - acceptor_.get(),
|
| - "log_prefix"));
|
| -
|
| - interface_.reset(new TestSpdySM(connection_.get(),
|
| - mock_another_interface_.get(),
|
| - epoll_server_.get(),
|
| - memory_cache_.get(),
|
| - acceptor_.get(),
|
| - GetParam()));
|
| -
|
| - spdy_framer_.reset(new BufferedSpdyFramer(GetParam(), true));
|
| - spdy_framer_visitor_.reset(new SpdyFramerVisitor);
|
| - spdy_framer_->set_visitor(spdy_framer_visitor_.get());
|
| - }
|
| -
|
| - virtual ~SpdySMTestBase() {
|
| - if (acceptor_->listen_fd_ >= 0) {
|
| - epoll_server_->UnregisterFD(acceptor_->listen_fd_);
|
| - close(acceptor_->listen_fd_);
|
| - acceptor_->listen_fd_ = -1;
|
| - }
|
| - OutputList& output_list = *connection_->output_list();
|
| - for (OutputList::const_iterator i = output_list.begin();
|
| - i != output_list.end();
|
| - ++i) {
|
| - delete *i;
|
| - }
|
| - output_list.clear();
|
| - }
|
| -
|
| - bool HasStream(uint32 stream_id) {
|
| - return interface_->output_ordering().ExistsInPriorityMaps(stream_id);
|
| - }
|
| -
|
| - protected:
|
| - scoped_ptr<MockSMInterface> mock_another_interface_;
|
| - scoped_ptr<MemoryCache> memory_cache_;
|
| - scoped_ptr<FlipAcceptor> acceptor_;
|
| - scoped_ptr<EpollServer> epoll_server_;
|
| - scoped_ptr<FakeSMConnection> connection_;
|
| - scoped_ptr<TestSpdySM> interface_;
|
| - scoped_ptr<BufferedSpdyFramer> spdy_framer_;
|
| - scoped_ptr<SpdyFramerVisitor> spdy_framer_visitor_;
|
| -};
|
| -
|
| -class SpdySMProxyTest : public SpdySMTestBase {
|
| - public:
|
| - SpdySMProxyTest() : SpdySMTestBase(FLIP_HANDLER_PROXY) {}
|
| - virtual ~SpdySMProxyTest() {}
|
| -};
|
| -
|
| -class SpdySMServerTest : public SpdySMTestBase {
|
| - public:
|
| - SpdySMServerTest() : SpdySMTestBase(FLIP_HANDLER_SPDY_SERVER) {}
|
| - virtual ~SpdySMServerTest() {}
|
| -};
|
| -
|
| -INSTANTIATE_TEST_CASE_P(SpdySMProxyTest,
|
| - SpdySMProxyTest,
|
| - Values(SPDY3, SPDY4));
|
| -INSTANTIATE_TEST_CASE_P(SpdySMServerTest, SpdySMServerTest, Values(SPDY4));
|
| -
|
| -TEST_P(SpdySMProxyTest, InitSMConnection) {
|
| - {
|
| - InSequence s;
|
| - EXPECT_CALL(*connection_, InitSMConnection(_, _, _, _, _, _, _, _));
|
| - }
|
| - interface_->InitSMConnection(
|
| - NULL, NULL, epoll_server_.get(), -1, "", "", "", false);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, OnStreamFrameData) {
|
| - BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
|
| - scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface);
|
| - uint32 stream_id = 92;
|
| - uint32 associated_id = 43;
|
| - SpdyHeaderBlock block;
|
| - testing::MockFunction<void(int)> checkpoint; // NOLINT
|
| -
|
| - scoped_ptr<SpdyFrame> frame(spdy_framer_->CreatePingFrame(12, false));
|
| - block[":method"] = "GET";
|
| - block[":host"] = "www.example.com";
|
| - block[":path"] = "/path";
|
| - block[":scheme"] = "http";
|
| - block["foo"] = "bar";
|
| - {
|
| - InSequence s;
|
| - EXPECT_CALL(*interface_,
|
| - FindOrMakeNewSMConnectionInterface(_, _))
|
| - .WillOnce(Return(mock_interface.get()));
|
| - EXPECT_CALL(*mock_interface, SetStreamID(stream_id));
|
| - EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1);
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*mock_interface,
|
| - ProcessWriteInput(frame->data(), frame->size())).Times(1);
|
| - }
|
| -
|
| - visitor->OnSynStream(stream_id, associated_id, 0, false, false, block);
|
| - checkpoint.Call(0);
|
| - visitor->OnStreamFrameData(stream_id, frame->data(), frame->size(), true);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, OnRstStream) {
|
| - BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
|
| - uint32 stream_id = 82;
|
| - MemCacheIter mci;
|
| - mci.stream_id = stream_id;
|
| -
|
| - {
|
| - BalsaHeaders headers;
|
| - std::string filename = "foobar";
|
| - memory_cache_->InsertFile(&headers, filename, "");
|
| - mci.file_data = memory_cache_->GetFileData(filename);
|
| - }
|
| -
|
| - interface_->AddToOutputOrder(mci);
|
| - ASSERT_TRUE(HasStream(stream_id));
|
| - visitor->OnRstStream(stream_id, RST_STREAM_INVALID);
|
| - ASSERT_FALSE(HasStream(stream_id));
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, ProcessReadInput) {
|
| - ASSERT_EQ(SpdyFramer::SPDY_RESET, interface_->spdy_framer()->state());
|
| - interface_->ProcessReadInput("", 1);
|
| - ASSERT_EQ(SpdyFramer::SPDY_READING_COMMON_HEADER,
|
| - interface_->spdy_framer()->state());
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, ResetForNewConnection) {
|
| - uint32 stream_id = 13;
|
| - MemCacheIter mci;
|
| - mci.stream_id = stream_id;
|
| - // incomplete input
|
| - const char input[] = {'\0', '\0', '\0'};
|
| -
|
| - {
|
| - BalsaHeaders headers;
|
| - std::string filename = "foobar";
|
| - memory_cache_->InsertFile(&headers, filename, "");
|
| - mci.file_data = memory_cache_->GetFileData(filename);
|
| - }
|
| -
|
| - interface_->AddToOutputOrder(mci);
|
| - ASSERT_TRUE(HasStream(stream_id));
|
| - interface_->ProcessReadInput(input, sizeof(input));
|
| - ASSERT_NE(SpdyFramer::SPDY_RESET, interface_->spdy_framer()->state());
|
| -
|
| - interface_->ResetForNewConnection();
|
| - ASSERT_FALSE(HasStream(stream_id));
|
| - ASSERT_TRUE(interface_->spdy_framer() == NULL);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, CreateFramer) {
|
| - interface_->ResetForNewConnection();
|
| - interface_->CreateFramer(SPDY3);
|
| - ASSERT_TRUE(interface_->spdy_framer() != NULL);
|
| - ASSERT_EQ(interface_->spdy_version(), SPDY3);
|
| -
|
| - interface_->ResetForNewConnection();
|
| - interface_->CreateFramer(SPDY4);
|
| - ASSERT_TRUE(interface_->spdy_framer() != NULL);
|
| - ASSERT_EQ(interface_->spdy_version(), SPDY4);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, PostAcceptHook) {
|
| - interface_->PostAcceptHook();
|
| -
|
| - ASSERT_EQ(1u, connection_->output_list()->size());
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| -
|
| - {
|
| - InSequence s;
|
| - EXPECT_CALL(*spdy_framer_visitor_, OnSettings(false));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0u, 100u));
|
| - }
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, NewStream) {
|
| - // TODO(yhirano): SpdySM::NewStream leads to crash when
|
| - // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER.
|
| - // It should be fixed though I don't know the solution now.
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, AddToOutputOrder) {
|
| - uint32 stream_id = 13;
|
| - MemCacheIter mci;
|
| - mci.stream_id = stream_id;
|
| -
|
| - {
|
| - BalsaHeaders headers;
|
| - std::string filename = "foobar";
|
| - memory_cache_->InsertFile(&headers, filename, "");
|
| - mci.file_data = memory_cache_->GetFileData(filename);
|
| - }
|
| -
|
| - interface_->AddToOutputOrder(mci);
|
| - ASSERT_TRUE(HasStream(stream_id));
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, SendErrorNotFound) {
|
| - uint32 stream_id = 82;
|
| - SpdyHeaderBlock actual_header_block;
|
| - const char* actual_data;
|
| - size_t actual_size;
|
| - testing::MockFunction<void(int)> checkpoint; // NOLINT
|
| -
|
| - interface_->SendErrorNotFound(stream_id);
|
| -
|
| - ASSERT_EQ(2u, connection_->output_list()->size());
|
| -
|
| - {
|
| - InSequence s;
|
| - if (GetParam() < SPDY4) {
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnSynReply(stream_id, false, _))
|
| - .WillOnce(SaveArg<2>(&actual_header_block));
|
| - } else {
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnHeaders(stream_id, false, 0, false, _))
|
| - .WillOnce(SaveArg<4>(&actual_header_block));
|
| - }
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnDataFrameHeader(stream_id, _, true));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, _, _, false)).Times(1)
|
| - .WillOnce(DoAll(SaveArg<1>(&actual_data),
|
| - SaveArg<2>(&actual_size)));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, NULL, 0, true)).Times(1);
|
| - }
|
| -
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - checkpoint.Call(0);
|
| - df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| -
|
| - ASSERT_EQ(2, spdy_framer_->frames_received());
|
| - ASSERT_EQ(2u, actual_header_block.size());
|
| - ASSERT_EQ("404 Not Found", actual_header_block[":status"]);
|
| - ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]);
|
| - ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size));
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, SendSynStream) {
|
| - uint32 stream_id = 82;
|
| - BalsaHeaders headers;
|
| - SpdyHeaderBlock actual_header_block;
|
| - headers.AppendHeader("key1", "value1");
|
| - headers.AppendHeader("Host", "www.example.com");
|
| - headers.SetRequestFirstlineFromStringPieces("GET", "/path", "HTTP/1.1");
|
| -
|
| - interface_->SendSynStream(stream_id, headers);
|
| -
|
| - ASSERT_EQ(1u, connection_->output_list()->size());
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| -
|
| - {
|
| - InSequence s;
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnSynStream(stream_id, 0, _, false, false, _))
|
| - .WillOnce(SaveArg<5>(&actual_header_block));
|
| - }
|
| -
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ(1, spdy_framer_->frames_received());
|
| - ASSERT_EQ(5u, actual_header_block.size());
|
| - ASSERT_EQ("GET", actual_header_block[":method"]);
|
| - ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]);
|
| - ASSERT_EQ("/path", actual_header_block[":path"]);
|
| - ASSERT_EQ("www.example.com", actual_header_block[":host"]);
|
| - ASSERT_EQ("value1", actual_header_block["key1"]);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, SendSynReply) {
|
| - uint32 stream_id = 82;
|
| - BalsaHeaders headers;
|
| - SpdyHeaderBlock actual_header_block;
|
| - headers.AppendHeader("key1", "value1");
|
| - headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK");
|
| -
|
| - interface_->SendSynReply(stream_id, headers);
|
| -
|
| - ASSERT_EQ(1u, connection_->output_list()->size());
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| -
|
| - {
|
| - InSequence s;
|
| - if (GetParam() < SPDY4) {
|
| - EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _))
|
| - .WillOnce(SaveArg<2>(&actual_header_block));
|
| - } else {
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnHeaders(stream_id, false, 0, false, _))
|
| - .WillOnce(SaveArg<4>(&actual_header_block));
|
| - }
|
| - }
|
| -
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ(1, spdy_framer_->frames_received());
|
| - ASSERT_EQ(3u, actual_header_block.size());
|
| - ASSERT_EQ("200 OK", actual_header_block[":status"]);
|
| - ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]);
|
| - ASSERT_EQ("value1", actual_header_block["key1"]);
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, SendDataFrame) {
|
| - uint32 stream_id = 133;
|
| - SpdyDataFlags flags = DATA_FLAG_NONE;
|
| - const char* actual_data;
|
| - size_t actual_size;
|
| -
|
| - interface_->SendDataFrame(stream_id, "hello", 5, flags, true);
|
| -
|
| - ASSERT_EQ(1u, connection_->output_list()->size());
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| -
|
| - {
|
| - InSequence s;
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnDataFrameHeader(stream_id, _, false));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, _, _, false))
|
| - .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size)));
|
| - }
|
| -
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ(1, spdy_framer_->frames_received());
|
| - ASSERT_EQ("hello", StringPiece(actual_data, actual_size));
|
| -}
|
| -
|
| -TEST_P(SpdySMProxyTest, SendLongDataFrame) {
|
| - uint32 stream_id = 133;
|
| - SpdyDataFlags flags = DATA_FLAG_NONE;
|
| - const char* actual_data;
|
| - size_t actual_size;
|
| -
|
| - std::string data = std::string(kSpdySegmentSize, 'a') +
|
| - std::string(kSpdySegmentSize, 'b') + "c";
|
| - interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true);
|
| -
|
| - {
|
| - InSequence s;
|
| - for (int i = 0; i < 3; ++i) {
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnDataFrameHeader(stream_id, _, false));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, _, _, false))
|
| - .WillOnce(DoAll(SaveArg<1>(&actual_data),
|
| - SaveArg<2>(&actual_size)));
|
| - }
|
| - }
|
| -
|
| - ASSERT_EQ(3u, connection_->output_list()->size());
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ(std::string(kSpdySegmentSize, 'a'),
|
| - StringPiece(actual_data, actual_size));
|
| -
|
| - df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ(std::string(kSpdySegmentSize, 'b'),
|
| - StringPiece(actual_data, actual_size));
|
| -
|
| - df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - ASSERT_EQ("c", StringPiece(actual_data, actual_size));
|
| -}
|
| -
|
| -TEST_P(SpdySMServerTest, OnSynStream) {
|
| - BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
|
| - uint32 stream_id = 82;
|
| - SpdyHeaderBlock spdy_headers;
|
| - spdy_headers["url"] = "http://www.example.com/path";
|
| - spdy_headers["method"] = "GET";
|
| - spdy_headers["scheme"] = "http";
|
| - spdy_headers["version"] = "HTTP/1.1";
|
| -
|
| - {
|
| - BalsaHeaders headers;
|
| - memory_cache_->InsertFile(&headers, "GET_/path", "");
|
| - }
|
| - visitor->OnSynStream(stream_id, 0, 0, true, true, spdy_headers);
|
| - ASSERT_TRUE(HasStream(stream_id));
|
| -}
|
| -
|
| -TEST_P(SpdySMServerTest, NewStream) {
|
| - uint32 stream_id = 13;
|
| - std::string filename = "foobar";
|
| -
|
| - {
|
| - BalsaHeaders headers;
|
| - memory_cache_->InsertFile(&headers, filename, "");
|
| - }
|
| -
|
| - interface_->NewStream(stream_id, 0, filename);
|
| - ASSERT_TRUE(HasStream(stream_id));
|
| -}
|
| -
|
| -TEST_P(SpdySMServerTest, NewStreamError) {
|
| - uint32 stream_id = 82;
|
| - SpdyHeaderBlock actual_header_block;
|
| - const char* actual_data;
|
| - size_t actual_size;
|
| - testing::MockFunction<void(int)> checkpoint; // NOLINT
|
| -
|
| - interface_->NewStream(stream_id, 0, "nonexistingfile");
|
| -
|
| - ASSERT_EQ(2u, connection_->output_list()->size());
|
| -
|
| - {
|
| - InSequence s;
|
| - if (GetParam() < SPDY4) {
|
| - EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _))
|
| - .WillOnce(SaveArg<2>(&actual_header_block));
|
| - } else {
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnHeaders(stream_id, false, 0, false, _))
|
| - .WillOnce(SaveArg<4>(&actual_header_block));
|
| - }
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnDataFrameHeader(stream_id, _, true));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, _, _, false)).Times(1)
|
| - .WillOnce(DoAll(SaveArg<1>(&actual_data),
|
| - SaveArg<2>(&actual_size)));
|
| - EXPECT_CALL(*spdy_framer_visitor_,
|
| - OnStreamFrameData(stream_id, NULL, 0, true)).Times(1);
|
| - }
|
| -
|
| - std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
|
| - DataFrame* df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| - checkpoint.Call(0);
|
| - df = *i++;
|
| - spdy_framer_->ProcessInput(df->data, df->size);
|
| -
|
| - ASSERT_EQ(2, spdy_framer_->frames_received());
|
| - ASSERT_EQ(2u, actual_header_block.size());
|
| - ASSERT_EQ("404 Not Found", actual_header_block["status"]);
|
| - ASSERT_EQ("HTTP/1.1", actual_header_block["version"]);
|
| - ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace net
|
|
|