operation_test_base.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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
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& resource_id) {
36  upload_needed_resource_ids_.insert(resource_id);
37}
38
39OperationTestBase::OperationTestBase() {
40}
41
42OperationTestBase::~OperationTestBase() {
43}
44
45void OperationTestBase::SetUp() {
46  scoped_refptr<base::SequencedWorkerPool> pool =
47      content::BrowserThread::GetBlockingPool();
48  blocking_task_runner_ =
49      pool->GetSequencedTaskRunner(pool->GetSequenceToken());
50
51  pref_service_.reset(new TestingPrefServiceSimple);
52  test_util::RegisterDrivePrefs(pref_service_->registry());
53
54  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
55
56  fake_drive_service_.reset(new FakeDriveService);
57  fake_drive_service_->LoadResourceListForWapi(
58      "gdata/root_feed.json");
59  fake_drive_service_->LoadAccountMetadataForWapi(
60      "gdata/account_metadata.json");
61
62  scheduler_.reset(new JobScheduler(
63      pref_service_.get(),
64      fake_drive_service_.get(),
65      blocking_task_runner_.get()));
66
67  metadata_storage_.reset(new internal::ResourceMetadataStorage(
68      temp_dir_.path(), blocking_task_runner_.get()));
69  bool success = false;
70  base::PostTaskAndReplyWithResult(
71      blocking_task_runner_.get(),
72      FROM_HERE,
73      base::Bind(&internal::ResourceMetadataStorage::Initialize,
74                 base::Unretained(metadata_storage_.get())),
75      google_apis::test_util::CreateCopyResultCallback(&success));
76  test_util::RunBlockingPoolTask();
77  ASSERT_TRUE(success);
78
79  metadata_.reset(new internal::ResourceMetadata(metadata_storage_.get(),
80                                                 blocking_task_runner_));
81
82  FileError error = FILE_ERROR_FAILED;
83  base::PostTaskAndReplyWithResult(
84      blocking_task_runner_.get(),
85      FROM_HERE,
86      base::Bind(&internal::ResourceMetadata::Initialize,
87                 base::Unretained(metadata_.get())),
88      google_apis::test_util::CreateCopyResultCallback(&error));
89  test_util::RunBlockingPoolTask();
90  ASSERT_EQ(FILE_ERROR_OK, error);
91
92  fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter);
93  cache_.reset(new internal::FileCache(metadata_storage_.get(),
94                                       temp_dir_.path(),
95                                       blocking_task_runner_.get(),
96                                       fake_free_disk_space_getter_.get()));
97  success = false;
98  base::PostTaskAndReplyWithResult(
99      blocking_task_runner_.get(),
100      FROM_HERE,
101      base::Bind(&internal::FileCache::Initialize,
102                 base::Unretained(cache_.get())),
103      google_apis::test_util::CreateCopyResultCallback(&success));
104  test_util::RunBlockingPoolTask();
105  ASSERT_TRUE(success);
106
107  // Makes sure the FakeDriveService's content is loaded to the metadata_.
108  internal::ChangeListLoader change_list_loader(
109      blocking_task_runner_.get(), metadata_.get(), scheduler_.get());
110
111  change_list_loader.LoadIfNeeded(
112      DirectoryFetchInfo(),
113      google_apis::test_util::CreateCopyResultCallback(&error));
114  test_util::RunBlockingPoolTask();
115  ASSERT_EQ(FILE_ERROR_OK, error);
116}
117
118FileError OperationTestBase::GetLocalResourceEntry(const base::FilePath& path,
119                                                   ResourceEntry* entry) {
120  FileError error = FILE_ERROR_FAILED;
121  base::PostTaskAndReplyWithResult(
122      blocking_task_runner(),
123      FROM_HERE,
124      base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath,
125                 base::Unretained(metadata()), path, entry),
126      base::Bind(google_apis::test_util::CreateCopyResultCallback(&error)));
127  test_util::RunBlockingPoolTask();
128  return error;
129}
130
131}  // namespace file_system
132}  // namespace drive
133