| 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 770f21c4b110fefd9d21233bd8e78ec9e37df150..0000000000000000000000000000000000000000
|
| --- a/net/spdy/buffered_spdy_framer_unittest.cc
|
| +++ /dev/null
|
| @@ -1,331 +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 <algorithm>
|
| -#include <utility>
|
| -
|
| -#include "base/logging.h"
|
| -#include "net/spdy/spdy_test_util_common.h"
|
| -#include "testing/platform_test.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
|
| - public:
|
| - TestBufferedSpdyVisitor()
|
| - : buffered_spdy_framer_(),
|
| - error_count_(0),
|
| - setting_count_(0),
|
| - headers_frame_count_(0),
|
| - push_promise_frame_count_(0),
|
| - goaway_count_(0),
|
| - altsvc_count_(0),
|
| - header_stream_id_(static_cast<SpdyStreamId>(-1)),
|
| - promised_stream_id_(static_cast<SpdyStreamId>(-1)) {}
|
| -
|
| - void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override {
|
| - VLOG(1) << "SpdyFramer Error: " << spdy_framer_error;
|
| - error_count_++;
|
| - }
|
| -
|
| - void OnStreamError(SpdyStreamId stream_id,
|
| - const SpdyString& description) override {
|
| - VLOG(1) << "SpdyFramer Error on stream: " << stream_id << " "
|
| - << description;
|
| - error_count_++;
|
| - }
|
| -
|
| - void OnHeaders(SpdyStreamId stream_id,
|
| - bool has_priority,
|
| - int weight,
|
| - SpdyStreamId parent_stream_id,
|
| - bool exclusive,
|
| - bool fin,
|
| - SpdyHeaderBlock headers) override {
|
| - header_stream_id_ = stream_id;
|
| - EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
|
| - headers_frame_count_++;
|
| - headers_ = std::move(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) override {
|
| - LOG(FATAL) << "Unexpected OnStreamFrameData call.";
|
| - }
|
| -
|
| - void OnStreamEnd(SpdyStreamId stream_id) override {
|
| - LOG(FATAL) << "Unexpected OnStreamEnd call.";
|
| - }
|
| -
|
| - void OnStreamPadding(SpdyStreamId stream_id, size_t len) override {
|
| - LOG(FATAL) << "Unexpected OnStreamPadding call.";
|
| - }
|
| -
|
| - void OnSettings() override {}
|
| -
|
| - void OnSetting(SpdySettingsIds id, uint32_t value) override {
|
| - setting_count_++;
|
| - }
|
| -
|
| - void OnPing(SpdyPingId unique_id, bool is_ack) override {}
|
| -
|
| - void OnRstStream(SpdyStreamId stream_id, SpdyErrorCode error_code) override {}
|
| -
|
| - void OnGoAway(SpdyStreamId last_accepted_stream_id,
|
| - SpdyErrorCode error_code,
|
| - SpdyStringPiece debug_data) override {
|
| - goaway_count_++;
|
| - goaway_last_accepted_stream_id_ = last_accepted_stream_id;
|
| - goaway_error_code_ = error_code;
|
| - goaway_debug_data_.assign(debug_data.data(), debug_data.size());
|
| - }
|
| -
|
| - void OnDataFrameHeader(const SpdySerializedFrame* frame) {
|
| - LOG(FATAL) << "Unexpected OnDataFrameHeader call.";
|
| - }
|
| -
|
| - void OnRstStream(const SpdySerializedFrame& frame) {}
|
| - void OnGoAway(const SpdySerializedFrame& frame) {}
|
| - void OnPing(const SpdySerializedFrame& frame) {}
|
| - void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {}
|
| -
|
| - void OnPushPromise(SpdyStreamId stream_id,
|
| - SpdyStreamId promised_stream_id,
|
| - 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_ = std::move(headers);
|
| - }
|
| -
|
| - void OnAltSvc(SpdyStreamId stream_id,
|
| - SpdyStringPiece origin,
|
| - const SpdyAltSvcWireFormat::AlternativeServiceVector&
|
| - altsvc_vector) override {
|
| - altsvc_count_++;
|
| - altsvc_stream_id_ = stream_id;
|
| - origin.CopyToString(&altsvc_origin_);
|
| - altsvc_vector_ = altsvc_vector;
|
| - }
|
| -
|
| - bool OnUnknownFrame(SpdyStreamId stream_id, uint8_t frame_type) override {
|
| - return true;
|
| - }
|
| -
|
| - // Convenience function which runs a framer simulation with particular input.
|
| - void SimulateInFramer(const SpdySerializedFrame& frame) {
|
| - const char* input_ptr = frame.data();
|
| - size_t input_remaining = frame.size();
|
| - buffered_spdy_framer_.set_visitor(this);
|
| - while (input_remaining > 0 &&
|
| - buffered_spdy_framer_.spdy_framer_error() ==
|
| - 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 headers_frame_count_;
|
| - int push_promise_frame_count_;
|
| - int goaway_count_;
|
| - int altsvc_count_;
|
| -
|
| - // Header block streaming state:
|
| - SpdyStreamId header_stream_id_;
|
| - SpdyStreamId promised_stream_id_;
|
| -
|
| - // Headers from OnHeaders and OnPushPromise for verification.
|
| - SpdyHeaderBlock headers_;
|
| -
|
| - // OnGoAway parameters.
|
| - SpdyStreamId goaway_last_accepted_stream_id_;
|
| - SpdyErrorCode goaway_error_code_;
|
| - SpdyString goaway_debug_data_;
|
| -
|
| - // OnAltSvc parameters.
|
| - SpdyStreamId altsvc_stream_id_;
|
| - SpdyString altsvc_origin_;
|
| - SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class BufferedSpdyFramerTest : public PlatformTest {};
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, OnSetting) {
|
| - SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| - SpdySettingsIR settings_ir;
|
| - settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 2);
|
| - settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 3);
|
| - SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
|
| - TestBufferedSpdyVisitor visitor;
|
| -
|
| - visitor.SimulateInFramer(control_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(2, visitor.setting_count_);
|
| -}
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) {
|
| - SpdyHeaderBlock headers;
|
| - SpdyString long_header_value(256 * 1024, 'x');
|
| - headers["foo"] = long_header_value;
|
| - SpdyHeadersIR headers_ir(/*stream_id=*/1, std::move(headers));
|
| -
|
| - BufferedSpdyFramer framer;
|
| - SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir);
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(control_frame);
|
| -
|
| - EXPECT_EQ(1, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| - EXPECT_EQ(0, visitor.push_promise_frame_count_);
|
| - EXPECT_EQ(SpdyHeaderBlock(), visitor.headers_);
|
| -}
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, ValidHeadersAfterInvalidHeaders) {
|
| - SpdyHeaderBlock headers;
|
| - headers["invalid"] = "\r\n\r\n";
|
| -
|
| - SpdyHeaderBlock headers2;
|
| - headers["alpha"] = "beta";
|
| -
|
| - SpdyTestUtil spdy_test_util;
|
| - SpdySerializedFrame headers_frame(
|
| - spdy_test_util.ConstructSpdyReply(1, std::move(headers)));
|
| - SpdySerializedFrame headers_frame2(
|
| - spdy_test_util.ConstructSpdyReply(2, std::move(headers2)));
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(headers_frame);
|
| - EXPECT_EQ(1, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| -
|
| - visitor.SimulateInFramer(headers_frame2);
|
| - EXPECT_EQ(1, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.headers_frame_count_);
|
| -}
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) {
|
| - SpdyHeaderBlock headers;
|
| - headers["alpha"] = "beta";
|
| - headers["gamma"] = "delta";
|
| - SpdyHeadersIR headers_ir(/*stream_id=*/1, headers.Clone());
|
| -
|
| - BufferedSpdyFramer framer;
|
| - SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir);
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(control_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.headers_frame_count_);
|
| - EXPECT_EQ(0, visitor.push_promise_frame_count_);
|
| - EXPECT_EQ(headers, visitor.headers_);
|
| -}
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) {
|
| - SpdyHeaderBlock headers;
|
| - headers["alpha"] = "beta";
|
| - headers["gamma"] = "delta";
|
| - BufferedSpdyFramer framer;
|
| - SpdyPushPromiseIR push_promise_ir(/*stream_id=*/1, /*promised_stream_id=*/2,
|
| - headers.Clone());
|
| - SpdySerializedFrame control_frame = framer.SerializeFrame(push_promise_ir);
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(control_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(0, visitor.headers_frame_count_);
|
| - EXPECT_EQ(1, visitor.push_promise_frame_count_);
|
| - EXPECT_EQ(headers, visitor.headers_);
|
| - EXPECT_EQ(1u, visitor.header_stream_id_);
|
| - EXPECT_EQ(2u, visitor.promised_stream_id_);
|
| -}
|
| -
|
| -TEST_F(BufferedSpdyFramerTest, GoAwayDebugData) {
|
| - SpdyGoAwayIR go_ir(/*last_accepted_stream_id=*/2, ERROR_CODE_FRAME_SIZE_ERROR,
|
| - "foo");
|
| - BufferedSpdyFramer framer;
|
| - SpdySerializedFrame goaway_frame = framer.SerializeFrame(go_ir);
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(goaway_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.goaway_count_);
|
| - EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_);
|
| - EXPECT_EQ(ERROR_CODE_FRAME_SIZE_ERROR, visitor.goaway_error_code_);
|
| - EXPECT_EQ("foo", visitor.goaway_debug_data_);
|
| -}
|
| -
|
| -// ALTSVC frame on stream 0 must have an origin.
|
| -TEST_F(BufferedSpdyFramerTest, OnAltSvcOnStreamZero) {
|
| - const SpdyStreamId altsvc_stream_id(0);
|
| - SpdyAltSvcIR altsvc_ir(altsvc_stream_id);
|
| - SpdyAltSvcWireFormat::AlternativeService alternative_service(
|
| - "quic", "alternative.example.org", 443, 86400,
|
| - SpdyAltSvcWireFormat::VersionVector());
|
| - altsvc_ir.add_altsvc(alternative_service);
|
| - const char altsvc_origin[] = "https://www.example.org";
|
| - altsvc_ir.set_origin(altsvc_origin);
|
| - BufferedSpdyFramer framer;
|
| - SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir));
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(altsvc_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.altsvc_count_);
|
| - EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_);
|
| - EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_);
|
| - ASSERT_EQ(1u, visitor.altsvc_vector_.size());
|
| - EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]);
|
| -}
|
| -
|
| -// ALTSVC frame on a non-zero stream must not have an origin.
|
| -TEST_F(BufferedSpdyFramerTest, OnAltSvcOnNonzeroStream) {
|
| - const SpdyStreamId altsvc_stream_id(1);
|
| - SpdyAltSvcIR altsvc_ir(altsvc_stream_id);
|
| - SpdyAltSvcWireFormat::AlternativeService alternative_service(
|
| - "quic", "alternative.example.org", 443, 86400,
|
| - SpdyAltSvcWireFormat::VersionVector());
|
| - altsvc_ir.add_altsvc(alternative_service);
|
| - BufferedSpdyFramer framer;
|
| - SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir));
|
| -
|
| - TestBufferedSpdyVisitor visitor;
|
| - visitor.SimulateInFramer(altsvc_frame);
|
| - EXPECT_EQ(0, visitor.error_count_);
|
| - EXPECT_EQ(1, visitor.altsvc_count_);
|
| - EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_);
|
| - EXPECT_TRUE(visitor.altsvc_origin_.empty());
|
| - ASSERT_EQ(1u, visitor.altsvc_vector_.size());
|
| - EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]);
|
| -}
|
| -
|
| -} // namespace net
|
|
|