Commit d310bfc8 authored by haruki@chromium.org's avatar haruki@chromium.org

Implement initialization for GDataCache to use in-memory metadata for tests.

Use the in-memory version for GDataFileSystemTest.


BUG=137945
TEST=unit_tests   --gtest_filter='GDataFileSystemTest*'

Review URL: https://chromiumcodereview.appspot.com/10830181

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151013 0039d316-1c4b-4281-b951-d872f2087c98
parent 69d5bdee
...@@ -697,6 +697,14 @@ void GDataCache::RequestInitializeOnUIThread() { ...@@ -697,6 +697,14 @@ void GDataCache::RequestInitializeOnUIThread() {
base::Bind(&GDataCache::Initialize, base::Unretained(this))); base::Bind(&GDataCache::Initialize, base::Unretained(this)));
} }
void GDataCache::RequestInitializeOnUIThreadForTesting() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
blocking_task_runner_->PostTask(
FROM_HERE,
base::Bind(&GDataCache::InitializeForTesting, base::Unretained(this)));
}
void GDataCache::ForceRescanOnUIThreadForTesting() { void GDataCache::ForceRescanOnUIThreadForTesting() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
...@@ -743,6 +751,15 @@ void GDataCache::Initialize() { ...@@ -743,6 +751,15 @@ void GDataCache::Initialize() {
metadata_->Initialize(cache_paths_); metadata_->Initialize(cache_paths_);
} }
void GDataCache::InitializeForTesting() {
AssertOnSequencedWorkerPool();
InitCachePaths(cache_paths_);
metadata_ = GDataCacheMetadata::CreateGDataCacheMetadataForTesting(
blocking_task_runner_).Pass();
metadata_->Initialize(cache_paths_);
}
void GDataCache::Destroy() { void GDataCache::Destroy() {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
delete this; delete this;
......
...@@ -272,6 +272,9 @@ class GDataCache { ...@@ -272,6 +272,9 @@ class GDataCache {
// Utility method to call Initialize on UI thread. // Utility method to call Initialize on UI thread.
void RequestInitializeOnUIThread(); void RequestInitializeOnUIThread();
// Utility method to call InitializeForTesting on UI thread.
void RequestInitializeOnUIThreadForTesting();
// Force a rescan of cache files, for testing. // Force a rescan of cache files, for testing.
void ForceRescanOnUIThreadForTesting(); void ForceRescanOnUIThreadForTesting();
...@@ -329,6 +332,10 @@ class GDataCache { ...@@ -329,6 +332,10 @@ class GDataCache {
// Initializes the cache. // Initializes the cache.
void Initialize(); void Initialize();
// Initializes the cache with in-memory cache for testing.
// The in-memory cache is used since it's faster than the db.
void InitializeForTesting();
// Deletes the cache. // Deletes the cache.
void Destroy(); void Destroy();
......
...@@ -287,14 +287,15 @@ bool CheckIfMd5Matches( ...@@ -287,14 +287,15 @@ bool CheckIfMd5Matches(
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// GDataCacheMetadata implementation with std::map. // GDataCacheMetadata implementation with std::map.
// Used for testing.
class GDataCacheMetadataMap : public GDataCacheMetadata { class FakeGDataCacheMetadata : public GDataCacheMetadata {
public: public:
explicit GDataCacheMetadataMap( explicit FakeGDataCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner); base::SequencedTaskRunner* blocking_task_runner);
private: private:
virtual ~GDataCacheMetadataMap(); virtual ~FakeGDataCacheMetadata();
// GDataCacheMetadata overrides: // GDataCacheMetadata overrides:
virtual void Initialize(const std::vector<FilePath>& cache_paths) OVERRIDE; virtual void Initialize(const std::vector<FilePath>& cache_paths) OVERRIDE;
...@@ -312,27 +313,27 @@ class GDataCacheMetadataMap : public GDataCacheMetadata { ...@@ -312,27 +313,27 @@ class GDataCacheMetadataMap : public GDataCacheMetadata {
CacheMap cache_map_; CacheMap cache_map_;
DISALLOW_COPY_AND_ASSIGN(GDataCacheMetadataMap); DISALLOW_COPY_AND_ASSIGN(FakeGDataCacheMetadata);
}; };
GDataCacheMetadataMap::GDataCacheMetadataMap( FakeGDataCacheMetadata::FakeGDataCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner) base::SequencedTaskRunner* blocking_task_runner)
: GDataCacheMetadata(blocking_task_runner) { : GDataCacheMetadata(blocking_task_runner) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
} }
GDataCacheMetadataMap::~GDataCacheMetadataMap() { FakeGDataCacheMetadata::~FakeGDataCacheMetadata() {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
} }
void GDataCacheMetadataMap::Initialize( void FakeGDataCacheMetadata::Initialize(
const std::vector<FilePath>& cache_paths) { const std::vector<FilePath>& cache_paths) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
ScanCachePaths(cache_paths, &cache_map_); ScanCachePaths(cache_paths, &cache_map_);
} }
void GDataCacheMetadataMap::AddOrUpdateCacheEntry( void FakeGDataCacheMetadata::AddOrUpdateCacheEntry(
const std::string& resource_id, const std::string& resource_id,
const GDataCacheEntry& cache_entry) { const GDataCacheEntry& cache_entry) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
...@@ -345,7 +346,7 @@ void GDataCacheMetadataMap::AddOrUpdateCacheEntry( ...@@ -345,7 +346,7 @@ void GDataCacheMetadataMap::AddOrUpdateCacheEntry(
} }
} }
void GDataCacheMetadataMap::RemoveCacheEntry(const std::string& resource_id) { void FakeGDataCacheMetadata::RemoveCacheEntry(const std::string& resource_id) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
CacheMap::iterator iter = cache_map_.find(resource_id); CacheMap::iterator iter = cache_map_.find(resource_id);
...@@ -355,7 +356,7 @@ void GDataCacheMetadataMap::RemoveCacheEntry(const std::string& resource_id) { ...@@ -355,7 +356,7 @@ void GDataCacheMetadataMap::RemoveCacheEntry(const std::string& resource_id) {
} }
} }
bool GDataCacheMetadataMap::GetCacheEntry(const std::string& resource_id, bool FakeGDataCacheMetadata::GetCacheEntry(const std::string& resource_id,
const std::string& md5, const std::string& md5,
GDataCacheEntry* entry) { GDataCacheEntry* entry) {
DCHECK(entry); DCHECK(entry);
...@@ -377,7 +378,7 @@ bool GDataCacheMetadataMap::GetCacheEntry(const std::string& resource_id, ...@@ -377,7 +378,7 @@ bool GDataCacheMetadataMap::GetCacheEntry(const std::string& resource_id,
return true; return true;
} }
void GDataCacheMetadataMap::RemoveTemporaryFiles() { void FakeGDataCacheMetadata::RemoveTemporaryFiles() {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
CacheMap::iterator iter = cache_map_.begin(); CacheMap::iterator iter = cache_map_.begin();
...@@ -391,7 +392,7 @@ void GDataCacheMetadataMap::RemoveTemporaryFiles() { ...@@ -391,7 +392,7 @@ void GDataCacheMetadataMap::RemoveTemporaryFiles() {
} }
} }
void GDataCacheMetadataMap::Iterate(const IterateCallback& callback) { void FakeGDataCacheMetadata::Iterate(const IterateCallback& callback) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
for (CacheMap::const_iterator iter = cache_map_.begin(); for (CacheMap::const_iterator iter = cache_map_.begin();
...@@ -400,7 +401,7 @@ void GDataCacheMetadataMap::Iterate(const IterateCallback& callback) { ...@@ -400,7 +401,7 @@ void GDataCacheMetadataMap::Iterate(const IterateCallback& callback) {
} }
} }
void GDataCacheMetadataMap::ForceRescanForTesting( void FakeGDataCacheMetadata::ForceRescanForTesting(
const std::vector<FilePath>& cache_paths) { const std::vector<FilePath>& cache_paths) {
AssertOnSequencedWorkerPool(); AssertOnSequencedWorkerPool();
...@@ -596,6 +597,14 @@ scoped_ptr<GDataCacheMetadata> GDataCacheMetadata::CreateGDataCacheMetadata( ...@@ -596,6 +597,14 @@ scoped_ptr<GDataCacheMetadata> GDataCacheMetadata::CreateGDataCacheMetadata(
new GDataCacheMetadataDB(blocking_task_runner)); new GDataCacheMetadataDB(blocking_task_runner));
} }
// static
scoped_ptr<GDataCacheMetadata>
GDataCacheMetadata::CreateGDataCacheMetadataForTesting(
base::SequencedTaskRunner* blocking_task_runner) {
return scoped_ptr<GDataCacheMetadata>(
new FakeGDataCacheMetadata(blocking_task_runner));
}
void GDataCacheMetadata::AssertOnSequencedWorkerPool() { void GDataCacheMetadata::AssertOnSequencedWorkerPool() {
DCHECK(!blocking_task_runner_ || DCHECK(!blocking_task_runner_ ||
blocking_task_runner_->RunsTasksOnCurrentThread()); blocking_task_runner_->RunsTasksOnCurrentThread());
......
...@@ -31,14 +31,15 @@ class GDataCacheMetadata { ...@@ -31,14 +31,15 @@ class GDataCacheMetadata {
virtual ~GDataCacheMetadata(); virtual ~GDataCacheMetadata();
// |pool| and |sequence_token| are used to assert that the functions are // Creates GDataCacheMetadata instance.
// called on the right sequenced worker pool with the right sequence token.
//
// For testing, the thread assertion can be disabled by passing NULL and
// the default value of SequenceToken.
static scoped_ptr<GDataCacheMetadata> CreateGDataCacheMetadata( static scoped_ptr<GDataCacheMetadata> CreateGDataCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner); base::SequencedTaskRunner* blocking_task_runner);
// Creates GDataCacheMetadata instance. This uses FakeGDataCacheMetadata,
// which is an in-memory implmentation and faster than GDataCacheMetadataDB.
static scoped_ptr<GDataCacheMetadata> CreateGDataCacheMetadataForTesting(
base::SequencedTaskRunner* blocking_task_runner);
// Initialize the cache metadata store. // Initialize the cache metadata store.
virtual void Initialize(const std::vector<FilePath>& cache_paths) = 0; virtual void Initialize(const std::vector<FilePath>& cache_paths) = 0;
// Adds a new cache entry corresponding to |resource_id| if it doesn't // Adds a new cache entry corresponding to |resource_id| if it doesn't
......
...@@ -257,7 +257,7 @@ class GDataFileSystemTest : public testing::Test { ...@@ -257,7 +257,7 @@ class GDataFileSystemTest : public testing::Test {
file_system_->AddObserver(mock_directory_observer_.get()); file_system_->AddObserver(mock_directory_observer_.get());
file_system_->Initialize(); file_system_->Initialize();
cache_->RequestInitializeOnUIThread(); cache_->RequestInitializeOnUIThreadForTesting();
test_util::RunBlockingPoolTask(); test_util::RunBlockingPoolTask();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment