blob: 11cbdd22e82ade0c70c790a75e4b8f49cd0af9b0 [file] [log] [blame]
// Copyright 2014 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 "spdy/core/hpack/hpack_entry.h"
#include "absl/hash/hash.h"
#include "common/platform/api/quiche_test.h"
namespace spdy {
namespace {
TEST(HpackLookupEntryTest, EntryNamesDiffer) {
HpackLookupEntry entry1{"header", "value"};
HpackLookupEntry entry2{"HEADER", "value"};
EXPECT_FALSE(entry1 == entry2);
EXPECT_NE(absl::Hash<HpackLookupEntry>()(entry1),
absl::Hash<HpackLookupEntry>()(entry2));
}
TEST(HpackLookupEntryTest, EntryValuesDiffer) {
HpackLookupEntry entry1{"header", "value"};
HpackLookupEntry entry2{"header", "VALUE"};
EXPECT_FALSE(entry1 == entry2);
EXPECT_NE(absl::Hash<HpackLookupEntry>()(entry1),
absl::Hash<HpackLookupEntry>()(entry2));
}
TEST(HpackLookupEntryTest, EntriesEqual) {
HpackLookupEntry entry1{"name", "value"};
HpackLookupEntry entry2{"name", "value"};
EXPECT_TRUE(entry1 == entry2);
EXPECT_EQ(absl::Hash<HpackLookupEntry>()(entry1),
absl::Hash<HpackLookupEntry>()(entry2));
}
class HpackEntryTest : public QuicheTest {
protected:
HpackEntryTest()
: name_("header-name"),
value_("header value"),
total_insertions_(0),
table_size_(0) {}
// These builders maintain the same external table invariants that a "real"
// table (ie HpackHeaderTable) would.
HpackEntry StaticEntry() {
return HpackEntry(name_, value_, true, total_insertions_++);
}
HpackEntry DynamicEntry() {
++table_size_;
size_t index = total_insertions_++;
return HpackEntry(name_, value_, false, index);
}
// TODO(b/182789212): More meaningful tests of Size().
size_t Size() {
return name_.size() + value_.size() + kHpackEntrySizeOverhead;
}
std::string name_, value_;
private:
// Referenced by HpackEntry instances.
size_t total_insertions_;
size_t table_size_;
};
TEST_F(HpackEntryTest, StaticConstructor) {
HpackEntry entry(StaticEntry());
EXPECT_EQ(name_, entry.name());
EXPECT_EQ(value_, entry.value());
EXPECT_TRUE(entry.IsStatic());
EXPECT_EQ(Size(), entry.Size());
}
TEST_F(HpackEntryTest, DynamicConstructor) {
HpackEntry entry(DynamicEntry());
EXPECT_EQ(name_, entry.name());
EXPECT_EQ(value_, entry.value());
EXPECT_FALSE(entry.IsStatic());
EXPECT_EQ(Size(), entry.Size());
}
TEST_F(HpackEntryTest, DefaultConstructor) {
HpackEntry entry;
EXPECT_TRUE(entry.name().empty());
EXPECT_TRUE(entry.value().empty());
EXPECT_EQ(kHpackEntrySizeOverhead, entry.Size());
}
} // namespace
} // namespace spdy