Home | History | Annotate | Download | only in file_system
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
      6 
      7 #include "base/prefs/testing_pref_service.h"
      8 #include "base/threading/sequenced_worker_pool.h"
      9 #include "chrome/browser/chromeos/drive/change_list_loader.h"
     10 #include "chrome/browser/chromeos/drive/fake_free_disk_space_getter.h"
     11 #include "chrome/browser/chromeos/drive/file_cache.h"
     12 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h"
     13 #include "chrome/browser/chromeos/drive/job_scheduler.h"
     14 #include "chrome/browser/chromeos/drive/resource_metadata.h"
     15 #include "chrome/browser/chromeos/drive/test_util.h"
     16 #include "chrome/browser/drive/fake_drive_service.h"
     17 #include "chrome/browser/google_apis/test_util.h"
     18 #include "content/public/browser/browser_thread.h"
     19 
     20 namespace drive {
     21 namespace file_system {
     22 
     23 OperationTestBase::LoggingObserver::LoggingObserver() {
     24 }
     25 
     26 OperationTestBase::LoggingObserver::~LoggingObserver() {
     27 }
     28 
     29 void OperationTestBase::LoggingObserver::OnDirectoryChangedByOperation(
     30     const base::FilePath& path) {
     31   changed_paths_.insert(path);
     32 }
     33 
     34 void OperationTestBase::LoggingObserver::OnCacheFileUploadNeededByOperation(
     35     const std::string& resource_id) {
     36   upload_needed_resource_ids_.insert(resource_id);
     37 }
     38 
     39 OperationTestBase::OperationTestBase() {
     40 }
     41 
     42 OperationTestBase::OperationTestBase(int test_thread_bundle_options)
     43     : thread_bundle_(test_thread_bundle_options) {
     44 }
     45 
     46 OperationTestBase::~OperationTestBase() {
     47 }
     48 
     49 void OperationTestBase::SetUp() {
     50   scoped_refptr<base::SequencedWorkerPool> pool =
     51       content::BrowserThread::GetBlockingPool();
     52   blocking_task_runner_ =
     53       pool->GetSequencedTaskRunner(pool->GetSequenceToken());
     54 
     55   pref_service_.reset(new TestingPrefServiceSimple);
     56   test_util::RegisterDrivePrefs(pref_service_->registry());
     57 
     58   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
     59 
     60   fake_drive_service_.reset(new FakeDriveService);
     61   fake_drive_service_->LoadResourceListForWapi(
     62       "gdata/root_feed.json");
     63   fake_drive_service_->LoadAccountMetadataForWapi(
     64       "gdata/account_metadata.json");
     65 
     66   scheduler_.reset(new JobScheduler(
     67       pref_service_.get(),
     68       fake_drive_service_.get(),
     69       blocking_task_runner_.get()));
     70 
     71   metadata_storage_.reset(new internal::ResourceMetadataStorage(
     72       temp_dir_.path(), blocking_task_runner_.get()));
     73   bool success = false;
     74   base::PostTaskAndReplyWithResult(
     75       blocking_task_runner_.get(),
     76       FROM_HERE,
     77       base::Bind(&internal::ResourceMetadataStorage::Initialize,
     78                  base::Unretained(metadata_storage_.get())),
     79       google_apis::test_util::CreateCopyResultCallback(&success));
     80   test_util::RunBlockingPoolTask();
     81   ASSERT_TRUE(success);
     82 
     83   metadata_.reset(new internal::ResourceMetadata(metadata_storage_.get(),
     84                                                  blocking_task_runner_));
     85 
     86   FileError error = FILE_ERROR_FAILED;
     87   base::PostTaskAndReplyWithResult(
     88       blocking_task_runner_.get(),
     89       FROM_HERE,
     90       base::Bind(&internal::ResourceMetadata::Initialize,
     91                  base::Unretained(metadata_.get())),
     92       google_apis::test_util::CreateCopyResultCallback(&error));
     93   test_util::RunBlockingPoolTask();
     94   ASSERT_EQ(FILE_ERROR_OK, error);
     95 
     96   fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter);
     97   cache_.reset(new internal::FileCache(metadata_storage_.get(),
     98                                        temp_dir_.path(),
     99                                        blocking_task_runner_.get(),
    100                                        fake_free_disk_space_getter_.get()));
    101   success = false;
    102   base::PostTaskAndReplyWithResult(
    103       blocking_task_runner_.get(),
    104       FROM_HERE,
    105       base::Bind(&internal::FileCache::Initialize,
    106                  base::Unretained(cache_.get())),
    107       google_apis::test_util::CreateCopyResultCallback(&success));
    108   test_util::RunBlockingPoolTask();
    109   ASSERT_TRUE(success);
    110 
    111   // Makes sure the FakeDriveService's content is loaded to the metadata_.
    112   internal::ChangeListLoader change_list_loader(
    113       blocking_task_runner_.get(), metadata_.get(), scheduler_.get());
    114 
    115   change_list_loader.LoadIfNeeded(
    116       DirectoryFetchInfo(),
    117       google_apis::test_util::CreateCopyResultCallback(&error));
    118   test_util::RunBlockingPoolTask();
    119   ASSERT_EQ(FILE_ERROR_OK, error);
    120 }
    121 
    122 FileError OperationTestBase::GetLocalResourceEntry(const base::FilePath& path,
    123                                                    ResourceEntry* entry) {
    124   FileError error = FILE_ERROR_FAILED;
    125   base::PostTaskAndReplyWithResult(
    126       blocking_task_runner(),
    127       FROM_HERE,
    128       base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath,
    129                  base::Unretained(metadata()), path, entry),
    130       base::Bind(google_apis::test_util::CreateCopyResultCallback(&error)));
    131   test_util::RunBlockingPoolTask();
    132   return error;
    133 }
    134 
    135 }  // namespace file_system
    136 }  // namespace drive
    137