| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/http2/hpack/decoder/hpack_block_decoder.h" | 5 #include "net/http2/hpack/decoder/hpack_block_decoder.h" |
| 6 | 6 |
| 7 // Tests of HpackBlockDecoder. | 7 // Tests of HpackBlockDecoder. |
| 8 | 8 |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 HpackBlockDecoder decoder_; | 83 HpackBlockDecoder decoder_; |
| 84 }; | 84 }; |
| 85 | 85 |
| 86 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.1 | 86 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.1 |
| 87 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_1) { | 87 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_1) { |
| 88 NoArgValidator do_check = [this]() { | 88 NoArgValidator do_check = [this]() { |
| 89 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralNameValueHeader( | 89 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralNameValueHeader( |
| 90 HpackEntryType::kIndexedLiteralHeader, false, "custom-key", false, | 90 HpackEntryType::kIndexedLiteralHeader, false, "custom-key", false, |
| 91 "custom-header")); | 91 "custom-header")); |
| 92 }; | 92 }; |
| 93 EXPECT_TRUE( | 93 const char hpack_example[] = R"( |
| 94 DecodeHpackExampleAndValidateSeveralWays(R"( | |
| 95 40 | == Literal indexed == | 94 40 | == Literal indexed == |
| 96 0a | Literal name (len = 10) | 95 0a | Literal name (len = 10) |
| 97 6375 7374 6f6d 2d6b 6579 | custom-key | 96 6375 7374 6f6d 2d6b 6579 | custom-key |
| 98 0d | Literal value (len = 13) | 97 0d | Literal value (len = 13) |
| 99 6375 7374 6f6d 2d68 6561 6465 72 | custom-header | 98 6375 7374 6f6d 2d68 6561 6465 72 | custom-header |
| 100 | -> custom-key: | 99 | -> custom-key: |
| 101 | custom-header | 100 | custom-header |
| 102 )", | 101 )"; |
| 103 ValidateDoneAndEmpty(do_check))); | 102 EXPECT_TRUE(DecodeHpackExampleAndValidateSeveralWays( |
| 103 hpack_example, ValidateDoneAndEmpty(do_check))); |
| 104 EXPECT_TRUE(do_check()); | 104 EXPECT_TRUE(do_check()); |
| 105 } | 105 } |
| 106 | 106 |
| 107 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.2 | 107 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.2 |
| 108 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_2) { | 108 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_2) { |
| 109 NoArgValidator do_check = [this]() { | 109 NoArgValidator do_check = [this]() { |
| 110 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralValueHeader( | 110 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralValueHeader( |
| 111 HpackEntryType::kUnindexedLiteralHeader, 4, false, "/sample/path")); | 111 HpackEntryType::kUnindexedLiteralHeader, 4, false, "/sample/path")); |
| 112 }; | 112 }; |
| 113 EXPECT_TRUE( | 113 const char hpack_example[] = R"( |
| 114 DecodeHpackExampleAndValidateSeveralWays(R"( | |
| 115 04 | == Literal not indexed == | 114 04 | == Literal not indexed == |
| 116 | Indexed name (idx = 4) | 115 | Indexed name (idx = 4) |
| 117 | :path | 116 | :path |
| 118 0c | Literal value (len = 12) | 117 0c | Literal value (len = 12) |
| 119 2f73 616d 706c 652f 7061 7468 | /sample/path | 118 2f73 616d 706c 652f 7061 7468 | /sample/path |
| 120 | -> :path: /sample/path | 119 | -> :path: /sample/path |
| 121 )", | 120 )"; |
| 122 ValidateDoneAndEmpty(do_check))); | 121 EXPECT_TRUE(DecodeHpackExampleAndValidateSeveralWays( |
| 122 hpack_example, ValidateDoneAndEmpty(do_check))); |
| 123 EXPECT_TRUE(do_check()); | 123 EXPECT_TRUE(do_check()); |
| 124 } | 124 } |
| 125 | 125 |
| 126 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.3 | 126 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.3 |
| 127 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_3) { | 127 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_3) { |
| 128 NoArgValidator do_check = [this]() { | 128 NoArgValidator do_check = [this]() { |
| 129 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralNameValueHeader( | 129 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleLiteralNameValueHeader( |
| 130 HpackEntryType::kNeverIndexedLiteralHeader, false, "password", false, | 130 HpackEntryType::kNeverIndexedLiteralHeader, false, "password", false, |
| 131 "secret")); | 131 "secret")); |
| 132 }; | 132 }; |
| 133 EXPECT_TRUE( | 133 const char hpack_example[] = R"( |
| 134 DecodeHpackExampleAndValidateSeveralWays(R"( | |
| 135 10 | == Literal never indexed == | 134 10 | == Literal never indexed == |
| 136 08 | Literal name (len = 8) | 135 08 | Literal name (len = 8) |
| 137 7061 7373 776f 7264 | password | 136 7061 7373 776f 7264 | password |
| 138 06 | Literal value (len = 6) | 137 06 | Literal value (len = 6) |
| 139 7365 6372 6574 | secret | 138 7365 6372 6574 | secret |
| 140 | -> password: secret | 139 | -> password: secret |
| 141 )", | 140 )"; |
| 142 ValidateDoneAndEmpty(do_check))); | 141 EXPECT_TRUE(DecodeHpackExampleAndValidateSeveralWays( |
| 142 hpack_example, ValidateDoneAndEmpty(do_check))); |
| 143 EXPECT_TRUE(do_check()); | 143 EXPECT_TRUE(do_check()); |
| 144 } | 144 } |
| 145 | 145 |
| 146 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.4 | 146 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.2.4 |
| 147 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_4) { | 147 TEST_F(HpackBlockDecoderTest, SpecExample_C_2_4) { |
| 148 NoArgValidator do_check = [this]() { | 148 NoArgValidator do_check = [this]() { |
| 149 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleIndexedHeader(2)); | 149 VERIFY_AND_RETURN_SUCCESS(collector_.ValidateSoleIndexedHeader(2)); |
| 150 }; | 150 }; |
| 151 EXPECT_TRUE( | 151 const char hpack_example[] = R"( |
| 152 DecodeHpackExampleAndValidateSeveralWays(R"( | |
| 153 82 | == Indexed - Add == | 152 82 | == Indexed - Add == |
| 154 | idx = 2 | 153 | idx = 2 |
| 155 | -> :method: GET | 154 | -> :method: GET |
| 156 )", | 155 )"; |
| 157 ValidateDoneAndEmpty(do_check))); | 156 EXPECT_TRUE(DecodeHpackExampleAndValidateSeveralWays( |
| 157 hpack_example, ValidateDoneAndEmpty(do_check))); |
| 158 EXPECT_TRUE(do_check()); | 158 EXPECT_TRUE(do_check()); |
| 159 } | 159 } |
| 160 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.3.1 | 160 // http://httpwg.org/specs/rfc7541.html#rfc.section.C.3.1 |
| 161 TEST_F(HpackBlockDecoderTest, SpecExample_C_3_1) { | 161 TEST_F(HpackBlockDecoderTest, SpecExample_C_3_1) { |
| 162 string example = R"( | 162 string example = R"( |
| 163 82 | == Indexed - Add == | 163 82 | == Indexed - Add == |
| 164 | idx = 2 | 164 | idx = 2 |
| 165 | -> :method: GET | 165 | -> :method: GET |
| 166 86 | == Indexed - Add == | 166 86 | == Indexed - Add == |
| 167 | idx = 6 | 167 | idx = 6 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 VERIFY_AND_RETURN_SUCCESS(collector_.VerifyEq(expected)); | 287 VERIFY_AND_RETURN_SUCCESS(collector_.VerifyEq(expected)); |
| 288 }; | 288 }; |
| 289 EXPECT_TRUE( | 289 EXPECT_TRUE( |
| 290 DecodeAndValidateSeveralWays(hbb, ValidateDoneAndEmpty(do_check))); | 290 DecodeAndValidateSeveralWays(hbb, ValidateDoneAndEmpty(do_check))); |
| 291 EXPECT_TRUE(do_check()); | 291 EXPECT_TRUE(do_check()); |
| 292 } | 292 } |
| 293 | 293 |
| 294 } // namespace | 294 } // namespace |
| 295 } // namespace test | 295 } // namespace test |
| 296 } // namespace net | 296 } // namespace net |
| OLD | NEW |