| Index: net/spdy/spdy_framer_test.cc
|
| diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc
|
| index 0552ba8dbeb52969e774aa5dd44702028e3e3178..31332bccecd900b8537024cf38729ed3f4f49d30 100644
|
| --- a/net/spdy/spdy_framer_test.cc
|
| +++ b/net/spdy/spdy_framer_test.cc
|
| @@ -21,6 +21,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "net/quic/core/quic_flags.h"
|
| +#include "net/spdy/array_output_buffer.h"
|
| #include "net/spdy/hpack/hpack_constants.h"
|
| #include "net/spdy/mock_spdy_framer_visitor.h"
|
| #include "net/spdy/spdy_flags.h"
|
| @@ -40,6 +41,12 @@ namespace net {
|
|
|
| namespace test {
|
|
|
| +namespace {
|
| +
|
| +const int64_t kSize = 64 * 1024;
|
| +char output_buffer[kSize] = "";
|
| +}
|
| +
|
| class MockDebugVisitor : public SpdyFramerDebugVisitorInterface {
|
| public:
|
| MOCK_METHOD4(OnSendCompressedFrame,
|
| @@ -261,6 +268,31 @@ class SpdyFramerPeer {
|
| EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list));
|
| return serialized_headers_old_version;
|
| }
|
| +
|
| + static SpdySerializedFrame SerializeHeaders(SpdyFramer* framer,
|
| + const SpdyHeadersIR& headers,
|
| + ArrayOutputBuffer* output) {
|
| + if (output == nullptr) {
|
| + return SerializeHeaders(framer, headers);
|
| + }
|
| + output->Reset();
|
| + EXPECT_TRUE(framer->SerializeHeaders(headers, output));
|
| + SpdySerializedFrame serialized_headers_old_version(output->Begin(),
|
| + output->Size(), false);
|
| + framer->hpack_encoder_.reset(nullptr);
|
| + auto* saved_debug_visitor = framer->debug_visitor_;
|
| + framer->debug_visitor_ = nullptr;
|
| +
|
| + std::vector<SpdySerializedFrame> frame_list;
|
| + SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers));
|
| + while (it.HasNextFrame()) {
|
| + frame_list.push_back(it.NextFrame());
|
| + }
|
| + framer->debug_visitor_ = saved_debug_visitor;
|
| +
|
| + EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list));
|
| + return serialized_headers_old_version;
|
| + }
|
| };
|
|
|
| class TestSpdyVisitor : public SpdyFramerVisitorInterface,
|
| @@ -637,9 +669,13 @@ StringPiece GetSerializedHeaders(const SpdySerializedFrame& frame,
|
|
|
| enum DecoderChoice { DECODER_SELF, DECODER_NESTED, DECODER_HTTP2 };
|
| enum HpackChoice { HPACK_DECODER_1, HPACK_DECODER_3 };
|
| +enum Output { USE, NOT_USE };
|
| +
|
| +class SpdyFramerTest : public ::testing::TestWithParam<
|
| + std::tuple<DecoderChoice, HpackChoice, Output>> {
|
| + public:
|
| + SpdyFramerTest() : output_(output_buffer, kSize) {}
|
|
|
| -class SpdyFramerTest
|
| - : public ::testing::TestWithParam<std::tuple<DecoderChoice, HpackChoice>> {
|
| protected:
|
| void SetUp() override {
|
| auto param = GetParam();
|
| @@ -665,6 +701,16 @@ class SpdyFramerTest
|
| FLAGS_chromium_http2_flag_spdy_use_hpack_decoder3 = true;
|
| break;
|
| }
|
| + switch (std::get<2>(param)) {
|
| + case USE:
|
| + use_output_ = true;
|
| + break;
|
| + case NOT_USE:
|
| + // TODO(yasong): remove this case after
|
| + // FLAGS_chromium_http2_flag_remove_rewritelength deprecates.
|
| + use_output_ = false;
|
| + break;
|
| + }
|
| }
|
|
|
| void CompareFrame(const string& description,
|
| @@ -687,6 +733,9 @@ class SpdyFramerTest
|
| reinterpret_cast<const unsigned char*>(actual_frame.data()),
|
| actual_frame.size());
|
| }
|
| +
|
| + bool use_output_ = false;
|
| + ArrayOutputBuffer output_;
|
| };
|
|
|
| INSTANTIATE_TEST_CASE_P(SpdyFramerTests,
|
| @@ -695,7 +744,8 @@ INSTANTIATE_TEST_CASE_P(SpdyFramerTests,
|
| DECODER_NESTED,
|
| DECODER_HTTP2),
|
| ::testing::Values(HPACK_DECODER_1,
|
| - HPACK_DECODER_3)));
|
| + HPACK_DECODER_3),
|
| + ::testing::Values(USE, NOT_USE)));
|
|
|
| // Test that we can encode and decode a SpdyHeaderBlock in serialized form.
|
| TEST_P(SpdyFramerTest, HeaderBlockInBuffer) {
|
| @@ -706,7 +756,8 @@ TEST_P(SpdyFramerTest, HeaderBlockInBuffer) {
|
| headers.SetHeader("alpha", "beta");
|
| headers.SetHeader("gamma", "charlie");
|
| headers.SetHeader("cookie", "key1=value1; key2=value2");
|
| - SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
|
| @@ -724,7 +775,8 @@ TEST_P(SpdyFramerTest, UndersizedHeaderBlockInBuffer) {
|
| SpdyHeadersIR headers(1);
|
| headers.SetHeader("alpha", "beta");
|
| headers.SetHeader("gamma", "charlie");
|
| - SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
|
| @@ -781,8 +833,8 @@ TEST_P(SpdyFramerTest, HeaderStreamDependencyValues) {
|
| headers.set_has_priority(true);
|
| headers.set_parent_stream_id(parent_stream_id);
|
| headers.set_exclusive(exclusive);
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
|
| @@ -1003,7 +1055,8 @@ TEST_P(SpdyFramerTest, HeadersWithStreamIdZero) {
|
|
|
| SpdyHeadersIR headers(0);
|
| headers.SetHeader("alpha", "beta");
|
| - SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| // We shouldn't have to read the whole frame before we signal an error.
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| @@ -1022,6 +1075,10 @@ TEST_P(SpdyFramerTest, PriorityWithStreamIdZero) {
|
|
|
| SpdyPriorityIR priority_ir(0, 1, 16, true);
|
| SpdySerializedFrame frame(framer.SerializeFrame(priority_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| // We shouldn't have to read the whole frame before we signal an error.
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| @@ -1040,6 +1097,10 @@ TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) {
|
|
|
| SpdyRstStreamIR rst_stream_ir(0, ERROR_CODE_PROTOCOL_ERROR);
|
| SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeRstStream(rst_stream_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| // We shouldn't have to read the whole frame before we signal an error.
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| @@ -1117,6 +1178,10 @@ TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) {
|
| continuation.take_encoding(std::move(some_nonsense_encoding));
|
| continuation.set_end_headers(true);
|
| SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| // We shouldn't have to read the whole frame before we signal an error.
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| @@ -1136,6 +1201,10 @@ TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) {
|
| SpdyPushPromiseIR push_promise(0, 4);
|
| push_promise.SetHeader("alpha", "beta");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| // We shouldn't have to read the whole frame before we signal an error.
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| @@ -1155,6 +1224,10 @@ TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) {
|
| SpdyPushPromiseIR push_promise(3, 0);
|
| push_promise.SetHeader("alpha", "beta");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
|
| framer.ProcessInput(frame.data(), frame.size());
|
| @@ -1401,8 +1474,8 @@ TEST_P(SpdyFramerTest, UnclosedStreamDataCompressorsOneByteAtATime) {
|
| SpdyHeadersIR headers(1);
|
| headers.SetHeader(kHeader1, kValue1);
|
| headers.SetHeader(kHeader2, kValue2);
|
| - SpdySerializedFrame headers_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame headers_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| const char bytes[] = "this is a test test test test test!";
|
| SpdyDataIR data_ir(1, StringPiece(bytes, arraysize(bytes)));
|
| @@ -1434,8 +1507,12 @@ TEST_P(SpdyFramerTest, UnclosedStreamDataCompressorsOneByteAtATime) {
|
|
|
| TEST_P(SpdyFramerTest, WindowUpdateFrame) {
|
| SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| - SpdySerializedFrame frame(
|
| - framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 0x12345678)));
|
| + SpdyWindowUpdateIR window_update(1, 0x12345678);
|
| + SpdySerializedFrame frame(framer.SerializeWindowUpdate(window_update));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeWindowUpdate(window_update, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| const char kDescription[] = "WINDOW_UPDATE frame, stream 1, delta 0x12345678";
|
| const unsigned char kH2FrameData[] = {
|
| @@ -1665,6 +1742,10 @@ TEST_P(SpdyFramerTest, CreateRstStream) {
|
| };
|
| SpdyRstStreamIR rst_stream(1, ERROR_CODE_PROTOCOL_ERROR);
|
| SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1679,6 +1760,11 @@ TEST_P(SpdyFramerTest, CreateRstStream) {
|
| };
|
| SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_PROTOCOL_ERROR);
|
| SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1693,6 +1779,11 @@ TEST_P(SpdyFramerTest, CreateRstStream) {
|
| };
|
| SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_INTERNAL_ERROR);
|
| SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| }
|
| @@ -1719,6 +1810,10 @@ TEST_P(SpdyFramerTest, CreateSettings) {
|
| settings_ir.AddSetting(kId, kValue);
|
|
|
| SpdySerializedFrame frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1748,6 +1843,11 @@ TEST_P(SpdyFramerTest, CreateSettings) {
|
| settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 7);
|
| settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 8);
|
| SpdySerializedFrame frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| @@ -1763,6 +1863,12 @@ TEST_P(SpdyFramerTest, CreateSettings) {
|
| };
|
| SpdySettingsIR settings_ir;
|
| SpdySerializedFrame frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| +
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| }
|
| @@ -1794,11 +1900,20 @@ TEST_P(SpdyFramerTest, CreatePingFrame) {
|
| // Tests SpdyPingIR when the ping is not an ack.
|
| ASSERT_FALSE(ping_ir.is_ack());
|
| frame = framer.SerializePing(ping_ir);
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePing(ping_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
|
|
| // Tests SpdyPingIR when the ping is an ack.
|
| ping_ir.set_is_ack(true);
|
| frame = framer.SerializePing(ping_ir);
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializePing(ping_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameDataWithAck,
|
| arraysize(kH2FrameDataWithAck));
|
| }
|
| @@ -1820,6 +1935,10 @@ TEST_P(SpdyFramerTest, CreateGoAway) {
|
| };
|
| SpdyGoAwayIR goaway_ir(0, ERROR_CODE_NO_ERROR, "GA");
|
| SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeGoAway(goaway_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1836,6 +1955,11 @@ TEST_P(SpdyFramerTest, CreateGoAway) {
|
| };
|
| SpdyGoAwayIR goaway_ir(0x7FFFFFFF, ERROR_CODE_INTERNAL_ERROR, "GA");
|
| SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeGoAway(goaway_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| }
|
| @@ -1869,8 +1993,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| SpdyHeadersIR headers(1);
|
| headers.SetHeader("bar", "foo");
|
| headers.SetHeader("foo", "bar");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1900,8 +2024,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers.set_fin(true);
|
| headers.SetHeader("", "foo");
|
| headers.SetHeader("foo", "bar");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1931,8 +2055,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers_ir.set_fin(true);
|
| headers_ir.SetHeader("bar", "foo");
|
| headers_ir.SetHeader("foo", "");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -1967,8 +2091,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers_ir.set_weight(220);
|
| headers_ir.SetHeader("bar", "foo");
|
| headers_ir.SetHeader("foo", "");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -2006,8 +2130,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers_ir.set_parent_stream_id(0);
|
| headers_ir.SetHeader("bar", "foo");
|
| headers_ir.SetHeader("foo", "");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kV4FrameData, arraysize(kV4FrameData));
|
| }
|
|
|
| @@ -2045,8 +2169,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers_ir.set_parent_stream_id(0x7fffffff);
|
| headers_ir.SetHeader("bar", "foo");
|
| headers_ir.SetHeader("foo", "");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kV4FrameData, arraysize(kV4FrameData));
|
| }
|
|
|
| @@ -2082,8 +2206,8 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
|
| headers_ir.SetHeader("", "foo");
|
| headers_ir.SetHeader("foo", "bar");
|
| headers_ir.set_padding_len(6);
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| }
|
| @@ -2098,8 +2222,8 @@ TEST_P(SpdyFramerTest, CreateHeadersCompressed) {
|
| SpdyHeadersIR headers_ir(1);
|
| headers_ir.SetHeader("bar", "foo");
|
| headers_ir.SetHeader("foo", "bar");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| // Deflate compression doesn't apply to HPACK.
|
| }
|
| }
|
| @@ -2119,6 +2243,12 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) {
|
| };
|
| SpdySerializedFrame frame(
|
| framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 1)));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(
|
| + framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 1), &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -2133,6 +2263,12 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) {
|
| };
|
| SpdySerializedFrame frame(
|
| framer.SerializeWindowUpdate(SpdyWindowUpdateIR(0x7FFFFFFF, 1)));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeWindowUpdate(
|
| + SpdyWindowUpdateIR(0x7FFFFFFF, 1), &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
|
|
| @@ -2147,6 +2283,12 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) {
|
| };
|
| SpdySerializedFrame frame(
|
| framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 0x7FFFFFFF)));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeWindowUpdate(
|
| + SpdyWindowUpdateIR(1, 0x7FFFFFFF), &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
|
| }
|
| }
|
| @@ -2164,6 +2306,10 @@ TEST_P(SpdyFramerTest, SerializeBlocked) {
|
| };
|
| SpdyBlockedIR blocked_ir(0);
|
| SpdySerializedFrame frame(framer.SerializeFrame(blocked_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeFrame(blocked_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2175,6 +2321,11 @@ TEST_P(SpdyFramerTest, CreateBlocked) {
|
|
|
| SpdySerializedFrame frame_serialized(
|
| framer.SerializeBlocked(SpdyBlockedIR(kStreamId)));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeBlocked(SpdyBlockedIR(kStreamId), &output_));
|
| + frame_serialized =
|
| + SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SpdyBlockedIR blocked_ir(kStreamId);
|
| SpdySerializedFrame frame_created(framer.SerializeFrame(blocked_ir));
|
|
|
| @@ -2213,6 +2364,10 @@ TEST_P(SpdyFramerTest, CreatePushPromiseUncompressed) {
|
| push_promise.SetHeader("bar", "foo");
|
| push_promise.SetHeader("foo", "bar");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2249,6 +2404,11 @@ TEST_P(SpdyFramerTest, CreatePushPromiseUncompressed) {
|
| push_promise.SetHeader("bar", "foo");
|
| push_promise.SetHeader("foo", "bar");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2305,6 +2465,11 @@ TEST_P(SpdyFramerTest, CreatePushPromiseUncompressed) {
|
| push_promise.SetHeader("bar", "foo");
|
| push_promise.SetHeader("foo", "bar");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
| }
|
| @@ -2360,6 +2525,10 @@ TEST_P(SpdyFramerTest, CreateContinuationUncompressed) {
|
| continuation.set_end_headers(true);
|
|
|
| SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2464,6 +2633,10 @@ TEST_P(SpdyFramerTest, CreatePushPromiseThenContinuationUncompressed) {
|
| string big_value(TestSpdyVisitor::sent_control_frame_max_size(), 'x');
|
| push_promise.SetHeader("xxx", big_value);
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
|
|
| // The entire frame should look like below:
|
| // Name Length in Byte
|
| @@ -2522,6 +2695,10 @@ TEST_P(SpdyFramerTest, CreateAltSvc) {
|
| "p\"=i:d", "h_\\o\"st", 123, 42,
|
| SpdyAltSvcWireFormat::VersionVector{24}));
|
| SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2539,12 +2716,22 @@ TEST_P(SpdyFramerTest, CreatePriority) {
|
| };
|
| SpdyPriorityIR priority_ir(2, 1, 17, true);
|
| SpdySerializedFrame frame(framer.SerializeFrame(priority_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| SpdyPriorityIR priority2(2);
|
| priority2.set_parent_stream_id(1);
|
| priority2.set_weight(17);
|
| priority2.set_exclusive(true);
|
| - frame = framer.SerializeFrame(priority2);
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeFrame(priority2, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + } else {
|
| + frame = framer.SerializeFrame(priority2);
|
| + }
|
| CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
|
| }
|
|
|
| @@ -2553,8 +2740,8 @@ TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) {
|
| SpdyHeadersIR headers_ir(1);
|
| headers_ir.SetHeader("alpha", "beta");
|
| headers_ir.SetHeader("gamma", "delta");
|
| - SpdySerializedFrame control_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame control_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
|
| visitor.SimulateInFramer(
|
| reinterpret_cast<unsigned char*>(control_frame.data()),
|
| @@ -2572,8 +2759,8 @@ TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlockWithHalfClose) {
|
| headers_ir.set_fin(true);
|
| headers_ir.SetHeader("alpha", "beta");
|
| headers_ir.SetHeader("gamma", "delta");
|
| - SpdySerializedFrame control_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame control_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
|
| visitor.SimulateInFramer(
|
| reinterpret_cast<unsigned char*>(control_frame.data()),
|
| @@ -2595,8 +2782,8 @@ TEST_P(SpdyFramerTest, TooLargeHeadersFrameUsesContinuation) {
|
| const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size();
|
| string big_value(kBigValueSize, 'x');
|
| headers.SetHeader("aa", big_value);
|
| - SpdySerializedFrame control_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame control_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
| EXPECT_GT(control_frame.size(),
|
| TestSpdyVisitor::sent_control_frame_max_size());
|
|
|
| @@ -2683,6 +2870,10 @@ TEST_P(SpdyFramerTest, TooLargePushPromiseFrameUsesContinuation) {
|
| string big_value(kBigValueSize, 'x');
|
| push_promise.SetHeader("aa", big_value);
|
| SpdySerializedFrame control_frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| EXPECT_GT(control_frame.size(),
|
| TestSpdyVisitor::sent_control_frame_max_size());
|
|
|
| @@ -2710,8 +2901,8 @@ TEST_P(SpdyFramerTest, ControlFrameMuchTooLarge) {
|
| SpdyHeadersIR headers(1);
|
| headers.set_fin(true);
|
| headers.SetHeader("aa", big_value);
|
| - SpdySerializedFrame control_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame control_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
| TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
|
| visitor.set_header_buffer_size(kHeaderBufferSize);
|
| visitor.SimulateInFramer(
|
| @@ -2765,6 +2956,10 @@ TEST_P(SpdyFramerTest, ReadZeroLenSettingsFrame) {
|
| SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| SpdySettingsIR settings_ir;
|
| SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SetFrameLength(&control_frame, 0);
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| visitor.SimulateInFramer(
|
| @@ -2786,6 +2981,10 @@ TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) {
|
| settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0x00000002);
|
| settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0x00000002);
|
| SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| const size_t kNewLength = 8;
|
| SetFrameLength(&control_frame, kNewLength);
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| @@ -2810,6 +3009,11 @@ TEST_P(SpdyFramerTest, ReadLargeSettingsFrame) {
|
| settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 7);
|
|
|
| SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| +
|
| EXPECT_LT(SpdyFramerPeer::ControlFrameBufferSize(), control_frame.size());
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
|
|
| @@ -3021,6 +3225,11 @@ TEST_P(SpdyFramerTest, ReadWindowUpdate) {
|
| SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| SpdySerializedFrame control_frame(
|
| framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 2)));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(
|
| + framer.SerializeWindowUpdate(SpdyWindowUpdateIR(1, 2), &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
|
| visitor.SimulateInFramer(
|
| reinterpret_cast<unsigned char*>(control_frame.data()),
|
| @@ -3035,6 +3244,12 @@ TEST_P(SpdyFramerTest, ReadCompressedPushPromise) {
|
| push_promise.SetHeader("foo", "bar");
|
| push_promise.SetHeader("bar", "foofoo");
|
| SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
|
| + if (use_output_) {
|
| + // Use a new framer to clean up the hpack dynamic table.
|
| + SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| + ASSERT_TRUE(framer.SerializePushPromise(push_promise, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
|
| visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
|
| frame.size());
|
| @@ -3460,6 +3675,10 @@ TEST_P(SpdyFramerTest, ReadUnknownExtensionFrame) {
|
| SpdySettingsIR settings_ir;
|
| settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10);
|
| SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| visitor.SimulateInFramer(
|
| reinterpret_cast<unsigned char*>(control_frame.data()),
|
| control_frame.size());
|
| @@ -3669,6 +3888,11 @@ TEST_P(SpdyFramerTest, RstStreamFrameFlags) {
|
|
|
| SpdyRstStreamIR rst_stream(13, ERROR_CODE_CANCEL);
|
| SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SetFrameFlags(&frame, flags);
|
|
|
| EXPECT_CALL(visitor, OnRstStream(13, ERROR_CODE_CANCEL));
|
| @@ -3694,6 +3918,11 @@ TEST_P(SpdyFramerTest, SettingsFrameFlags) {
|
| SpdySettingsIR settings_ir;
|
| settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 16);
|
| SpdySerializedFrame frame(framer.SerializeSettings(settings_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SetFrameFlags(&frame, flags);
|
|
|
| if (flags & SETTINGS_FLAG_ACK) {
|
| @@ -3731,6 +3960,11 @@ TEST_P(SpdyFramerTest, GoawayFrameFlags) {
|
|
|
| SpdyGoAwayIR goaway_ir(97, ERROR_CODE_NO_ERROR, "test");
|
| SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeGoAway(goaway_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SetFrameFlags(&frame, flags);
|
|
|
| EXPECT_CALL(visitor, OnGoAway(97, ERROR_CODE_NO_ERROR));
|
| @@ -3760,8 +3994,8 @@ TEST_P(SpdyFramerTest, HeadersFrameFlags) {
|
| headers_ir.set_exclusive(true);
|
| }
|
| headers_ir.SetHeader("foo", "bar");
|
| - SpdySerializedFrame frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| uint8_t set_flags = flags & ~HEADERS_FLAG_PADDED;
|
| SetFrameFlags(&frame, set_flags);
|
|
|
| @@ -3907,12 +4141,17 @@ TEST_P(SpdyFramerTest, ContinuationFrameFlags) {
|
|
|
| SpdyHeadersIR headers_ir(42);
|
| headers_ir.SetHeader("foo", "bar");
|
| - SpdySerializedFrame frame0(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers_ir));
|
| + SpdySerializedFrame frame0(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers_ir, use_output_ ? &output_ : nullptr));
|
| SetFrameFlags(&frame0, 0);
|
|
|
| SpdyContinuationIR continuation(42);
|
| SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| SetFrameFlags(&frame, flags);
|
|
|
| EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, CONTINUATION, _));
|
| @@ -4029,6 +4268,11 @@ TEST_P(SpdyFramerTest, OnBlocked) {
|
|
|
| SpdyBlockedIR blocked_ir(0);
|
| SpdySerializedFrame frame(framer.SerializeFrame(blocked_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeFrame(blocked_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| framer.ProcessInput(frame.data(), framer.GetBlockedSize());
|
|
|
| EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
|
| @@ -4058,6 +4302,11 @@ TEST_P(SpdyFramerTest, OnAltSvcWithOrigin) {
|
| altsvc_ir.add_altsvc(altsvc1);
|
| altsvc_ir.add_altsvc(altsvc2);
|
| SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| framer.ProcessInput(frame.data(), frame.size());
|
|
|
| EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
|
| @@ -4108,6 +4357,11 @@ TEST_P(SpdyFramerTest, OnAltSvcEmptyProtocolId) {
|
| altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService(
|
| "", "h1", 443, 10, SpdyAltSvcWireFormat::VersionVector()));
|
| SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| framer.ProcessInput(frame.data(), frame.size());
|
|
|
| EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
|
| @@ -4230,6 +4484,11 @@ TEST_P(SpdyFramerTest, ReadPriority) {
|
| SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
|
| SpdyPriorityIR priority(3, 1, 256, false);
|
| SpdySerializedFrame frame(framer.SerializePriority(priority));
|
| + if (use_output_) {
|
| + output_.Reset();
|
| + ASSERT_TRUE(framer.SerializePriority(priority, &output_));
|
| + frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
|
| + }
|
| testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
|
| framer.set_visitor(&visitor);
|
| EXPECT_CALL(visitor, OnPriority(3, 1, 256, false));
|
| @@ -4361,8 +4620,8 @@ TEST_P(SpdyFramerTest, ProcessAllInput) {
|
| headers.SetHeader("alpha", "beta");
|
| headers.SetHeader("gamma", "charlie");
|
| headers.SetHeader("cookie", "key1=value1; key2=value2");
|
| - SpdySerializedFrame headers_frame(
|
| - SpdyFramerPeer::SerializeHeaders(&framer, headers));
|
| + SpdySerializedFrame headers_frame(SpdyFramerPeer::SerializeHeaders(
|
| + &framer, headers, use_output_ ? &output_ : nullptr));
|
|
|
| const char four_score[] = "Four score and seven years ago";
|
| SpdyDataIR four_score_ir(1, four_score);
|
|
|