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 |