operation_test_base.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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/threading/sequenced_worker_pool.h"
8#include "chrome/browser/chromeos/drive/change_list_loader.h"
9#include "chrome/browser/chromeos/drive/fake_free_disk_space_getter.h"
10#include "chrome/browser/chromeos/drive/file_cache.h"
11#include "chrome/browser/chromeos/drive/file_system/operation_observer.h"
12#include "chrome/browser/chromeos/drive/job_scheduler.h"
13#include "chrome/browser/chromeos/drive/resource_metadata.h"
14#include "chrome/browser/chromeos/drive/test_util.h"
15#include "chrome/browser/google_apis/fake_drive_service.h"
16#include "chrome/browser/google_apis/test_util.h"
17#include "chrome/test/base/testing_profile.h"
18
19namespace drive {
20namespace file_system {
21
22namespace {
23const int64 kLotsOfSpace = internal::kMinFreeSpace * 10;
24}
25
26OperationTestBase::LoggingObserver::LoggingObserver() {
27}
28
29OperationTestBase::LoggingObserver::~LoggingObserver() {
30}
31
32void OperationTestBase::LoggingObserver::OnDirectoryChangedByOperation(
33    const base::FilePath& path) {
34  changed_paths_.insert(path);
35}
36
37OperationTestBase::OperationTestBase()
38    : ui_thread_(content::BrowserThread::UI, &message_loop_) {
39}
40
41OperationTestBase::~OperationTestBase() {
42}
43
44void OperationTestBase::SetUp() {
45  scoped_refptr<base::SequencedWorkerPool> pool =
46      content::BrowserThread::GetBlockingPool();
47  blocking_task_runner_ =
48      pool->GetSequencedTaskRunner(pool->GetSequenceToken());
49
50  profile_.reset(new TestingProfile);
51  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
52
53  fake_drive_service_.reset(new google_apis::FakeDriveService);
54  fake_drive_service_->LoadResourceListForWapi(
55      "chromeos/gdata/root_feed.json");
56  fake_drive_service_->LoadAccountMetadataForWapi(
57      "chromeos/gdata/account_metadata.json");
58
59  scheduler_.reset(
60      new JobScheduler(profile_.get(), fake_drive_service_.get()));
61
62  metadata_.reset(new internal::ResourceMetadata(temp_dir_.path(),
63                                                 blocking_task_runner_));
64
65  FileError error = FILE_ERROR_FAILED;
66  metadata_->Initialize(
67      google_apis::test_util::CreateCopyResultCallback(&error));
68  google_apis::test_util::RunBlockingPoolTask();
69  ASSERT_EQ(FILE_ERROR_OK, error);
70
71  fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter);
72  fake_free_disk_space_getter_->set_fake_free_disk_space(kLotsOfSpace);
73  cache_.reset(new internal::FileCache(temp_dir_.path(),
74                                       blocking_task_runner_,
75                                       fake_free_disk_space_getter_.get()));
76  cache_->RequestInitializeForTesting();
77  google_apis::test_util::RunBlockingPoolTask();
78
79  // Makes sure the FakeDriveService's content is loaded to the metadata_.
80  internal::ChangeListLoader change_list_loader(
81      blocking_task_runner_, metadata_.get(), scheduler_.get());
82
83  change_list_loader.LoadIfNeeded(
84      DirectoryFetchInfo(),
85      google_apis::test_util::CreateCopyResultCallback(&error));
86  google_apis::test_util::RunBlockingPoolTask();
87  ASSERT_EQ(FILE_ERROR_OK, error);
88}
89
90void OperationTestBase::TearDown() {
91  cache_.reset();
92  fake_free_disk_space_getter_.reset();
93  metadata_.reset();
94  scheduler_.reset();
95  fake_drive_service_.reset();
96  profile_.reset();
97
98  blocking_task_runner_ = NULL;
99}
100
101FileError OperationTestBase::GetLocalResourceEntry(const base::FilePath& path,
102                                                   ResourceEntry* entry) {
103  FileError error = FILE_ERROR_FAILED;
104  base::PostTaskAndReplyWithResult(
105      blocking_task_runner(),
106      FROM_HERE,
107      base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath,
108                 base::Unretained(metadata()), path, entry),
109      base::Bind(google_apis::test_util::CreateCopyResultCallback(&error)));
110  google_apis::test_util::RunBlockingPoolTask();
111  return error;
112}
113
114}  // namespace file_system
115}  // namespace drive
116