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