| Index: net/spdy/buffered_spdy_framer_unittest.cc
|
| diff --git a/net/spdy/buffered_spdy_framer_unittest.cc b/net/spdy/buffered_spdy_framer_unittest.cc
|
| deleted file mode 100644
|
| index 5304f08506e5677b03a9b3ae2ec71789ae4067f2..0000000000000000000000000000000000000000
|
| --- a/net/spdy/buffered_spdy_framer_unittest.cc
|
| +++ /dev/null
|
| @@ -1,338 +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 "net/spdy/buffered_spdy_framer.h"
|
| -
|
| -#include "net/spdy/spdy_test_util_common.h"
|
| -#include "testing/platform_test.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
|
| - public:
|
| - explicit TestBufferedSpdyVisitor(SpdyMajorVersion spdy_version)
|
| - : buffered_spdy_framer_(spdy_version, true),
|
| - error_count_(0),
|
| - setting_count_(0),
|
| - syn_frame_count_(0),
|
| - syn_reply_frame_count_(0),
|
| - headers_frame_count_(0),
|
| - push_promise_frame_count_(0),
|
| - header_stream_id_(static_cast<SpdyStreamId>(-1)),
|
| - promised_stream_id_(static_cast<SpdyStreamId>(-1)) {
|
| - }
|
| -
|
| - void OnError(SpdyFramer::SpdyError error_code) override {
|
| - LOG(INFO) << "SpdyFramer Error: " << error_code;
|
| - error_count_++;
|
| - }
|
| -
|
| - void OnStreamError(SpdyStreamId stream_id,
|
| - const std::string& description) override {
|
| - LOG(INFO) << "SpdyFramer Error on stream: " << stream_id << " "
|
| - << description;
|
| - error_count_++;
|
| - }
|
| -
|
| - void OnSynStream(SpdyStreamId stream_id,
|
| - SpdyStreamId associated_stream_id,
|
| - SpdyPriority priority,
|
| - bool fin,
|
| - bool unidirectional,
|
| - const SpdyHeaderBlock& headers) override {
|
| - header_stream_id_ = stream_id;
|
| - EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
|
| - syn_frame_count_++;
|
| - headers_ = headers;
|
| - }
|
| -
|
| - void OnSynReply(SpdyStreamId stream_id,
|
| - bool fin,
|
| - const SpdyHeaderBlock& headers) override {
|
| - header_stream_id_ = stream_id;
|
| - EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
|
| - syn_reply_frame_count_++;
|
| - headers_ = headers;
|
| - }
|
| -
|
| - void OnHeaders(SpdyStreamId stream_id,
|
| - bool has_priority,
|
| - SpdyPriority priority,
|
| - bool fin,
|
| - const SpdyHeaderBlock& headers) override {
|
| - header_stream_id_ = stream_id;
|
| - EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
|
| - headers_frame_count_++;
|
| - headers_ = headers;
|
| - }
|
| -
|
| - void OnDataFrameHeader(SpdyStreamId stream_id,
|
| - size_t length,
|
| - bool fin) override {
|
| - ADD_FAILURE() << "Unexpected OnDataFrameHeader call.";
|
| - }
|
| -
|
| - void OnStreamFrameData(SpdyStreamId stream_id,
|
| - const char* data,
|
| - size_t len,
|
| - bool fin) override {
|
| - LOG(FATAL) << "Unexpected OnStreamFrameData call.";
|
| - }
|
| -
|
| - void OnSettings(bool clear_persisted) override {}
|
| -
|
| - void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override {
|
| - setting_count_++;
|
| - }
|
| -
|
| - void OnPing(SpdyPingId unique_id, bool is_ack) override {}
|
| -
|
| - void OnRstStream(SpdyStreamId stream_id,
|
| - SpdyRstStreamStatus status) override {}
|
| -
|
| - void OnGoAway(SpdyStreamId last_accepted_stream_id,
|
| - SpdyGoAwayStatus status) override {}
|
| -
|
| - bool OnCredentialFrameData(const char*, size_t) {
|
| - LOG(FATAL) << "Unexpected OnCredentialFrameData call.";
|
| - return false;
|
| - }
|
| -
|
| - void OnDataFrameHeader(const SpdyFrame* frame) {
|
| - LOG(FATAL) << "Unexpected OnDataFrameHeader call.";
|
| - }
|
| -
|
| - void OnRstStream(const SpdyFrame& frame) {}
|
| - void OnGoAway(const SpdyFrame& frame) {}
|
| - void OnPing(const SpdyFrame& frame) {}
|
| - void OnWindowUpdate(SpdyStreamId stream_id,
|
| - uint32 delta_window_size) override {}
|
| -
|
| - void OnPushPromise(SpdyStreamId stream_id,
|
| - SpdyStreamId promised_stream_id,
|
| - const SpdyHeaderBlock& headers) override {
|
| - header_stream_id_ = stream_id;
|
| - EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
|
| - push_promise_frame_count_++;
|
| - promised_stream_id_ = promised_stream_id;
|
| - EXPECT_NE(promised_stream_id_, SpdyFramer::kInvalidStream);
|
| - headers_ = headers;
|
| - }
|
| -
|
| - bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override {
|
| - return true;
|
| - }
|
| -
|
| - void OnCredential(const SpdyFrame& frame) {}
|
| -
|
| - // Convenience function which runs a framer simulation with particular input.
|
| - void SimulateInFramer(const unsigned char* input, size_t size) {
|
| - buffered_spdy_framer_.set_visitor(this);
|
| - size_t input_remaining = size;
|
| - const char* input_ptr = reinterpret_cast<const char*>(input);
|
| - while (input_remaining > 0 &&
|
| - buffered_spdy_framer_.error_code() == SpdyFramer::SPDY_NO_ERROR) {
|
| - // To make the tests more interesting, we feed random (amd small) chunks
|
| - // into the framer. This simulates getting strange-sized reads from
|
| - // the socket.
|
| - const size_t kMaxReadSize = 32;
|
| - size_t bytes_read =
|
| - (rand() % std::min(input_remaining, kMaxReadSize)) + 1;
|
| - size_t bytes_processed =
|
| - buffered_spdy_framer_.ProcessInput(input_ptr, bytes_read);
|
| - input_remaining -= bytes_processed;
|
| - input_ptr += bytes_processed;
|
| - }
|
| - }
|
| -
|
| - BufferedSpdyFramer buffered_spdy_framer_;
|
| -
|
| - // Counters from the visitor callbacks.
|
| - int error_count_;
|
| - int setting_count_;
|
| - int syn_frame_count_;
|
| - int syn_reply_frame_count_;
|
| - int headers_frame_count_;
|
| - int push_promise_frame_count_;
|
| -
|
| - // Header block streaming state:
|
| - SpdyStreamId header_stream_id_;
|
| - SpdyStreamId promised_stream_id_;
|
| -
|
| - // Headers from OnSyn, OnSynReply, OnHeaders and OnPushPromise for
|
| - // verification.
|
| - SpdyHeaderBlock headers_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class BufferedSpdyFramerTest
|
| - : public PlatformTest,
|
| - public ::testing::WithParamInterface<NextProto> {
|
| - protected:
|
| - // Returns true if the two header blocks have equivalent content.
|
| - bool CompareHeaderBlocks(const SpdyHeaderBlock* expected,
|
| - const SpdyHeaderBlock* actual) {
|
| - if (expected->size() != actual->size()) {
|
| - LOG(ERROR) << "Expected " << expected->size() << " headers; actually got "
|
| - << actual->size() << ".";
|
| - return false;
|
| - }
|
| - for (SpdyHeaderBlock::const_iterator it = expected->begin();
|
| - it != expected->end();
|
| - ++it) {
|
| - SpdyHeaderBlock::const_iterator it2 = actual->find(it->first);
|
| - if (it2 == actual->end()) {
|
| - LOG(ERROR) << "Expected header name '" << it->first << "'.";
|
| - return false;
|
| - }
|
| - if (it->second.compare(it2->second) != 0) {
|
| - LOG(ERROR) << "Expected header named '" << it->first
|
| - << "' to have a value of '" << it->second
|
| - << "'. The actual value received was '" << it2->second
|
| - << "'.";
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - SpdyMajorVersion spdy_version() {
|
| - return NextProtoToSpdyMajorVersion(GetParam());
|
| - }
|
| -};
|
| -
|
| -INSTANTIATE_TEST_CASE_P(
|
| - NextProto,
|
| - BufferedSpdyFramerTest,
|
| - testing::Values(kProtoSPDY31, kProtoSPDY4_14, kProtoSPDY4_15));
|
| -
|
| -TEST_P(BufferedSpdyFramerTest, OnSetting) {
|
| - SpdyFramer framer(spdy_version());
|
| - SpdySettingsIR settings_ir;
|
| - settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, false, false, 2);
|
| - settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, false, false, 3);
|
| - scoped_ptr<SpdyFrame> control_frame(framer.SerializeSettings(settings_ir));
|
| - TestBufferedSpdyVisitor visitor(spdy_version());
|
| -
|
| - visitor.SimulateInFramer(
|
| - reinterpret_cast<unsigned char*>(control_frame->data()),
|
| - control_frame->size());
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(2, visitor.setting_count_);
|
| -}
|
| -
|
| -TEST_P(BufferedSpdyFramerTest, ReadSynStreamHeaderBlock) {
|
| - if (spdy_version() > SPDY3) {
|
| - // SYN_STREAM not supported in SPDY>3.
|
| - return;
|
| - }
|
| - SpdyHeaderBlock headers;
|
| - headers["aa"] = "vv";
|
| - headers["bb"] = "ww";
|
| - BufferedSpdyFramer framer(spdy_version(), true);
|
| - scoped_ptr<SpdyFrame> control_frame(
|
| - framer.CreateSynStream(1, // stream_id
|
| - 0, // associated_stream_id
|
| - 1, // priority
|
| - CONTROL_FLAG_NONE,
|
| - &headers));
|
| - EXPECT_TRUE(control_frame.get() != NULL);
|
| -
|
| - TestBufferedSpdyVisitor visitor(spdy_version());
|
| - visitor.SimulateInFramer(
|
| - reinterpret_cast<unsigned char*>(control_frame.get()->data()),
|
| - control_frame.get()->size());
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.syn_frame_count_);
|
| - EXPECT_EQ(0, visitor.syn_reply_frame_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| - EXPECT_EQ(0, visitor.push_promise_frame_count_);
|
| - EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
|
| -}
|
| -
|
| -TEST_P(BufferedSpdyFramerTest, ReadSynReplyHeaderBlock) {
|
| - if (spdy_version() > SPDY3) {
|
| - // SYN_REPLY not supported in SPDY>3.
|
| - return;
|
| - }
|
| - SpdyHeaderBlock headers;
|
| - headers["alpha"] = "beta";
|
| - headers["gamma"] = "delta";
|
| - BufferedSpdyFramer framer(spdy_version(), true);
|
| - scoped_ptr<SpdyFrame> control_frame(
|
| - framer.CreateSynReply(1, // stream_id
|
| - CONTROL_FLAG_NONE,
|
| - &headers));
|
| - EXPECT_TRUE(control_frame.get() != NULL);
|
| -
|
| - TestBufferedSpdyVisitor visitor(spdy_version());
|
| - visitor.SimulateInFramer(
|
| - reinterpret_cast<unsigned char*>(control_frame.get()->data()),
|
| - control_frame.get()->size());
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.syn_frame_count_);
|
| - EXPECT_EQ(0, visitor.push_promise_frame_count_);
|
| - if (spdy_version() < SPDY4) {
|
| - EXPECT_EQ(1, visitor.syn_reply_frame_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| - } else {
|
| - EXPECT_EQ(0, visitor.syn_reply_frame_count_);
|
| - EXPECT_EQ(1, visitor.headers_frame_count_);
|
| - }
|
| - EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
|
| -}
|
| -
|
| -TEST_P(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) {
|
| - SpdyHeaderBlock headers;
|
| - headers["alpha"] = "beta";
|
| - headers["gamma"] = "delta";
|
| - BufferedSpdyFramer framer(spdy_version(), true);
|
| - scoped_ptr<SpdyFrame> control_frame(
|
| - framer.CreateHeaders(1, // stream_id
|
| - CONTROL_FLAG_NONE,
|
| - 0, // priority
|
| - &headers));
|
| - EXPECT_TRUE(control_frame.get() != NULL);
|
| -
|
| - TestBufferedSpdyVisitor visitor(spdy_version());
|
| - visitor.SimulateInFramer(
|
| - reinterpret_cast<unsigned char*>(control_frame.get()->data()),
|
| - control_frame.get()->size());
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.syn_frame_count_);
|
| - EXPECT_EQ(0, visitor.syn_reply_frame_count_);
|
| - EXPECT_EQ(1, visitor.headers_frame_count_);
|
| - EXPECT_EQ(0, visitor.push_promise_frame_count_);
|
| - EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
|
| -}
|
| -
|
| -TEST_P(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) {
|
| - if (spdy_version() < SPDY4)
|
| - return;
|
| - SpdyHeaderBlock headers;
|
| - headers["alpha"] = "beta";
|
| - headers["gamma"] = "delta";
|
| - BufferedSpdyFramer framer(spdy_version(), true);
|
| - scoped_ptr<SpdyFrame> control_frame(
|
| - framer.CreatePushPromise(1, 2, &headers));
|
| - EXPECT_TRUE(control_frame.get() != NULL);
|
| -
|
| - TestBufferedSpdyVisitor visitor(spdy_version());
|
| - visitor.SimulateInFramer(
|
| - reinterpret_cast<unsigned char*>(control_frame.get()->data()),
|
| - control_frame.get()->size());
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.syn_frame_count_);
|
| - EXPECT_EQ(0, visitor.syn_reply_frame_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| - EXPECT_EQ(1, visitor.push_promise_frame_count_);
|
| - EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
|
| - EXPECT_EQ(1u, visitor.header_stream_id_);
|
| - EXPECT_EQ(2u, visitor.promised_stream_id_);
|
| -}
|
| -
|
| -} // namespace net
|
|
|