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

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

Issue 138243003: Implement basic classes for HPACK (HTTP/2 compression) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: And removing tabs from net.gyp... Created 6 years, 11 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
OLDNEW
(Empty)
1 #include "net/spdy/hpack_entry.h"
2
3 #include <string>
4
5 #include "testing/gtest/include/gtest/gtest.h"
6
7 namespace net {
8
9 namespace {
10
11 using std::string;
12
13 const char kName[] = "headername";
14 const uint32 kNameStringLength = arraysize(kName) - 1;
15 const char kValue[] = "Header Value";
16 const uint32 kValueStringLength = arraysize(kValue) - 1;
17
18 // Make sure a default-constructed entry is still valid and starts off
19 // empty, unreferenced, and untouched.
20 TEST(HpackEntryTest, DefaultConstructor) {
21 HpackEntry entry;
22 EXPECT_TRUE(entry.name().empty());
23 EXPECT_TRUE(entry.value().empty());
24 EXPECT_FALSE(entry.IsReferenced());
25 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
26 EXPECT_EQ(HpackEntry::kSizeOverhead, entry.Size());
27 }
28
29 // Make sure a non-default-constructed HpackEntry starts off with
30 // copies of the given name and value, and unreferenced and untouched.
31 TEST(HpackEntryTest, NormalConstructor) {
32 string name = kName;
33 string value = kValue;
34 HpackEntry entry(name, value);
35 EXPECT_EQ(name, entry.name());
36 EXPECT_EQ(value, entry.value());
37
38 ++name[0];
39 ++value[0];
40 EXPECT_NE(name, entry.name());
41 EXPECT_NE(value, entry.name());
42
43 EXPECT_FALSE(entry.IsReferenced());
44 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
45 EXPECT_EQ(
46 kNameStringLength + kValueStringLength + HpackEntry::kSizeOverhead,
47 entry.Size());
48 }
49
50 // Make sure twiddling the referenced bit doesn't affect the touch
51 // count when it's kUntouched.
52 TEST(HpackEntryTest, IsReferencedUntouched) {
53 HpackEntry entry(kName, kValue);
54 EXPECT_FALSE(entry.IsReferenced());
55 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
56
57 entry.SetReferenced(true);
58 EXPECT_TRUE(entry.IsReferenced());
59 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
60
61 entry.SetReferenced(false);
62 EXPECT_FALSE(entry.IsReferenced());
63 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
64 }
65
66 // Make sure changing the touch count doesn't affect the referenced
67 // bit when it's false.
68 TEST(HpackEntryTest, TouchCountNotReferenced) {
69 HpackEntry entry(kName, kValue);
70 EXPECT_FALSE(entry.IsReferenced());
71 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
72
73 entry.AddTouches(0);
74 EXPECT_FALSE(entry.IsReferenced());
75 EXPECT_EQ(0u, entry.TouchCount());
76
77 entry.AddTouches(255);
78 EXPECT_FALSE(entry.IsReferenced());
79 EXPECT_EQ(255u, entry.TouchCount());
80
81 // Assumes kUntouched is 1 + max touch count.
82 entry.AddTouches(HpackEntry::kUntouched - 256);
83 EXPECT_FALSE(entry.IsReferenced());
84 EXPECT_EQ(HpackEntry::kUntouched - 1, entry.TouchCount());
85
86 entry.ClearTouches();
87 EXPECT_FALSE(entry.IsReferenced());
88 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
89 }
90
91 // Make sure changing the touch count doesn't affect the referenced
92 // bit when it's true.
93 TEST(HpackEntryTest, TouchCountReferenced) {
94 HpackEntry entry(kName, kValue);
95 entry.SetReferenced(true);
96 EXPECT_TRUE(entry.IsReferenced());
97 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
98
99 entry.AddTouches(0);
100 EXPECT_TRUE(entry.IsReferenced());
101 EXPECT_EQ(0u, entry.TouchCount());
102
103 entry.AddTouches(255);
104 EXPECT_TRUE(entry.IsReferenced());
105 EXPECT_EQ(255u, entry.TouchCount());
106
107 // Assumes kUntouched is 1 + max touch count.
108 entry.AddTouches(HpackEntry::kUntouched - 256);
109 EXPECT_TRUE(entry.IsReferenced());
110 EXPECT_EQ(HpackEntry::kUntouched - 1, entry.TouchCount());
111
112 entry.ClearTouches();
113 EXPECT_TRUE(entry.IsReferenced());
114 EXPECT_EQ(HpackEntry::kUntouched, entry.TouchCount());
115 }
116
117 // Make sure equality takes into account all entry fields.
118 TEST(HpackEntryTest, Equals) {
119 HpackEntry entry1(kName, kValue);
120 HpackEntry entry2(kName, kValue);
121 EXPECT_TRUE(entry1.Equals(entry2));
122
123 entry2.SetReferenced(true);
124 EXPECT_FALSE(entry1.Equals(entry2));
125 entry2.SetReferenced(false);
126 EXPECT_TRUE(entry1.Equals(entry2));
127
128 entry2.AddTouches(0);
129 EXPECT_FALSE(entry1.Equals(entry2));
130 entry2.ClearTouches();
131 EXPECT_TRUE(entry1.Equals(entry2));
132
133 entry2.AddTouches(1);
134 EXPECT_FALSE(entry1.Equals(entry2));
135 entry2.ClearTouches();
136 EXPECT_TRUE(entry1.Equals(entry2));
137
138 HpackEntry entry3(kName, string(kValue) + kValue);
139 EXPECT_FALSE(entry1.Equals(entry3));
140
141 HpackEntry entry4(string(kName) + kName, kValue);
142 EXPECT_FALSE(entry1.Equals(entry4));
143 }
144
145 } // namespace
146
147 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698