Index: net/disk_cache/backend_unittest.cc |
=================================================================== |
--- net/disk_cache/backend_unittest.cc (revision 232523) |
+++ net/disk_cache/backend_unittest.cc (working copy) |
@@ -39,6 +39,7 @@ |
namespace { |
+const int kDelayToNextTimestamp = 60; |
const char kExistingEntryKey[] = "existing entry key"; |
scoped_ptr<disk_cache::BackendImpl> CreateExistingEntryCache( |
@@ -91,6 +92,8 @@ |
void BackendSetSize(); |
void BackendLoad(); |
void BackendChain(); |
+ void BucketUse(); |
+ void BackendNewEvictionTrim(); |
void BackendValidEntry(); |
void BackendInvalidEntry(); |
void BackendInvalidEntryRead(); |
@@ -123,6 +126,9 @@ |
void BackendDisable2(); |
void BackendDisable3(); |
void BackendDisable4(); |
+ void BackendTotalBuffersSize1(); |
+ void BackendTotalBuffersSize2(); |
+ void BackendUpdateRankForExternalCacheHit(); |
void TracingBackendBasics(); |
}; |
@@ -342,6 +348,11 @@ |
BackendBasics(); |
} |
+TEST_F(DiskCacheBackendTest, V3Basics) { |
+ UseVersion3(); |
+ BackendBasics(); |
+} |
+ |
void DiskCacheBackendTest::BackendKeying() { |
InitCache(); |
const char* kName1 = "the first key"; |
@@ -387,11 +398,22 @@ |
BackendKeying(); |
} |
+TEST_F(DiskCacheBackendTest, V3Keying) { |
+ UseVersion3(); |
+ BackendKeying(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionKeying) { |
SetNewEviction(); |
BackendKeying(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionKeying) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendKeying(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyKeying) { |
SetMemoryOnlyMode(); |
BackendKeying(); |
@@ -414,7 +436,7 @@ |
ASSERT_TRUE(CleanupCacheDir()); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
// Test the private factory method(s). |
scoped_ptr<disk_cache::Backend> cache; |
@@ -423,16 +445,11 @@ |
cache.reset(); |
// Now test the public API. |
- int rv = |
- disk_cache::CreateCacheBackend(net::DISK_CACHE, |
- net::CACHE_BACKEND_DEFAULT, |
- cache_path_, |
- 0, |
- false, |
- cache_thread.message_loop_proxy().get(), |
- NULL, |
- &cache, |
- cb.callback()); |
+ int rv = disk_cache::CreateCacheBackend(net::DISK_CACHE, |
+ net::CACHE_BACKEND_DEFAULT, |
+ cache_path_, 0, false, |
+ cache_thread.message_loop_proxy(), |
+ NULL, &cache, cb.callback()); |
ASSERT_EQ(net::OK, cb.GetResult(rv)); |
ASSERT_TRUE(cache.get()); |
cache.reset(); |
@@ -457,7 +474,7 @@ |
base::DeleteFile(filename, false); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
net::TestCompletionCallback cb; |
bool prev = base::ThreadRestrictions::SetIOAllowed(false); |
@@ -496,12 +513,12 @@ |
// Tests that we deal with file-level pending operations at destruction time. |
void DiskCacheBackendTest::BackendShutdownWithPendingFileIO(bool fast) { |
ASSERT_TRUE(CleanupCacheDir()); |
- uint32 flags = disk_cache::kNoBuffering; |
- if (!fast) |
- flags |= disk_cache::kNoRandom; |
+ if (fast) |
+ AvoidTestFlag(); |
UseCurrentThread(); |
- CreateBackend(flags, NULL); |
+ CreateBackend(NULL); |
+ SetNoBuffering(); |
net::TestCompletionCallback cb; |
int rv = GeneratePendingIO(&cb); |
@@ -561,7 +578,8 @@ |
SetNewEviction(); // Match the expected behavior for integrity verification. |
UseCurrentThread(); |
- CreateBackend(disk_cache::kNoBuffering, NULL); |
+ CreateBackend(NULL); |
+ SetNoBuffering(); |
rv = GeneratePendingIO(&cb); |
// cache_ has a pending operation, and extra_cache will go away. |
@@ -585,13 +603,13 @@ |
ASSERT_TRUE(CleanupCacheDir()); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
- uint32 flags = disk_cache::kNoBuffering; |
- if (!fast) |
- flags |= disk_cache::kNoRandom; |
+ if (fast) |
+ AvoidTestFlag(); |
- CreateBackend(flags, &cache_thread); |
+ CreateBackend(&cache_thread); |
+ SetNoBuffering(); |
disk_cache::Entry* entry; |
int rv = cache_->CreateEntry("some key", &entry, cb.callback()); |
@@ -628,11 +646,11 @@ |
ASSERT_TRUE(CleanupCacheDir()); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
- disk_cache::BackendFlags flags = |
- fast ? disk_cache::kNone : disk_cache::kNoRandom; |
- CreateBackend(flags, &cache_thread); |
+ if (fast) |
+ AvoidTestFlag(); |
+ CreateBackend(&cache_thread); |
disk_cache::Entry* entry; |
int rv = cache_->CreateEntry("some key", &entry, cb.callback()); |
@@ -666,20 +684,13 @@ |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
net::TestCompletionCallback cb; |
scoped_ptr<disk_cache::Backend> backend; |
- int rv = |
- disk_cache::CreateCacheBackend(net::DISK_CACHE, |
- net::CACHE_BACKEND_BLOCKFILE, |
- cache_path_, |
- 0, |
- false, |
- cache_thread.message_loop_proxy().get(), |
- NULL, |
- &backend, |
- cb.callback()); |
+ int rv = disk_cache::CreateCacheBackend( |
+ net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE, cache_path_, 0, false, |
+ cache_thread.message_loop_proxy(), NULL, &backend, cb.callback()); |
ASSERT_NE(net::OK, cb.GetResult(rv)); |
ASSERT_FALSE(backend); |
@@ -698,22 +709,22 @@ |
scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(cache_size)); |
memset(buffer->data(), 0, cache_size); |
EXPECT_EQ(cache_size / 10, |
- WriteData(entry, 0, 0, buffer.get(), cache_size / 10, false)) |
- << "normal file"; |
+ WriteData(entry, 0, 0, buffer.get(), cache_size / 10, false)) << |
+ "normal file"; |
EXPECT_EQ(net::ERR_FAILED, |
- WriteData(entry, 1, 0, buffer.get(), cache_size / 5, false)) |
- << "file size above the limit"; |
+ WriteData(entry, 1, 0, buffer.get(), cache_size / 5, false)) << |
+ "file size above the limit"; |
// By doubling the total size, we make this file cacheable. |
SetMaxSize(cache_size * 2); |
- EXPECT_EQ(cache_size / 5, |
- WriteData(entry, 1, 0, buffer.get(), cache_size / 5, false)); |
+ EXPECT_EQ(cache_size / 5, WriteData(entry, 1, 0, buffer.get(), cache_size / 5, |
+ false)); |
// Let's fill up the cache!. |
SetMaxSize(cache_size * 10); |
- EXPECT_EQ(cache_size * 3 / 4, |
- WriteData(entry, 0, 0, buffer.get(), cache_size * 3 / 4, false)); |
+ EXPECT_EQ(cache_size * 3 / 4, WriteData(entry, 0, 0, buffer.get(), |
+ cache_size * 3 / 4, false)); |
entry->Close(); |
FlushQueueForTest(); |
@@ -726,17 +737,20 @@ |
WriteData(entry, 0, 0, buffer.get(), cache_size / 10, false)); |
disk_cache::Entry* entry2; |
- ASSERT_EQ(net::OK, CreateEntry("an extra key", &entry2)); |
- EXPECT_EQ(cache_size / 10, |
- WriteData(entry2, 0, 0, buffer.get(), cache_size / 10, false)); |
+ std::string extra_key("an extra key"); |
+ ASSERT_EQ(net::OK, CreateEntry(extra_key, &entry2)); |
+ EXPECT_EQ(cache_size / 10, WriteData(entry2, 0, 0, buffer.get(), |
+ cache_size / 10, false)); |
entry2->Close(); // This will trigger the cache trim. |
+ WaitForEntryToClose(extra_key); |
- EXPECT_NE(net::OK, OpenEntry(first, &entry2)); |
- |
FlushQueueForTest(); // Make sure that we are done trimming the cache. |
FlushQueueForTest(); // We may have posted two tasks to evict stuff. |
entry->Close(); |
+ WaitForEntryToClose(second); |
+ |
+ EXPECT_NE(net::OK, OpenEntry(first, &entry2)); |
ASSERT_EQ(net::OK, OpenEntry(second, &entry)); |
EXPECT_EQ(cache_size / 10, entry->GetDataSize(0)); |
entry->Close(); |
@@ -746,11 +760,24 @@ |
BackendSetSize(); |
} |
+TEST_F(DiskCacheBackendTest, V3SetSize) { |
+ UseVersion3(); |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendSetSize(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionSetSize) { |
SetNewEviction(); |
BackendSetSize(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionSetSize) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendSetSize(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlySetSize) { |
SetMemoryOnlyMode(); |
BackendSetSize(); |
@@ -857,7 +884,101 @@ |
BackendChain(); |
} |
-TEST_F(DiskCacheBackendTest, NewEvictionTrim) { |
+// Tests the proper use of cell buckets while the index grow. |
+void DiskCacheBackendTest::BucketUse() { |
+ UseVersion3(); |
+ InitCache(); |
+ const int kNumEntries = 20; |
+ disk_cache::Entry* entries[kNumEntries]; |
+ std::string key("The first key"); |
+ |
+ // This generates kNumEntries collisions so the extra table has to be used. |
+ // There are only 2 extra buckets on the test setup, so the index has to grow. |
+ for (int i = 0; i < kNumEntries; i++) { |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entries[i])); |
+ entries[i]->Doom(); |
+ FlushQueueForTest(); |
+ } |
+ |
+ for (int i = 0; i < kNumEntries / 2; i++) |
+ entries[i]->Close(); |
+ |
+ for (int i = 0; i < kNumEntries / 2; i++) { |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entries[i])); |
+ entries[i]->Doom(); |
+ } |
+ |
+ for (int i = 0; i < kNumEntries; i++) |
+ entries[i]->Close(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3BucketUse) { |
+ BucketUse(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3DoubleIndexBucketUse) { |
+ PresetTestMode(); // Doubles the index instead of a slow growth. |
+ BucketUse(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3DoubleIndex) { |
+ UseVersion3(); |
+ PresetTestMode(); |
+ InitCache(); |
+ |
+ disk_cache::Entry* entry; |
+ const int kNumEntries = 200; |
+ for (int i = 0; i < kNumEntries; i++) { |
+ std::string name(base::StringPrintf("Key %d", i)); |
+ ASSERT_EQ(net::OK, CreateEntry(name, &entry)); |
+ entry->Close(); |
+ FlushQueueForTest(); |
+ } |
+ |
+ // Generate enough collisions to force growing the extra table (and with it, |
+ // the index). |
+ const int kNumSavedEntries = 5; |
+ disk_cache::Entry* entries[kNumSavedEntries]; |
+ std::string key("The first key"); |
+ for (int i = 0; i < kNumSavedEntries; i++) { |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entries[i])); |
+ entries[i]->Doom(); |
+ FlushQueueForTest(); |
+ } |
+ |
+ for (int i = 0; i < kNumSavedEntries; i++) |
+ entries[i]->Close(); |
+ |
+ // Verify that all entries are there. |
+ for (int i = 0; i < kNumEntries; i++) { |
+ std::string name(base::StringPrintf("Key %d", i)); |
+ ASSERT_EQ(net::OK, OpenEntry(name, &entry)); |
+ entry->Close(); |
+ } |
+} |
+ |
+// This test leaks memory because it simulates a crash. |
+TEST_F(DiskCacheBackendTest, DISABLED_V3Backup) { |
+ UseVersion3(); |
+ PresetTestMode(); |
+ InitCache(); |
+ |
+ disk_cache::Entry* entry; |
+ std::string name1("First entry"); |
+ ASSERT_EQ(net::OK, CreateEntry(name1, &entry)); |
+ entry->Close(); |
+ WaitForEntryToClose(name1); |
+ |
+ std::string name2("Another entry"); |
+ ASSERT_EQ(net::OK, CreateEntry(name2, &entry)); |
+ |
+ SimulateCrash(); |
+ EXPECT_EQ(net::OK, OpenEntry(name1, &entry)); |
+ entry->Close(); |
+ EXPECT_NE(net::OK, OpenEntry(name2, &entry)); |
+} |
+ |
+void DiskCacheBackendTest::BackendNewEvictionTrim() { |
SetNewEviction(); |
InitCache(); |
@@ -866,11 +987,18 @@ |
std::string name(base::StringPrintf("Key %d", i)); |
ASSERT_EQ(net::OK, CreateEntry(name, &entry)); |
entry->Close(); |
+ AddDelayForTest(kDelayToNextTimestamp); |
+ |
if (i < 90) { |
// Entries 0 to 89 are in list 1; 90 to 99 are in list 0. |
ASSERT_EQ(net::OK, OpenEntry(name, &entry)); |
entry->Close(); |
} |
+ if (!(i % 10)) |
+ FlushQueueForTest(); |
+ |
+ if (i == 0 || i == 90) |
+ WaitForEntryToClose(name); |
} |
// The first eviction must come from list 1 (10% limit), the second must come |
@@ -887,6 +1015,15 @@ |
entry->Close(); |
} |
+TEST_F(DiskCacheBackendTest, NewEvictionTrim) { |
+ BackendNewEvictionTrim(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3NewEvictionTrim) { |
+ UseVersion3(); |
+ BackendNewEvictionTrim(); |
+} |
+ |
// Before looking for invalid entries, let's check a valid entry. |
void DiskCacheBackendTest::BackendValidEntry() { |
InitCache(); |
@@ -1217,6 +1354,8 @@ |
disk_cache::Entry* entry; |
ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
entry->Close(); |
+ if (!(i % 10)) |
+ FlushQueueForTest(); |
} |
EXPECT_EQ(kNumEntries, cache_->GetEntryCount()); |
Time final = Time::Now(); |
@@ -1259,11 +1398,22 @@ |
BackendEnumerations(); |
} |
+TEST_F(DiskCacheBackendTest, V3Enumerations) { |
+ UseVersion3(); |
+ BackendEnumerations(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionEnumerations) { |
SetNewEviction(); |
BackendEnumerations(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionEnumerations) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendEnumerations(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations) { |
SetMemoryOnlyMode(); |
BackendEnumerations(); |
@@ -1292,7 +1442,7 @@ |
FlushQueueForTest(); |
// Make sure that the timestamp is not the same. |
- AddDelay(); |
+ AddDelayForTest(kDelayToNextTimestamp); |
ASSERT_EQ(net::OK, OpenEntry(second, &entry1)); |
void* iter = NULL; |
ASSERT_EQ(net::OK, OpenNextEntry(&iter, &entry2)); |
@@ -1328,11 +1478,22 @@ |
BackendEnumerations2(); |
} |
+TEST_F(DiskCacheBackendTest, V3Enumerations2) { |
+ UseVersion3(); |
+ BackendEnumerations2(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionEnumerations2) { |
SetNewEviction(); |
BackendEnumerations2(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionEnumerations2) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendEnumerations2(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations2) { |
SetMemoryOnlyMode(); |
BackendEnumerations2(); |
@@ -1508,8 +1669,8 @@ |
entry->Close(); |
FlushQueueForTest(); |
- AddDelay(); |
- Time middle = Time::Now(); |
+ AddDelayForTest(kDelayToNextTimestamp); |
+ Time middle = GetCurrentTime(); |
ASSERT_EQ(net::OK, CreateEntry("third", &entry)); |
entry->Close(); |
@@ -1517,8 +1678,8 @@ |
entry->Close(); |
FlushQueueForTest(); |
- AddDelay(); |
- Time final = Time::Now(); |
+ AddDelayForTest(kDelayToNextTimestamp); |
+ Time final = GetCurrentTime(); |
ASSERT_EQ(4, cache_->GetEntryCount()); |
EXPECT_EQ(net::OK, DoomEntriesSince(final)); |
@@ -1535,11 +1696,22 @@ |
BackendDoomRecent(); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomRecent) { |
+ UseVersion3(); |
+ BackendDoomRecent(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionDoomRecent) { |
SetNewEviction(); |
BackendDoomRecent(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionDoomRecent) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendDoomRecent(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyDoomRecent) { |
SetMemoryOnlyMode(); |
BackendDoomRecent(); |
@@ -1563,6 +1735,17 @@ |
EXPECT_EQ(3, cache_->GetEntryCount()); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomEntriesSinceSparse) { |
+ base::Time start; |
+ UseVersion3(); |
+ InitSparseCache(&start, NULL); |
+ DoomEntriesSince(start); |
+ // NOTE: BackendImpl counts child entries in its GetEntryCount(), while |
+ // MemBackendImpl does not. Thats why expected value differs here from |
+ // MemoryOnlyDoomEntriesSinceSparse. |
+ EXPECT_EQ(3, cache_->GetEntryCount()); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAllSparse) { |
SetMemoryOnlyMode(); |
InitSparseCache(NULL, NULL); |
@@ -1576,6 +1759,13 @@ |
EXPECT_EQ(0, cache_->GetEntryCount()); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomAllSparse) { |
+ UseVersion3(); |
+ InitSparseCache(NULL, NULL); |
+ EXPECT_EQ(net::OK, DoomAllEntries()); |
+ EXPECT_EQ(0, cache_->GetEntryCount()); |
+} |
+ |
void DiskCacheBackendTest::BackendDoomBetween() { |
InitCache(); |
@@ -1624,11 +1814,22 @@ |
BackendDoomBetween(); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomBetween) { |
+ UseVersion3(); |
+ BackendDoomBetween(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionDoomBetween) { |
SetNewEviction(); |
BackendDoomBetween(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionDoomBetween) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendDoomBetween(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyDoomBetween) { |
SetMemoryOnlyMode(); |
BackendDoomBetween(); |
@@ -1659,6 +1860,19 @@ |
EXPECT_EQ(3, cache_->GetEntryCount()); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomEntriesBetweenSparse) { |
+ base::Time start, end; |
+ UseVersion3(); |
+ InitSparseCache(&start, &end); |
+ DoomEntriesBetween(start, end); |
+ EXPECT_EQ(9, cache_->GetEntryCount()); |
+ |
+ start = end; |
+ end = base::Time::Now(); |
+ DoomEntriesBetween(start, end); |
+ EXPECT_EQ(3, cache_->GetEntryCount()); |
+} |
+ |
void DiskCacheBackendTest::BackendTransaction(const std::string& name, |
int num_entries, bool load) { |
success_ = false; |
@@ -1807,7 +2021,7 @@ |
ASSERT_TRUE(CopyTestCache("wrong_version")); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
net::TestCompletionCallback cb; |
scoped_ptr<disk_cache::BackendImpl> cache(new disk_cache::BackendImpl( |
@@ -1941,21 +2155,16 @@ |
SetNewEviction(); |
base::Thread cache_thread("CacheThread"); |
ASSERT_TRUE(cache_thread.StartWithOptions( |
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); |
net::TestCompletionCallback cb; |
bool prev = base::ThreadRestrictions::SetIOAllowed(false); |
base::FilePath path(cache_path_); |
- int rv = |
- disk_cache::CreateCacheBackend(net::DISK_CACHE, |
- net::CACHE_BACKEND_BLOCKFILE, |
- path, |
- 0, |
- true, |
- cache_thread.message_loop_proxy().get(), |
- NULL, |
- &cache_, |
- cb.callback()); |
+ int rv = disk_cache::CreateCacheBackend(net::DISK_CACHE, |
+ net::CACHE_BACKEND_BLOCKFILE, path, |
+ 0, true, |
+ cache_thread.message_loop_proxy(), |
+ NULL, &cache_, cb.callback()); |
path.clear(); // Make sure path was captured by the previous call. |
ASSERT_EQ(net::OK, cb.GetResult(rv)); |
base::ThreadRestrictions::SetIOAllowed(prev); |
@@ -2711,7 +2920,8 @@ |
ASSERT_TRUE(CleanupCacheDir()); |
scoped_ptr<disk_cache::BackendImpl> cache; |
cache.reset(new disk_cache::BackendImpl( |
- cache_path_, base::MessageLoopProxy::current().get(), NULL)); |
+ cache_path_, base::MessageLoopProxy::current(), |
+ NULL)); |
ASSERT_TRUE(NULL != cache.get()); |
cache->SetUnitTestMode(); |
ASSERT_EQ(net::OK, cache->SyncInit()); |
@@ -2799,11 +3009,22 @@ |
BackendDoomAll(); |
} |
+TEST_F(DiskCacheBackendTest, V3DoomAll) { |
+ UseVersion3(); |
+ BackendDoomAll(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, NewEvictionDoomAll) { |
SetNewEviction(); |
BackendDoomAll(); |
} |
+TEST_F(DiskCacheBackendTest, V3NewEvictionDoomAll) { |
+ UseVersion3(); |
+ SetNewEviction(); |
+ BackendDoomAll(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAll) { |
SetMemoryOnlyMode(); |
BackendDoomAll(); |
@@ -2863,26 +3084,13 @@ |
const int kNumberOfCaches = 2; |
scoped_ptr<disk_cache::Backend> cache[kNumberOfCaches]; |
- int rv = |
- disk_cache::CreateCacheBackend(net::DISK_CACHE, |
- net::CACHE_BACKEND_DEFAULT, |
- store1.path(), |
- 0, |
- false, |
- cache_thread.message_loop_proxy().get(), |
- NULL, |
- &cache[0], |
- cb.callback()); |
+ int rv = disk_cache::CreateCacheBackend( |
+ net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, store1.path(), 0, false, |
+ cache_thread.message_loop_proxy(), NULL, &cache[0], cb.callback()); |
ASSERT_EQ(net::OK, cb.GetResult(rv)); |
- rv = disk_cache::CreateCacheBackend(net::MEDIA_CACHE, |
- net::CACHE_BACKEND_DEFAULT, |
- store2.path(), |
- 0, |
- false, |
- cache_thread.message_loop_proxy().get(), |
- NULL, |
- &cache[1], |
- cb.callback()); |
+ rv = disk_cache::CreateCacheBackend( |
+ net::MEDIA_CACHE, net::CACHE_BACKEND_DEFAULT, store2.path(), 0, false, |
+ cache_thread.message_loop_proxy(), NULL, &cache[1], cb.callback()); |
ASSERT_EQ(net::OK, cb.GetResult(rv)); |
ASSERT_TRUE(cache[0].get() != NULL && cache[1].get() != NULL); |
@@ -2958,7 +3166,7 @@ |
// Make sure that we keep the total memory used by the internal buffers under |
// control. |
-TEST_F(DiskCacheBackendTest, TotalBuffersSize1) { |
+void DiskCacheBackendTest::BackendTotalBuffersSize1() { |
InitCache(); |
std::string key("the first key"); |
disk_cache::Entry* entry; |
@@ -2988,35 +3196,53 @@ |
} |
entry->Close(); |
- EXPECT_EQ(0, cache_impl_->GetTotalBuffersSize()); |
+ EXPECT_EQ(0, GetTotalBuffersSize()); |
} |
+TEST_F(DiskCacheBackendTest, TotalBuffersSize1) { |
+ BackendTotalBuffersSize1(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3TotalBuffersSize1) { |
+ UseVersion3(); |
+ BackendTotalBuffersSize1(); |
+} |
+ |
// This test assumes at least 150MB of system memory. |
-TEST_F(DiskCacheBackendTest, TotalBuffersSize2) { |
+void DiskCacheBackendTest::BackendTotalBuffersSize2() { |
InitCache(); |
const int kOneMB = 1024 * 1024; |
- EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
- EXPECT_EQ(kOneMB, cache_impl_->GetTotalBuffersSize()); |
+ EXPECT_TRUE(IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB, GetTotalBuffersSize()); |
- EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
- EXPECT_EQ(kOneMB * 2, cache_impl_->GetTotalBuffersSize()); |
+ EXPECT_TRUE(IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB * 2, GetTotalBuffersSize()); |
- EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
- EXPECT_EQ(kOneMB * 3, cache_impl_->GetTotalBuffersSize()); |
+ EXPECT_TRUE(IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB * 3, GetTotalBuffersSize()); |
- cache_impl_->BufferDeleted(kOneMB); |
- EXPECT_EQ(kOneMB * 2, cache_impl_->GetTotalBuffersSize()); |
+ BufferDeleted(kOneMB); |
+ EXPECT_EQ(kOneMB * 2, GetTotalBuffersSize()); |
// Check the upper limit. |
- EXPECT_FALSE(cache_impl_->IsAllocAllowed(0, 30 * kOneMB)); |
+ EXPECT_FALSE(IsAllocAllowed(0, 30 * kOneMB)); |
for (int i = 0; i < 30; i++) |
- cache_impl_->IsAllocAllowed(0, kOneMB); // Ignore the result. |
+ IsAllocAllowed(0, kOneMB); // Ignore the result. |
- EXPECT_FALSE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
+ EXPECT_FALSE(IsAllocAllowed(0, kOneMB)); |
} |
+TEST_F(DiskCacheBackendTest, TotalBuffersSize2) { |
+ BackendTotalBuffersSize2(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3TotalBuffersSize2) { |
+ UseVersion3(); |
+ BackendTotalBuffersSize2(); |
+} |
+ |
// Tests that sharing of external files works and we are able to delete the |
// files when we need to. |
TEST_F(DiskCacheBackendTest, FileSharing) { |
@@ -3057,7 +3283,7 @@ |
EXPECT_TRUE(disk_cache::DeleteCacheFile(name)); |
} |
-TEST_F(DiskCacheBackendTest, UpdateRankForExternalCacheHit) { |
+void DiskCacheBackendTest::BackendUpdateRankForExternalCacheHit() { |
InitCache(); |
disk_cache::Entry* entry; |
@@ -3066,40 +3292,41 @@ |
std::string key = base::StringPrintf("key%d", i); |
ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
entry->Close(); |
+ AddDelayForTest(kDelayToNextTimestamp); |
} |
+ FlushQueueForTest(); |
// Ping the oldest entry. |
+ SetTestMode(); |
cache_->OnExternalCacheHit("key0"); |
+ FlushQueueForTest(); |
TrimForTest(false); |
// Make sure the older key remains. |
- EXPECT_EQ(1, cache_->GetEntryCount()); |
+ EXPECT_NE(net::OK, OpenEntry("key1", &entry)); |
ASSERT_EQ(net::OK, OpenEntry("key0", &entry)); |
entry->Close(); |
} |
+TEST_F(DiskCacheBackendTest, UpdateRankForExternalCacheHit) { |
+ BackendUpdateRankForExternalCacheHit(); |
+} |
+ |
+TEST_F(DiskCacheBackendTest, V3UpdateRankForExternalCacheHit) { |
+ UseVersion3(); |
+ BackendUpdateRankForExternalCacheHit(); |
+} |
+ |
TEST_F(DiskCacheBackendTest, ShaderCacheUpdateRankForExternalCacheHit) { |
SetCacheType(net::SHADER_CACHE); |
- InitCache(); |
+ BackendUpdateRankForExternalCacheHit(); |
+} |
- disk_cache::Entry* entry; |
- |
- for (int i = 0; i < 2; ++i) { |
- std::string key = base::StringPrintf("key%d", i); |
- ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
- entry->Close(); |
- } |
- |
- // Ping the oldest entry. |
- cache_->OnExternalCacheHit("key0"); |
- |
- TrimForTest(false); |
- |
- // Make sure the older key remains. |
- EXPECT_EQ(1, cache_->GetEntryCount()); |
- ASSERT_EQ(net::OK, OpenEntry("key0", &entry)); |
- entry->Close(); |
+TEST_F(DiskCacheBackendTest, V3ShaderCacheUpdateRankForExternalCacheHit) { |
+ UseVersion3(); |
+ SetCacheType(net::SHADER_CACHE); |
+ BackendUpdateRankForExternalCacheHit(); |
} |
void DiskCacheBackendTest::TracingBackendBasics() { |