operation_test_base.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
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_processor.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
20namespace drive {
21namespace file_system {
22
23OperationTestBase::LoggingObserver::LoggingObserver() {
24}
25
26OperationTestBase::LoggingObserver::~LoggingObserver() {
27}
28
29void OperationTestBase::LoggingObserver::OnDirectoryChangedByOperation(
30    const base::FilePath& path) {
31  changed_paths_.insert(path);
32}
33
34void OperationTestBase::LoggingObserver::OnCacheFileUploadNeededByOperation(
35    const std::string& local_id) {
36  upload_needed_local_ids_.insert(local_id);
37}
38
39OperationTestBase::OperationTestBase() {
40}
41
42OperationTestBase::OperationTestBase(int test_thread_bundle_options)
43    : thread_bundle_(test_thread_bundle_options) {
44}
45
46OperationTestBase::~OperationTestBase() {
47}
48
49void 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  change_list_loader_.reset(new internal::ChangeListLoader(
113      blocking_task_runner_.get(), metadata_.get(), scheduler_.get()));
114  change_list_loader_->LoadIfNeeded(
115      internal::DirectoryFetchInfo(),
116      google_apis::test_util::CreateCopyResultCallback(&error));
117  test_util::RunBlockingPoolTask();
118  ASSERT_EQ(FILE_ERROR_OK, error);
119}
120
121FileError OperationTestBase::GetLocalResourceEntry(const base::FilePath& path,
122                                                   ResourceEntry* entry) {
123  FileError error = FILE_ERROR_FAILED;
124  base::PostTaskAndReplyWithResult(
125      blocking_task_runner(),
126      FROM_HERE,
127      base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath,
128                 base::Unretained(metadata()), path, entry),
129      base::Bind(google_apis::test_util::CreateCopyResultCallback(&error)));
130  test_util::RunBlockingPoolTask();
131  return error;
132}
133
134std::string OperationTestBase::GetLocalId(const base::FilePath& path) {
135  std::string local_id;
136  FileError error = FILE_ERROR_FAILED;
137  base::PostTaskAndReplyWithResult(
138      blocking_task_runner(),
139      FROM_HERE,
140      base::Bind(&internal::ResourceMetadata::GetIdByPath,
141                 base::Unretained(metadata()), path, &local_id),
142      base::Bind(google_apis::test_util::CreateCopyResultCallback(&error)));
143  test_util::RunBlockingPoolTask();
144  EXPECT_EQ(FILE_ERROR_OK, error) << path.value();
145  return local_id;
146}
147
148FileError OperationTestBase::CheckForUpdates() {
149  FileError error = FILE_ERROR_FAILED;
150  change_list_loader_->CheckForUpdates(
151      google_apis::test_util::CreateCopyResultCallback(&error));
152  test_util::RunBlockingPoolTask();
153  return error;
154}
155
156}  // namespace file_system
157}  // namespace drive
158