| 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 |