| Index: net/spdy/hpack/hpack_encoder_test.cc
|
| diff --git a/net/spdy/hpack/hpack_encoder_test.cc b/net/spdy/hpack/hpack_encoder_test.cc
|
| index 10fd6087da0e92d65ad290ce7f27a7f3992d5d69..c18ad15304c413cab897f117886674d01890cf9a 100644
|
| --- a/net/spdy/hpack/hpack_encoder_test.cc
|
| +++ b/net/spdy/hpack/hpack_encoder_test.cc
|
| @@ -7,6 +7,7 @@
|
| #include <map>
|
| #include <string>
|
|
|
| +#include "net/base/arena.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -14,6 +15,8 @@ namespace net {
|
|
|
| using base::StringPiece;
|
| using std::string;
|
| +using std::vector;
|
| +using std::pair;
|
| using testing::ElementsAre;
|
|
|
| namespace test {
|
| @@ -76,6 +79,7 @@ namespace {
|
|
|
| using std::map;
|
| using testing::ElementsAre;
|
| +using testing::Pair;
|
|
|
| class HpackEncoderTest : public ::testing::Test {
|
| protected:
|
| @@ -84,7 +88,8 @@ class HpackEncoderTest : public ::testing::Test {
|
| HpackEncoderTest()
|
| : encoder_(ObtainHpackHuffmanTable()),
|
| peer_(&encoder_),
|
| - static_(peer_.table()->GetByIndex(1)) {}
|
| + static_(peer_.table()->GetByIndex(1)),
|
| + headers_storage_(1024 /* block size */) {}
|
|
|
| void SetUp() override {
|
| // Populate dynamic entries into the table fixture. For simplicity each
|
| @@ -101,6 +106,14 @@ class HpackEncoderTest : public ::testing::Test {
|
| peer_.set_allow_huffman_compression(false);
|
| }
|
|
|
| + void SaveHeaders(StringPiece name, StringPiece value) {
|
| + StringPiece n(headers_storage_.Memdup(name.data(), name.size()),
|
| + name.size());
|
| + StringPiece v(headers_storage_.Memdup(value.data(), value.size()),
|
| + value.size());
|
| + headers_observed_.push_back(make_pair(n, v));
|
| + }
|
| +
|
| void ExpectIndex(size_t index) {
|
| expected_.AppendPrefix(kIndexedOpcode);
|
| expected_.AppendUint32(index);
|
| @@ -155,15 +168,24 @@ class HpackEncoderTest : public ::testing::Test {
|
| const HpackEntry* cookie_a_;
|
| const HpackEntry* cookie_c_;
|
|
|
| + UnsafeArena headers_storage_;
|
| + vector<pair<StringPiece, StringPiece>> headers_observed_;
|
| +
|
| HpackOutputStream expected_;
|
| };
|
|
|
| TEST_F(HpackEncoderTest, SingleDynamicIndex) {
|
| + encoder_.SetHeaderListener([this](StringPiece name, StringPiece value) {
|
| + this->SaveHeaders(name, value);
|
| + });
|
| +
|
| ExpectIndex(IndexOf(key_2_));
|
|
|
| SpdyHeaderBlock headers;
|
| headers[key_2_->name().as_string()] = key_2_->value().as_string();
|
| CompareWithExpectedEncoding(headers);
|
| + EXPECT_THAT(headers_observed_,
|
| + ElementsAre(Pair(key_2_->name(), key_2_->value())));
|
| }
|
|
|
| TEST_F(HpackEncoderTest, SingleStaticIndex) {
|
| @@ -268,6 +290,10 @@ TEST_F(HpackEncoderTest, StringsDynamicallySelectHuffmanCoding) {
|
| }
|
|
|
| TEST_F(HpackEncoderTest, EncodingWithoutCompression) {
|
| + encoder_.SetHeaderListener([this](StringPiece name, StringPiece value) {
|
| + this->SaveHeaders(name, value);
|
| + });
|
| +
|
| // Implementation should internally disable.
|
| peer_.set_allow_huffman_compression(true);
|
|
|
| @@ -284,9 +310,18 @@ TEST_F(HpackEncoderTest, EncodingWithoutCompression) {
|
| expected_.TakeString(&expected_out);
|
| encoder_.EncodeHeaderSetWithoutCompression(headers, &actual_out);
|
| EXPECT_EQ(expected_out, actual_out);
|
| +
|
| + EXPECT_THAT(headers_observed_,
|
| + ElementsAre(Pair(":path", "/index.html"),
|
| + Pair("cookie", "foo=bar; baz=bing"),
|
| + Pair("hello", "goodbye")));
|
| }
|
|
|
| TEST_F(HpackEncoderTest, MultipleEncodingPasses) {
|
| + encoder_.SetHeaderListener([this](StringPiece name, StringPiece value) {
|
| + this->SaveHeaders(name, value);
|
| + });
|
| +
|
| // Pass 1.
|
| {
|
| SpdyHeaderBlock headers;
|
| @@ -339,6 +374,19 @@ TEST_F(HpackEncoderTest, MultipleEncodingPasses) {
|
|
|
| CompareWithExpectedEncoding(headers);
|
| }
|
| +
|
| + // clang-format off
|
| + EXPECT_THAT(headers_observed_,
|
| + ElementsAre(Pair("key1", "value1"),
|
| + Pair("cookie", "a=bb"),
|
| + Pair("key2", "value2"),
|
| + Pair("cookie", "c=dd"),
|
| + Pair("cookie", "e=ff"),
|
| + Pair("key2", "value2"),
|
| + Pair("cookie", "a=bb"),
|
| + Pair("cookie", "b=cc"),
|
| + Pair("cookie", "c=dd")));
|
| + // clang-format on
|
| }
|
|
|
| TEST_F(HpackEncoderTest, PseudoHeadersFirst) {
|
|
|