OLD | NEW |
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/hpack_input_stream.h" | 5 #include "net/spdy/hpack/hpack_input_stream.h" |
6 | 6 |
7 #include <bitset> | 7 #include <bitset> |
8 #include <string> | |
9 #include <vector> | 8 #include <vector> |
10 | 9 |
11 #include "base/logging.h" | 10 #include "base/logging.h" |
12 #include "net/spdy/hpack/hpack_constants.h" | 11 #include "net/spdy/hpack/hpack_constants.h" |
13 #include "net/spdy/spdy_test_utils.h" | 12 #include "net/spdy/spdy_test_utils.h" |
14 #include "net/test/gtest_util.h" | 13 #include "net/test/gtest_util.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
16 | 15 |
17 namespace net { | 16 namespace net { |
18 | 17 |
19 namespace test { | 18 namespace test { |
20 | 19 |
21 using std::string; | |
22 using test::a2b_hex; | 20 using test::a2b_hex; |
23 | 21 |
24 // Hex representation of encoded length and Huffman string. | 22 // Hex representation of encoded length and Huffman string. |
25 const char kEncodedHuffmanFixture[] = | 23 const char kEncodedHuffmanFixture[] = |
26 "2d" // Length prefix. | 24 "2d" // Length prefix. |
27 "94e7821dd7f2e6c7b335dfdfcd5b3960" | 25 "94e7821dd7f2e6c7b335dfdfcd5b3960" |
28 "d5af27087f3672c1ab270fb5291f9587" | 26 "d5af27087f3672c1ab270fb5291f9587" |
29 "316065c003ed4ee5b1063d5007"; | 27 "316065c003ed4ee5b1063d5007"; |
30 | 28 |
31 const char kDecodedHuffmanFixture[] = | 29 const char kDecodedHuffmanFixture[] = |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 void ExpectDecodeUint32Invalid(uint8_t N, SpdyStringPiece str) { | 64 void ExpectDecodeUint32Invalid(uint8_t N, SpdyStringPiece str) { |
67 EXPECT_GT(N, 0); | 65 EXPECT_GT(N, 0); |
68 EXPECT_LE(N, 8); | 66 EXPECT_LE(N, 8); |
69 HpackInputStream input_stream(str); | 67 HpackInputStream input_stream(str); |
70 HpackInputStreamPeer input_stream_peer(&input_stream); | 68 HpackInputStreamPeer input_stream_peer(&input_stream); |
71 input_stream_peer.SetBitOffsetForTest(8 - N); | 69 input_stream_peer.SetBitOffsetForTest(8 - N); |
72 uint32_t I; | 70 uint32_t I; |
73 EXPECT_FALSE(input_stream.DecodeNextUint32(&I)); | 71 EXPECT_FALSE(input_stream.DecodeNextUint32(&I)); |
74 } | 72 } |
75 | 73 |
76 uint32_t bits32(const string& bitstring) { | 74 uint32_t bits32(const SpdyString& bitstring) { |
77 return std::bitset<32>(bitstring).to_ulong(); | 75 return std::bitset<32>(bitstring).to_ulong(); |
78 } | 76 } |
79 | 77 |
80 // The {Number}ByteIntegersEightBitPrefix tests below test that | 78 // The {Number}ByteIntegersEightBitPrefix tests below test that |
81 // certain integers are decoded correctly with an 8-bit prefix in | 79 // certain integers are decoded correctly with an 8-bit prefix in |
82 // exactly {Number} bytes. | 80 // exactly {Number} bytes. |
83 | 81 |
84 TEST(HpackInputStreamTest, OneByteIntegersEightBitPrefix) { | 82 TEST(HpackInputStreamTest, OneByteIntegersEightBitPrefix) { |
85 // Minimum. | 83 // Minimum. |
86 EXPECT_EQ(0x00u, DecodeValidUint32(8, string("\x00", 1))); | 84 EXPECT_EQ(0x00u, DecodeValidUint32(8, SpdyString("\x00", 1))); |
87 EXPECT_EQ(0x7fu, DecodeValidUint32(8, "\x7f")); | 85 EXPECT_EQ(0x7fu, DecodeValidUint32(8, "\x7f")); |
88 // Maximum. | 86 // Maximum. |
89 EXPECT_EQ(0xfeu, DecodeValidUint32(8, "\xfe")); | 87 EXPECT_EQ(0xfeu, DecodeValidUint32(8, "\xfe")); |
90 // Invalid. | 88 // Invalid. |
91 ExpectDecodeUint32Invalid(8, "\xff"); | 89 ExpectDecodeUint32Invalid(8, "\xff"); |
92 } | 90 } |
93 | 91 |
94 TEST(HpackInputStreamTest, TwoByteIntegersEightBitPrefix) { | 92 TEST(HpackInputStreamTest, TwoByteIntegersEightBitPrefix) { |
95 // Minimum. | 93 // Minimum. |
96 EXPECT_EQ(0xffu, DecodeValidUint32(8, string("\xff\x00", 2))); | 94 EXPECT_EQ(0xffu, DecodeValidUint32(8, SpdyString("\xff\x00", 2))); |
97 EXPECT_EQ(0x0100u, DecodeValidUint32(8, "\xff\x01")); | 95 EXPECT_EQ(0x0100u, DecodeValidUint32(8, "\xff\x01")); |
98 // Maximum. | 96 // Maximum. |
99 EXPECT_EQ(0x017eu, DecodeValidUint32(8, "\xff\x7f")); | 97 EXPECT_EQ(0x017eu, DecodeValidUint32(8, "\xff\x7f")); |
100 // Invalid. | 98 // Invalid. |
101 ExpectDecodeUint32Invalid(8, "\xff\x80"); | 99 ExpectDecodeUint32Invalid(8, "\xff\x80"); |
102 ExpectDecodeUint32Invalid(8, "\xff\xff"); | 100 ExpectDecodeUint32Invalid(8, "\xff\xff"); |
103 } | 101 } |
104 | 102 |
105 TEST(HpackInputStreamTest, ThreeByteIntegersEightBitPrefix) { | 103 TEST(HpackInputStreamTest, ThreeByteIntegersEightBitPrefix) { |
106 // Minimum. | 104 // Minimum. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 ExpectDecodeUint32Invalid(8, "\xff\x80\x80\x80\x80\x80\x01"); | 157 ExpectDecodeUint32Invalid(8, "\xff\x80\x80\x80\x80\x80\x01"); |
160 ExpectDecodeUint32Invalid(8, "\xff\xff\xff\xff\xff\xff\xff"); | 158 ExpectDecodeUint32Invalid(8, "\xff\xff\xff\xff\xff\xff\xff"); |
161 } | 159 } |
162 | 160 |
163 // The {Number}ByteIntegersOneToSevenBitPrefix tests below test that | 161 // The {Number}ByteIntegersOneToSevenBitPrefix tests below test that |
164 // certain integers are encoded correctly with an N-bit prefix in | 162 // certain integers are encoded correctly with an N-bit prefix in |
165 // exactly {Number} bytes for N in {1, 2, ..., 7}. | 163 // exactly {Number} bytes for N in {1, 2, ..., 7}. |
166 | 164 |
167 TEST(HpackInputStreamTest, OneByteIntegersOneToSevenBitPrefixes) { | 165 TEST(HpackInputStreamTest, OneByteIntegersOneToSevenBitPrefixes) { |
168 // Minimums. | 166 // Minimums. |
169 EXPECT_EQ(0x00u, DecodeValidUint32(7, string("\x00", 1))); | 167 EXPECT_EQ(0x00u, DecodeValidUint32(7, SpdyString("\x00", 1))); |
170 EXPECT_EQ(0x00u, DecodeValidUint32(7, "\x80")); | 168 EXPECT_EQ(0x00u, DecodeValidUint32(7, "\x80")); |
171 EXPECT_EQ(0x00u, DecodeValidUint32(6, string("\x00", 1))); | 169 EXPECT_EQ(0x00u, DecodeValidUint32(6, SpdyString("\x00", 1))); |
172 EXPECT_EQ(0x00u, DecodeValidUint32(6, "\xc0")); | 170 EXPECT_EQ(0x00u, DecodeValidUint32(6, "\xc0")); |
173 EXPECT_EQ(0x00u, DecodeValidUint32(5, string("\x00", 1))); | 171 EXPECT_EQ(0x00u, DecodeValidUint32(5, SpdyString("\x00", 1))); |
174 EXPECT_EQ(0x00u, DecodeValidUint32(5, "\xe0")); | 172 EXPECT_EQ(0x00u, DecodeValidUint32(5, "\xe0")); |
175 EXPECT_EQ(0x00u, DecodeValidUint32(4, string("\x00", 1))); | 173 EXPECT_EQ(0x00u, DecodeValidUint32(4, SpdyString("\x00", 1))); |
176 EXPECT_EQ(0x00u, DecodeValidUint32(4, "\xf0")); | 174 EXPECT_EQ(0x00u, DecodeValidUint32(4, "\xf0")); |
177 EXPECT_EQ(0x00u, DecodeValidUint32(3, string("\x00", 1))); | 175 EXPECT_EQ(0x00u, DecodeValidUint32(3, SpdyString("\x00", 1))); |
178 EXPECT_EQ(0x00u, DecodeValidUint32(3, "\xf8")); | 176 EXPECT_EQ(0x00u, DecodeValidUint32(3, "\xf8")); |
179 EXPECT_EQ(0x00u, DecodeValidUint32(2, string("\x00", 1))); | 177 EXPECT_EQ(0x00u, DecodeValidUint32(2, SpdyString("\x00", 1))); |
180 EXPECT_EQ(0x00u, DecodeValidUint32(2, "\xfc")); | 178 EXPECT_EQ(0x00u, DecodeValidUint32(2, "\xfc")); |
181 EXPECT_EQ(0x00u, DecodeValidUint32(1, string("\x00", 1))); | 179 EXPECT_EQ(0x00u, DecodeValidUint32(1, SpdyString("\x00", 1))); |
182 EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe")); | 180 EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe")); |
183 | 181 |
184 // Maximums. | 182 // Maximums. |
185 EXPECT_EQ(0x7eu, DecodeValidUint32(7, "\x7e")); | 183 EXPECT_EQ(0x7eu, DecodeValidUint32(7, "\x7e")); |
186 EXPECT_EQ(0x7eu, DecodeValidUint32(7, "\xfe")); | 184 EXPECT_EQ(0x7eu, DecodeValidUint32(7, "\xfe")); |
187 EXPECT_EQ(0x3eu, DecodeValidUint32(6, "\x3e")); | 185 EXPECT_EQ(0x3eu, DecodeValidUint32(6, "\x3e")); |
188 EXPECT_EQ(0x3eu, DecodeValidUint32(6, "\xfe")); | 186 EXPECT_EQ(0x3eu, DecodeValidUint32(6, "\xfe")); |
189 EXPECT_EQ(0x1eu, DecodeValidUint32(5, "\x1e")); | 187 EXPECT_EQ(0x1eu, DecodeValidUint32(5, "\x1e")); |
190 EXPECT_EQ(0x1eu, DecodeValidUint32(5, "\xfe")); | 188 EXPECT_EQ(0x1eu, DecodeValidUint32(5, "\xfe")); |
191 EXPECT_EQ(0x0eu, DecodeValidUint32(4, "\x0e")); | 189 EXPECT_EQ(0x0eu, DecodeValidUint32(4, "\x0e")); |
192 EXPECT_EQ(0x0eu, DecodeValidUint32(4, "\xfe")); | 190 EXPECT_EQ(0x0eu, DecodeValidUint32(4, "\xfe")); |
193 EXPECT_EQ(0x06u, DecodeValidUint32(3, "\x06")); | 191 EXPECT_EQ(0x06u, DecodeValidUint32(3, "\x06")); |
194 EXPECT_EQ(0x06u, DecodeValidUint32(3, "\xfe")); | 192 EXPECT_EQ(0x06u, DecodeValidUint32(3, "\xfe")); |
195 EXPECT_EQ(0x02u, DecodeValidUint32(2, "\x02")); | 193 EXPECT_EQ(0x02u, DecodeValidUint32(2, "\x02")); |
196 EXPECT_EQ(0x02u, DecodeValidUint32(2, "\xfe")); | 194 EXPECT_EQ(0x02u, DecodeValidUint32(2, "\xfe")); |
197 EXPECT_EQ(0x00u, DecodeValidUint32(1, string("\x00", 1))); | 195 EXPECT_EQ(0x00u, DecodeValidUint32(1, SpdyString("\x00", 1))); |
198 EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe")); | 196 EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe")); |
199 | 197 |
200 // Invalid. | 198 // Invalid. |
201 ExpectDecodeUint32Invalid(7, "\x7f"); | 199 ExpectDecodeUint32Invalid(7, "\x7f"); |
202 ExpectDecodeUint32Invalid(7, "\xff"); | 200 ExpectDecodeUint32Invalid(7, "\xff"); |
203 ExpectDecodeUint32Invalid(6, "\x3f"); | 201 ExpectDecodeUint32Invalid(6, "\x3f"); |
204 ExpectDecodeUint32Invalid(6, "\xff"); | 202 ExpectDecodeUint32Invalid(6, "\xff"); |
205 ExpectDecodeUint32Invalid(5, "\x1f"); | 203 ExpectDecodeUint32Invalid(5, "\x1f"); |
206 ExpectDecodeUint32Invalid(5, "\xff"); | 204 ExpectDecodeUint32Invalid(5, "\xff"); |
207 ExpectDecodeUint32Invalid(4, "\x0f"); | 205 ExpectDecodeUint32Invalid(4, "\x0f"); |
208 ExpectDecodeUint32Invalid(4, "\xff"); | 206 ExpectDecodeUint32Invalid(4, "\xff"); |
209 ExpectDecodeUint32Invalid(3, "\x07"); | 207 ExpectDecodeUint32Invalid(3, "\x07"); |
210 ExpectDecodeUint32Invalid(3, "\xff"); | 208 ExpectDecodeUint32Invalid(3, "\xff"); |
211 ExpectDecodeUint32Invalid(2, "\x03"); | 209 ExpectDecodeUint32Invalid(2, "\x03"); |
212 ExpectDecodeUint32Invalid(2, "\xff"); | 210 ExpectDecodeUint32Invalid(2, "\xff"); |
213 ExpectDecodeUint32Invalid(1, "\x01"); | 211 ExpectDecodeUint32Invalid(1, "\x01"); |
214 ExpectDecodeUint32Invalid(1, "\xff"); | 212 ExpectDecodeUint32Invalid(1, "\xff"); |
215 } | 213 } |
216 | 214 |
217 TEST(HpackInputStreamTest, TwoByteIntegersOneToSevenBitPrefixes) { | 215 TEST(HpackInputStreamTest, TwoByteIntegersOneToSevenBitPrefixes) { |
218 // Minimums. | 216 // Minimums. |
219 EXPECT_EQ(0x7fu, DecodeValidUint32(7, string("\x7f\x00", 2))); | 217 EXPECT_EQ(0x7fu, DecodeValidUint32(7, SpdyString("\x7f\x00", 2))); |
220 EXPECT_EQ(0x7fu, DecodeValidUint32(7, string("\xff\x00", 2))); | 218 EXPECT_EQ(0x7fu, DecodeValidUint32(7, SpdyString("\xff\x00", 2))); |
221 EXPECT_EQ(0x3fu, DecodeValidUint32(6, string("\x3f\x00", 2))); | 219 EXPECT_EQ(0x3fu, DecodeValidUint32(6, SpdyString("\x3f\x00", 2))); |
222 EXPECT_EQ(0x3fu, DecodeValidUint32(6, string("\xff\x00", 2))); | 220 EXPECT_EQ(0x3fu, DecodeValidUint32(6, SpdyString("\xff\x00", 2))); |
223 EXPECT_EQ(0x1fu, DecodeValidUint32(5, string("\x1f\x00", 2))); | 221 EXPECT_EQ(0x1fu, DecodeValidUint32(5, SpdyString("\x1f\x00", 2))); |
224 EXPECT_EQ(0x1fu, DecodeValidUint32(5, string("\xff\x00", 2))); | 222 EXPECT_EQ(0x1fu, DecodeValidUint32(5, SpdyString("\xff\x00", 2))); |
225 EXPECT_EQ(0x0fu, DecodeValidUint32(4, string("\x0f\x00", 2))); | 223 EXPECT_EQ(0x0fu, DecodeValidUint32(4, SpdyString("\x0f\x00", 2))); |
226 EXPECT_EQ(0x0fu, DecodeValidUint32(4, string("\xff\x00", 2))); | 224 EXPECT_EQ(0x0fu, DecodeValidUint32(4, SpdyString("\xff\x00", 2))); |
227 EXPECT_EQ(0x07u, DecodeValidUint32(3, string("\x07\x00", 2))); | 225 EXPECT_EQ(0x07u, DecodeValidUint32(3, SpdyString("\x07\x00", 2))); |
228 EXPECT_EQ(0x07u, DecodeValidUint32(3, string("\xff\x00", 2))); | 226 EXPECT_EQ(0x07u, DecodeValidUint32(3, SpdyString("\xff\x00", 2))); |
229 EXPECT_EQ(0x03u, DecodeValidUint32(2, string("\x03\x00", 2))); | 227 EXPECT_EQ(0x03u, DecodeValidUint32(2, SpdyString("\x03\x00", 2))); |
230 EXPECT_EQ(0x03u, DecodeValidUint32(2, string("\xff\x00", 2))); | 228 EXPECT_EQ(0x03u, DecodeValidUint32(2, SpdyString("\xff\x00", 2))); |
231 EXPECT_EQ(0x01u, DecodeValidUint32(1, string("\x01\x00", 2))); | 229 EXPECT_EQ(0x01u, DecodeValidUint32(1, SpdyString("\x01\x00", 2))); |
232 EXPECT_EQ(0x01u, DecodeValidUint32(1, string("\xff\x00", 2))); | 230 EXPECT_EQ(0x01u, DecodeValidUint32(1, SpdyString("\xff\x00", 2))); |
233 | 231 |
234 // Maximums. | 232 // Maximums. |
235 EXPECT_EQ(0xfeu, DecodeValidUint32(7, "\x7f\x7f")); | 233 EXPECT_EQ(0xfeu, DecodeValidUint32(7, "\x7f\x7f")); |
236 EXPECT_EQ(0xfeu, DecodeValidUint32(7, "\xff\x7f")); | 234 EXPECT_EQ(0xfeu, DecodeValidUint32(7, "\xff\x7f")); |
237 EXPECT_EQ(0xbeu, DecodeValidUint32(6, "\x3f\x7f")); | 235 EXPECT_EQ(0xbeu, DecodeValidUint32(6, "\x3f\x7f")); |
238 EXPECT_EQ(0xbeu, DecodeValidUint32(6, "\xff\x7f")); | 236 EXPECT_EQ(0xbeu, DecodeValidUint32(6, "\xff\x7f")); |
239 EXPECT_EQ(0x9eu, DecodeValidUint32(5, "\x1f\x7f")); | 237 EXPECT_EQ(0x9eu, DecodeValidUint32(5, "\x1f\x7f")); |
240 EXPECT_EQ(0x9eu, DecodeValidUint32(5, "\xff\x7f")); | 238 EXPECT_EQ(0x9eu, DecodeValidUint32(5, "\xff\x7f")); |
241 EXPECT_EQ(0x8eu, DecodeValidUint32(4, "\x0f\x7f")); | 239 EXPECT_EQ(0x8eu, DecodeValidUint32(4, "\x0f\x7f")); |
242 EXPECT_EQ(0x8eu, DecodeValidUint32(4, "\xff\x7f")); | 240 EXPECT_EQ(0x8eu, DecodeValidUint32(4, "\xff\x7f")); |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // Set the length to be one more than it should be. | 508 // Set the length to be one more than it should be. |
511 HpackInputStream input_stream("\x0fstring literal"); | 509 HpackInputStream input_stream("\x0fstring literal"); |
512 | 510 |
513 EXPECT_TRUE(input_stream.HasMoreData()); | 511 EXPECT_TRUE(input_stream.HasMoreData()); |
514 SpdyStringPiece string_piece; | 512 SpdyStringPiece string_piece; |
515 EXPECT_FALSE(input_stream.DecodeNextIdentityString(&string_piece)); | 513 EXPECT_FALSE(input_stream.DecodeNextIdentityString(&string_piece)); |
516 EXPECT_TRUE(input_stream.NeedMoreData()); | 514 EXPECT_TRUE(input_stream.NeedMoreData()); |
517 } | 515 } |
518 | 516 |
519 TEST(HpackInputStreamTest, DecodeNextHuffmanString) { | 517 TEST(HpackInputStreamTest, DecodeNextHuffmanString) { |
520 string output, input(a2b_hex(kEncodedHuffmanFixture)); | 518 SpdyString output, input(a2b_hex(kEncodedHuffmanFixture)); |
521 HpackInputStream input_stream(input); | 519 HpackInputStream input_stream(input); |
522 HpackInputStreamPeer input_stream_peer(&input_stream); | 520 HpackInputStreamPeer input_stream_peer(&input_stream); |
523 | 521 |
524 EXPECT_TRUE(input_stream.HasMoreData()); | 522 EXPECT_TRUE(input_stream.HasMoreData()); |
525 EXPECT_TRUE(input_stream.DecodeNextHuffmanString(&output)); | 523 EXPECT_TRUE(input_stream.DecodeNextHuffmanString(&output)); |
526 EXPECT_EQ(kDecodedHuffmanFixture, output); | 524 EXPECT_EQ(kDecodedHuffmanFixture, output); |
527 EXPECT_FALSE(input_stream.HasMoreData()); | 525 EXPECT_FALSE(input_stream.HasMoreData()); |
528 EXPECT_FALSE(input_stream.NeedMoreData()); | 526 EXPECT_FALSE(input_stream.NeedMoreData()); |
529 EXPECT_EQ(46u, input_stream_peer.ParsedBytesCurrent()); | 527 EXPECT_EQ(46u, input_stream_peer.ParsedBytesCurrent()); |
530 } | 528 } |
531 | 529 |
532 TEST(HpackInputStreamTest, DecodeNextHuffmanStringNotEnoughInput) { | 530 TEST(HpackInputStreamTest, DecodeNextHuffmanStringNotEnoughInput) { |
533 string output, input(a2b_hex(kEncodedHuffmanFixture)); | 531 SpdyString output, input(a2b_hex(kEncodedHuffmanFixture)); |
534 input[0]++; // Input prefix is one byte larger than available input. | 532 input[0]++; // Input prefix is one byte larger than available input. |
535 HpackInputStream input_stream(input); | 533 HpackInputStream input_stream(input); |
536 | 534 |
537 // Not enough buffer for declared encoded length. | 535 // Not enough buffer for declared encoded length. |
538 EXPECT_TRUE(input_stream.HasMoreData()); | 536 EXPECT_TRUE(input_stream.HasMoreData()); |
539 EXPECT_FALSE(input_stream.DecodeNextHuffmanString(&output)); | 537 EXPECT_FALSE(input_stream.DecodeNextHuffmanString(&output)); |
540 EXPECT_TRUE(input_stream.NeedMoreData()); | 538 EXPECT_TRUE(input_stream.NeedMoreData()); |
541 } | 539 } |
542 | 540 |
543 TEST(HpackInputStreamTest, PeekBitsAndConsume) { | 541 TEST(HpackInputStreamTest, PeekBitsAndConsume) { |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 | 752 |
755 HpackInputStream input_stream2("\x0e"); | 753 HpackInputStream input_stream2("\x0e"); |
756 HpackInputStreamPeer input_stream2_peer(&input_stream2); | 754 HpackInputStreamPeer input_stream2_peer(&input_stream2); |
757 EXPECT_FALSE(input_stream2.DecodeNextIdentityString(&string_piece)); | 755 EXPECT_FALSE(input_stream2.DecodeNextIdentityString(&string_piece)); |
758 // Only parsed first byte. | 756 // Only parsed first byte. |
759 EXPECT_EQ(1u, input_stream2_peer.ParsedBytesCurrent()); | 757 EXPECT_EQ(1u, input_stream2_peer.ParsedBytesCurrent()); |
760 EXPECT_TRUE(input_stream2.NeedMoreData()); | 758 EXPECT_TRUE(input_stream2.NeedMoreData()); |
761 } | 759 } |
762 | 760 |
763 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextHuffmanString) { | 761 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextHuffmanString) { |
764 string output, input(a2b_hex(kEncodedHuffmanFixture)); | 762 SpdyString output, input(a2b_hex(kEncodedHuffmanFixture)); |
765 input.resize(input.size() - 1); // Remove last byte. | 763 input.resize(input.size() - 1); // Remove last byte. |
766 HpackInputStream input_stream1(input); | 764 HpackInputStream input_stream1(input); |
767 HpackInputStreamPeer input_stream1_peer(&input_stream1); | 765 HpackInputStreamPeer input_stream1_peer(&input_stream1); |
768 EXPECT_FALSE(input_stream1.DecodeNextHuffmanString(&output)); | 766 EXPECT_FALSE(input_stream1.DecodeNextHuffmanString(&output)); |
769 EXPECT_EQ(1u, input_stream1_peer.ParsedBytesCurrent()); | 767 EXPECT_EQ(1u, input_stream1_peer.ParsedBytesCurrent()); |
770 EXPECT_TRUE(input_stream1.NeedMoreData()); | 768 EXPECT_TRUE(input_stream1.NeedMoreData()); |
771 | 769 |
772 input.erase(1, input.size()); // Remove all bytes except the first one. | 770 input.erase(1, input.size()); // Remove all bytes except the first one. |
773 HpackInputStream input_stream2(input); | 771 HpackInputStream input_stream2(input); |
774 HpackInputStreamPeer input_stream2_peer(&input_stream2); | 772 HpackInputStreamPeer input_stream2_peer(&input_stream2); |
775 EXPECT_FALSE(input_stream2.DecodeNextHuffmanString(&output)); | 773 EXPECT_FALSE(input_stream2.DecodeNextHuffmanString(&output)); |
776 EXPECT_EQ(1u, input_stream2_peer.ParsedBytesCurrent()); | 774 EXPECT_EQ(1u, input_stream2_peer.ParsedBytesCurrent()); |
777 EXPECT_TRUE(input_stream2.NeedMoreData()); | 775 EXPECT_TRUE(input_stream2.NeedMoreData()); |
778 } | 776 } |
779 | 777 |
780 } // namespace test | 778 } // namespace test |
781 | 779 |
782 } // namespace net | 780 } // namespace net |
OLD | NEW |