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 <fstream> | 5 #include <fstream> |
6 #include <ostream> | 6 #include <ostream> |
7 | 7 |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 // +---+---+---+---+---+---+---+---+---+---+ | 26 // +---+---+---+---+---+---+---+---+---+---+ |
27 // ID1 \037 | 27 // ID1 \037 |
28 // ID2 \213 | 28 // ID2 \213 |
29 // CM \010 (compression method == DEFLATE) | 29 // CM \010 (compression method == DEFLATE) |
30 // FLG \000 (special flags that we do not support) | 30 // FLG \000 (special flags that we do not support) |
31 // MTIME Unix format modification time (0 means not available) | 31 // MTIME Unix format modification time (0 means not available) |
32 // XFL 2-4? DEFLATE flags | 32 // XFL 2-4? DEFLATE flags |
33 // OS ???? Operating system indicator (255 means unknown) | 33 // OS ???? Operating system indicator (255 means unknown) |
34 // | 34 // |
35 // Header value we generate: | 35 // Header value we generate: |
36 const char kGZipHeader[] = { '\037', '\213', '\010', '\000', '\000', | 36 const char kGZipHeader[] = {'\037', '\213', '\010', '\000', '\000', |
37 '\000', '\000', '\000', '\002', '\377' }; | 37 '\000', '\000', '\000', '\002', '\377'}; |
38 | 38 |
39 enum EncodeMode { | 39 enum EncodeMode { |
40 ENCODE_GZIP, // Wrap the deflate with a GZip header. | 40 ENCODE_GZIP, // Wrap the deflate with a GZip header. |
41 ENCODE_DEFLATE // Raw deflate. | 41 ENCODE_DEFLATE // Raw deflate. |
42 }; | 42 }; |
43 | 43 |
44 } // namespace | 44 } // namespace |
45 | 45 |
46 namespace net { | 46 namespace net { |
47 | 47 |
48 // These tests use the path service, which uses autoreleased objects on the | 48 // These tests use the path service, which uses autoreleased objects on the |
49 // Mac, so this needs to be a PlatformTest. | 49 // Mac, so this needs to be a PlatformTest. |
50 class GZipUnitTest : public PlatformTest { | 50 class GZipUnitTest : public PlatformTest { |
51 protected: | 51 protected: |
(...skipping 12 matching lines...) Expand all Loading... |
64 file_path = file_path.AppendASCII("google.txt"); | 64 file_path = file_path.AppendASCII("google.txt"); |
65 | 65 |
66 // Read data from the file into buffer. | 66 // Read data from the file into buffer. |
67 ASSERT_TRUE(base::ReadFileToString(file_path, &source_buffer_)); | 67 ASSERT_TRUE(base::ReadFileToString(file_path, &source_buffer_)); |
68 | 68 |
69 // Encode the data with deflate | 69 // Encode the data with deflate |
70 deflate_encode_buffer_ = new char[kDefaultBufferSize]; | 70 deflate_encode_buffer_ = new char[kDefaultBufferSize]; |
71 ASSERT_TRUE(deflate_encode_buffer_ != NULL); | 71 ASSERT_TRUE(deflate_encode_buffer_ != NULL); |
72 | 72 |
73 deflate_encode_len_ = kDefaultBufferSize; | 73 deflate_encode_len_ = kDefaultBufferSize; |
74 int code = CompressAll(ENCODE_DEFLATE , source_buffer(), source_len(), | 74 int code = CompressAll(ENCODE_DEFLATE, |
75 deflate_encode_buffer_, &deflate_encode_len_); | 75 source_buffer(), |
| 76 source_len(), |
| 77 deflate_encode_buffer_, |
| 78 &deflate_encode_len_); |
76 ASSERT_TRUE(code == Z_STREAM_END); | 79 ASSERT_TRUE(code == Z_STREAM_END); |
77 ASSERT_GT(deflate_encode_len_, 0); | 80 ASSERT_GT(deflate_encode_len_, 0); |
78 ASSERT_TRUE(deflate_encode_len_ <= kDefaultBufferSize); | 81 ASSERT_TRUE(deflate_encode_len_ <= kDefaultBufferSize); |
79 | 82 |
80 // Encode the data with gzip | 83 // Encode the data with gzip |
81 gzip_encode_buffer_ = new char[kDefaultBufferSize]; | 84 gzip_encode_buffer_ = new char[kDefaultBufferSize]; |
82 ASSERT_TRUE(gzip_encode_buffer_ != NULL); | 85 ASSERT_TRUE(gzip_encode_buffer_ != NULL); |
83 | 86 |
84 gzip_encode_len_ = kDefaultBufferSize; | 87 gzip_encode_len_ = kDefaultBufferSize; |
85 code = CompressAll(ENCODE_GZIP, source_buffer(), source_len(), | 88 code = CompressAll(ENCODE_GZIP, |
86 gzip_encode_buffer_, &gzip_encode_len_); | 89 source_buffer(), |
| 90 source_len(), |
| 91 gzip_encode_buffer_, |
| 92 &gzip_encode_len_); |
87 ASSERT_TRUE(code == Z_STREAM_END); | 93 ASSERT_TRUE(code == Z_STREAM_END); |
88 ASSERT_GT(gzip_encode_len_, 0); | 94 ASSERT_GT(gzip_encode_len_, 0); |
89 ASSERT_TRUE(gzip_encode_len_ <= kDefaultBufferSize); | 95 ASSERT_TRUE(gzip_encode_len_ <= kDefaultBufferSize); |
90 } | 96 } |
91 | 97 |
92 virtual void TearDown() { | 98 virtual void TearDown() { |
93 delete[] deflate_encode_buffer_; | 99 delete[] deflate_encode_buffer_; |
94 deflate_encode_buffer_ = NULL; | 100 deflate_encode_buffer_ = NULL; |
95 | 101 |
96 delete[] gzip_encode_buffer_; | 102 delete[] gzip_encode_buffer_; |
97 gzip_encode_buffer_ = NULL; | 103 gzip_encode_buffer_ = NULL; |
98 | 104 |
99 PlatformTest::TearDown(); | 105 PlatformTest::TearDown(); |
100 } | 106 } |
101 | 107 |
102 // Compress the data in source with deflate encoding and write output to the | 108 // Compress the data in source with deflate encoding and write output to the |
103 // buffer provided by dest. The function returns Z_OK if success, and returns | 109 // buffer provided by dest. The function returns Z_OK if success, and returns |
104 // other zlib error code if fail. | 110 // other zlib error code if fail. |
105 // The parameter mode specifies the encoding mechanism. | 111 // The parameter mode specifies the encoding mechanism. |
106 // The dest buffer should be large enough to hold all the output data. | 112 // The dest buffer should be large enough to hold all the output data. |
107 int CompressAll(EncodeMode mode, const char* source, int source_size, | 113 int CompressAll(EncodeMode mode, |
108 char* dest, int* dest_len) { | 114 const char* source, |
| 115 int source_size, |
| 116 char* dest, |
| 117 int* dest_len) { |
109 z_stream zlib_stream; | 118 z_stream zlib_stream; |
110 memset(&zlib_stream, 0, sizeof(zlib_stream)); | 119 memset(&zlib_stream, 0, sizeof(zlib_stream)); |
111 int code; | 120 int code; |
112 | 121 |
113 // Initialize zlib | 122 // Initialize zlib |
114 if (mode == ENCODE_GZIP) { | 123 if (mode == ENCODE_GZIP) { |
115 code = deflateInit2(&zlib_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, | 124 code = deflateInit2(&zlib_stream, |
| 125 Z_DEFAULT_COMPRESSION, |
| 126 Z_DEFLATED, |
116 -MAX_WBITS, | 127 -MAX_WBITS, |
117 8, // DEF_MEM_LEVEL | 128 8, // DEF_MEM_LEVEL |
118 Z_DEFAULT_STRATEGY); | 129 Z_DEFAULT_STRATEGY); |
119 } else { | 130 } else { |
120 code = deflateInit(&zlib_stream, Z_DEFAULT_COMPRESSION); | 131 code = deflateInit(&zlib_stream, Z_DEFAULT_COMPRESSION); |
121 } | 132 } |
122 | 133 |
123 if (code != Z_OK) | 134 if (code != Z_OK) |
124 return code; | 135 return code; |
125 | 136 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 char decode_buffer[kDefaultBufferSize]; | 176 char decode_buffer[kDefaultBufferSize]; |
166 char* decode_next = decode_buffer; | 177 char* decode_next = decode_buffer; |
167 int decode_avail_size = kDefaultBufferSize; | 178 int decode_avail_size = kDefaultBufferSize; |
168 | 179 |
169 const char* encode_next = encoded_source; | 180 const char* encode_next = encoded_source; |
170 int encode_avail_size = encoded_source_len; | 181 int encode_avail_size = encoded_source_len; |
171 | 182 |
172 int code = Filter::FILTER_OK; | 183 int code = Filter::FILTER_OK; |
173 while (code != Filter::FILTER_DONE) { | 184 while (code != Filter::FILTER_DONE) { |
174 int encode_data_len; | 185 int encode_data_len; |
175 encode_data_len = std::min(encode_avail_size, | 186 encode_data_len = |
176 filter->stream_buffer_size()); | 187 std::min(encode_avail_size, filter->stream_buffer_size()); |
177 memcpy(filter->stream_buffer()->data(), encode_next, encode_data_len); | 188 memcpy(filter->stream_buffer()->data(), encode_next, encode_data_len); |
178 filter->FlushStreamBuffer(encode_data_len); | 189 filter->FlushStreamBuffer(encode_data_len); |
179 encode_next += encode_data_len; | 190 encode_next += encode_data_len; |
180 encode_avail_size -= encode_data_len; | 191 encode_avail_size -= encode_data_len; |
181 | 192 |
182 while (1) { | 193 while (1) { |
183 int decode_data_len = std::min(decode_avail_size, output_buffer_size); | 194 int decode_data_len = std::min(decode_avail_size, output_buffer_size); |
184 | 195 |
185 code = filter->ReadData(decode_next, &decode_data_len); | 196 code = filter->ReadData(decode_next, &decode_data_len); |
186 decode_next += decode_data_len; | 197 decode_next += decode_data_len; |
(...skipping 12 matching lines...) Expand all Loading... |
199 int decode_total_data_len = kDefaultBufferSize - decode_avail_size; | 210 int decode_total_data_len = kDefaultBufferSize - decode_avail_size; |
200 EXPECT_TRUE(decode_total_data_len == source_len); | 211 EXPECT_TRUE(decode_total_data_len == source_len); |
201 EXPECT_EQ(memcmp(source, decode_buffer, source_len), 0); | 212 EXPECT_EQ(memcmp(source, decode_buffer, source_len), 0); |
202 } | 213 } |
203 | 214 |
204 // Unsafe function to use filter to decode compressed data. | 215 // Unsafe function to use filter to decode compressed data. |
205 // Parameters: Source and source_len are compressed data and its size. | 216 // Parameters: Source and source_len are compressed data and its size. |
206 // Dest is the buffer for decoding results. Upon entry, *dest_len is the size | 217 // Dest is the buffer for decoding results. Upon entry, *dest_len is the size |
207 // of the dest buffer. Upon exit, *dest_len is the number of chars written | 218 // of the dest buffer. Upon exit, *dest_len is the number of chars written |
208 // into the buffer. | 219 // into the buffer. |
209 int DecodeAllWithFilter(Filter* filter, const char* source, int source_len, | 220 int DecodeAllWithFilter(Filter* filter, |
210 char* dest, int* dest_len) { | 221 const char* source, |
| 222 int source_len, |
| 223 char* dest, |
| 224 int* dest_len) { |
211 memcpy(filter->stream_buffer()->data(), source, source_len); | 225 memcpy(filter->stream_buffer()->data(), source, source_len); |
212 filter->FlushStreamBuffer(source_len); | 226 filter->FlushStreamBuffer(source_len); |
213 return filter->ReadData(dest, dest_len); | 227 return filter->ReadData(dest, dest_len); |
214 } | 228 } |
215 | 229 |
216 void InitFilter(Filter::FilterType type) { | 230 void InitFilter(Filter::FilterType type) { |
217 std::vector<Filter::FilterType> filter_types; | 231 std::vector<Filter::FilterType> filter_types; |
218 filter_types.push_back(type); | 232 filter_types.push_back(type); |
219 filter_.reset(Filter::Factory(filter_types, filter_context_)); | 233 filter_.reset(Filter::Factory(filter_types, filter_context_)); |
220 ASSERT_TRUE(filter_.get()); | 234 ASSERT_TRUE(filter_.get()); |
221 ASSERT_GE(filter_->stream_buffer_size(), kDefaultBufferSize); | 235 ASSERT_GE(filter_->stream_buffer_size(), kDefaultBufferSize); |
222 } | 236 } |
223 | 237 |
224 void InitFilterWithBufferSize(Filter::FilterType type, int buffer_size) { | 238 void InitFilterWithBufferSize(Filter::FilterType type, int buffer_size) { |
225 std::vector<Filter::FilterType> filter_types; | 239 std::vector<Filter::FilterType> filter_types; |
226 filter_types.push_back(type); | 240 filter_types.push_back(type); |
227 filter_.reset(Filter::FactoryForTests(filter_types, filter_context_, | 241 filter_.reset( |
228 buffer_size)); | 242 Filter::FactoryForTests(filter_types, filter_context_, buffer_size)); |
229 ASSERT_TRUE(filter_.get()); | 243 ASSERT_TRUE(filter_.get()); |
230 } | 244 } |
231 | 245 |
232 const char* source_buffer() const { return source_buffer_.data(); } | 246 const char* source_buffer() const { return source_buffer_.data(); } |
233 int source_len() const { return static_cast<int>(source_buffer_.size()); } | 247 int source_len() const { return static_cast<int>(source_buffer_.size()); } |
234 | 248 |
235 scoped_ptr<Filter> filter_; | 249 scoped_ptr<Filter> filter_; |
236 | 250 |
237 std::string source_buffer_; | 251 std::string source_buffer_; |
238 | 252 |
239 char* deflate_encode_buffer_; | 253 char* deflate_encode_buffer_; |
240 int deflate_encode_len_; | 254 int deflate_encode_len_; |
241 | 255 |
242 char* gzip_encode_buffer_; | 256 char* gzip_encode_buffer_; |
243 int gzip_encode_len_; | 257 int gzip_encode_len_; |
244 | 258 |
245 private: | 259 private: |
246 MockFilterContext filter_context_; | 260 MockFilterContext filter_context_; |
247 }; | 261 }; |
248 | 262 |
249 // Basic scenario: decoding deflate data with big enough buffer. | 263 // Basic scenario: decoding deflate data with big enough buffer. |
250 TEST_F(GZipUnitTest, DecodeDeflate) { | 264 TEST_F(GZipUnitTest, DecodeDeflate) { |
251 // Decode the compressed data with filter | 265 // Decode the compressed data with filter |
252 InitFilter(Filter::FILTER_TYPE_DEFLATE); | 266 InitFilter(Filter::FILTER_TYPE_DEFLATE); |
253 memcpy(filter_->stream_buffer()->data(), deflate_encode_buffer_, | 267 memcpy(filter_->stream_buffer()->data(), |
| 268 deflate_encode_buffer_, |
254 deflate_encode_len_); | 269 deflate_encode_len_); |
255 filter_->FlushStreamBuffer(deflate_encode_len_); | 270 filter_->FlushStreamBuffer(deflate_encode_len_); |
256 | 271 |
257 char deflate_decode_buffer[kDefaultBufferSize]; | 272 char deflate_decode_buffer[kDefaultBufferSize]; |
258 int deflate_decode_size = kDefaultBufferSize; | 273 int deflate_decode_size = kDefaultBufferSize; |
259 filter_->ReadData(deflate_decode_buffer, &deflate_decode_size); | 274 filter_->ReadData(deflate_decode_buffer, &deflate_decode_size); |
260 | 275 |
261 // Compare the decoding result with source data | 276 // Compare the decoding result with source data |
262 EXPECT_TRUE(deflate_decode_size == source_len()); | 277 EXPECT_TRUE(deflate_decode_size == source_len()); |
263 EXPECT_EQ(memcmp(source_buffer(), deflate_decode_buffer, source_len()), 0); | 278 EXPECT_EQ(memcmp(source_buffer(), deflate_decode_buffer, source_len()), 0); |
264 } | 279 } |
265 | 280 |
266 // Basic scenario: decoding gzip data with big enough buffer. | 281 // Basic scenario: decoding gzip data with big enough buffer. |
267 TEST_F(GZipUnitTest, DecodeGZip) { | 282 TEST_F(GZipUnitTest, DecodeGZip) { |
268 // Decode the compressed data with filter | 283 // Decode the compressed data with filter |
269 InitFilter(Filter::FILTER_TYPE_GZIP); | 284 InitFilter(Filter::FILTER_TYPE_GZIP); |
270 memcpy(filter_->stream_buffer()->data(), gzip_encode_buffer_, | 285 memcpy( |
271 gzip_encode_len_); | 286 filter_->stream_buffer()->data(), gzip_encode_buffer_, gzip_encode_len_); |
272 filter_->FlushStreamBuffer(gzip_encode_len_); | 287 filter_->FlushStreamBuffer(gzip_encode_len_); |
273 | 288 |
274 char gzip_decode_buffer[kDefaultBufferSize]; | 289 char gzip_decode_buffer[kDefaultBufferSize]; |
275 int gzip_decode_size = kDefaultBufferSize; | 290 int gzip_decode_size = kDefaultBufferSize; |
276 filter_->ReadData(gzip_decode_buffer, &gzip_decode_size); | 291 filter_->ReadData(gzip_decode_buffer, &gzip_decode_size); |
277 | 292 |
278 // Compare the decoding result with source data | 293 // Compare the decoding result with source data |
279 EXPECT_TRUE(gzip_decode_size == source_len()); | 294 EXPECT_TRUE(gzip_decode_size == source_len()); |
280 EXPECT_EQ(memcmp(source_buffer(), gzip_decode_buffer, source_len()), 0); | 295 EXPECT_EQ(memcmp(source_buffer(), gzip_decode_buffer, source_len()), 0); |
281 } | 296 } |
282 | 297 |
283 // Tests we can call filter repeatedly to get all the data decoded. | 298 // Tests we can call filter repeatedly to get all the data decoded. |
284 // To do that, we create a filter with a small buffer that can not hold all | 299 // To do that, we create a filter with a small buffer that can not hold all |
285 // the input data. | 300 // the input data. |
286 TEST_F(GZipUnitTest, DecodeWithSmallBuffer) { | 301 TEST_F(GZipUnitTest, DecodeWithSmallBuffer) { |
287 InitFilterWithBufferSize(Filter::FILTER_TYPE_DEFLATE, kSmallBufferSize); | 302 InitFilterWithBufferSize(Filter::FILTER_TYPE_DEFLATE, kSmallBufferSize); |
288 EXPECT_EQ(kSmallBufferSize, filter_->stream_buffer_size()); | 303 EXPECT_EQ(kSmallBufferSize, filter_->stream_buffer_size()); |
289 DecodeAndCompareWithFilter(filter_.get(), source_buffer(), source_len(), | 304 DecodeAndCompareWithFilter(filter_.get(), |
290 deflate_encode_buffer_, deflate_encode_len_, | 305 source_buffer(), |
| 306 source_len(), |
| 307 deflate_encode_buffer_, |
| 308 deflate_encode_len_, |
291 kDefaultBufferSize); | 309 kDefaultBufferSize); |
292 } | 310 } |
293 | 311 |
294 // Tests we can still decode with just 1 byte buffer in the filter. | 312 // Tests we can still decode with just 1 byte buffer in the filter. |
295 // The purpose of this tests are two: (1) Verify filter can parse partial GZip | 313 // The purpose of this tests are two: (1) Verify filter can parse partial GZip |
296 // header correctly. (2) Sometimes the filter will consume input without | 314 // header correctly. (2) Sometimes the filter will consume input without |
297 // generating output. Verify filter can handle it correctly. | 315 // generating output. Verify filter can handle it correctly. |
298 TEST_F(GZipUnitTest, DecodeWithOneByteBuffer) { | 316 TEST_F(GZipUnitTest, DecodeWithOneByteBuffer) { |
299 InitFilterWithBufferSize(Filter::FILTER_TYPE_GZIP, 1); | 317 InitFilterWithBufferSize(Filter::FILTER_TYPE_GZIP, 1); |
300 EXPECT_EQ(1, filter_->stream_buffer_size()); | 318 EXPECT_EQ(1, filter_->stream_buffer_size()); |
301 DecodeAndCompareWithFilter(filter_.get(), source_buffer(), source_len(), | 319 DecodeAndCompareWithFilter(filter_.get(), |
302 gzip_encode_buffer_, gzip_encode_len_, | 320 source_buffer(), |
| 321 source_len(), |
| 322 gzip_encode_buffer_, |
| 323 gzip_encode_len_, |
303 kDefaultBufferSize); | 324 kDefaultBufferSize); |
304 } | 325 } |
305 | 326 |
306 // Tests we can decode when caller has small buffer to read out from filter. | 327 // Tests we can decode when caller has small buffer to read out from filter. |
307 TEST_F(GZipUnitTest, DecodeWithSmallOutputBuffer) { | 328 TEST_F(GZipUnitTest, DecodeWithSmallOutputBuffer) { |
308 InitFilter(Filter::FILTER_TYPE_DEFLATE); | 329 InitFilter(Filter::FILTER_TYPE_DEFLATE); |
309 DecodeAndCompareWithFilter(filter_.get(), source_buffer(), source_len(), | 330 DecodeAndCompareWithFilter(filter_.get(), |
310 deflate_encode_buffer_, deflate_encode_len_, | 331 source_buffer(), |
| 332 source_len(), |
| 333 deflate_encode_buffer_, |
| 334 deflate_encode_len_, |
311 kSmallBufferSize); | 335 kSmallBufferSize); |
312 } | 336 } |
313 | 337 |
314 // Tests we can still decode with just 1 byte buffer in the filter and just 1 | 338 // Tests we can still decode with just 1 byte buffer in the filter and just 1 |
315 // byte buffer in the caller. | 339 // byte buffer in the caller. |
316 TEST_F(GZipUnitTest, DecodeWithOneByteInputAndOutputBuffer) { | 340 TEST_F(GZipUnitTest, DecodeWithOneByteInputAndOutputBuffer) { |
317 InitFilterWithBufferSize(Filter::FILTER_TYPE_GZIP, 1); | 341 InitFilterWithBufferSize(Filter::FILTER_TYPE_GZIP, 1); |
318 EXPECT_EQ(1, filter_->stream_buffer_size()); | 342 EXPECT_EQ(1, filter_->stream_buffer_size()); |
319 DecodeAndCompareWithFilter(filter_.get(), source_buffer(), source_len(), | 343 DecodeAndCompareWithFilter(filter_.get(), |
320 gzip_encode_buffer_, gzip_encode_len_, 1); | 344 source_buffer(), |
| 345 source_len(), |
| 346 gzip_encode_buffer_, |
| 347 gzip_encode_len_, |
| 348 1); |
321 } | 349 } |
322 | 350 |
323 // Decoding deflate stream with corrupted data. | 351 // Decoding deflate stream with corrupted data. |
324 TEST_F(GZipUnitTest, DecodeCorruptedData) { | 352 TEST_F(GZipUnitTest, DecodeCorruptedData) { |
325 char corrupt_data[kDefaultBufferSize]; | 353 char corrupt_data[kDefaultBufferSize]; |
326 int corrupt_data_len = deflate_encode_len_; | 354 int corrupt_data_len = deflate_encode_len_; |
327 memcpy(corrupt_data, deflate_encode_buffer_, deflate_encode_len_); | 355 memcpy(corrupt_data, deflate_encode_buffer_, deflate_encode_len_); |
328 | 356 |
329 int pos = corrupt_data_len / 2; | 357 int pos = corrupt_data_len / 2; |
330 corrupt_data[pos] = !corrupt_data[pos]; | 358 corrupt_data[pos] = !corrupt_data[pos]; |
331 | 359 |
332 // Decode the corrupted data with filter | 360 // Decode the corrupted data with filter |
333 InitFilter(Filter::FILTER_TYPE_DEFLATE); | 361 InitFilter(Filter::FILTER_TYPE_DEFLATE); |
334 char corrupt_decode_buffer[kDefaultBufferSize]; | 362 char corrupt_decode_buffer[kDefaultBufferSize]; |
335 int corrupt_decode_size = kDefaultBufferSize; | 363 int corrupt_decode_size = kDefaultBufferSize; |
336 | 364 |
337 int code = DecodeAllWithFilter(filter_.get(), corrupt_data, corrupt_data_len, | 365 int code = DecodeAllWithFilter(filter_.get(), |
338 corrupt_decode_buffer, &corrupt_decode_size); | 366 corrupt_data, |
| 367 corrupt_data_len, |
| 368 corrupt_decode_buffer, |
| 369 &corrupt_decode_size); |
339 | 370 |
340 // Expect failures | 371 // Expect failures |
341 EXPECT_TRUE(code == Filter::FILTER_ERROR); | 372 EXPECT_TRUE(code == Filter::FILTER_ERROR); |
342 } | 373 } |
343 | 374 |
344 // Decoding deflate stream with missing data. | 375 // Decoding deflate stream with missing data. |
345 TEST_F(GZipUnitTest, DecodeMissingData) { | 376 TEST_F(GZipUnitTest, DecodeMissingData) { |
346 char corrupt_data[kDefaultBufferSize]; | 377 char corrupt_data[kDefaultBufferSize]; |
347 int corrupt_data_len = deflate_encode_len_; | 378 int corrupt_data_len = deflate_encode_len_; |
348 memcpy(corrupt_data, deflate_encode_buffer_, deflate_encode_len_); | 379 memcpy(corrupt_data, deflate_encode_buffer_, deflate_encode_len_); |
349 | 380 |
350 int pos = corrupt_data_len / 2; | 381 int pos = corrupt_data_len / 2; |
351 int len = corrupt_data_len - pos - 1; | 382 int len = corrupt_data_len - pos - 1; |
352 memmove(&corrupt_data[pos], &corrupt_data[pos+1], len); | 383 memmove(&corrupt_data[pos], &corrupt_data[pos + 1], len); |
353 --corrupt_data_len; | 384 --corrupt_data_len; |
354 | 385 |
355 // Decode the corrupted data with filter | 386 // Decode the corrupted data with filter |
356 InitFilter(Filter::FILTER_TYPE_DEFLATE); | 387 InitFilter(Filter::FILTER_TYPE_DEFLATE); |
357 char corrupt_decode_buffer[kDefaultBufferSize]; | 388 char corrupt_decode_buffer[kDefaultBufferSize]; |
358 int corrupt_decode_size = kDefaultBufferSize; | 389 int corrupt_decode_size = kDefaultBufferSize; |
359 | 390 |
360 int code = DecodeAllWithFilter(filter_.get(), corrupt_data, corrupt_data_len, | 391 int code = DecodeAllWithFilter(filter_.get(), |
361 corrupt_decode_buffer, &corrupt_decode_size); | 392 corrupt_data, |
| 393 corrupt_data_len, |
| 394 corrupt_decode_buffer, |
| 395 &corrupt_decode_size); |
362 | 396 |
363 // Expect failures | 397 // Expect failures |
364 EXPECT_EQ(Filter::FILTER_ERROR, code); | 398 EXPECT_EQ(Filter::FILTER_ERROR, code); |
365 } | 399 } |
366 | 400 |
367 // Decoding gzip stream with corrupted header. | 401 // Decoding gzip stream with corrupted header. |
368 TEST_F(GZipUnitTest, DecodeCorruptedHeader) { | 402 TEST_F(GZipUnitTest, DecodeCorruptedHeader) { |
369 char corrupt_data[kDefaultBufferSize]; | 403 char corrupt_data[kDefaultBufferSize]; |
370 int corrupt_data_len = gzip_encode_len_; | 404 int corrupt_data_len = gzip_encode_len_; |
371 memcpy(corrupt_data, gzip_encode_buffer_, gzip_encode_len_); | 405 memcpy(corrupt_data, gzip_encode_buffer_, gzip_encode_len_); |
372 | 406 |
373 corrupt_data[2] = !corrupt_data[2]; | 407 corrupt_data[2] = !corrupt_data[2]; |
374 | 408 |
375 // Decode the corrupted data with filter | 409 // Decode the corrupted data with filter |
376 InitFilter(Filter::FILTER_TYPE_GZIP); | 410 InitFilter(Filter::FILTER_TYPE_GZIP); |
377 char corrupt_decode_buffer[kDefaultBufferSize]; | 411 char corrupt_decode_buffer[kDefaultBufferSize]; |
378 int corrupt_decode_size = kDefaultBufferSize; | 412 int corrupt_decode_size = kDefaultBufferSize; |
379 | 413 |
380 int code = DecodeAllWithFilter(filter_.get(), corrupt_data, corrupt_data_len, | 414 int code = DecodeAllWithFilter(filter_.get(), |
381 corrupt_decode_buffer, &corrupt_decode_size); | 415 corrupt_data, |
| 416 corrupt_data_len, |
| 417 corrupt_decode_buffer, |
| 418 &corrupt_decode_size); |
382 | 419 |
383 // Expect failures | 420 // Expect failures |
384 EXPECT_TRUE(code == Filter::FILTER_ERROR); | 421 EXPECT_TRUE(code == Filter::FILTER_ERROR); |
385 } | 422 } |
386 | 423 |
387 } // namespace net | 424 } // namespace net |
OLD | NEW |