71a4b26bff9c03de7b7e2031a46702a0e8e80093
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync_file_system / drive_backend / list_changes_task_unittest.cc
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/sync_file_system/drive_backend/list_changes_task.h"
6
7 #include "base/files/scoped_temp_dir.h"
8 #include "base/format_macros.h"
9 #include "base/run_loop.h"
10 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
11 #include "chrome/browser/sync_file_system/drive_backend/fake_drive_service_helper.h"
12 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
13 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h"
14 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
15 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h"
16 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
17 #include "content/public/test/test_browser_thread_bundle.h"
18 #include "google_apis/drive/drive_api_parser.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 namespace sync_file_system {
22 namespace drive_backend {
23
24 namespace {
25
26 const char kAppID[] = "app_id";
27 const char kUnregisteredAppID[] = "app_id unregistered";
28
29 }  // namespace
30
31 class ListChangesTaskTest : public testing::Test,
32                             public SyncEngineContext {
33  public:
34   ListChangesTaskTest() {}
35   virtual ~ListChangesTaskTest() {}
36
37   virtual void SetUp() OVERRIDE {
38     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
39
40     fake_drive_service_.reset(new drive::FakeDriveService);
41     ASSERT_TRUE(fake_drive_service_->LoadAccountMetadataForWapi(
42         "sync_file_system/account_metadata.json"));
43     ASSERT_TRUE(fake_drive_service_->LoadResourceListForWapi(
44         "gdata/empty_feed.json"));
45
46     drive_uploader_.reset(new drive::DriveUploader(
47         fake_drive_service_.get(), base::MessageLoopProxy::current()));
48
49     fake_drive_service_helper_.reset(new FakeDriveServiceHelper(
50         fake_drive_service_.get(), drive_uploader_.get(),
51         kSyncRootFolderTitle));
52
53     SetUpRemoteFolders();
54     InitializeMetadataDatabase();
55     RegisterApp(kAppID);
56   }
57
58   virtual void TearDown() OVERRIDE {
59     metadata_database_.reset();
60     base::RunLoop().RunUntilIdle();
61   }
62
63   virtual drive::DriveServiceInterface* GetDriveService() OVERRIDE {
64     return fake_drive_service_.get();
65   }
66
67   virtual drive::DriveUploader* GetDriveUploader() OVERRIDE {
68     return NULL;
69   }
70
71   virtual MetadataDatabase* GetMetadataDatabase() OVERRIDE {
72     return metadata_database_.get();
73   }
74
75   virtual RemoteChangeProcessor* GetRemoteChangeProcessor() OVERRIDE {
76     return NULL;
77   }
78
79   virtual base::SequencedTaskRunner* GetBlockingTaskRunner() OVERRIDE {
80     return base::MessageLoopProxy::current();
81   }
82
83  protected:
84   SyncStatusCode RunTask(SyncTask* sync_task) {
85     SyncStatusCode status = SYNC_STATUS_UNKNOWN;
86     sync_task->Run(CreateResultReceiver(&status));
87     base::RunLoop().RunUntilIdle();
88     return status;
89   }
90
91   size_t CountDirtyTracker() {
92     return metadata_database_->dirty_trackers_.size();
93   }
94
95   FakeDriveServiceHelper* fake_drive_service_helper() {
96     return fake_drive_service_helper_.get();
97   }
98
99   void SetUpChangesInFolder(const std::string& folder_id) {
100     std::string new_file_id;
101     ASSERT_EQ(google_apis::HTTP_SUCCESS,
102               fake_drive_service_helper()->AddFile(
103                   folder_id, "new file", "file contents", &new_file_id));
104     std::string same_name_file_id;
105     ASSERT_EQ(google_apis::HTTP_SUCCESS,
106               fake_drive_service_helper()->AddFile(
107                   folder_id, "new file", "file contents",
108                   &same_name_file_id));
109
110     std::string new_folder_id;
111     ASSERT_EQ(google_apis::HTTP_CREATED,
112               fake_drive_service_helper()->AddFolder(
113                   folder_id, "new folder", &new_folder_id));
114
115     std::string modified_file_id;
116     ASSERT_EQ(google_apis::HTTP_SUCCESS,
117               fake_drive_service_helper()->AddFile(
118                   folder_id, "modified file", "file content",
119                   &modified_file_id));
120     ASSERT_EQ(google_apis::HTTP_SUCCESS,
121               fake_drive_service_helper()->UpdateFile(
122                   modified_file_id, "modified file content"));
123
124
125     std::string deleted_file_id;
126     ASSERT_EQ(google_apis::HTTP_SUCCESS,
127               fake_drive_service_helper()->AddFile(
128                   folder_id, "trashed file", "file content",
129                   &deleted_file_id));
130     ASSERT_EQ(google_apis::HTTP_NO_CONTENT,
131               fake_drive_service_helper()->DeleteResource(deleted_file_id));
132   }
133
134   std::string root_resource_id() {
135     return fake_drive_service_->GetRootResourceId();
136   }
137
138   std::string app_root_folder_id() {
139     return app_root_folder_id_;
140   }
141
142   std::string unregistered_app_root_folder_id() {
143     return unregistered_app_root_folder_id_;
144   }
145
146  private:
147   void SetUpRemoteFolders() {
148     ASSERT_EQ(google_apis::HTTP_CREATED,
149               fake_drive_service_helper_->AddOrphanedFolder(
150                   kSyncRootFolderTitle, &sync_root_folder_id_));
151     ASSERT_EQ(google_apis::HTTP_CREATED,
152               fake_drive_service_helper_->AddFolder(
153                   sync_root_folder_id_, kAppID, &app_root_folder_id_));
154     ASSERT_EQ(google_apis::HTTP_CREATED,
155               fake_drive_service_helper_->AddFolder(
156                   sync_root_folder_id_, kUnregisteredAppID,
157                   &unregistered_app_root_folder_id_));
158   }
159
160   void InitializeMetadataDatabase() {
161     SyncEngineInitializer initializer(this,
162                                       base::MessageLoopProxy::current(),
163                                       fake_drive_service_.get(),
164                                       database_dir_.path());
165     EXPECT_EQ(SYNC_STATUS_OK, RunTask(&initializer));
166     metadata_database_ = initializer.PassMetadataDatabase();
167   }
168
169   void RegisterApp(const std::string& app_id) {
170     RegisterAppTask register_app(this, app_id);
171     EXPECT_EQ(SYNC_STATUS_OK, RunTask(&register_app));
172   }
173
174   std::string sync_root_folder_id_;
175   std::string app_root_folder_id_;
176   std::string unregistered_app_root_folder_id_;
177
178   content::TestBrowserThreadBundle browser_threads_;
179   base::ScopedTempDir database_dir_;
180
181   scoped_ptr<drive::FakeDriveService> fake_drive_service_;
182   scoped_ptr<drive::DriveUploader> drive_uploader_;
183   scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_;
184
185   scoped_ptr<MetadataDatabase> metadata_database_;
186
187   DISALLOW_COPY_AND_ASSIGN(ListChangesTaskTest);
188 };
189
190 TEST_F(ListChangesTaskTest, NoChange) {
191   size_t num_dirty_trackers = CountDirtyTracker();
192
193   ListChangesTask list_changes(this);
194   EXPECT_EQ(SYNC_STATUS_NO_CHANGE_TO_SYNC, RunTask(&list_changes));
195
196   EXPECT_EQ(num_dirty_trackers, CountDirtyTracker());
197 }
198
199 TEST_F(ListChangesTaskTest, UnrelatedChange) {
200   size_t num_dirty_trackers = CountDirtyTracker();
201
202   SetUpChangesInFolder(root_resource_id());
203   SetUpChangesInFolder(unregistered_app_root_folder_id());
204
205   ListChangesTask list_changes(this);
206   EXPECT_EQ(SYNC_STATUS_OK, RunTask(&list_changes));
207
208   EXPECT_EQ(num_dirty_trackers, CountDirtyTracker());
209 }
210
211 TEST_F(ListChangesTaskTest, UnderTrackedFolder) {
212   size_t num_dirty_trackers = CountDirtyTracker();
213
214   SetUpChangesInFolder(app_root_folder_id());
215
216   ListChangesTask list_changes(this);
217   EXPECT_EQ(SYNC_STATUS_OK, RunTask(&list_changes));
218
219   EXPECT_EQ(num_dirty_trackers + 4, CountDirtyTracker());
220 }
221
222 }  // namespace drive_backend
223 }  // namespace sync_file_system