OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 #include "third_party/leveldatabase/src/include/leveldb/env.h" | 28 #include "third_party/leveldatabase/src/include/leveldb/env.h" |
29 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 29 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
30 | 30 |
31 namespace sync_file_system { | 31 namespace sync_file_system { |
32 namespace drive_backend { | 32 namespace drive_backend { |
33 | 33 |
34 namespace { | 34 namespace { |
35 const int64 kSyncRootTrackerID = 100; | 35 const int64 kSyncRootTrackerID = 100; |
36 } // namespace | 36 } // namespace |
37 | 37 |
38 class RegisterAppTaskTest : public testing::Test, | 38 class RegisterAppTaskTest : public testing::Test { |
39 public SyncEngineContext { | |
40 public: | 39 public: |
41 RegisterAppTaskTest() | 40 RegisterAppTaskTest() |
42 : next_file_id_(1000), | 41 : next_file_id_(1000), |
43 next_tracker_id_(10000) {} | 42 next_tracker_id_(10000) {} |
44 virtual ~RegisterAppTaskTest() {} | 43 virtual ~RegisterAppTaskTest() {} |
45 | 44 |
46 virtual void SetUp() OVERRIDE { | 45 virtual void SetUp() OVERRIDE { |
47 ASSERT_TRUE(database_dir_.CreateUniqueTempDir()); | 46 ASSERT_TRUE(database_dir_.CreateUniqueTempDir()); |
48 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); | 47 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); |
49 | 48 |
50 fake_drive_service_.reset(new drive::FakeDriveService); | 49 scoped_ptr<drive::FakeDriveService> fake_drive_service; |
51 ASSERT_TRUE(fake_drive_service_->LoadAccountMetadataForWapi( | 50 fake_drive_service.reset(new drive::FakeDriveService); |
| 51 ASSERT_TRUE(fake_drive_service->LoadAccountMetadataForWapi( |
52 "sync_file_system/account_metadata.json")); | 52 "sync_file_system/account_metadata.json")); |
53 ASSERT_TRUE(fake_drive_service_->LoadResourceListForWapi( | 53 ASSERT_TRUE(fake_drive_service->LoadResourceListForWapi( |
54 "gdata/empty_feed.json")); | 54 "gdata/empty_feed.json")); |
55 | 55 |
56 drive_uploader_.reset(new drive::DriveUploader( | 56 scoped_ptr<drive::DriveUploader> drive_uploader; |
57 fake_drive_service_.get(), base::MessageLoopProxy::current())); | 57 drive_uploader.reset(new drive::DriveUploader( |
| 58 fake_drive_service.get(), base::MessageLoopProxy::current())); |
58 | 59 |
59 fake_drive_service_helper_.reset(new FakeDriveServiceHelper( | 60 fake_drive_service_helper_.reset(new FakeDriveServiceHelper( |
60 fake_drive_service_.get(), drive_uploader_.get(), | 61 fake_drive_service.get(), drive_uploader.get(), |
61 kSyncRootFolderTitle)); | 62 kSyncRootFolderTitle)); |
62 | 63 |
| 64 context_.reset(new SyncEngineContext( |
| 65 fake_drive_service.PassAs<drive::DriveServiceInterface>(), |
| 66 drive_uploader.PassAs<drive::DriveUploaderInterface>(), |
| 67 base::MessageLoopProxy::current())); |
| 68 |
63 ASSERT_EQ(google_apis::HTTP_CREATED, | 69 ASSERT_EQ(google_apis::HTTP_CREATED, |
64 fake_drive_service_helper_->AddOrphanedFolder( | 70 fake_drive_service_helper_->AddOrphanedFolder( |
65 kSyncRootFolderTitle, &sync_root_folder_id_)); | 71 kSyncRootFolderTitle, &sync_root_folder_id_)); |
66 } | 72 } |
67 | 73 |
68 virtual void TearDown() OVERRIDE { | 74 virtual void TearDown() OVERRIDE { |
69 metadata_database_.reset(); | 75 context_.reset(); |
70 base::RunLoop().RunUntilIdle(); | 76 base::RunLoop().RunUntilIdle(); |
71 } | 77 } |
72 | 78 |
73 virtual drive::DriveServiceInterface* GetDriveService() OVERRIDE { | |
74 return fake_drive_service_.get(); | |
75 } | |
76 | |
77 virtual drive::DriveUploaderInterface* GetDriveUploader() OVERRIDE { | |
78 return NULL; | |
79 } | |
80 | |
81 virtual MetadataDatabase* GetMetadataDatabase() OVERRIDE { | |
82 return metadata_database_.get(); | |
83 } | |
84 | |
85 virtual RemoteChangeProcessor* GetRemoteChangeProcessor() OVERRIDE { | |
86 return NULL; | |
87 } | |
88 | |
89 virtual base::SequencedTaskRunner* GetBlockingTaskRunner() OVERRIDE { | |
90 return base::MessageLoopProxy::current(); | |
91 } | |
92 | |
93 protected: | 79 protected: |
94 scoped_ptr<leveldb::DB> OpenLevelDB() { | 80 scoped_ptr<leveldb::DB> OpenLevelDB() { |
95 leveldb::DB* db = NULL; | 81 leveldb::DB* db = NULL; |
96 leveldb::Options options; | 82 leveldb::Options options; |
97 options.create_if_missing = true; | 83 options.create_if_missing = true; |
98 options.env = in_memory_env_.get(); | 84 options.env = in_memory_env_.get(); |
99 leveldb::Status status = | 85 leveldb::Status status = |
100 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); | 86 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); |
101 EXPECT_TRUE(status.ok()); | 87 EXPECT_TRUE(status.ok()); |
102 return make_scoped_ptr<leveldb::DB>(db); | 88 return make_scoped_ptr<leveldb::DB>(db); |
(...skipping 26 matching lines...) Expand all Loading... |
129 batch.Put(kDatabaseVersionKey, | 115 batch.Put(kDatabaseVersionKey, |
130 base::Int64ToString(kCurrentDatabaseVersion)); | 116 base::Int64ToString(kCurrentDatabaseVersion)); |
131 PutServiceMetadataToBatch(service_metadata, &batch); | 117 PutServiceMetadataToBatch(service_metadata, &batch); |
132 PutFileMetadataToBatch(sync_root_metadata, &batch); | 118 PutFileMetadataToBatch(sync_root_metadata, &batch); |
133 PutFileTrackerToBatch(sync_root_tracker, &batch); | 119 PutFileTrackerToBatch(sync_root_tracker, &batch); |
134 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok()); | 120 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok()); |
135 } | 121 } |
136 | 122 |
137 void CreateMetadataDatabase(scoped_ptr<leveldb::DB> db) { | 123 void CreateMetadataDatabase(scoped_ptr<leveldb::DB> db) { |
138 ASSERT_TRUE(db); | 124 ASSERT_TRUE(db); |
139 ASSERT_FALSE(metadata_database_); | 125 ASSERT_FALSE(context_->GetMetadataDatabase()); |
| 126 scoped_ptr<MetadataDatabase> metadata_db; |
140 ASSERT_EQ(SYNC_STATUS_OK, | 127 ASSERT_EQ(SYNC_STATUS_OK, |
141 MetadataDatabase::CreateForTesting( | 128 MetadataDatabase::CreateForTesting( |
142 db.Pass(), &metadata_database_)); | 129 db.Pass(), &metadata_db)); |
| 130 context_->SetMetadataDatabase(metadata_db.Pass()); |
143 } | 131 } |
144 | 132 |
145 SyncStatusCode RunRegisterAppTask(const std::string& app_id) { | 133 SyncStatusCode RunRegisterAppTask(const std::string& app_id) { |
146 RegisterAppTask task(this, app_id); | 134 RegisterAppTask task(context_.get(), app_id); |
147 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 135 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
148 task.RunSequential(CreateResultReceiver(&status)); | 136 task.RunSequential(CreateResultReceiver(&status)); |
149 base::RunLoop().RunUntilIdle(); | 137 base::RunLoop().RunUntilIdle(); |
150 return status; | 138 return status; |
151 } | 139 } |
152 | 140 |
153 void SetUpRegisteredAppRoot( | 141 void SetUpRegisteredAppRoot( |
154 const std::string& app_id, | 142 const std::string& app_id, |
155 leveldb::DB* db) { | 143 leveldb::DB* db) { |
156 FileDetails details; | 144 FileDetails details; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 tracker.set_active(false); | 185 tracker.set_active(false); |
198 | 186 |
199 leveldb::WriteBatch batch; | 187 leveldb::WriteBatch batch; |
200 PutFileMetadataToBatch(metadata, &batch); | 188 PutFileMetadataToBatch(metadata, &batch); |
201 PutFileTrackerToBatch(tracker, &batch); | 189 PutFileTrackerToBatch(tracker, &batch); |
202 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok()); | 190 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok()); |
203 } | 191 } |
204 | 192 |
205 size_t CountRegisteredAppRoot() { | 193 size_t CountRegisteredAppRoot() { |
206 std::vector<std::string> app_ids; | 194 std::vector<std::string> app_ids; |
207 metadata_database_->GetRegisteredAppIDs(&app_ids); | 195 context_->GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids); |
208 return app_ids.size(); | 196 return app_ids.size(); |
209 } | 197 } |
210 | 198 |
211 bool IsAppRegistered(const std::string& app_id) { | 199 bool IsAppRegistered(const std::string& app_id) { |
212 TrackerIDSet trackers; | 200 TrackerIDSet trackers; |
213 if (!metadata_database_->FindTrackersByParentAndTitle( | 201 if (!context_->GetMetadataDatabase()->FindTrackersByParentAndTitle( |
214 kSyncRootTrackerID, app_id, &trackers)) | 202 kSyncRootTrackerID, app_id, &trackers)) |
215 return false; | 203 return false; |
216 return trackers.has_active(); | 204 return trackers.has_active(); |
217 } | 205 } |
218 | 206 |
219 size_t CountRemoteFileInSyncRoot() { | 207 size_t CountRemoteFileInSyncRoot() { |
220 ScopedVector<google_apis::ResourceEntry> files; | 208 ScopedVector<google_apis::ResourceEntry> files; |
221 EXPECT_EQ(google_apis::HTTP_SUCCESS, | 209 EXPECT_EQ(google_apis::HTTP_SUCCESS, |
222 fake_drive_service_helper_->ListFilesInFolder( | 210 fake_drive_service_helper_->ListFilesInFolder( |
223 sync_root_folder_id_, &files)); | 211 sync_root_folder_id_, &files)); |
224 return files.size(); | 212 return files.size(); |
225 } | 213 } |
226 | 214 |
227 bool HasRemoteAppRoot(const std::string& app_id) { | 215 bool HasRemoteAppRoot(const std::string& app_id) { |
228 TrackerIDSet files; | 216 TrackerIDSet files; |
229 if (!metadata_database_->FindTrackersByParentAndTitle( | 217 if (!context_->GetMetadataDatabase()->FindTrackersByParentAndTitle( |
230 kSyncRootTrackerID, app_id, &files) || | 218 kSyncRootTrackerID, app_id, &files) || |
231 !files.has_active()) | 219 !files.has_active()) |
232 return false; | 220 return false; |
233 | 221 |
234 FileTracker app_root_tracker; | 222 FileTracker app_root_tracker; |
235 EXPECT_TRUE(metadata_database_->FindTrackerByTrackerID( | 223 EXPECT_TRUE(context_->GetMetadataDatabase()->FindTrackerByTrackerID( |
236 files.active_tracker(), &app_root_tracker)); | 224 files.active_tracker(), &app_root_tracker)); |
237 std::string app_root_folder_id = app_root_tracker.file_id(); | 225 std::string app_root_folder_id = app_root_tracker.file_id(); |
238 scoped_ptr<google_apis::ResourceEntry> entry; | 226 scoped_ptr<google_apis::ResourceEntry> entry; |
239 if (google_apis::HTTP_SUCCESS != | 227 if (google_apis::HTTP_SUCCESS != |
240 fake_drive_service_helper_->GetResourceEntry( | 228 fake_drive_service_helper_->GetResourceEntry( |
241 app_root_folder_id, &entry)) | 229 app_root_folder_id, &entry)) |
242 return false; | 230 return false; |
243 | 231 |
244 return !entry->deleted(); | 232 return !entry->deleted(); |
245 } | 233 } |
246 | 234 |
247 private: | 235 private: |
248 std::string GenerateFileID() { | 236 std::string GenerateFileID() { |
249 return base::StringPrintf("file_id_%" PRId64, next_file_id_++); | 237 return base::StringPrintf("file_id_%" PRId64, next_file_id_++); |
250 } | 238 } |
251 | 239 |
252 scoped_ptr<leveldb::Env> in_memory_env_; | 240 scoped_ptr<leveldb::Env> in_memory_env_; |
253 | 241 |
254 std::string sync_root_folder_id_; | 242 std::string sync_root_folder_id_; |
255 | 243 |
256 int64 next_file_id_; | 244 int64 next_file_id_; |
257 int64 next_tracker_id_; | 245 int64 next_tracker_id_; |
258 | 246 |
259 content::TestBrowserThreadBundle browser_threads_; | 247 content::TestBrowserThreadBundle browser_threads_; |
260 base::ScopedTempDir database_dir_; | 248 base::ScopedTempDir database_dir_; |
261 | 249 |
262 scoped_ptr<drive::FakeDriveService> fake_drive_service_; | 250 scoped_ptr<SyncEngineContext> context_; |
263 scoped_ptr<drive::DriveUploader> drive_uploader_; | |
264 scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_; | 251 scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_; |
265 | 252 |
266 scoped_ptr<MetadataDatabase> metadata_database_; | |
267 | |
268 DISALLOW_COPY_AND_ASSIGN(RegisterAppTaskTest); | 253 DISALLOW_COPY_AND_ASSIGN(RegisterAppTaskTest); |
269 }; | 254 }; |
270 | 255 |
271 TEST_F(RegisterAppTaskTest, AlreadyRegistered) { | 256 TEST_F(RegisterAppTaskTest, AlreadyRegistered) { |
272 scoped_ptr<leveldb::DB> db(OpenLevelDB()); | 257 scoped_ptr<leveldb::DB> db(OpenLevelDB()); |
273 ASSERT_TRUE(db); | 258 ASSERT_TRUE(db); |
274 SetUpInitialData(db.get()); | 259 SetUpInitialData(db.get()); |
275 | 260 |
276 const std::string kAppID = "app_id"; | 261 const std::string kAppID = "app_id"; |
277 SetUpRegisteredAppRoot(kAppID, db.get()); | 262 SetUpRegisteredAppRoot(kAppID, db.get()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 | 310 |
326 CreateMetadataDatabase(db.Pass()); | 311 CreateMetadataDatabase(db.Pass()); |
327 RunRegisterAppTask(kAppID); | 312 RunRegisterAppTask(kAppID); |
328 | 313 |
329 EXPECT_EQ(1u, CountRegisteredAppRoot()); | 314 EXPECT_EQ(1u, CountRegisteredAppRoot()); |
330 EXPECT_TRUE(IsAppRegistered(kAppID)); | 315 EXPECT_TRUE(IsAppRegistered(kAppID)); |
331 } | 316 } |
332 | 317 |
333 } // namespace drive_backend | 318 } // namespace drive_backend |
334 } // namespace sync_file_system | 319 } // namespace sync_file_system |
OLD | NEW |