Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: net/spdy/hpack_entry_test.cc

Issue 290003006: Land recent SPDY changes (through 67282679) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on nullptr => NULL Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/hpack_entry.cc ('k') | net/spdy/hpack_header_table.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/hpack_entry.h" 5 #include "net/spdy/hpack_entry.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 namespace net { 11 namespace net {
12 12
13 namespace { 13 namespace {
14 14
15 using std::string; 15 using std::string;
16 16
17 class HpackEntryTest : public ::testing::Test { 17 class HpackEntryTest : public ::testing::Test {
18 protected: 18 protected:
19 HpackEntryTest() 19 HpackEntryTest()
20 : name_("header-name"), 20 : name_("header-name"),
21 value_("header value"), 21 value_("header value"),
22 total_insertions_(0), 22 total_insertions_(0),
23 table_size_(0) {} 23 table_size_(0) {}
24 24
25 // These builders maintain the same external table invariants that a "real" 25 // These builders maintain the same external table invariants that a "real"
26 // table (ie HpackHeaderTable) would. 26 // table (ie HpackHeaderTable) would.
27 HpackEntry StaticEntry() { 27 HpackEntry StaticEntry() {
28 return HpackEntry(name_, value_, true, total_insertions_++, &table_size_); 28 return HpackEntry(name_, value_, true, total_insertions_++);
29 } 29 }
30 HpackEntry DynamicEntry() { 30 HpackEntry DynamicEntry() {
31 ++table_size_; 31 ++table_size_;
32 size_t index = total_insertions_++; 32 size_t index = total_insertions_++;
33 return HpackEntry(name_, value_, false, index, &total_insertions_); 33 return HpackEntry(name_, value_, false, index);
34 } 34 }
35 void DropEntry() { --table_size_; } 35 void DropEntry() { --table_size_; }
36 36
37 size_t IndexOf(const HpackEntry& entry) const {
38 if (entry.IsStatic()) {
39 return 1 + entry.InsertionIndex() + table_size_;
40 } else {
41 return total_insertions_ - entry.InsertionIndex();
42 }
43 }
44
37 size_t Size() { 45 size_t Size() {
38 return name_.size() + value_.size() + HpackEntry::kSizeOverhead; 46 return name_.size() + value_.size() + HpackEntry::kSizeOverhead;
39 } 47 }
40 48
41 string name_, value_; 49 string name_, value_;
42 50
43 private: 51 private:
44 // Referenced by HpackEntry instances. 52 // Referenced by HpackEntry instances.
45 size_t total_insertions_; 53 size_t total_insertions_;
46 size_t table_size_; 54 size_t table_size_;
47 }; 55 };
48 56
49 TEST_F(HpackEntryTest, StaticConstructor) { 57 TEST_F(HpackEntryTest, StaticConstructor) {
50 HpackEntry entry(StaticEntry()); 58 HpackEntry entry(StaticEntry());
51 59
52 EXPECT_EQ(name_, entry.name()); 60 EXPECT_EQ(name_, entry.name());
53 EXPECT_EQ(value_, entry.value()); 61 EXPECT_EQ(value_, entry.value());
54 EXPECT_TRUE(entry.IsStatic()); 62 EXPECT_TRUE(entry.IsStatic());
55 EXPECT_EQ(1u, entry.Index()); 63 EXPECT_EQ(1u, IndexOf(entry));
56 EXPECT_EQ(0u, entry.state()); 64 EXPECT_EQ(0u, entry.state());
57 EXPECT_EQ(Size(), entry.Size()); 65 EXPECT_EQ(Size(), entry.Size());
58 } 66 }
59 67
60 TEST_F(HpackEntryTest, DynamicConstructor) { 68 TEST_F(HpackEntryTest, DynamicConstructor) {
61 HpackEntry entry(DynamicEntry()); 69 HpackEntry entry(DynamicEntry());
62 70
63 EXPECT_EQ(name_, entry.name()); 71 EXPECT_EQ(name_, entry.name());
64 EXPECT_EQ(value_, entry.value()); 72 EXPECT_EQ(value_, entry.value());
65 EXPECT_FALSE(entry.IsStatic()); 73 EXPECT_FALSE(entry.IsStatic());
66 EXPECT_EQ(1u, entry.Index()); 74 EXPECT_EQ(1u, IndexOf(entry));
67 EXPECT_EQ(0u, entry.state()); 75 EXPECT_EQ(0u, entry.state());
68 EXPECT_EQ(Size(), entry.Size()); 76 EXPECT_EQ(Size(), entry.Size());
69 } 77 }
70 78
71 TEST_F(HpackEntryTest, LookupConstructor) { 79 TEST_F(HpackEntryTest, LookupConstructor) {
72 HpackEntry entry(name_, value_); 80 HpackEntry entry(name_, value_);
73 81
74 EXPECT_EQ(name_, entry.name()); 82 EXPECT_EQ(name_, entry.name());
75 EXPECT_EQ(value_, entry.value()); 83 EXPECT_EQ(value_, entry.value());
76 EXPECT_FALSE(entry.IsStatic()); 84 EXPECT_FALSE(entry.IsStatic());
77 EXPECT_EQ(0u, entry.Index()); 85 EXPECT_EQ(0u, IndexOf(entry));
78 EXPECT_EQ(0u, entry.state()); 86 EXPECT_EQ(0u, entry.state());
79 EXPECT_EQ(Size(), entry.Size()); 87 EXPECT_EQ(Size(), entry.Size());
80 } 88 }
81 89
82 TEST_F(HpackEntryTest, DefaultConstructor) { 90 TEST_F(HpackEntryTest, DefaultConstructor) {
83 HpackEntry entry; 91 HpackEntry entry;
84 92
85 EXPECT_TRUE(entry.name().empty()); 93 EXPECT_TRUE(entry.name().empty());
86 EXPECT_TRUE(entry.value().empty()); 94 EXPECT_TRUE(entry.value().empty());
87 EXPECT_EQ(0u, entry.state()); 95 EXPECT_EQ(0u, entry.state());
88 EXPECT_EQ(HpackEntry::kSizeOverhead, entry.Size()); 96 EXPECT_EQ(HpackEntry::kSizeOverhead, entry.Size());
89 } 97 }
90 98
91 TEST_F(HpackEntryTest, IndexUpdate) { 99 TEST_F(HpackEntryTest, IndexUpdate) {
92 HpackEntry static1(StaticEntry()); 100 HpackEntry static1(StaticEntry());
93 HpackEntry static2(StaticEntry()); 101 HpackEntry static2(StaticEntry());
94 102
95 EXPECT_EQ(1u, static1.Index()); 103 EXPECT_EQ(1u, IndexOf(static1));
96 EXPECT_EQ(2u, static2.Index()); 104 EXPECT_EQ(2u, IndexOf(static2));
97 105
98 HpackEntry dynamic1(DynamicEntry()); 106 HpackEntry dynamic1(DynamicEntry());
99 HpackEntry dynamic2(DynamicEntry()); 107 HpackEntry dynamic2(DynamicEntry());
100 108
101 EXPECT_EQ(1u, dynamic2.Index()); 109 EXPECT_EQ(1u, IndexOf(dynamic2));
102 EXPECT_EQ(2u, dynamic1.Index()); 110 EXPECT_EQ(2u, IndexOf(dynamic1));
103 EXPECT_EQ(3u, static1.Index()); 111 EXPECT_EQ(3u, IndexOf(static1));
104 EXPECT_EQ(4u, static2.Index()); 112 EXPECT_EQ(4u, IndexOf(static2));
105 113
106 DropEntry(); // Drops |dynamic1|. 114 DropEntry(); // Drops |dynamic1|.
107 115
108 EXPECT_EQ(1u, dynamic2.Index()); 116 EXPECT_EQ(1u, IndexOf(dynamic2));
109 EXPECT_EQ(2u, static1.Index()); 117 EXPECT_EQ(2u, IndexOf(static1));
110 EXPECT_EQ(3u, static2.Index()); 118 EXPECT_EQ(3u, IndexOf(static2));
111 119
112 HpackEntry dynamic3(DynamicEntry()); 120 HpackEntry dynamic3(DynamicEntry());
113 121
114 EXPECT_EQ(1u, dynamic3.Index()); 122 EXPECT_EQ(1u, IndexOf(dynamic3));
115 EXPECT_EQ(2u, dynamic2.Index()); 123 EXPECT_EQ(2u, IndexOf(dynamic2));
116 EXPECT_EQ(3u, static1.Index()); 124 EXPECT_EQ(3u, IndexOf(static1));
117 EXPECT_EQ(4u, static2.Index()); 125 EXPECT_EQ(4u, IndexOf(static2));
118 }
119
120 TEST_F(HpackEntryTest, ComparatorNameOrdering) {
121 HpackEntry entry1(StaticEntry());
122 name_[0]--;
123 HpackEntry entry2(StaticEntry());
124
125 EXPECT_FALSE(HpackEntry::Comparator()(&entry1, &entry2));
126 EXPECT_TRUE(HpackEntry::Comparator()(&entry2, &entry1));
127 }
128
129 TEST_F(HpackEntryTest, ComparatorValueOrdering) {
130 HpackEntry entry1(StaticEntry());
131 value_[0]--;
132 HpackEntry entry2(StaticEntry());
133
134 EXPECT_FALSE(HpackEntry::Comparator()(&entry1, &entry2));
135 EXPECT_TRUE(HpackEntry::Comparator()(&entry2, &entry1));
136 }
137
138 TEST_F(HpackEntryTest, ComparatorIndexOrdering) {
139 HpackEntry entry1(StaticEntry());
140 HpackEntry entry2(StaticEntry());
141
142 EXPECT_TRUE(HpackEntry::Comparator()(&entry1, &entry2));
143 EXPECT_FALSE(HpackEntry::Comparator()(&entry2, &entry1));
144
145 HpackEntry entry3(DynamicEntry());
146 HpackEntry entry4(DynamicEntry());
147
148 // |entry4| has lower index than |entry3|.
149 EXPECT_TRUE(HpackEntry::Comparator()(&entry4, &entry3));
150 EXPECT_FALSE(HpackEntry::Comparator()(&entry3, &entry4));
151
152 // |entry3| has lower index than |entry1|.
153 EXPECT_TRUE(HpackEntry::Comparator()(&entry3, &entry1));
154 EXPECT_FALSE(HpackEntry::Comparator()(&entry1, &entry3));
155
156 // |entry1| & |entry2| ordering is preserved, though each Index() has changed.
157 EXPECT_TRUE(HpackEntry::Comparator()(&entry1, &entry2));
158 EXPECT_FALSE(HpackEntry::Comparator()(&entry2, &entry1));
159 }
160
161 TEST_F(HpackEntryTest, ComparatorEqualityOrdering) {
162 HpackEntry entry1(StaticEntry());
163 HpackEntry entry2(DynamicEntry());
164
165 EXPECT_FALSE(HpackEntry::Comparator()(&entry1, &entry1));
166 EXPECT_FALSE(HpackEntry::Comparator()(&entry2, &entry2));
167 } 126 }
168 127
169 } // namespace 128 } // namespace
170 129
171 } // namespace net 130 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/hpack_entry.cc ('k') | net/spdy/hpack_header_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698