Add helpers and use StringPiece in HttpDecoderTest. This will come handy when changing a number of tests to append garbage after |input| and verify that processing stops before reaching end of input. gfe-relnote: n/a, test-only change in QUIC v99-only class. PiperOrigin-RevId: 254954119 Change-Id: I22496641c6788e7200b3ffce7ccdf52f12448826
diff --git a/quic/core/http/http_decoder.h b/quic/core/http/http_decoder.h index 1df4620..e8332d7 100644 --- a/quic/core/http/http_decoder.h +++ b/quic/core/http/http_decoder.h
@@ -8,6 +8,7 @@ #include "net/third_party/quiche/src/quic/core/http/http_frames.h" #include "net/third_party/quiche/src/quic/core/quic_error_codes.h" #include "net/third_party/quiche/src/quic/platform/api/quic_export.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h" namespace quic {
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc index 2bb9eb2..eca52ce 100644 --- a/quic/core/http/http_decoder_test.cc +++ b/quic/core/http/http_decoder_test.cc
@@ -82,6 +82,18 @@ return HttpDecoderPeer::current_frame_type(&decoder_); } + QuicByteCount ProcessInput(QuicStringPiece input) { + return decoder_.ProcessInput(input.data(), input.size()); + } + + // Feed |input| to |decoder_| one character at a time, + // verifying that each character gets processed. + void ProcessInputCharByChar(QuicStringPiece input) { + for (char c : input) { + EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); + } + } + HttpDecoder decoder_; testing::StrictMock<MockVisitor> visitor_; }; @@ -188,57 +200,48 @@ } TEST_F(HttpDecoderTest, CancelPush) { - char input[] = {// type (CANCEL_PUSH) - 0x03, - // length - 0x1, - // Push Id - 0x01}; + std::string input = + "\x03" // type (CANCEL_PUSH) + "\x01" // length + "\x01"; // Push Id // Process the full frame. EXPECT_CALL(visitor_, OnCancelPushFrame(CancelPushFrame({1}))); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnCancelPushFrame(CancelPushFrame({1}))); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnCancelPushFrame(CancelPushFrame({1}))) .WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on CANCEL_PUSH frame.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, PushPromiseFrame) { - char input[] = {// type (PUSH_PROMISE) - 0x05, - // length - 0x8, - // Push Id - 0x01, - // Header Block - 'H', 'e', 'a', 'd', 'e', 'r', 's'}; + std::string input = + "\x05" // type (PUSH_PROMISE) + "\x08" // length + "\x01" // Push Id + "Headers"; // Header Block // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnPushPromiseFrameStart(1)); EXPECT_CALL(visitor_, OnPushPromiseFramePayload(QuicStringPiece("Headers"))); EXPECT_CALL(visitor_, OnPushPromiseFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnPushPromiseFrameStart(1)); EXPECT_CALL(visitor_, OnPushPromiseFramePayload(QuicStringPiece("H"))); EXPECT_CALL(visitor_, OnPushPromiseFramePayload(QuicStringPiece("e"))); @@ -248,95 +251,78 @@ EXPECT_CALL(visitor_, OnPushPromiseFramePayload(QuicStringPiece("r"))); EXPECT_CALL(visitor_, OnPushPromiseFramePayload(QuicStringPiece("s"))); EXPECT_CALL(visitor_, OnPushPromiseFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnPushPromiseFrameStart(1)).WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on PUSH_PROMISE frame start.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, MaxPushId) { - char input[] = {// type (MAX_PUSH_ID) - 0x0D, - // length - 0x1, - // Push Id - 0x01}; + std::string input = + "\x0D" // type (MAX_PUSH_ID) + "\x01" // length + "\x01"; // Push Id // Process the full frame. EXPECT_CALL(visitor_, OnMaxPushIdFrame(MaxPushIdFrame({1}))); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnMaxPushIdFrame(MaxPushIdFrame({1}))); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnMaxPushIdFrame(MaxPushIdFrame({1}))) .WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on MAX_PUSH_ID frame.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, DuplicatePush) { - char input[] = {// type (DUPLICATE_PUSH) - 0x0E, - // length - 0x1, - // Push Id - 0x01}; + std::string input = + "\x0E" // type (DUPLICATE_PUSH) + "\x01" // length + "\x01"; // Push Id // Process the full frame. EXPECT_CALL(visitor_, OnDuplicatePushFrame(DuplicatePushFrame({1}))); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnDuplicatePushFrame(DuplicatePushFrame({1}))); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnDuplicatePushFrame(DuplicatePushFrame({1}))) .WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on DUPLICATE_PUSH frame.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, PriorityFrame) { - char input[] = {// type (PRIORITY) - 0x2, - // length - 0x4, - // request stream, request stream, exclusive - 0x01, - // prioritized_element_id - 0x03, - // element_dependency_id - 0x04, - // weight - 0xFF}; + std::string input = + "\x02" // type (PRIORITY) + "\x04" // length + "\x01" // request stream, request stream, exclusive + "\x03" // prioritized_element_id + "\x04" // element_dependency_id + "\xFF"; // weight PriorityFrame frame; frame.prioritized_type = REQUEST_STREAM; @@ -349,28 +335,22 @@ // Process the full frame. EXPECT_CALL(visitor_, OnPriorityFrameStart(Http3FrameLengths(2, 4))); EXPECT_CALL(visitor_, OnPriorityFrame(frame)); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnPriorityFrameStart(Http3FrameLengths(2, 4))); EXPECT_CALL(visitor_, OnPriorityFrame(frame)); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - char input2[] = {// type (PRIORITY) - 0x2, - // length - 0x2, - // root of tree, root of tree, exclusive - 0xf1, - // weight - 0xFF}; + std::string input2 = + "\x02" // type (PRIORITY) + "\x02" // length + "\xf1" // root of tree, root of tree, exclusive + "\xFF"; // weight PriorityFrame frame2; frame2.prioritized_type = ROOT_OF_TREE; frame2.dependency_type = ROOT_OF_TREE; @@ -379,40 +359,29 @@ EXPECT_CALL(visitor_, OnPriorityFrameStart(Http3FrameLengths(2, 2))); EXPECT_CALL(visitor_, OnPriorityFrame(frame2)); - EXPECT_EQ(QUIC_ARRAYSIZE(input2), - decoder_.ProcessInput(input2, QUIC_ARRAYSIZE(input2))); + EXPECT_EQ(input2.size(), ProcessInput(input2)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnPriorityFrameStart(Http3FrameLengths(2, 4))); EXPECT_CALL(visitor_, OnPriorityFrame(frame)).WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on PRIORITY frame.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, SettingsFrame) { - // clang-format off - char input[] = { - // type (SETTINGS) - 0x04, - // length - 0x07, - // identifier (SETTINGS_NUM_PLACEHOLDERS) - 0x03, - // content - 0x02, - // identifier (SETTINGS_MAX_HEADER_LIST_SIZE) - 0x06, - // content - 0x05, - // identifier (256 in variable length integer) - 0x40 + 0x01, - 0x00, - // content - 0x04}; - // clang-format on + std::string input( + "\x04" // type (SETTINGS) + "\x07" // length + "\x03" // identifier (SETTINGS_NUM_PLACEHOLDERS) + "\x02" // content + "\x06" // identifier (SETTINGS_MAX_HEADER_LIST_SIZE) + "\x05" // content + "\x41\x00" // identifier, encoded on 2 bytes (0x40), value is 256 (0x100) + "\x04", // content + 9); // length of string SettingsFrame frame; frame.values[3] = 2; @@ -422,48 +391,43 @@ // Process the full frame. EXPECT_CALL(visitor_, OnSettingsFrameStart(Http3FrameLengths(2, 7))); EXPECT_CALL(visitor_, OnSettingsFrame(frame)); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnSettingsFrameStart(Http3FrameLengths(2, 7))); EXPECT_CALL(visitor_, OnSettingsFrame(frame)); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnSettingsFrameStart(Http3FrameLengths(2, 7))) .WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on SETTINGS frame start.", decoder_.error_detail()); } TEST_F(HttpDecoderTest, DataFrame) { - char input[] = {// type (DATA) - 0x00, - // length - 0x05, - // data - 'D', 'a', 't', 'a', '!'}; + std::string input( + "\x00" // type (DATA) + "\x05" // length + "Data!", // data + 7); // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnDataFrameStart(Http3FrameLengths(2, 5))); EXPECT_CALL(visitor_, OnDataFramePayload(QuicStringPiece("Data!"))); EXPECT_CALL(visitor_, OnDataFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnDataFrameStart(Http3FrameLengths(2, 5))); EXPECT_CALL(visitor_, OnDataFramePayload(QuicStringPiece("D"))); EXPECT_CALL(visitor_, OnDataFramePayload(QuicStringPiece("a"))); @@ -471,16 +435,14 @@ EXPECT_CALL(visitor_, OnDataFramePayload(QuicStringPiece("a"))); EXPECT_CALL(visitor_, OnDataFramePayload(QuicStringPiece("!"))); EXPECT_CALL(visitor_, OnDataFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); // Test on the situation when the visitor wants to stop processing. EXPECT_CALL(visitor_, OnDataFrameStart(Http3FrameLengths(2, 5))) .WillOnce(Return(false)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Visitor shut down on DATA frame start.", decoder_.error_detail()); } @@ -535,48 +497,40 @@ } TEST_F(HttpDecoderTest, GoAway) { - char input[] = {// type (GOAWAY) - 0x07, - // length - 0x1, - // StreamId - 0x01}; + std::string input = + "\x07" // type (GOAWAY) + "\x01" // length + "\x01"; // StreamId // Process the full frame. EXPECT_CALL(visitor_, OnGoAwayFrame(GoAwayFrame({1}))); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnGoAwayFrame(GoAwayFrame({1}))); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); } TEST_F(HttpDecoderTest, HeadersFrame) { - char input[] = {// type (HEADERS) - 0x01, - // length - 0x07, - // headers - 'H', 'e', 'a', 'd', 'e', 'r', 's'}; + std::string input = + "\x01" // type (HEADERS) + "\x07" // length + "Headers"; // headers // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnHeadersFrameStart(Http3FrameLengths(2, 7))); EXPECT_CALL(visitor_, OnHeadersFramePayload(QuicStringPiece("Headers"))); EXPECT_CALL(visitor_, OnHeadersFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnHeadersFrameStart(Http3FrameLengths(2, 7))); EXPECT_CALL(visitor_, OnHeadersFramePayload(QuicStringPiece("H"))); EXPECT_CALL(visitor_, OnHeadersFramePayload(QuicStringPiece("e"))); @@ -586,90 +540,85 @@ EXPECT_CALL(visitor_, OnHeadersFramePayload(QuicStringPiece("r"))); EXPECT_CALL(visitor_, OnHeadersFramePayload(QuicStringPiece("s"))); EXPECT_CALL(visitor_, OnHeadersFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); } TEST_F(HttpDecoderTest, EmptyDataFrame) { - char input[] = {0x00, // type (DATA) - 0x00}; // length + std::string input( + "\x00" // type (DATA) + "\x00", // length + 2); // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnDataFrameStart(Http3FrameLengths(2, 0))); EXPECT_CALL(visitor_, OnDataFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnDataFrameStart(Http3FrameLengths(2, 0))); EXPECT_CALL(visitor_, OnDataFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); } TEST_F(HttpDecoderTest, EmptyHeadersFrame) { - char input[] = {0x01, // type (HEADERS) - 0x00}; // length + std::string input( + "\x01" // type (HEADERS) + "\x00", // length + 2); // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnHeadersFrameStart(Http3FrameLengths(2, 0))); EXPECT_CALL(visitor_, OnHeadersFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnHeadersFrameStart(Http3FrameLengths(2, 0))); EXPECT_CALL(visitor_, OnHeadersFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); } TEST_F(HttpDecoderTest, PushPromiseFrameNoHeaders) { - char input[] = {0x05, // type (PUSH_PROMISE) - 0x01, // length - 0x01}; // Push Id + std::string input = + "\x05" // type (PUSH_PROMISE) + "\x01" // length + "\x01"; // Push Id // Process the full frame. InSequence s; EXPECT_CALL(visitor_, OnPushPromiseFrameStart(1)); EXPECT_CALL(visitor_, OnPushPromiseFrameEnd()); - EXPECT_EQ(QUIC_ARRAYSIZE(input), - decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(input.size(), ProcessInput(input)); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); - // Process the frame incremently. + // Process the frame incrementally. EXPECT_CALL(visitor_, OnPushPromiseFrameStart(1)); EXPECT_CALL(visitor_, OnPushPromiseFrameEnd()); - for (char c : input) { - EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1)); - } + ProcessInputCharByChar(input); EXPECT_EQ(QUIC_NO_ERROR, decoder_.error()); EXPECT_EQ("", decoder_.error_detail()); } TEST_F(HttpDecoderTest, MalformedFrameWithOverlyLargePayload) { - char input[] = {0x03, // type (CANCEL_PUSH) - 0x10, // length - 0x15}; // malformed payload + std::string input = + "\x03" // type (CANCEL_PUSH) + "\x10" // length + "\x15"; // malformed payload // Process the full frame. EXPECT_CALL(visitor_, OnError(&decoder_)); - EXPECT_EQ(0u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); + EXPECT_EQ(0u, ProcessInput(input)); EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error()); EXPECT_EQ("Frame is too large", decoder_.error_detail()); }