1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/disk_cache_test_base.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/io_buffer.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/net_errors.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/test_completion_callback.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/backend_impl.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/disk_cache_test_util.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/mem_backend_impl.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DiskCacheTest::TearDown() { 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MessageLoop::current()->RunAllPending(); 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDiskCacheTestWithCache::DiskCacheTestWithCache() 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : cache_(NULL), 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_(NULL), 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen mem_cache_(NULL), 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen mask_(0), 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_(0), 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen type_(net::DISK_CACHE), 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen memory_only_(false), 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen implementation_(false), 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen force_creation_(false), 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new_eviction_(false), 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen first_cleanup_(true), 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen integrity_(true), 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen use_current_thread_(false), 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_thread_("CacheThread") { 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDiskCacheTestWithCache::~DiskCacheTestWithCache() {} 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DiskCacheTestWithCache::InitCache() { 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (mask_ || new_eviction_) 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott implementation_ = true; 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (memory_only_) 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitMemoryCache(); 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott else 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitDiskCache(); 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_TRUE(NULL != cache_); 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (first_cleanup_) 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_EQ(0, cache_->GetEntryCount()); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// We are expected to leak memory when simulating crashes. 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DiskCacheTestWithCache::SimulateCrash() { 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_TRUE(implementation_ && !memory_only_); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_impl_->FlushQueueForTest(&cb); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(net::OK, cb.GetResult(rv)); 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott cache_impl_->ClearRefCountForTest(); 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete cache_impl_; 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FilePath path = GetCacheFilePath(); 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(CheckCacheIntegrity(path, new_eviction_)); 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitDiskCacheImpl(path); 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DiskCacheTestWithCache::SetTestMode() { 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_TRUE(implementation_ && !memory_only_); 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott cache_impl_->SetUnitTestMode(); 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::SetMaxSize(int size) { 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_ = size; 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (cache_impl_) 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(cache_impl_->SetMaxSize(size)); 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (mem_cache_) 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(mem_cache_->SetMaxSize(size)); 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::OpenEntry(const std::string& key, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch disk_cache::Entry** entry) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->OpenEntry(key, entry, &cb); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::CreateEntry(const std::string& key, 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch disk_cache::Entry** entry) { 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->CreateEntry(key, entry, &cb); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::DoomEntry(const std::string& key) { 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->DoomEntry(key, &cb); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::DoomAllEntries() { 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->DoomAllEntries(&cb); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::DoomEntriesBetween(const base::Time initial_time, 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const base::Time end_time) { 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->DoomEntriesBetween(initial_time, end_time, &cb); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::DoomEntriesSince(const base::Time initial_time) { 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->DoomEntriesSince(initial_time, &cb); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint DiskCacheTestWithCache::OpenNextEntry(void** iter, 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch disk_cache::Entry** next_entry) { 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_->OpenNextEntry(iter, next_entry, &cb); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return cb.GetResult(rv); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid DiskCacheTestWithCache::FlushQueueForTest() { 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (memory_only_ || !cache_impl_) 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestCompletionCallback cb; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int rv = cache_impl_->FlushQueueForTest(&cb); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(net::OK, cb.GetResult(rv)); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid DiskCacheTestWithCache::RunTaskForTest(Task* task) { 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (memory_only_ || !cache_impl_) { 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick task->Run(); 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delete task; 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return; 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestCompletionCallback cb; 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int rv = cache_impl_->RunTaskForTest(task, &cb); 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(net::OK, cb.GetResult(rv)); 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickint DiskCacheTestWithCache::ReadData(disk_cache::Entry* entry, int index, 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int offset, net::IOBuffer* buf, int len) { 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestCompletionCallback cb; 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int rv = entry->ReadData(index, offset, buf, len, &cb); 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return cb.GetResult(rv); 1523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickint DiskCacheTestWithCache::WriteData(disk_cache::Entry* entry, int index, 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int offset, net::IOBuffer* buf, int len, 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool truncate) { 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestCompletionCallback cb; 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int rv = entry->WriteData(index, offset, buf, len, &cb, truncate); 1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return cb.GetResult(rv); 1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickint DiskCacheTestWithCache::ReadSparseData(disk_cache::Entry* entry, 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int64 offset, net::IOBuffer* buf, 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int len) { 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestCompletionCallback cb; 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int rv = entry->ReadSparseData(offset, buf, len, &cb); 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return cb.GetResult(rv); 1693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickint DiskCacheTestWithCache::WriteSparseData(disk_cache::Entry* entry, 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int64 offset, 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::IOBuffer* buf, int len) { 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestCompletionCallback cb; 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int rv = entry->WriteSparseData(offset, buf, len, &cb); 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return cb.GetResult(rv); 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Simple task to run part of a test from the cache thread. 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass TrimTask : public Task { 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TrimTask(disk_cache::BackendImpl* backend, bool deleted, bool empty) 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : backend_(backend), 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen deleted_(deleted), 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen empty_(empty) {} 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Run() { 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (deleted_) 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen backend_->TrimDeletedListForTest(empty_); 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen backend_->TrimForTest(empty_); 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected: 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen disk_cache::BackendImpl* backend_; 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool deleted_; 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool empty_; 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::TrimForTest(bool empty) { 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RunTaskForTest(new TrimTask(cache_impl_, false, empty)); 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::TrimDeletedListForTest(bool empty) { 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RunTaskForTest(new TrimTask(cache_impl_, true, empty)); 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::TearDown() { 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->RunAllPending(); 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete cache_; 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (cache_thread_.IsRunning()) 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_thread_.Stop(); 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!memory_only_ && integrity_) { 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath path = GetCacheFilePath(); 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(CheckCacheIntegrity(path, new_eviction_)); 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PlatformTest::TearDown(); 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::InitMemoryCache() { 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!implementation_) { 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cache_ = disk_cache::MemBackendImpl::CreateBackend(size_, NULL); 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 22772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mem_cache_ = new disk_cache::MemBackendImpl(NULL); 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_ = mem_cache_; 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(NULL != cache_); 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (size_) 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(mem_cache_->SetMaxSize(size_)); 23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(mem_cache_->Init()); 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::InitDiskCache() { 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath path = GetCacheFilePath(); 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (first_cleanup_) 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(DeleteCache(path)); 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!cache_thread_.IsRunning()) { 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(cache_thread_.StartWithOptions( 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::Thread::Options(MessageLoop::TYPE_IO, 0))); 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(cache_thread_.message_loop() != NULL); 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (implementation_) 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return InitDiskCacheImpl(path); 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<base::MessageLoopProxy> thread = 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen use_current_thread_ ? base::MessageLoopProxy::CreateForCurrentThread() : 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_thread_.message_loop_proxy(); 25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestCompletionCallback cb; 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int rv = disk_cache::BackendImpl::CreateBackend( 25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path, force_creation_, size_, type_, 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen disk_cache::kNoRandom, thread, NULL, &cache_, &cb); 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(net::OK, cb.GetResult(rv)); 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid DiskCacheTestWithCache::InitDiskCacheImpl(const FilePath& path) { 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<base::MessageLoopProxy> thread = 26572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen use_current_thread_ ? base::MessageLoopProxy::CreateForCurrentThread() : 26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_thread_.message_loop_proxy(); 26772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (mask_) 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_ = new disk_cache::BackendImpl(path, mask_, thread, NULL); 26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else 27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_ = new disk_cache::BackendImpl(path, thread, NULL); 27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_ = cache_impl_; 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(NULL != cache_); 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (size_) 27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(cache_impl_->SetMaxSize(size_)); 27772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (new_eviction_) 27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_->SetNewEviction(); 28072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_->SetType(type_); 28272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cache_impl_->SetFlags(disk_cache::kNoRandom); 28372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestCompletionCallback cb; 28472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int rv = cache_impl_->Init(&cb); 28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(net::OK, cb.GetResult(rv)); 28672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 287