| Index: net/http2/hpack/decoder/hpack_string_decoder_test.cc
|
| diff --git a/net/http2/hpack/decoder/hpack_string_decoder_test.cc b/net/http2/hpack/decoder/hpack_string_decoder_test.cc
|
| deleted file mode 100644
|
| index e4afc61e4e74bb3a02c34877e6cd534e435a5c85..0000000000000000000000000000000000000000
|
| --- a/net/http2/hpack/decoder/hpack_string_decoder_test.cc
|
| +++ /dev/null
|
| @@ -1,194 +0,0 @@
|
| -// Copyright 2016 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/http2/hpack/decoder/hpack_string_decoder.h"
|
| -
|
| -// Tests of HpackStringDecoder.
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/strings/string_piece.h"
|
| -#include "net/http2/hpack/decoder/hpack_string_collector.h"
|
| -#include "net/http2/hpack/decoder/hpack_string_decoder_listener.h"
|
| -#include "net/http2/hpack/tools/hpack_block_builder.h"
|
| -#include "net/http2/tools/failure.h"
|
| -#include "net/http2/tools/http2_random.h"
|
| -#include "net/http2/tools/random_decoder_test.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::AssertionResult;
|
| -using ::testing::AssertionSuccess;
|
| -using base::StringPiece;
|
| -using std::string;
|
| -
|
| -namespace net {
|
| -namespace test {
|
| -namespace {
|
| -
|
| -const bool kMayReturnZeroOnFirst = false;
|
| -const bool kCompressed = true;
|
| -const bool kUncompressed = false;
|
| -
|
| -enum StartMethod {
|
| - kStart,
|
| - kStartOnly,
|
| - kStartAndDecodeLength,
|
| - kStartSpecialCaseShort,
|
| -};
|
| -
|
| -class HpackStringDecoderTest
|
| - : public RandomDecoderTest,
|
| - public ::testing::WithParamInterface<StartMethod> {
|
| - protected:
|
| - HpackStringDecoderTest()
|
| - : start_method_(GetParam()), listener_(&collector_) {}
|
| -
|
| - DecodeStatus StartDecoding(DecodeBuffer* b) override {
|
| - ++start_decoding_calls_;
|
| - collector_.Clear();
|
| - switch (start_method_) {
|
| - case kStart:
|
| - return decoder_.Start(b, &listener_);
|
| - case kStartOnly:
|
| - return decoder_.StartOnly(b, &listener_);
|
| - case kStartAndDecodeLength:
|
| - return decoder_.StartAndDecodeLength(b, &listener_);
|
| - case kStartSpecialCaseShort:
|
| - return decoder_.StartSpecialCaseShort(b, &listener_);
|
| - default:
|
| - return DecodeStatus::kDecodeError;
|
| - }
|
| - }
|
| -
|
| - DecodeStatus ResumeDecoding(DecodeBuffer* b) override {
|
| - // Provides coverage of DebugString and StateToString.
|
| - // Not validating output.
|
| - VLOG(1) << decoder_.DebugString();
|
| - VLOG(2) << collector_;
|
| - return decoder_.Resume(b, &listener_);
|
| - }
|
| -
|
| - AssertionResult Collected(StringPiece s, bool huffman_encoded) {
|
| - VLOG(1) << collector_;
|
| - return collector_.Collected(s, huffman_encoded);
|
| - }
|
| -
|
| - // Note that base::Bind() makes a copy of |expected_str| even though it is
|
| - // taken as a constant reference, so even if MakeValidator is called with a
|
| - // C-style string that is cast to a temporary std::string that gets destroyed
|
| - // after the call to MakeValidator, |expected_str| is still valid later when
|
| - // the Validator is run.
|
| - AssertionResult StringValidator(const string& expected_str,
|
| - bool expected_huffman,
|
| - const DecodeBuffer& input,
|
| - DecodeStatus status) {
|
| - AssertionResult result = Collected(expected_str, expected_huffman);
|
| - if (result) {
|
| - VERIFY_EQ(collector_,
|
| - HpackStringCollector(expected_str, expected_huffman));
|
| - } else {
|
| - VERIFY_NE(collector_,
|
| - HpackStringCollector(expected_str, expected_huffman));
|
| - }
|
| - VLOG(2) << collector_.ToString();
|
| - collector_.Clear();
|
| - VLOG(2) << collector_;
|
| - return result;
|
| - }
|
| -
|
| - Validator MakeValidator(const string& expected_str, bool expected_huffman) {
|
| - return base::Bind(&HpackStringDecoderTest::StringValidator,
|
| - base::Unretained(this), expected_str, expected_huffman);
|
| - }
|
| -
|
| - const StartMethod start_method_;
|
| - HpackStringDecoder decoder_;
|
| - HpackStringCollector collector_;
|
| - HpackStringDecoderVLoggingListener listener_;
|
| - size_t start_decoding_calls_ = 0;
|
| -};
|
| -
|
| -TEST_P(HpackStringDecoderTest, DecodeEmptyString) {
|
| - {
|
| - Validator validator = ValidateDoneAndEmpty(MakeValidator("", kCompressed));
|
| - const char kData[] = {0x80u};
|
| - DecodeBuffer b(kData);
|
| - EXPECT_TRUE(
|
| - DecodeAndValidateSeveralWays(&b, kMayReturnZeroOnFirst, validator));
|
| - }
|
| - {
|
| - // Make sure it stops after decoding the empty string.
|
| - Validator validator =
|
| - ValidateDoneAndOffset(1, MakeValidator("", kUncompressed));
|
| - const char kData[] = {0x00, 0xffu};
|
| - DecodeBuffer b(kData);
|
| - EXPECT_EQ(2u, b.Remaining());
|
| - EXPECT_TRUE(
|
| - DecodeAndValidateSeveralWays(&b, kMayReturnZeroOnFirst, validator));
|
| - EXPECT_EQ(1u, b.Remaining());
|
| - }
|
| -}
|
| -
|
| -TEST_P(HpackStringDecoderTest, DecodeShortString) {
|
| - {
|
| - // Make sure it stops after decoding the non-empty string.
|
| - Validator validator =
|
| - ValidateDoneAndOffset(11, MakeValidator("start end.", kCompressed));
|
| - const char kData[] = "\x8astart end.Don't peek at this.";
|
| - DecodeBuffer b(kData);
|
| - EXPECT_TRUE(
|
| - DecodeAndValidateSeveralWays(&b, kMayReturnZeroOnFirst, validator));
|
| - }
|
| - {
|
| - Validator validator =
|
| - ValidateDoneAndOffset(11, MakeValidator("start end.", kUncompressed));
|
| - StringPiece data("\x0astart end.");
|
| - DecodeBuffer b(data);
|
| - EXPECT_TRUE(
|
| - DecodeAndValidateSeveralWays(&b, kMayReturnZeroOnFirst, validator));
|
| - }
|
| -}
|
| -
|
| -TEST_P(HpackStringDecoderTest, DecodeLongStrings) {
|
| - string name = Random().RandString(1024);
|
| - string value = Random().RandString(65536);
|
| - HpackBlockBuilder hbb;
|
| -
|
| - hbb.AppendString(false, name);
|
| - uint32_t offset_after_name = hbb.size();
|
| - EXPECT_EQ(3 + name.size(), offset_after_name);
|
| -
|
| - hbb.AppendString(true, value);
|
| - uint32_t offset_after_value = hbb.size();
|
| - EXPECT_EQ(3 + name.size() + 4 + value.size(), offset_after_value);
|
| -
|
| - DecodeBuffer b(hbb.buffer());
|
| -
|
| - // Decode the name...
|
| - EXPECT_TRUE(DecodeAndValidateSeveralWays(
|
| - &b, kMayReturnZeroOnFirst,
|
| - ValidateDoneAndOffset(offset_after_name,
|
| - MakeValidator(name, kUncompressed))));
|
| - EXPECT_EQ(offset_after_name, b.Offset());
|
| - EXPECT_EQ(offset_after_value - offset_after_name, b.Remaining());
|
| -
|
| - // Decode the value...
|
| - EXPECT_TRUE(DecodeAndValidateSeveralWays(
|
| - &b, kMayReturnZeroOnFirst,
|
| - ValidateDoneAndOffset(offset_after_value - offset_after_name,
|
| - MakeValidator(value, kCompressed))));
|
| - EXPECT_EQ(offset_after_value, b.Offset());
|
| - EXPECT_EQ(0u, b.Remaining());
|
| -}
|
| -
|
| -INSTANTIATE_TEST_CASE_P(AllStartMethods,
|
| - HpackStringDecoderTest,
|
| - ::testing::Values(kStart,
|
| - kStartOnly,
|
| - kStartAndDecodeLength,
|
| - kStartSpecialCaseShort));
|
| -
|
| -} // namespace
|
| -} // namespace test
|
| -} // namespace net
|
|
|