OLD | NEW |
(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 |
OLD | NEW |