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

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

Issue 22074002: DO NOT COMMIT: Implement HPACK (draft 03) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update for httpbis-draft-06 / hpack-draft-03 Created 7 years, 2 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/http2_decompressor.cc ('k') | net/spdy/http2_encoding_context.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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 "net/spdy/http2_decompressor.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace net {
9 namespace {
10
11 class Http2DecompressorTest : public ::testing::Test {
12 };
13
14 TEST_F(Http2DecompressorTest, Simple) {
15 Http2Decompressor decompressor;
16 SpdyNameValueBlock expected_name_value_block;
17 expected_name_value_block["name1"] = "value1";
18 expected_name_value_block["name2"] = "value2";
19 expected_name_value_block["name3"] = "value3";
20
21 std::string encoded;
22 encoded.append(1, 0x60);
23 encoded.append(1, 0x05);
24 encoded.append("name1");
25 encoded.append(1, 0x06);
26 encoded.append("value1");
27 encoded.append(1, 0x60);
28 encoded.append(1, 0x05);
29 encoded.append("name2");
30 encoded.append(1, 0x06);
31 encoded.append("value2");
32 encoded.append(1, 0x60);
33 encoded.append(1, 0x05);
34 encoded.append("name3");
35 encoded.append(1, 0x06);
36 encoded.append("value3");
37
38 SpdyNameValueBlock name_value_block;
39 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
40 encoded.size(),
41 &name_value_block));
42 EXPECT_EQ(expected_name_value_block, name_value_block);
43 }
44
45 TEST_F(Http2DecompressorTest, Long) {
46 Http2Decompressor decompressor;
47 SpdyNameValueBlock expected_name_value_block;
48 std::string name(1000, 'n');
49 std::string value(10000, 'v');
50 expected_name_value_block[name] = value;
51
52 std::string encoded;
53 encoded.append(1, 0x60);
54 encoded.append(1, 0x80 | 104);
55 encoded.append(1, 7);
56 encoded.append(name);
57 encoded.append(1, 0x80 | 16);
58 encoded.append(1, 78);
59 encoded.append(value);
60
61 SpdyNameValueBlock name_value_block;
62 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
63 encoded.size(),
64 &name_value_block));
65 EXPECT_EQ(expected_name_value_block, name_value_block);
66 }
67
68 TEST_F(Http2DecompressorTest, PreExisting) {
69 Http2Decompressor decompressor;
70 SpdyNameValueBlock expected_name_value_block;
71 expected_name_value_block[":status"] = "200";
72 expected_name_value_block["www-authenticate"] = "";
73
74 std::string encoded;
75 // :status
76 encoded.append(1, 0x80 | 0);
77 // www-authenticate
78 encoded.append(1, 0x80 | 34);
79
80 SpdyNameValueBlock name_value_block;
81 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
82 encoded.size(),
83 &name_value_block));
84 EXPECT_EQ(expected_name_value_block, name_value_block);
85 }
86
87 TEST_F(Http2DecompressorTest, DifferentialSimple) {
88 Http2Decompressor decompressor;
89 SpdyNameValueBlock expected_name_value_block;
90 expected_name_value_block["name1"] = "value1";
91 expected_name_value_block["name2"] = "value2";
92
93 {
94 std::string encoded;
95 // name1 is indexed.
96 encoded.append(1, 0x40);
97 encoded.append(1, 0x05);
98 encoded.append("name1");
99 encoded.append(1, 0x06);
100 encoded.append("value1");
101
102 // name2 is not indexed.
103 encoded.append(1, 0x60);
104 encoded.append(1, 0x05);
105 encoded.append("name2");
106 encoded.append(1, 0x06);
107 encoded.append("value2");
108
109 SpdyNameValueBlock name_value_block;
110 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
111 encoded.size(),
112 &name_value_block));
113 EXPECT_EQ(expected_name_value_block, name_value_block);
114 }
115
116 {
117 expected_name_value_block.erase("name2");
118 SpdyNameValueBlock name_value_block;
119 EXPECT_TRUE(decompressor.DecodeNameValueBlock(NULL,
120 0,
121 &name_value_block));
122 EXPECT_EQ(expected_name_value_block, name_value_block);
123 }
124 }
125
126 TEST_F(Http2DecompressorTest, DifferentialPreExisting) {
127 Http2Decompressor decompressor;
128 SpdyNameValueBlock expected_name_value_block;
129 expected_name_value_block[":status"] = "200";
130 expected_name_value_block["www-authenticate"] = "";
131
132 {
133 std::string encoded;
134 // :status
135 encoded.append(1, 0x80 | 0);
136 // www-authenticate
137 encoded.append(1, 0x80 | 34);
138
139 SpdyNameValueBlock name_value_block;
140 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
141 encoded.size(),
142 &name_value_block));
143 EXPECT_EQ(expected_name_value_block, name_value_block);
144 }
145
146 {
147 SpdyNameValueBlock name_value_block;
148 EXPECT_TRUE(decompressor.DecodeNameValueBlock(NULL,
149 0,
150 &name_value_block));
151 EXPECT_EQ(expected_name_value_block, name_value_block);
152 }
153 }
154
155 TEST_F(Http2DecompressorTest, DifferentialToggle) {
156 Http2Decompressor decompressor;
157 SpdyNameValueBlock expected_name_value_block;
158 expected_name_value_block["name1"] = "value1";
159
160 {
161 std::string encoded;
162 // name1 is indexed.
163 encoded.append(1, 0x40);
164 encoded.append(1, 0x05);
165 encoded.append("name1");
166 encoded.append(1, 0x06);
167 encoded.append("value1");
168
169 SpdyNameValueBlock name_value_block;
170 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
171 encoded.size(),
172 &name_value_block));
173 EXPECT_EQ(expected_name_value_block, name_value_block);
174 }
175
176 {
177 std::string encoded;
178 // Toggle name1.
179 encoded.append(1, 0x80 | 35);
180
181 expected_name_value_block.erase("name1");
182 SpdyNameValueBlock name_value_block;
183 EXPECT_TRUE(decompressor.DecodeNameValueBlock(encoded.data(),
184 encoded.size(),
185 &name_value_block));
186 EXPECT_EQ(expected_name_value_block, name_value_block);
187 }
188 }
189
190 } // namespace
191 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/http2_decompressor.cc ('k') | net/spdy/http2_encoding_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698