| 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 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 EXPECT_TRUE(metadata_store()->GetResourceIdForOrigin(kOrigin3).empty()); | 581 EXPECT_TRUE(metadata_store()->GetResourceIdForOrigin(kOrigin3).empty()); |
| 582 | 582 |
| 583 // Make sure they're still known origins. | 583 // Make sure they're still known origins. |
| 584 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin1)); | 584 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin1)); |
| 585 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin2)); | 585 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin2)); |
| 586 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin3)); | 586 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin3)); |
| 587 | 587 |
| 588 VerifyReverseMap(); | 588 VerifyReverseMap(); |
| 589 } | 589 } |
| 590 | 590 |
| 591 TEST_F(DriveMetadataStoreTest, MigrationFromV0) { | |
| 592 const GURL kOrigin1("chrome-extension://example1"); | |
| 593 const GURL kOrigin2("chrome-extension://example2"); | |
| 594 const std::string kSyncRootResourceId("folder:sync_root_resource_id"); | |
| 595 const std::string kResourceId1("folder:hoge"); | |
| 596 const std::string kResourceId2("folder:fuga"); | |
| 597 const std::string kFileResourceId("file:piyo"); | |
| 598 const base::FilePath kFile(FPL("foo bar")); | |
| 599 const std::string kFileMD5("file_md5"); | |
| 600 | |
| 601 { | |
| 602 const char kChangeStampKey[] = "CHANGE_STAMP"; | |
| 603 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | |
| 604 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | |
| 605 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | |
| 606 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | |
| 607 | |
| 608 const char kV0ServiceName[] = "drive"; | |
| 609 ASSERT_TRUE(RegisterSyncableFileSystem(kV0ServiceName)); | |
| 610 leveldb::Options options; | |
| 611 options.create_if_missing = true; | |
| 612 leveldb::DB* db_ptr = NULL; | |
| 613 std::string db_dir = fileapi::FilePathToString( | |
| 614 base_dir().Append(DriveMetadataStore::kDatabaseName)); | |
| 615 leveldb::Status status = leveldb::DB::Open(options, db_dir, &db_ptr); | |
| 616 | |
| 617 scoped_ptr<leveldb::DB> db(db_ptr); | |
| 618 ASSERT_TRUE(status.ok()); | |
| 619 | |
| 620 leveldb::WriteOptions write_options; | |
| 621 db->Put(write_options, kChangeStampKey, "1"); | |
| 622 db->Put(write_options, kSyncRootDirectoryKey, kSyncRootResourceId); | |
| 623 | |
| 624 DriveMetadata drive_metadata; | |
| 625 drive_metadata.set_resource_id(kFileResourceId); | |
| 626 drive_metadata.set_md5_checksum(kFileMD5); | |
| 627 drive_metadata.set_conflicted(false); | |
| 628 drive_metadata.set_to_be_fetched(false); | |
| 629 | |
| 630 fileapi::FileSystemURL url = CreateSyncableFileSystemURL( | |
| 631 kOrigin1, kV0ServiceName, kFile); | |
| 632 std::string serialized_url; | |
| 633 SerializeSyncableFileSystemURL(url, &serialized_url); | |
| 634 std::string metadata_string; | |
| 635 drive_metadata.SerializeToString(&metadata_string); | |
| 636 | |
| 637 db->Put(write_options, | |
| 638 kDriveMetadataKeyPrefix + serialized_url, metadata_string); | |
| 639 db->Put(write_options, | |
| 640 kDriveBatchSyncOriginKeyPrefix + kOrigin1.spec(), kResourceId1); | |
| 641 db->Put(write_options, | |
| 642 kDriveIncrementalSyncOriginKeyPrefix + kOrigin2.spec(), | |
| 643 kResourceId2); | |
| 644 EXPECT_TRUE(RevokeSyncableFileSystem(kV0ServiceName)); | |
| 645 MarkAsCreated(); | |
| 646 } | |
| 647 | |
| 648 InitializeDatabase(); | |
| 649 | |
| 650 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp()); | |
| 651 EXPECT_EQ(kSyncRootResourceId, metadata_store()->sync_root_directory()); | |
| 652 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2)); | |
| 653 | |
| 654 DriveMetadata metadata; | |
| 655 EXPECT_EQ(SYNC_STATUS_OK, | |
| 656 metadata_store()->ReadEntry( | |
| 657 CreateSyncableFileSystemURL(kOrigin1, kServiceName, kFile), | |
| 658 &metadata)); | |
| 659 EXPECT_EQ(kFileResourceId, metadata.resource_id()); | |
| 660 EXPECT_EQ(kFileMD5, metadata.md5_checksum()); | |
| 661 EXPECT_FALSE(metadata.conflicted()); | |
| 662 EXPECT_FALSE(metadata.to_be_fetched()); | |
| 663 | |
| 664 VerifyReverseMap(); | |
| 665 } | |
| 666 | |
| 667 TEST_F(DriveMetadataStoreTest, DeprecateBatchSyncOrigins) { | |
| 668 // Make sure that previously saved batch sync origins were deleted from the DB | |
| 669 // as they are no longer used. | |
| 670 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | |
| 671 const GURL kOrigin1("chrome-extension://example1"); | |
| 672 const std::string kResourceId1("hoge"); | |
| 673 | |
| 674 // Purposely add in an old batch sync origin (from previous DB version). | |
| 675 { | |
| 676 leveldb::Options options; | |
| 677 options.create_if_missing = true; | |
| 678 leveldb::DB* db_ptr = NULL; | |
| 679 std::string db_dir = fileapi::FilePathToString( | |
| 680 base_dir().Append(DriveMetadataStore::kDatabaseName)); | |
| 681 leveldb::DB::Open(options, db_dir, &db_ptr); | |
| 682 scoped_ptr<leveldb::DB> db(db_ptr); | |
| 683 leveldb::WriteOptions write_options; | |
| 684 db->Put(write_options, | |
| 685 kDriveBatchSyncOriginKeyPrefix + kOrigin1.spec(), kResourceId1); | |
| 686 } | |
| 687 | |
| 688 InitializeDatabase(); | |
| 689 | |
| 690 // Confirm no batch sync origins remain after InitializeDatabase. | |
| 691 scoped_ptr<leveldb::Iterator> itr(metadata_db()->NewIterator( | |
| 692 leveldb::ReadOptions())); | |
| 693 int batch_origins_found = 0; | |
| 694 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix); itr->Valid(); itr->Next()) { | |
| 695 std::string key = itr->key().ToString(); | |
| 696 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true)) | |
| 697 break; | |
| 698 batch_origins_found++; | |
| 699 } | |
| 700 EXPECT_EQ(0, batch_origins_found); | |
| 701 } | |
| 702 | |
| 703 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { | 591 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) { |
| 704 const GURL kOrigin1("chrome-extension://example1"); | 592 const GURL kOrigin1("chrome-extension://example1"); |
| 705 const std::string kResourceId1("hoge"); | 593 const std::string kResourceId1("hoge"); |
| 706 const std::string kResourceId2("fuga"); | 594 const std::string kResourceId2("fuga"); |
| 707 | 595 |
| 708 InitializeDatabase(); | 596 InitializeDatabase(); |
| 709 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); | 597 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1)); |
| 710 | 598 |
| 711 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); | 599 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1); |
| 712 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); | 600 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1); |
| 713 VerifyReverseMap(); | 601 VerifyReverseMap(); |
| 714 | 602 |
| 715 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); | 603 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2); |
| 716 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); | 604 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2); |
| 717 VerifyReverseMap(); | 605 VerifyReverseMap(); |
| 718 } | 606 } |
| 719 | 607 |
| 720 } // namespace sync_file_system | 608 } // namespace sync_file_system |
| OLD | NEW |