Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_metadata_store.h" | 5 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 125 void RestoreSyncRootDirectoryFromDB() { | 125 void RestoreSyncRootDirectoryFromDB() { |
| 126 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 126 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 127 drive_metadata_store_->RestoreSyncRootDirectory( | 127 drive_metadata_store_->RestoreSyncRootDirectory( |
| 128 base::Bind(&DriveMetadataStoreTest::DidRestoreSyncRootDirectory, | 128 base::Bind(&DriveMetadataStoreTest::DidRestoreSyncRootDirectory, |
| 129 base::Unretained(this))); | 129 base::Unretained(this))); |
| 130 message_loop_.Run(); | 130 message_loop_.Run(); |
| 131 } | 131 } |
| 132 | 132 |
| 133 void DropSyncOriginsInStore() { | 133 void DropSyncOriginsInStore() { |
| 134 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 134 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 135 drive_metadata_store_->batch_sync_origins_.clear(); | |
| 136 drive_metadata_store_->incremental_sync_origins_.clear(); | 135 drive_metadata_store_->incremental_sync_origins_.clear(); |
| 137 drive_metadata_store_->disabled_origins_.clear(); | 136 drive_metadata_store_->disabled_origins_.clear(); |
| 138 EXPECT_TRUE(drive_metadata_store_->batch_sync_origins().empty()); | |
| 139 EXPECT_TRUE(drive_metadata_store_->incremental_sync_origins().empty()); | 137 EXPECT_TRUE(drive_metadata_store_->incremental_sync_origins().empty()); |
| 140 EXPECT_TRUE(drive_metadata_store_->disabled_origins().empty()); | 138 EXPECT_TRUE(drive_metadata_store_->disabled_origins().empty()); |
| 141 } | 139 } |
| 142 | 140 |
| 143 void RestoreOriginsFromDB() { | 141 void RestoreOriginsFromDB() { |
| 144 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 142 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 145 drive_metadata_store_->RestoreOrigins( | 143 drive_metadata_store_->RestoreOrigins( |
| 146 base::Bind(&DriveMetadataStoreTest::DidRestoreOrigins, | 144 base::Bind(&DriveMetadataStoreTest::DidRestoreOrigins, |
| 147 base::Unretained(this))); | 145 base::Unretained(this))); |
| 148 message_loop_.Run(); | 146 message_loop_.Run(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 209 SyncStatusCode status) { | 207 SyncStatusCode status) { |
| 210 *status_out = status; | 208 *status_out = status; |
| 211 message_loop_.Quit(); | 209 message_loop_.Quit(); |
| 212 } | 210 } |
| 213 | 211 |
| 214 void MarkAsCreated() { | 212 void MarkAsCreated() { |
| 215 created_ = true; | 213 created_ = true; |
| 216 } | 214 } |
| 217 | 215 |
| 218 void VerifyUntrackedOrigin(const GURL& origin) { | 216 void VerifyUntrackedOrigin(const GURL& origin) { |
| 219 EXPECT_FALSE(metadata_store()->IsBatchSyncOrigin(origin)); | |
| 220 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin)); | 217 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin)); |
| 221 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin)); | 218 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin)); |
| 222 } | 219 } |
| 223 | 220 |
| 224 void VerifyIncrementalSyncOrigin(const GURL& origin, | 221 void VerifyIncrementalSyncOrigin(const GURL& origin, |
| 225 const std::string& resource_id) { | 222 const std::string& resource_id) { |
| 226 EXPECT_FALSE(metadata_store()->IsBatchSyncOrigin(origin)); | |
| 227 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(origin)); | 223 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(origin)); |
| 228 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin)); | 224 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin)); |
| 229 EXPECT_EQ(resource_id, | 225 EXPECT_EQ(resource_id, |
| 230 GetResourceID(metadata_store()->incremental_sync_origins(), | 226 GetResourceID(metadata_store()->incremental_sync_origins(), |
| 231 origin)); | 227 origin)); |
| 232 } | 228 } |
| 233 | 229 |
| 234 void VerifyDisabledOrigin(const GURL& origin, | 230 void VerifyDisabledOrigin(const GURL& origin, |
| 235 const std::string& resource_id) { | 231 const std::string& resource_id) { |
| 236 EXPECT_FALSE(metadata_store()->IsBatchSyncOrigin(origin)); | |
| 237 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin)); | 232 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin)); |
| 238 EXPECT_TRUE(metadata_store()->IsOriginDisabled(origin)); | 233 EXPECT_TRUE(metadata_store()->IsOriginDisabled(origin)); |
| 239 EXPECT_EQ(resource_id, | 234 EXPECT_EQ(resource_id, |
| 240 GetResourceID(metadata_store()->disabled_origins(), origin)); | 235 GetResourceID(metadata_store()->disabled_origins(), origin)); |
| 241 } | 236 } |
| 242 | 237 |
| 243 base::FilePath base_dir() { | 238 base::FilePath base_dir() { |
| 244 return base_dir_.path(); | 239 return base_dir_.path(); |
| 245 } | 240 } |
| 246 | 241 |
| 247 DriveMetadataStore* metadata_store() { | 242 DriveMetadataStore* metadata_store() { |
| 248 return drive_metadata_store_.get(); | 243 return drive_metadata_store_.get(); |
| 249 } | 244 } |
| 250 | 245 |
| 246 leveldb::DB* metadata_db() { | |
| 247 return drive_metadata_store_->GetDBInstanceForTesting(); | |
| 248 } | |
| 249 | |
| 251 const DriveMetadataStore::MetadataMap& metadata_map() { | 250 const DriveMetadataStore::MetadataMap& metadata_map() { |
| 252 return drive_metadata_store_->metadata_map_; | 251 return drive_metadata_store_->metadata_map_; |
| 253 } | 252 } |
| 254 | 253 |
| 255 void VerifyReverseMap() { | 254 void VerifyReverseMap() { |
| 256 const ResourceIdByOrigin& batch_sync_origins = | |
| 257 drive_metadata_store_->batch_sync_origins_; | |
| 258 const ResourceIdByOrigin& incremental_sync_origins = | 255 const ResourceIdByOrigin& incremental_sync_origins = |
| 259 drive_metadata_store_->incremental_sync_origins_; | 256 drive_metadata_store_->incremental_sync_origins_; |
| 260 const ResourceIdByOrigin& disabled_origins = | 257 const ResourceIdByOrigin& disabled_origins = |
| 261 drive_metadata_store_->disabled_origins_; | 258 drive_metadata_store_->disabled_origins_; |
| 262 const OriginByResourceId& origin_by_resource_id = | 259 const OriginByResourceId& origin_by_resource_id = |
| 263 drive_metadata_store_->origin_by_resource_id_; | 260 drive_metadata_store_->origin_by_resource_id_; |
| 264 | 261 |
| 265 size_t expected_size = | 262 size_t expected_size = incremental_sync_origins.size() + |
| 266 batch_sync_origins.size() + incremental_sync_origins.size() + | 263 disabled_origins.size(); |
| 267 disabled_origins.size(); | |
| 268 size_t actual_size = origin_by_resource_id.size(); | 264 size_t actual_size = origin_by_resource_id.size(); |
| 269 EXPECT_EQ(expected_size, actual_size); | 265 EXPECT_EQ(expected_size, actual_size); |
| 270 EXPECT_TRUE(VerifyReverseMapInclusion(batch_sync_origins, | |
| 271 origin_by_resource_id)); | |
| 272 EXPECT_TRUE(VerifyReverseMapInclusion(incremental_sync_origins, | 266 EXPECT_TRUE(VerifyReverseMapInclusion(incremental_sync_origins, |
| 273 origin_by_resource_id)); | 267 origin_by_resource_id)); |
| 274 EXPECT_TRUE(VerifyReverseMapInclusion(disabled_origins, | 268 EXPECT_TRUE(VerifyReverseMapInclusion(disabled_origins, |
| 275 origin_by_resource_id)); | 269 origin_by_resource_id)); |
| 276 } | 270 } |
| 277 | 271 |
| 278 private: | 272 private: |
| 279 void DidInitializeDatabase(bool* done_out, | 273 void DidInitializeDatabase(bool* done_out, |
| 280 SyncStatusCode* status_out, | 274 SyncStatusCode* status_out, |
| 281 bool* created_out, | 275 bool* created_out, |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 kOrigin3, kServiceName, base::FilePath(FPL("waf"))), | 521 kOrigin3, kServiceName, base::FilePath(FPL("waf"))), |
| 528 CreateMetadata("baz", "egg", false, false))); | 522 CreateMetadata("baz", "egg", false, false))); |
| 529 | 523 |
| 530 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin2)); | 524 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin2)); |
| 531 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin3)); | 525 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin3)); |
| 532 | 526 |
| 533 DropDatabase(); | 527 DropDatabase(); |
| 534 InitializeDatabase(); | 528 InitializeDatabase(); |
| 535 | 529 |
| 536 // kOrigin1 should be the only one left. | 530 // kOrigin1 should be the only one left. |
| 537 EXPECT_EQ(0u, metadata_store()->batch_sync_origins().size()); | |
| 538 EXPECT_EQ(1u, metadata_store()->incremental_sync_origins().size()); | 531 EXPECT_EQ(1u, metadata_store()->incremental_sync_origins().size()); |
| 539 EXPECT_EQ(0u, metadata_store()->disabled_origins().size()); | 532 EXPECT_EQ(0u, metadata_store()->disabled_origins().size()); |
| 540 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(kOrigin1)); | 533 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(kOrigin1)); |
| 541 EXPECT_EQ(1u, metadata_map().size()); | 534 EXPECT_EQ(1u, metadata_map().size()); |
| 542 | 535 |
| 543 DriveMetadataStore::MetadataMap::const_iterator found = | 536 DriveMetadataStore::MetadataMap::const_iterator found = |
| 544 metadata_map().find(kOrigin1); | 537 metadata_map().find(kOrigin1); |
| 545 EXPECT_TRUE(found != metadata_map().end() && found->second.size() == 1u); | 538 EXPECT_TRUE(found != metadata_map().end() && found->second.size() == 1u); |
| 546 | 539 |
| 547 VerifyReverseMap(); | 540 VerifyReverseMap(); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 645 kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), | 638 kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), |
| 646 kResourceId2); | 639 kResourceId2); |
| 647 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); | 640 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); |
| 648 MarkAsCreated(); | 641 MarkAsCreated(); |
| 649 } | 642 } |
| 650 | 643 |
| 651 InitializeDatabase(); | 644 InitializeDatabase(); |
| 652 | 645 |
| 653 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp()); | 646 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp()); |
| 654 EXPECT_EQ(kSyncRootResourceId, metadata_store()->sync_root_directory()); | 647 EXPECT_EQ(kSyncRootResourceId, metadata_store()->sync_root_directory()); |
| 655 EXPECT_EQ(kResourceId1, metadata_store()->GetResourceIdForOrigin(kOrigin1)); | |
| 656 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2)); | 648 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2)); |
| 657 | 649 |
| 658 DriveMetadata metadata; | 650 DriveMetadata metadata; |
| 659 EXPECT_EQ(SYNC_STATUS_OK, | 651 EXPECT_EQ(SYNC_STATUS_OK, |
| 660 metadata_store()->ReadEntry( | 652 metadata_store()->ReadEntry( |
| 661 CreateSyncableFileSystemURL(kOrigin1, kServiceName, kFile), | 653 CreateSyncableFileSystemURL(kOrigin1, kServiceName, kFile), |
| 662 &metadata)); | 654 &metadata)); |
| 663 EXPECT_EQ(kFileResourceId, metadata.resource_id()); | 655 EXPECT_EQ(kFileResourceId, metadata.resource_id()); |
| 664 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); | 656 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); |
| 665 EXPECT_FALSE(metadata.conflicted()); | 657 EXPECT_FALSE(metadata.conflicted()); |
| 666 EXPECT_FALSE(metadata.to_be_fetched()); | 658 EXPECT_FALSE(metadata.to_be_fetched()); |
| 667 | 659 |
| 668 VerifyReverseMap(); | 660 VerifyReverseMap(); |
| 669 } | 661 } |
| 670 | 662 |
| 663 TEST_F(DriveMetadataStoreTest, DeprecateBatchSyncOrigins) { | |
| 664 // Make sure that previously saved batch sync origins were deleted from the DB | |
| 665 // as they are no longer used. | |
| 666 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | |
| 667 const GURL kOrigin1("chrome-extension://example1"); | |
| 668 const std::string kSyncRootResourceId("sync_root_resource_id"); | |
|
tzik
2013/05/27 12:14:10
unused?
calvinlo
2013/05/28 02:18:55
Done.
| |
| 669 const std::string kResourceId1("hoge"); | |
| 670 const std::string kFileResourceId("piyo"); | |
|
tzik
2013/05/27 12:14:10
unused?
calvinlo
2013/05/28 02:18:55
Done.
| |
| 671 | |
| 672 // Purposely add in an old batch sync origin (from previous DB version). | |
| 673 { | |
| 674 leveldb::Options options; | |
| 675 options.create_if_missing = true; | |
| 676 leveldb::DB* db_ptr = NULL; | |
| 677 std::string db_dir = fileapi::FilePathToString( | |
| 678 base_dir().Append(DriveMetadataStore::kDatabaseName)); | |
| 679 leveldb::DB::Open(options, db_dir, &db_ptr); | |
| 680 scoped_ptr<leveldb::DB> db(db_ptr); | |
| 681 leveldb::WriteOptions write_options; | |
| 682 db->Put(write_options, | |
| 683 kDriveBatchSyncOriginKeyPrefix + kOrigin1.spec(), kResourceId1); | |
| 684 db.reset(); | |
|
tzik
2013/05/27 12:14:10
scoped_ptr deletes its content on scope out.
so re
calvinlo
2013/05/28 02:18:55
Done.
| |
| 685 } | |
| 686 | |
| 687 InitializeDatabase(); | |
| 688 | |
| 689 // Confirm no batch sync origins rename after InitializeDatabase. | |
| 690 scoped_ptr<leveldb::Iterator> itr(metadata_db()->NewIterator( | |
| 691 leveldb::ReadOptions())); | |
| 692 int batch_origins_found = 0; | |
| 693 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) { | |
|
tzik
2013/05/27 12:14:10
Seek(kDriveBatchSyncOriginKeyPrefix)?
calvinlo
2013/05/28 02:18:55
Done.
| |
| 694 std::string key = itr->key().ToString(); | |
| 695 if (key.find(kDriveBatchSyncOriginKeyPrefix) != std::string::npos) | |
|
tzik
2013/05/27 12:14:10
StartsWithASCII and break? as we do at drive_metad
calvinlo
2013/05/28 02:18:55
Done.
| |
| 696 batch_origins_found++; | |
| 697 } | |
| 698 ASSERT_EQ(0, batch_origins_found); | |
| 699 } | |
| 700 | |
| 671 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { | 701 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { |
| 672 const GURL kOrigin1("chrome-extension://example1"); | 702 const GURL kOrigin1("chrome-extension://example1"); |
| 673 const std::string kResourceId1("hoge"); | 703 const std::string kResourceId1("hoge"); |
| 674 const std::string kResourceId2("fuga"); | 704 const std::string kResourceId2("fuga"); |
| 675 | 705 |
| 676 InitializeDatabase(); | 706 InitializeDatabase(); |
| 677 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); | 707 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); |
| 678 | 708 |
| 679 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); | 709 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); |
| 680 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); | 710 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); |
| 681 VerifyReverseMap(); | 711 VerifyReverseMap(); |
| 682 | 712 |
| 683 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); | 713 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); |
| 684 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); | 714 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); |
| 685 VerifyReverseMap(); | 715 VerifyReverseMap(); |
| 686 } | 716 } |
| 687 | 717 |
| 688 } // namespace sync_file_system | 718 } // namespace sync_file_system |
| OLD | NEW |