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

Side by Side Diff: net/disk_cache/entry_unittest.cc

Issue 23983005: SimpleCache: merge the first and second stream in one file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 2409 matching lines...) Expand 10 before | Expand all | Expand 10 after
2420 if (CreateEntry(key, &entry) != net::OK || !entry) { 2420 if (CreateEntry(key, &entry) != net::OK || !entry) {
2421 LOG(ERROR) << "Could not create entry"; 2421 LOG(ERROR) << "Could not create entry";
2422 return false; 2422 return false;
2423 } 2423 }
2424 2424
2425 const char data[] = "this is very good data"; 2425 const char data[] = "this is very good data";
2426 const int kDataSize = arraysize(data); 2426 const int kDataSize = arraysize(data);
2427 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize)); 2427 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize));
2428 base::strlcpy(buffer->data(), data, kDataSize); 2428 base::strlcpy(buffer->data(), data, kDataSize);
2429 2429
2430 EXPECT_EQ(kDataSize, WriteData(entry, 0, 0, buffer.get(), kDataSize, false)); 2430 EXPECT_EQ(kDataSize, WriteData(entry, 1, 0, buffer.get(), kDataSize, false));
2431 entry->Close(); 2431 entry->Close();
2432 entry = NULL; 2432 entry = NULL;
2433 2433
2434 // Corrupt the last byte of the data. 2434 // Corrupt the last byte of the data.
2435 base::FilePath entry_file0_path = cache_path_.AppendASCII( 2435 base::FilePath entry_file0_path = cache_path_.AppendASCII(
2436 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); 2436 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0));
2437 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; 2437 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN;
2438 base::PlatformFile entry_file0 = 2438 base::PlatformFile entry_file0 =
2439 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); 2439 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL);
2440 if (entry_file0 == base::kInvalidPlatformFileValue) 2440 if (entry_file0 == base::kInvalidPlatformFileValue)
2441 return false; 2441 return false;
2442 int64 file_offset = 2442 int64 file_offset = disk_cache::simple_util::GetFileOffsetFromDataOffset(
2443 disk_cache::simple_util::GetFileOffsetFromKeyAndDataOffset( 2443 key, kDataSize - 2, 1, 0);
2444 key, kDataSize - 2);
2445 EXPECT_EQ(1, base::WritePlatformFile(entry_file0, file_offset, "X", 1)); 2444 EXPECT_EQ(1, base::WritePlatformFile(entry_file0, file_offset, "X", 1));
2446 if (!base::ClosePlatformFile(entry_file0)) 2445 if (!base::ClosePlatformFile(entry_file0))
2447 return false; 2446 return false;
2448 *data_size = kDataSize; 2447 *data_size = kDataSize;
2449 return true; 2448 return true;
2450 } 2449 }
2451 2450
2452 // Tests that the simple cache can detect entries that have bad data. 2451 // Tests that the simple cache can detect entries that have bad data.
2453 TEST_F(DiskCacheEntryTest, SimpleCacheBadChecksum) { 2452 TEST_F(DiskCacheEntryTest, SimpleCacheBadChecksum) {
2454 SetSimpleCacheMode(); 2453 SetSimpleCacheMode();
2455 InitCache(); 2454 InitCache();
2456 2455
2457 const char key[] = "the first key"; 2456 const char key[] = "the first key";
2458 int size_unused; 2457 int size_unused;
2459 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused)); 2458 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused));
2460 2459
2461 disk_cache::Entry* entry = NULL; 2460 disk_cache::Entry* entry = NULL;
2462 2461
2463 // Open the entry. 2462 // Open the entry.
2464 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2463 ASSERT_EQ(net::OK, OpenEntry(key, &entry));
2465 ScopedEntryPtr entry_closer(entry); 2464 ScopedEntryPtr entry_closer(entry);
2466 2465
2467 const int kReadBufferSize = 200; 2466 const int kReadBufferSize = 200;
2468 EXPECT_GE(kReadBufferSize, entry->GetDataSize(0)); 2467 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1));
2469 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 2468 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
2470 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, 2469 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH,
2471 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); 2470 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize));
2472 } 2471 }
2473 2472
2474 // Tests that an entry that has had an IO error occur can still be Doomed(). 2473 // Tests that an entry that has had an IO error occur can still be Doomed().
2475 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { 2474 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) {
2476 SetSimpleCacheMode(); 2475 SetSimpleCacheMode();
2477 InitCache(); 2476 InitCache();
2478 2477
2479 const char key[] = "the first key"; 2478 const char key[] = "the first key";
2480 int size_unused; 2479 int size_unused;
2481 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused)); 2480 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused));
2482 2481
2483 disk_cache::Entry* entry = NULL; 2482 disk_cache::Entry* entry = NULL;
2484 2483
2485 // Open the entry, forcing an IO error. 2484 // Open the entry, forcing an IO error.
2486 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2485 ASSERT_EQ(net::OK, OpenEntry(key, &entry));
2487 ScopedEntryPtr entry_closer(entry); 2486 ScopedEntryPtr entry_closer(entry);
2488 2487
2489 const int kReadBufferSize = 200; 2488 const int kReadBufferSize = 200;
2490 EXPECT_GE(kReadBufferSize, entry->GetDataSize(0)); 2489 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1));
2491 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 2490 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
2492 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, 2491 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH,
2493 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); 2492 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize));
2494 2493
2495 entry->Doom(); // Should not crash. 2494 entry->Doom(); // Should not crash.
2496 } 2495 }
2497 2496
2498 bool TruncatePath(const base::FilePath& file_path, int64 length) { 2497 bool TruncatePath(const base::FilePath& file_path, int64 length) {
2499 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; 2498 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN;
2500 base::PlatformFile file = 2499 base::PlatformFile file =
2501 base::CreatePlatformFile(file_path, flags, NULL, NULL); 2500 base::CreatePlatformFile(file_path, flags, NULL, NULL);
2502 if (base::kInvalidPlatformFileValue == file) 2501 if (base::kInvalidPlatformFileValue == file)
2503 return false; 2502 return false;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2583 new net::IOBufferWithSize(kBufferSize)); 2582 new net::IOBufferWithSize(kBufferSize));
2584 2583
2585 disk_cache::Entry* entry = NULL; 2584 disk_cache::Entry* entry = NULL;
2586 EXPECT_EQ(net::OK, CreateEntry("my key", &entry)); 2585 EXPECT_EQ(net::OK, CreateEntry("my key", &entry));
2587 ASSERT_NE(null_entry, entry); 2586 ASSERT_NE(null_entry, entry);
2588 ScopedEntryPtr entry_closer(entry); 2587 ScopedEntryPtr entry_closer(entry);
2589 2588
2590 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); 2589 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
2591 CallbackTest write_callback(&helper, false); 2590 CallbackTest write_callback(&helper, false);
2592 int ret = entry->WriteData( 2591 int ret = entry->WriteData(
2593 0, 2592 1,
2594 0, 2593 0,
2595 write_buffer.get(), 2594 write_buffer.get(),
2596 write_buffer->size(), 2595 write_buffer->size(),
2597 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)), 2596 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
2598 false); 2597 false);
2599 ASSERT_EQ(net::ERR_IO_PENDING, ret); 2598 ASSERT_EQ(net::ERR_IO_PENDING, ret);
2600 helper.WaitUntilCacheIoFinished(++expected_callback_runs); 2599 helper.WaitUntilCacheIoFinished(++expected_callback_runs);
2601 } 2600 }
2602 2601
2603 TEST_F(DiskCacheEntryTest, 2602 TEST_F(DiskCacheEntryTest,
(...skipping 12 matching lines...) Expand all
2616 EXPECT_EQ(net::OK, CreateEntry("my key", &entry)); 2615 EXPECT_EQ(net::OK, CreateEntry("my key", &entry));
2617 ASSERT_NE(null_entry, entry); 2616 ASSERT_NE(null_entry, entry);
2618 ScopedEntryPtr entry_closer(entry); 2617 ScopedEntryPtr entry_closer(entry);
2619 2618
2620 const int kBufferSize = 10; 2619 const int kBufferSize = 10;
2621 scoped_refptr<net::IOBufferWithSize> write_buffer( 2620 scoped_refptr<net::IOBufferWithSize> write_buffer(
2622 new net::IOBufferWithSize(kBufferSize)); 2621 new net::IOBufferWithSize(kBufferSize));
2623 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); 2622 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
2624 CallbackTest write_callback(&helper, false); 2623 CallbackTest write_callback(&helper, false);
2625 int ret = entry->WriteData( 2624 int ret = entry->WriteData(
2626 0, 2625 1,
2627 0, 2626 0,
2628 write_buffer.get(), 2627 write_buffer.get(),
2629 write_buffer->size(), 2628 write_buffer->size(),
2630 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)), 2629 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
2631 false); 2630 false);
2632 EXPECT_EQ(net::ERR_IO_PENDING, ret); 2631 EXPECT_EQ(net::ERR_IO_PENDING, ret);
2633 int expected_callback_runs = 1; 2632 int expected_callback_runs = 1;
2634 2633
2635 scoped_refptr<net::IOBufferWithSize> read_buffer( 2634 scoped_refptr<net::IOBufferWithSize> read_buffer(
2636 new net::IOBufferWithSize(kBufferSize)); 2635 new net::IOBufferWithSize(kBufferSize));
2637 CallbackTest read_callback(&helper, false); 2636 CallbackTest read_callback(&helper, false);
2638 ret = entry->ReadData( 2637 ret = entry->ReadData(
2639 0, 2638 1,
2640 0, 2639 0,
2641 read_buffer.get(), 2640 read_buffer.get(),
2642 read_buffer->size(), 2641 read_buffer->size(),
2643 base::Bind(&CallbackTest::Run, base::Unretained(&read_callback))); 2642 base::Bind(&CallbackTest::Run, base::Unretained(&read_callback)));
2644 EXPECT_EQ(net::ERR_IO_PENDING, ret); 2643 EXPECT_EQ(net::ERR_IO_PENDING, ret);
2645 ++expected_callback_runs; 2644 ++expected_callback_runs;
2646 2645
2647 helper.WaitUntilCacheIoFinished(expected_callback_runs); 2646 helper.WaitUntilCacheIoFinished(expected_callback_runs);
2648 ASSERT_EQ(read_buffer->size(), write_buffer->size()); 2647 ASSERT_EQ(read_buffer->size(), write_buffer->size());
2649 EXPECT_EQ( 2648 EXPECT_EQ(
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
3115 const char key[] = "the first key"; 3114 const char key[] = "the first key";
3116 3115
3117 const int kBufferSize = 1024; 3116 const int kBufferSize = 1024;
3118 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); 3117 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize));
3119 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); 3118 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false);
3120 3119
3121 disk_cache::Entry* entry = NULL; 3120 disk_cache::Entry* entry = NULL;
3122 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3121 ASSERT_EQ(net::OK, CreateEntry(key, &entry));
3123 3122
3124 EXPECT_EQ(kBufferSize, 3123 EXPECT_EQ(kBufferSize,
3125 WriteData(entry, 0, 0, write_buffer.get(), kBufferSize, false)); 3124 WriteData(entry, 1, 0, write_buffer.get(), kBufferSize, false));
3126 entry->Close(); 3125 entry->Close();
3127 entry = NULL; 3126 entry = NULL;
3128 3127
3129 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3128 ASSERT_EQ(net::OK, OpenEntry(key, &entry));
3130 ScopedEntryPtr entry_closer(entry); 3129 ScopedEntryPtr entry_closer(entry);
3131 3130
3132 MessageLoopHelper helper; 3131 MessageLoopHelper helper;
3133 int expected = 0; 3132 int expected = 0;
3134 3133
3135 // Make a short read. 3134 // Make a short read.
3136 const int kReadBufferSize = 512; 3135 const int kReadBufferSize = 512;
3137 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 3136 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
3138 CallbackTest read_callback(&helper, false); 3137 CallbackTest read_callback(&helper, false);
3139 EXPECT_EQ(net::ERR_IO_PENDING, 3138 EXPECT_EQ(net::ERR_IO_PENDING,
3140 entry->ReadData(0, 3139 entry->ReadData(1,
3141 0, 3140 0,
3142 read_buffer.get(), 3141 read_buffer.get(),
3143 kReadBufferSize, 3142 kReadBufferSize,
3144 base::Bind(&CallbackTest::Run, 3143 base::Bind(&CallbackTest::Run,
3145 base::Unretained(&read_callback)))); 3144 base::Unretained(&read_callback))));
3146 ++expected; 3145 ++expected;
3147 3146
3148 // Truncate the entry to the length of that read. 3147 // Truncate the entry to the length of that read.
3149 scoped_refptr<net::IOBuffer> 3148 scoped_refptr<net::IOBuffer>
3150 truncate_buffer(new net::IOBuffer(kReadBufferSize)); 3149 truncate_buffer(new net::IOBuffer(kReadBufferSize));
3151 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); 3150 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false);
3152 CallbackTest truncate_callback(&helper, false); 3151 CallbackTest truncate_callback(&helper, false);
3153 EXPECT_EQ(net::ERR_IO_PENDING, 3152 EXPECT_EQ(net::ERR_IO_PENDING,
3154 entry->WriteData(0, 3153 entry->WriteData(1,
3155 0, 3154 0,
3156 truncate_buffer.get(), 3155 truncate_buffer.get(),
3157 kReadBufferSize, 3156 kReadBufferSize,
3158 base::Bind(&CallbackTest::Run, 3157 base::Bind(&CallbackTest::Run,
3159 base::Unretained(&truncate_callback)), 3158 base::Unretained(&truncate_callback)),
3160 true)); 3159 true));
3161 ++expected; 3160 ++expected;
3162 3161
3163 // Wait for both the read and truncation to finish, and confirm that both 3162 // Wait for both the read and truncation to finish, and confirm that both
3164 // succeeded. 3163 // succeeded.
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
3280 int size; 3279 int size;
3281 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size)); 3280 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size));
3282 3281
3283 scoped_refptr<net::IOBuffer> read_buffer1(new net::IOBuffer(size)); 3282 scoped_refptr<net::IOBuffer> read_buffer1(new net::IOBuffer(size));
3284 scoped_refptr<net::IOBuffer> read_buffer2(new net::IOBuffer(size)); 3283 scoped_refptr<net::IOBuffer> read_buffer2(new net::IOBuffer(size));
3285 3284
3286 // Advance the first reader a little. 3285 // Advance the first reader a little.
3287 disk_cache::Entry* entry = NULL; 3286 disk_cache::Entry* entry = NULL;
3288 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3287 ASSERT_EQ(net::OK, OpenEntry(key, &entry));
3289 ScopedEntryPtr entry_closer(entry); 3288 ScopedEntryPtr entry_closer(entry);
3290 EXPECT_EQ(1, ReadData(entry, 0, 0, read_buffer1.get(), 1)); 3289 EXPECT_EQ(1, ReadData(entry, 1, 0, read_buffer1.get(), 1));
3291 3290
3292 // Advance the 2nd reader by the same amount. 3291 // Advance the 2nd reader by the same amount.
3293 disk_cache::Entry* entry2 = NULL; 3292 disk_cache::Entry* entry2 = NULL;
3294 EXPECT_EQ(net::OK, OpenEntry(key, &entry2)); 3293 EXPECT_EQ(net::OK, OpenEntry(key, &entry2));
3295 ScopedEntryPtr entry2_closer(entry2); 3294 ScopedEntryPtr entry2_closer(entry2);
3296 EXPECT_EQ(1, ReadData(entry2, 0, 0, read_buffer2.get(), 1)); 3295 EXPECT_EQ(1, ReadData(entry2, 1, 0, read_buffer2.get(), 1));
3297 3296
3298 // Continue reading 1st. 3297 // Continue reading 1st.
3299 EXPECT_GT(0, ReadData(entry, 0, 1, read_buffer1.get(), size)); 3298 EXPECT_GT(0, ReadData(entry, 1, 1, read_buffer1.get(), size));
3300 3299
3301 // This read should fail as well because we have previous read failures. 3300 // This read should fail as well because we have previous read failures.
3302 EXPECT_GT(0, ReadData(entry2, 0, 1, read_buffer2.get(), 1)); 3301 EXPECT_GT(0, ReadData(entry2, 1, 1, read_buffer2.get(), 1));
3303 DisableIntegrityCheck(); 3302 DisableIntegrityCheck();
3304 } 3303 }
3305 3304
3306 // Test if we can sequentially read each subset of the data until all the data 3305 // Test if we can sequentially read each subset of the data until all the data
3307 // is read, then the CRC is calculated correctly and the reads are successful. 3306 // is read, then the CRC is calculated correctly and the reads are successful.
3308 TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) { 3307 TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) {
3309 // Test sequence: 3308 // Test sequence:
3310 // Create, Write, Read (first half of data), Read (second half of data), 3309 // Create, Write, Read (first half of data), Read (second half of data),
3311 // Close. 3310 // Close.
3312 SetSimpleCacheMode(); 3311 SetSimpleCacheMode();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
3397 3396
3398 // Check that we are not leaking. 3397 // Check that we are not leaking.
3399 ASSERT_NE(entry, null); 3398 ASSERT_NE(entry, null);
3400 EXPECT_TRUE( 3399 EXPECT_TRUE(
3401 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); 3400 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef());
3402 entry->Close(); 3401 entry->Close();
3403 entry = NULL; 3402 entry = NULL;
3404 } 3403 }
3405 3404
3406 #endif // defined(OS_POSIX) 3405 #endif // defined(OS_POSIX)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698