Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(924)

Side by Side Diff: net/base/bzip2_filter_unittest.cc

Issue 40138: Use FilterContext to allow filters to access URLRequestJob data... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <iostream> 6 #include <iostream>
7 7
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/scoped_ptr.h" 10 #include "base/scoped_ptr.h"
11 #include "net/base/bzip2_filter.h" 11 #include "net/base/bzip2_filter.h"
12 #include "net/base/filter_unittest.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/platform_test.h" 14 #include "testing/platform_test.h"
14 #include "third_party/bzip2/bzlib.h" 15 #include "third_party/bzip2/bzlib.h"
15 16
16 namespace { 17 namespace {
17 18
18 const char* kExtraData = "Test Data, More Test Data, Even More Data of Test"; 19 const char* kExtraData = "Test Data, More Test Data, Even More Data of Test";
19 const int kExtraDataBufferSize = 49; 20 const int kExtraDataBufferSize = 49;
20 const int kDefaultBufferSize = 4096; 21 const int kDefaultBufferSize = 4096;
21 const int kSmallBufferSize = 128; 22 const int kSmallBufferSize = 128;
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 scoped_ptr<bz_stream> bzip2_data_stream_; 178 scoped_ptr<bz_stream> bzip2_data_stream_;
178 char* bzip2_encode_buffer_; 179 char* bzip2_encode_buffer_;
179 int bzip2_encode_len_; 180 int bzip2_encode_len_;
180 }; 181 };
181 182
182 // Basic scenario: decoding bzip2 data with big enough buffer. 183 // Basic scenario: decoding bzip2 data with big enough buffer.
183 TEST_F(BZip2FilterUnitTest, DecodeBZip2) { 184 TEST_F(BZip2FilterUnitTest, DecodeBZip2) {
184 // Decode the compressed data with filter 185 // Decode the compressed data with filter
185 std::vector<Filter::FilterType> filter_types; 186 std::vector<Filter::FilterType> filter_types;
186 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 187 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
187 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); 188 MockFilterContext filter_context(kDefaultBufferSize);
189 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
188 ASSERT_TRUE(filter.get()); 190 ASSERT_TRUE(filter.get());
189 memcpy(filter->stream_buffer()->data(), bzip2_encode_buffer_, 191 memcpy(filter->stream_buffer()->data(), bzip2_encode_buffer_,
190 bzip2_encode_len_); 192 bzip2_encode_len_);
191 filter->FlushStreamBuffer(bzip2_encode_len_); 193 filter->FlushStreamBuffer(bzip2_encode_len_);
192 194
193 char bzip2_decode_buffer[kDefaultBufferSize]; 195 char bzip2_decode_buffer[kDefaultBufferSize];
194 int bzip2_decode_size = kDefaultBufferSize; 196 int bzip2_decode_size = kDefaultBufferSize;
195 Filter::FilterStatus result = 197 Filter::FilterStatus result =
196 filter->ReadData(bzip2_decode_buffer, &bzip2_decode_size); 198 filter->ReadData(bzip2_decode_buffer, &bzip2_decode_size);
197 ASSERT_EQ(Filter::FILTER_DONE, result); 199 ASSERT_EQ(Filter::FILTER_DONE, result);
198 200
199 // Compare the decoding result with source data 201 // Compare the decoding result with source data
200 EXPECT_TRUE(bzip2_decode_size == source_len()); 202 EXPECT_TRUE(bzip2_decode_size == source_len());
201 EXPECT_EQ(memcmp(source_buffer(), bzip2_decode_buffer, source_len()), 0); 203 EXPECT_EQ(memcmp(source_buffer(), bzip2_decode_buffer, source_len()), 0);
202 } 204 }
203 205
204 // Tests we can call filter repeatedly to get all the data decoded. 206 // Tests we can call filter repeatedly to get all the data decoded.
205 // To do that, we create a filter with a small buffer that can not hold all 207 // To do that, we create a filter with a small buffer that can not hold all
206 // the input data. 208 // the input data.
207 TEST_F(BZip2FilterUnitTest, DecodeWithSmallInputBuffer) { 209 TEST_F(BZip2FilterUnitTest, DecodeWithSmallInputBuffer) {
208 std::vector<Filter::FilterType> filter_types; 210 std::vector<Filter::FilterType> filter_types;
209 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 211 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
210 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kSmallBufferSize)); 212 MockFilterContext filter_context(kSmallBufferSize);
213 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
211 ASSERT_TRUE(filter.get()); 214 ASSERT_TRUE(filter.get());
212 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(), 215 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(),
213 bzip2_encode_buffer_, bzip2_encode_len_, 216 bzip2_encode_buffer_, bzip2_encode_len_,
214 kDefaultBufferSize, false); 217 kDefaultBufferSize, false);
215 } 218 }
216 219
217 // Tests we can decode when caller has small buffer to read out from filter. 220 // Tests we can decode when caller has small buffer to read out from filter.
218 TEST_F(BZip2FilterUnitTest, DecodeWithSmallOutputBuffer) { 221 TEST_F(BZip2FilterUnitTest, DecodeWithSmallOutputBuffer) {
219 std::vector<Filter::FilterType> filter_types; 222 std::vector<Filter::FilterType> filter_types;
220 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 223 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
221 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); 224 MockFilterContext filter_context(kDefaultBufferSize);
225 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
222 ASSERT_TRUE(filter.get()); 226 ASSERT_TRUE(filter.get());
223 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(), 227 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(),
224 bzip2_encode_buffer_, bzip2_encode_len_, 228 bzip2_encode_buffer_, bzip2_encode_len_,
225 kSmallBufferSize, false); 229 kSmallBufferSize, false);
226 } 230 }
227 231
228 // Tests we can still decode with just 1 byte buffer in the filter. 232 // Tests we can still decode with just 1 byte buffer in the filter.
229 // The purpose of this tests are two: (1) Verify filter can parse partial BZip2 233 // The purpose of this tests are two: (1) Verify filter can parse partial BZip2
230 // header correctly. (2) Sometimes the filter will consume input without 234 // header correctly. (2) Sometimes the filter will consume input without
231 // generating output. Verify filter can handle it correctly. 235 // generating output. Verify filter can handle it correctly.
232 TEST_F(BZip2FilterUnitTest, DecodeWithOneByteInputBuffer) { 236 TEST_F(BZip2FilterUnitTest, DecodeWithOneByteInputBuffer) {
233 std::vector<Filter::FilterType> filter_types; 237 std::vector<Filter::FilterType> filter_types;
234 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 238 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
235 scoped_ptr<Filter> filter(Filter::Factory(filter_types, 1)); 239 MockFilterContext filter_context(1);
240 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
236 ASSERT_TRUE(filter.get()); 241 ASSERT_TRUE(filter.get());
237 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(), 242 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(),
238 bzip2_encode_buffer_, bzip2_encode_len_, 243 bzip2_encode_buffer_, bzip2_encode_len_,
239 kDefaultBufferSize, false); 244 kDefaultBufferSize, false);
240 } 245 }
241 246
242 // Tests we can still decode with just 1 byte buffer in the filter and just 1 247 // Tests we can still decode with just 1 byte buffer in the filter and just 1
243 // byte buffer in the caller. 248 // byte buffer in the caller.
244 TEST_F(BZip2FilterUnitTest, DecodeWithOneByteInputAndOutputBuffer) { 249 TEST_F(BZip2FilterUnitTest, DecodeWithOneByteInputAndOutputBuffer) {
245 std::vector<Filter::FilterType> filter_types; 250 std::vector<Filter::FilterType> filter_types;
246 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 251 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
247 scoped_ptr<Filter> filter(Filter::Factory(filter_types, 1)); 252 MockFilterContext filter_context(1);
253 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
248 ASSERT_TRUE(filter.get()); 254 ASSERT_TRUE(filter.get());
249 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(), 255 DecodeAndCompareWithFilter(filter.get(), source_buffer(), source_len(),
250 bzip2_encode_buffer_, bzip2_encode_len_, 1, false); 256 bzip2_encode_buffer_, bzip2_encode_len_, 1, false);
251 } 257 }
252 258
253 // Decoding bzip2 stream with corrupted data. 259 // Decoding bzip2 stream with corrupted data.
254 TEST_F(BZip2FilterUnitTest, DecodeCorruptedData) { 260 TEST_F(BZip2FilterUnitTest, DecodeCorruptedData) {
255 char corrupt_data[kDefaultBufferSize]; 261 char corrupt_data[kDefaultBufferSize];
256 int corrupt_data_len = bzip2_encode_len_; 262 int corrupt_data_len = bzip2_encode_len_;
257 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_); 263 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_);
258 264
259 char corrupt_decode_buffer[kDefaultBufferSize]; 265 char corrupt_decode_buffer[kDefaultBufferSize];
260 int corrupt_decode_size = kDefaultBufferSize; 266 int corrupt_decode_size = kDefaultBufferSize;
261 267
262 // Decode the correct data with filter 268 // Decode the correct data with filter
263 std::vector<Filter::FilterType> filter_types; 269 std::vector<Filter::FilterType> filter_types;
264 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 270 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
265 scoped_ptr<Filter> filter1(Filter::Factory(filter_types, kDefaultBufferSize)); 271 MockFilterContext filter_context(kDefaultBufferSize);
272 scoped_ptr<Filter> filter1(Filter::Factory(filter_types, filter_context));
266 ASSERT_TRUE(filter1.get()); 273 ASSERT_TRUE(filter1.get());
267 274
268 Filter::FilterStatus code = DecodeAllWithFilter(filter1.get(), 275 Filter::FilterStatus code = DecodeAllWithFilter(filter1.get(),
269 corrupt_data, 276 corrupt_data,
270 corrupt_data_len, 277 corrupt_data_len,
271 corrupt_decode_buffer, 278 corrupt_decode_buffer,
272 &corrupt_decode_size); 279 &corrupt_decode_size);
273 280
274 // Expect failures 281 // Expect failures
275 EXPECT_TRUE(code == Filter::FILTER_DONE); 282 EXPECT_TRUE(code == Filter::FILTER_DONE);
276 283
277 // Decode the corrupted data with filter 284 // Decode the corrupted data with filter
278 scoped_ptr<Filter> filter2(Filter::Factory(filter_types, kDefaultBufferSize)); 285 scoped_ptr<Filter> filter2(Filter::Factory(filter_types, filter_context));
279 ASSERT_TRUE(filter2.get()); 286 ASSERT_TRUE(filter2.get());
280 287
281 int pos = corrupt_data_len / 2; 288 int pos = corrupt_data_len / 2;
282 corrupt_data[pos] = !corrupt_data[pos]; 289 corrupt_data[pos] = !corrupt_data[pos];
283 290
284 code = DecodeAllWithFilter(filter2.get(), 291 code = DecodeAllWithFilter(filter2.get(),
285 corrupt_data, 292 corrupt_data,
286 corrupt_data_len, 293 corrupt_data_len,
287 corrupt_decode_buffer, 294 corrupt_decode_buffer,
288 &corrupt_decode_size); 295 &corrupt_decode_size);
289 296
290 // Expect failures 297 // Expect failures
291 EXPECT_TRUE(code != Filter::FILTER_DONE); 298 EXPECT_TRUE(code != Filter::FILTER_DONE);
292 } 299 }
293 300
294 // Decoding bzip2 stream with missing data. 301 // Decoding bzip2 stream with missing data.
295 TEST_F(BZip2FilterUnitTest, DecodeMissingData) { 302 TEST_F(BZip2FilterUnitTest, DecodeMissingData) {
296 char corrupt_data[kDefaultBufferSize]; 303 char corrupt_data[kDefaultBufferSize];
297 int corrupt_data_len = bzip2_encode_len_; 304 int corrupt_data_len = bzip2_encode_len_;
298 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_); 305 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_);
299 306
300 int pos = corrupt_data_len / 2; 307 int pos = corrupt_data_len / 2;
301 int len = corrupt_data_len - pos - 1; 308 int len = corrupt_data_len - pos - 1;
302 memmove(&corrupt_data[pos], &corrupt_data[pos+1], len); 309 memmove(&corrupt_data[pos], &corrupt_data[pos+1], len);
303 --corrupt_data_len; 310 --corrupt_data_len;
304 311
305 // Decode the corrupted data with filter 312 // Decode the corrupted data with filter
306 std::vector<Filter::FilterType> filter_types; 313 std::vector<Filter::FilterType> filter_types;
307 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 314 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
308 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); 315 MockFilterContext filter_context(kDefaultBufferSize);
316 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
309 ASSERT_TRUE(filter.get()); 317 ASSERT_TRUE(filter.get());
310 char corrupt_decode_buffer[kDefaultBufferSize]; 318 char corrupt_decode_buffer[kDefaultBufferSize];
311 int corrupt_decode_size = kDefaultBufferSize; 319 int corrupt_decode_size = kDefaultBufferSize;
312 320
313 Filter::FilterStatus code = DecodeAllWithFilter(filter.get(), 321 Filter::FilterStatus code = DecodeAllWithFilter(filter.get(),
314 corrupt_data, 322 corrupt_data,
315 corrupt_data_len, 323 corrupt_data_len,
316 corrupt_decode_buffer, 324 corrupt_decode_buffer,
317 &corrupt_decode_size); 325 &corrupt_decode_size);
318 // Expect failures 326 // Expect failures
319 EXPECT_TRUE(code != Filter::FILTER_DONE); 327 EXPECT_TRUE(code != Filter::FILTER_DONE);
320 } 328 }
321 329
322 // Decoding bzip2 stream with corrupted header. 330 // Decoding bzip2 stream with corrupted header.
323 TEST_F(BZip2FilterUnitTest, DecodeCorruptedHeader) { 331 TEST_F(BZip2FilterUnitTest, DecodeCorruptedHeader) {
324 char corrupt_data[kDefaultBufferSize]; 332 char corrupt_data[kDefaultBufferSize];
325 int corrupt_data_len = bzip2_encode_len_; 333 int corrupt_data_len = bzip2_encode_len_;
326 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_); 334 memcpy(corrupt_data, bzip2_encode_buffer_, bzip2_encode_len_);
327 335
328 corrupt_data[2] = !corrupt_data[2]; 336 corrupt_data[2] = !corrupt_data[2];
329 337
330 // Decode the corrupted data with filter 338 // Decode the corrupted data with filter
331 std::vector<Filter::FilterType> filter_types; 339 std::vector<Filter::FilterType> filter_types;
332 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 340 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
333 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); 341 MockFilterContext filter_context(kDefaultBufferSize);
342 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
334 ASSERT_TRUE(filter.get()); 343 ASSERT_TRUE(filter.get());
335 char corrupt_decode_buffer[kDefaultBufferSize]; 344 char corrupt_decode_buffer[kDefaultBufferSize];
336 int corrupt_decode_size = kDefaultBufferSize; 345 int corrupt_decode_size = kDefaultBufferSize;
337 346
338 Filter::FilterStatus code = DecodeAllWithFilter(filter.get(), 347 Filter::FilterStatus code = DecodeAllWithFilter(filter.get(),
339 corrupt_data, 348 corrupt_data,
340 corrupt_data_len, 349 corrupt_data_len,
341 corrupt_decode_buffer, 350 corrupt_decode_buffer,
342 &corrupt_decode_size); 351 &corrupt_decode_size);
343 352
344 // Expect failures 353 // Expect failures
345 EXPECT_TRUE(code == Filter::FILTER_ERROR); 354 EXPECT_TRUE(code == Filter::FILTER_ERROR);
346 } 355 }
347 356
348 // Tests we can decode all compress data and get extra data which is 357 // Tests we can decode all compress data and get extra data which is
349 // appended to compress data stream by some server when it finish 358 // appended to compress data stream by some server when it finish
350 // sending compress data. 359 // sending compress data.
351 TEST_F(BZip2FilterUnitTest, DecodeWithExtraDataAndSmallOutputBuffer) { 360 TEST_F(BZip2FilterUnitTest, DecodeWithExtraDataAndSmallOutputBuffer) {
352 char more_data[kDefaultBufferSize + kExtraDataBufferSize]; 361 char more_data[kDefaultBufferSize + kExtraDataBufferSize];
353 int more_data_len = bzip2_encode_len_ + kExtraDataBufferSize; 362 int more_data_len = bzip2_encode_len_ + kExtraDataBufferSize;
354 memcpy(more_data, bzip2_encode_buffer_, bzip2_encode_len_); 363 memcpy(more_data, bzip2_encode_buffer_, bzip2_encode_len_);
355 memcpy(more_data + bzip2_encode_len_, kExtraData, kExtraDataBufferSize); 364 memcpy(more_data + bzip2_encode_len_, kExtraData, kExtraDataBufferSize);
356 365
357 std::vector<Filter::FilterType> filter_types; 366 std::vector<Filter::FilterType> filter_types;
358 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 367 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
359 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); 368 MockFilterContext filter_context(kDefaultBufferSize);
369 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
360 ASSERT_TRUE(filter.get()); 370 ASSERT_TRUE(filter.get());
361 DecodeAndCompareWithFilter(filter.get(), 371 DecodeAndCompareWithFilter(filter.get(),
362 source_buffer(), 372 source_buffer(),
363 source_len() + kExtraDataBufferSize, 373 source_len() + kExtraDataBufferSize,
364 more_data, 374 more_data,
365 more_data_len, 375 more_data_len,
366 kSmallBufferSize, 376 kSmallBufferSize,
367 true); 377 true);
368 } 378 }
369 379
370 TEST_F(BZip2FilterUnitTest, DecodeWithExtraDataAndSmallInputBuffer) { 380 TEST_F(BZip2FilterUnitTest, DecodeWithExtraDataAndSmallInputBuffer) {
371 char more_data[kDefaultBufferSize + kExtraDataBufferSize]; 381 char more_data[kDefaultBufferSize + kExtraDataBufferSize];
372 int more_data_len = bzip2_encode_len_ + kExtraDataBufferSize; 382 int more_data_len = bzip2_encode_len_ + kExtraDataBufferSize;
373 memcpy(more_data, bzip2_encode_buffer_, bzip2_encode_len_); 383 memcpy(more_data, bzip2_encode_buffer_, bzip2_encode_len_);
374 memcpy(more_data + bzip2_encode_len_, kExtraData, kExtraDataBufferSize); 384 memcpy(more_data + bzip2_encode_len_, kExtraData, kExtraDataBufferSize);
375 385
376 std::vector<Filter::FilterType> filter_types; 386 std::vector<Filter::FilterType> filter_types;
377 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); 387 filter_types.push_back(Filter::FILTER_TYPE_BZIP2);
378 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kSmallBufferSize)); 388 MockFilterContext filter_context(kSmallBufferSize);
389 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
379 ASSERT_TRUE(filter.get()); 390 ASSERT_TRUE(filter.get());
380 DecodeAndCompareWithFilter(filter.get(), 391 DecodeAndCompareWithFilter(filter.get(),
381 source_buffer(), 392 source_buffer(),
382 source_len() + kExtraDataBufferSize, 393 source_len() + kExtraDataBufferSize,
383 more_data, 394 more_data,
384 more_data_len, 395 more_data_len,
385 kDefaultBufferSize, 396 kDefaultBufferSize,
386 true); 397 true);
387 } 398 }
388 399
389 } // namespace 400 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698