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
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.cc b/chrome/browser/chromeos/gdata/gdata_cache.cc
index 3af5532..036e33bc 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache.cc
@@ -697,6 +697,14 @@
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() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -743,6 +751,15 @@
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() {
AssertOnSequencedWorkerPool();
delete this;
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.h b/chrome/browser/chromeos/gdata/gdata_cache.h
index c9eb8d4..2c67f0e 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache.h
+++ b/chrome/browser/chromeos/gdata/gdata_cache.h
@@ -272,6 +272,9 @@
// Utility method to call Initialize on UI thread.
void RequestInitializeOnUIThread();
+ // Utility method to call InitializeForTesting on UI thread.
+ void RequestInitializeOnUIThreadForTesting();
+
// Force a rescan of cache files, for testing.
void ForceRescanOnUIThreadForTesting();
@@ -329,6 +332,10 @@
// Initializes the cache.
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.
void Destroy();
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc b/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
index d10829e..0736af9 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
@@ -287,14 +287,15 @@
////////////////////////////////////////////////////////////////////////////////
// GDataCacheMetadata implementation with std::map.
+// Used for testing.
-class GDataCacheMetadataMap : public GDataCacheMetadata {
+class FakeGDataCacheMetadata : public GDataCacheMetadata {
public:
- explicit GDataCacheMetadataMap(
+ explicit FakeGDataCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner);
private:
- virtual ~GDataCacheMetadataMap();
+ virtual ~FakeGDataCacheMetadata();
// GDataCacheMetadata overrides:
virtual void Initialize(const std::vector<FilePath>& cache_paths) OVERRIDE;
@@ -312,27 +313,27 @@
CacheMap cache_map_;
- DISALLOW_COPY_AND_ASSIGN(GDataCacheMetadataMap);
+ DISALLOW_COPY_AND_ASSIGN(FakeGDataCacheMetadata);
};
-GDataCacheMetadataMap::GDataCacheMetadataMap(
+FakeGDataCacheMetadata::FakeGDataCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner)
: GDataCacheMetadata(blocking_task_runner) {
AssertOnSequencedWorkerPool();
}
-GDataCacheMetadataMap::~GDataCacheMetadataMap() {
+FakeGDataCacheMetadata::~FakeGDataCacheMetadata() {
AssertOnSequencedWorkerPool();
}
-void GDataCacheMetadataMap::Initialize(
+void FakeGDataCacheMetadata::Initialize(
const std::vector<FilePath>& cache_paths) {
AssertOnSequencedWorkerPool();
ScanCachePaths(cache_paths, &cache_map_);
}
-void GDataCacheMetadataMap::AddOrUpdateCacheEntry(
+void FakeGDataCacheMetadata::AddOrUpdateCacheEntry(
const std::string& resource_id,
const GDataCacheEntry& cache_entry) {
AssertOnSequencedWorkerPool();
@@ -345,7 +346,7 @@
}
}
-void GDataCacheMetadataMap::RemoveCacheEntry(const std::string& resource_id) {
+void FakeGDataCacheMetadata::RemoveCacheEntry(const std::string& resource_id) {
AssertOnSequencedWorkerPool();
CacheMap::iterator iter = cache_map_.find(resource_id);
@@ -355,7 +356,7 @@
}
}
-bool GDataCacheMetadataMap::GetCacheEntry(const std::string& resource_id,
+bool FakeGDataCacheMetadata::GetCacheEntry(const std::string& resource_id,
const std::string& md5,
GDataCacheEntry* entry) {
DCHECK(entry);
@@ -377,7 +378,7 @@
return true;
}
-void GDataCacheMetadataMap::RemoveTemporaryFiles() {
+void FakeGDataCacheMetadata::RemoveTemporaryFiles() {
AssertOnSequencedWorkerPool();
CacheMap::iterator iter = cache_map_.begin();
@@ -391,7 +392,7 @@
}
}
-void GDataCacheMetadataMap::Iterate(const IterateCallback& callback) {
+void FakeGDataCacheMetadata::Iterate(const IterateCallback& callback) {
AssertOnSequencedWorkerPool();
for (CacheMap::const_iterator iter = cache_map_.begin();
@@ -400,7 +401,7 @@
}
}
-void GDataCacheMetadataMap::ForceRescanForTesting(
+void FakeGDataCacheMetadata::ForceRescanForTesting(
const std::vector<FilePath>& cache_paths) {
AssertOnSequencedWorkerPool();
@@ -596,6 +597,14 @@
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() {
DCHECK(!blocking_task_runner_ ||
blocking_task_runner_->RunsTasksOnCurrentThread());
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_metadata.h b/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
index d6bebd5..281497a7 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
+++ b/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
@@ -31,14 +31,15 @@
virtual ~GDataCacheMetadata();
- // |pool| and |sequence_token| are used to assert that the functions are
- // 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.
+ // Creates GDataCacheMetadata instance.
static scoped_ptr<GDataCacheMetadata> CreateGDataCacheMetadata(
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.
virtual void Initialize(const std::vector<FilePath>& cache_paths) = 0;
// Adds a new cache entry corresponding to |resource_id| if it doesn't
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
index ada502e..f22c0e5 100644
--- a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
+++ b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
@@ -257,7 +257,7 @@
file_system_->AddObserver(mock_directory_observer_.get());
file_system_->Initialize();
- cache_->RequestInitializeOnUIThread();
+ cache_->RequestInitializeOnUIThreadForTesting();
test_util::RunBlockingPoolTask();
}