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_huffman_table.h" | 5 #include "net/spdy/hpack_huffman_table.h" |
6 | 6 |
7 #include <bitset> | 7 #include <bitset> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/strings/string_number_conversions.h" | |
11 #include "net/spdy/hpack_constants.h" | 12 #include "net/spdy/hpack_constants.h" |
12 #include "net/spdy/hpack_input_stream.h" | 13 #include "net/spdy/hpack_input_stream.h" |
13 #include "net/spdy/hpack_output_stream.h" | 14 #include "net/spdy/hpack_output_stream.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 using base::StringPiece; | 18 using base::StringPiece; |
18 using std::string; | 19 using std::string; |
19 using testing::ElementsAre; | 20 using testing::ElementsAre; |
20 using testing::ElementsAreArray; | 21 using testing::ElementsAreArray; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 string result; | 97 string result; |
97 HpackOutputStream output_stream; | 98 HpackOutputStream output_stream; |
98 table_.EncodeString(input, &output_stream); | 99 table_.EncodeString(input, &output_stream); |
99 | 100 |
100 output_stream.TakeString(&result); | 101 output_stream.TakeString(&result); |
101 // Verify EncodedSize() agrees with EncodeString(). | 102 // Verify EncodedSize() agrees with EncodeString(). |
102 EXPECT_EQ(result.size(), table_.EncodedSize(input)); | 103 EXPECT_EQ(result.size(), table_.EncodedSize(input)); |
103 return result; | 104 return result; |
104 } | 105 } |
105 | 106 |
107 string a2b_hex(const char* hex_data) { | |
Ryan Hamilton
2014/05/06 22:28:07
nit: should we consider moving this elsewhere? (I
Johnny
2014/05/06 22:43:17
Done. Moved to spdy_test_utils.cc.
| |
108 std::vector<uint8> output; | |
109 string result; | |
110 if (base::HexStringToBytes(hex_data, &output)) | |
111 result.assign(reinterpret_cast<const char*>(&output[0]), output.size()); | |
112 return result; | |
113 } | |
114 | |
106 HpackHuffmanTable table_; | 115 HpackHuffmanTable table_; |
107 HpackHuffmanTablePeer peer_; | 116 HpackHuffmanTablePeer peer_; |
108 }; | 117 }; |
109 | 118 |
110 MATCHER(DecodeEntryEq, "") { | 119 MATCHER(DecodeEntryEq, "") { |
111 const DecodeEntry& lhs = std::tr1::get<0>(arg); | 120 const DecodeEntry& lhs = std::tr1::get<0>(arg); |
112 const DecodeEntry& rhs = std::tr1::get<1>(arg); | 121 const DecodeEntry& rhs = std::tr1::get<1>(arg); |
113 return lhs.next_table_index == rhs.next_table_index && | 122 return lhs.next_table_index == rhs.next_table_index && |
114 lhs.length == rhs.length && | 123 lhs.length == rhs.length && |
115 lhs.symbol_id == rhs.symbol_id; | 124 lhs.symbol_id == rhs.symbol_id; |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
382 EXPECT_EQ(buffer, "\x06"); | 391 EXPECT_EQ(buffer, "\x06"); |
383 } | 392 } |
384 } | 393 } |
385 | 394 |
386 TEST_F(HpackHuffmanTableTest, SpecRequestExamples) { | 395 TEST_F(HpackHuffmanTableTest, SpecRequestExamples) { |
387 std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode(); | 396 std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode(); |
388 EXPECT_TRUE(table_.Initialize(&code[0], code.size())); | 397 EXPECT_TRUE(table_.Initialize(&code[0], code.size())); |
389 | 398 |
390 string buffer; | 399 string buffer; |
391 string test_table[] = { | 400 string test_table[] = { |
392 "\xdb\x6d\x88\x3e\x68\xd1\xcb\x12\x25\xba\x7f", | 401 a2b_hex("e7cf9bebe89b6fb16fa9b6ff"), |
393 "www.example.com", | 402 "www.example.com", |
394 "\x63\x65\x4a\x13\x98\xff", | 403 a2b_hex("b9b9949556bf"), |
395 "no-cache", | 404 "no-cache", |
396 "\x4e\xb0\x8b\x74\x97\x90\xfa\x7f", | 405 a2b_hex("571c5cdb737b2faf"), |
397 "custom-key", | 406 "custom-key", |
398 "\x4e\xb0\x8b\x74\x97\x9a\x17\xa8\xff", | 407 a2b_hex("571c5cdb73724d9c57"), |
399 "custom-value", | 408 "custom-value", |
400 }; | 409 }; |
401 // Round-trip each test example. | 410 // Round-trip each test example. |
402 for (size_t i = 0; i != arraysize(test_table); i += 2) { | 411 for (size_t i = 0; i != arraysize(test_table); i += 2) { |
403 const string& encodedFixture(test_table[i]); | 412 const string& encodedFixture(test_table[i]); |
404 const string& decodedFixture(test_table[i+1]); | 413 const string& decodedFixture(test_table[i+1]); |
405 HpackInputStream input_stream(kuint32max, encodedFixture); | 414 HpackInputStream input_stream(kuint32max, encodedFixture); |
406 | 415 |
407 EXPECT_TRUE(table_.DecodeString(&input_stream, decodedFixture.size(), | 416 EXPECT_TRUE(table_.DecodeString(&input_stream, decodedFixture.size(), |
408 &buffer)); | 417 &buffer)); |
409 EXPECT_EQ(decodedFixture, buffer); | 418 EXPECT_EQ(decodedFixture, buffer); |
410 buffer = EncodeString(decodedFixture); | 419 buffer = EncodeString(decodedFixture); |
411 EXPECT_EQ(encodedFixture, buffer); | 420 EXPECT_EQ(encodedFixture, buffer); |
412 } | 421 } |
413 } | 422 } |
414 | 423 |
415 TEST_F(HpackHuffmanTableTest, SpecResponseExamples) { | 424 TEST_F(HpackHuffmanTableTest, SpecResponseExamples) { |
416 std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode(); | 425 std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode(); |
417 EXPECT_TRUE(table_.Initialize(&code[0], code.size())); | 426 EXPECT_TRUE(table_.Initialize(&code[0], code.size())); |
418 | 427 |
419 string buffer; | 428 string buffer; |
420 string test_table[] = { | 429 string test_table[] = { |
421 "\x98\xa7", | 430 a2b_hex("4017"), |
422 "302", | 431 "302", |
423 "\x73\xd5\xcd\x11\x1f", | 432 a2b_hex("bf06724b97"), |
424 "private", | 433 "private", |
425 "\xef\x6b\x3a\x7a\x0e\x6e\x8f\xa2\x63\xd0\x72\x9a\x6e\x83\x97\xd8" | 434 a2b_hex("d6dbb29884de2a718805062098513109" |
426 "\x69\xbd\x87\x37\x47\xbb\xbf\xc7", | 435 "b56ba3"), |
427 "Mon, 21 Oct 2013 20:13:21 GMT", | 436 "Mon, 21 Oct 2013 20:13:21 GMT", |
428 "\xce\x31\x74\x3d\x80\x1b\x6d\xb1\x07\xcd\x1a\x39\x62\x44\xb7\x4f", | 437 a2b_hex("adcebf198e7e7cf9bebe89b6fb16fa9b" |
438 "6f"), | |
429 "https://www.example.com", | 439 "https://www.example.com", |
430 "\xc5\xad\xb7\x7f\x87\x6f\xc7\xfb\xf7\xfd\xbf\xbe\xbf\xf3\xf7\xf4" | 440 a2b_hex("e0d6cf9f6e8f9fd3e5f6fa76fefd3c7e" |
431 "\xfb\x7e\xbb\xbe\x9f\x5f\x87\xe3\x7f\xef\xed\xfa\xee\xfa\x7c\x3f" | 441 "df9eff1f2f0f3cfe9f6fcf7f8f879f61" |
432 "\x1d\x5d\x1a\x23\xce\x54\x64\x36\xcd\x49\x4b\xd5\xd1\xcc\x5f\x05" | 442 "ad4f4cc9a973a2200ec3725e18b1b74e" |
433 "\x35\x96\x9b", | 443 "3f"), |
434 "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", | 444 "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", |
435 }; | 445 }; |
436 // Round-trip each test example. | 446 // Round-trip each test example. |
437 for (size_t i = 0; i != arraysize(test_table); i += 2) { | 447 for (size_t i = 0; i != arraysize(test_table); i += 2) { |
438 const string& encodedFixture(test_table[i]); | 448 const string& encodedFixture(test_table[i]); |
439 const string& decodedFixture(test_table[i+1]); | 449 const string& decodedFixture(test_table[i+1]); |
440 HpackInputStream input_stream(kuint32max, encodedFixture); | 450 HpackInputStream input_stream(kuint32max, encodedFixture); |
441 | 451 |
442 EXPECT_TRUE(table_.DecodeString(&input_stream, decodedFixture.size(), | 452 EXPECT_TRUE(table_.DecodeString(&input_stream, decodedFixture.size(), |
443 &buffer)); | 453 &buffer)); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
510 output_stream.TakeString(&encoding); | 520 output_stream.TakeString(&encoding); |
511 EXPECT_EQ(encoding.size(), table_.EncodedSize(test_table[i])); | 521 EXPECT_EQ(encoding.size(), table_.EncodedSize(test_table[i])); |
512 } | 522 } |
513 } | 523 } |
514 | 524 |
515 } // namespace | 525 } // namespace |
516 | 526 |
517 } // namespace test | 527 } // namespace test |
518 | 528 |
519 } // namespace net | 529 } // namespace net |
OLD | NEW |