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 |