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 |
251 const DriveMetadataStore::MetadataMap& metadata_map() { | 246 const DriveMetadataStore::MetadataMap& metadata_map() { |
252 return drive_metadata_store_->metadata_map_; | 247 return drive_metadata_store_->metadata_map_; |
253 } | 248 } |
254 | 249 |
255 void VerifyReverseMap() { | 250 void VerifyReverseMap() { |
256 const ResourceIdByOrigin& batch_sync_origins = | |
257 drive_metadata_store_->batch_sync_origins_; | |
258 const ResourceIdByOrigin& incremental_sync_origins = | 251 const ResourceIdByOrigin& incremental_sync_origins = |
259 drive_metadata_store_->incremental_sync_origins_; | 252 drive_metadata_store_->incremental_sync_origins_; |
260 const ResourceIdByOrigin& disabled_origins = | 253 const ResourceIdByOrigin& disabled_origins = |
261 drive_metadata_store_->disabled_origins_; | 254 drive_metadata_store_->disabled_origins_; |
262 const OriginByResourceId& origin_by_resource_id = | 255 const OriginByResourceId& origin_by_resource_id = |
263 drive_metadata_store_->origin_by_resource_id_; | 256 drive_metadata_store_->origin_by_resource_id_; |
264 | 257 |
265 size_t expected_size = | 258 size_t expected_size = incremental_sync_origins.size() + |
266 batch_sync_origins.size() + incremental_sync_origins.size() + | 259 disabled_origins.size(); |
267 disabled_origins.size(); | |
268 size_t actual_size = origin_by_resource_id.size(); | 260 size_t actual_size = origin_by_resource_id.size(); |
269 EXPECT_EQ(expected_size, actual_size); | 261 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, | 262 EXPECT_TRUE(VerifyReverseMapInclusion(incremental_sync_origins, |
273 origin_by_resource_id)); | 263 origin_by_resource_id)); |
274 EXPECT_TRUE(VerifyReverseMapInclusion(disabled_origins, | 264 EXPECT_TRUE(VerifyReverseMapInclusion(disabled_origins, |
275 origin_by_resource_id)); | 265 origin_by_resource_id)); |
276 } | 266 } |
277 | 267 |
278 private: | 268 private: |
279 void DidInitializeDatabase(bool* done_out, | 269 void DidInitializeDatabase(bool* done_out, |
280 SyncStatusCode* status_out, | 270 SyncStatusCode* status_out, |
281 bool* created_out, | 271 bool* created_out, |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
527 kOrigin3, kServiceName, base::FilePath(FPL("waf"))), | 517 kOrigin3, kServiceName, base::FilePath(FPL("waf"))), |
528 CreateMetadata("baz", "egg", false, false))); | 518 CreateMetadata("baz", "egg", false, false))); |
529 | 519 |
530 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin2)); | 520 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin2)); |
531 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin3)); | 521 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin3)); |
532 | 522 |
533 DropDatabase(); | 523 DropDatabase(); |
534 InitializeDatabase(); | 524 InitializeDatabase(); |
535 | 525 |
536 // kOrigin1 should be the only one left. | 526 // 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()); | 527 EXPECT_EQ(1u, metadata_store()->incremental_sync_origins().size()); |
539 EXPECT_EQ(0u, metadata_store()->disabled_origins().size()); | 528 EXPECT_EQ(0u, metadata_store()->disabled_origins().size()); |
540 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(kOrigin1)); | 529 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(kOrigin1)); |
541 EXPECT_EQ(1u, metadata_map().size()); | 530 EXPECT_EQ(1u, metadata_map().size()); |
542 | 531 |
543 DriveMetadataStore::MetadataMap::const_iterator found = | 532 DriveMetadataStore::MetadataMap::const_iterator found = |
544 metadata_map().find(kOrigin1); | 533 metadata_map().find(kOrigin1); |
545 EXPECT_TRUE(found != metadata_map().end() && found->second.size() == 1u); | 534 EXPECT_TRUE(found != metadata_map().end() && found->second.size() == 1u); |
546 | 535 |
547 VerifyReverseMap(); | 536 VerifyReverseMap(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
645 kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), | 634 kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), |
646 kResourceId2); | 635 kResourceId2); |
647 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); | 636 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); |
648 MarkAsCreated(); | 637 MarkAsCreated(); |
649 } | 638 } |
650 | 639 |
651 InitializeDatabase(); | 640 InitializeDatabase(); |
652 | 641 |
653 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp()); | 642 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp()); |
654 EXPECT_EQ(kSyncRootResourceId, metadata_store()->sync_root_directory()); | 643 EXPECT_EQ(kSyncRootResourceId, metadata_store()->sync_root_directory()); |
655 EXPECT_EQ(kResourceId1, metadata_store()->GetResourceIdForOrigin(kOrigin1)); | |
656 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2)); | 644 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2)); |
657 | 645 |
658 DriveMetadata metadata; | 646 DriveMetadata metadata; |
659 EXPECT_EQ(SYNC_STATUS_OK, | 647 EXPECT_EQ(SYNC_STATUS_OK, |
660 metadata_store()->ReadEntry( | 648 metadata_store()->ReadEntry( |
661 CreateSyncableFileSystemURL(kOrigin1, kServiceName, kFile), | 649 CreateSyncableFileSystemURL(kOrigin1, kServiceName, kFile), |
662 &metadata)); | 650 &metadata)); |
663 EXPECT_EQ(kFileResourceId, metadata.resource_id()); | 651 EXPECT_EQ(kFileResourceId, metadata.resource_id()); |
664 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); | 652 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); |
665 EXPECT_FALSE(metadata.conflicted()); | 653 EXPECT_FALSE(metadata.conflicted()); |
666 EXPECT_FALSE(metadata.to_be_fetched()); | 654 EXPECT_FALSE(metadata.to_be_fetched()); |
667 | 655 |
668 VerifyReverseMap(); | 656 VerifyReverseMap(); |
669 } | 657 } |
670 | 658 |
659 TEST_F(DriveMetadataStoreTest, DeprecateBatchSyncOrigins) { | |
660 // Make sure that previously saved batch sync origins were deleted from the DB | |
661 // as they are no longer used. | |
662 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | |
663 const GURL kOrigin1("chrome-extension://example1"); | |
664 const std::string kSyncRootResourceId("sync_root_resource_id"); | |
665 const std::string kResourceId1("hoge"); | |
666 const std::string kFileResourceId("piyo"); | |
667 | |
668 // Purposely add in an old batch sync origin (from previous DB version). | |
669 leveldb::Options options; | |
670 options.create_if_missing = true; | |
671 leveldb::DB* db_ptr = NULL; | |
672 std::string db_dir = fileapi::FilePathToString( | |
673 base_dir().Append(DriveMetadataStore::kDatabaseName)); | |
674 leveldb::Status status = leveldb::DB::Open(options, db_dir, &db_ptr); | |
tzik
2013/05/27 04:31:58
We can open only one LevelDB instance for each pat
tzik
2013/05/27 07:57:42
For second option, we need to ensure the LevelDB i
| |
675 scoped_ptr<leveldb::DB> db(db_ptr); | |
676 leveldb::WriteOptions write_options; | |
677 db->Put(write_options, | |
678 kDriveBatchSyncOriginKeyPrefix + kOrigin1.spec(), kResourceId1); | |
679 InitializeDatabase(); | |
680 | |
681 // Confirm no batch sync origins rename after InitializeDatabase. | |
682 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); | |
683 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) { | |
684 std::string key = itr->key().ToString(); | |
685 bool batch_origin_found = | |
686 (key.find(kDriveBatchSyncOriginKeyPrefix) == std::string::npos); | |
687 EXPECT_FALSE(batch_origin_found); | |
688 } | |
689 } | |
690 | |
671 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { | 691 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { |
672 const GURL kOrigin1("chrome-extension://example1"); | 692 const GURL kOrigin1("chrome-extension://example1"); |
673 const std::string kResourceId1("hoge"); | 693 const std::string kResourceId1("hoge"); |
674 const std::string kResourceId2("fuga"); | 694 const std::string kResourceId2("fuga"); |
675 | 695 |
676 InitializeDatabase(); | 696 InitializeDatabase(); |
677 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); | 697 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); |
678 | 698 |
679 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); | 699 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); |
680 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); | 700 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); |
681 VerifyReverseMap(); | 701 VerifyReverseMap(); |
682 | 702 |
683 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); | 703 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); |
684 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); | 704 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); |
685 VerifyReverseMap(); | 705 VerifyReverseMap(); |
686 } | 706 } |
687 | 707 |
688 } // namespace sync_file_system | 708 } // namespace sync_file_system |
OLD | NEW |