1 // Copyright (c) 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "quiche/quic/core/qpack/qpack_static_table.h" 6 7 #include <set> 8 9 #include "absl/base/macros.h" 10 #include "absl/strings/string_view.h" 11 #include "quiche/quic/platform/api/quic_test.h" 12 13 namespace quic { 14 15 namespace test { 16 17 namespace { 18 19 // Check that an initialized instance has the right number of entries. TEST(QpackStaticTableTest,Initialize)20TEST(QpackStaticTableTest, Initialize) { 21 QpackStaticTable table; 22 EXPECT_FALSE(table.IsInitialized()); 23 24 table.Initialize(QpackStaticTableVector().data(), 25 QpackStaticTableVector().size()); 26 EXPECT_TRUE(table.IsInitialized()); 27 28 const auto& static_entries = table.GetStaticEntries(); 29 EXPECT_EQ(QpackStaticTableVector().size(), static_entries.size()); 30 31 const auto& static_index = table.GetStaticIndex(); 32 EXPECT_EQ(QpackStaticTableVector().size(), static_index.size()); 33 34 const auto& static_name_index = table.GetStaticNameIndex(); 35 // Count distinct names in static table. 36 std::set<absl::string_view> names; 37 for (const auto& entry : static_entries) { 38 names.insert(entry.name()); 39 } 40 EXPECT_EQ(names.size(), static_name_index.size()); 41 } 42 43 // Test that ObtainQpackStaticTable returns the same instance every time. TEST(QpackStaticTableTest,IsSingleton)44TEST(QpackStaticTableTest, IsSingleton) { 45 const QpackStaticTable* static_table_one = &ObtainQpackStaticTable(); 46 const QpackStaticTable* static_table_two = &ObtainQpackStaticTable(); 47 EXPECT_EQ(static_table_one, static_table_two); 48 } 49 50 } // namespace 51 52 } // namespace test 53 54 } // namespace quic 55