| Index: chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
|
| diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
|
| index fb6a38313f666752053844d2a81c983013f2fff4..098b5a1b100c307ba322b9b93ee6e7845491caf2 100644
|
| --- a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
|
| +++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.h"
|
|
|
| #include "base/files/scoped_temp_dir.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
|
| #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h"
|
| #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
|
| @@ -35,7 +36,7 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| virtual void SetUp() OVERRIDE {
|
| ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
|
| in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
|
| - InitializeLevelDB();
|
| + db_ = InitializeLevelDB();
|
| index_ = MetadataDatabaseIndexOnDisk::Create(db_.get());
|
| }
|
|
|
| @@ -45,7 +46,13 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| in_memory_env_.reset();
|
| }
|
|
|
| - void CreateTestDatabase(bool build_index) {
|
| + void CreateTestDatabase(bool build_index, LevelDBWrapper* db) {
|
| + if (!db) {
|
| + DCHECK(index());
|
| + db = index()->GetDBForTesting();
|
| + }
|
| + DCHECK(db);
|
| +
|
| scoped_ptr<FileMetadata> sync_root_metadata =
|
| test_util::CreateFolderMetadata("sync_root_folder_id",
|
| "Chrome Syncable FileSystem");
|
| @@ -72,8 +79,14 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| kPlaceholderTrackerID,
|
| app_root_tracker.get());
|
|
|
| + scoped_ptr<ServiceMetadata> service_metadata =
|
| + InitializeServiceMetadata(db);
|
| + service_metadata->set_sync_root_tracker_id(kSyncRootTrackerID);
|
| + PutServiceMetadataToDB(*service_metadata, db);
|
| +
|
| if (build_index) {
|
| DCHECK(index());
|
| +
|
| index()->StoreFileMetadata(sync_root_metadata.Pass());
|
| index()->StoreFileTracker(sync_root_tracker.Pass());
|
| index()->StoreFileMetadata(app_root_metadata.Pass());
|
| @@ -82,25 +95,25 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| index()->StoreFileTracker(file_tracker.Pass());
|
| index()->StoreFileTracker(placeholder_tracker.Pass());
|
| } else {
|
| - PutFileMetadataToDB(*sync_root_metadata, db_.get());
|
| - PutFileTrackerToDB(*sync_root_tracker, db_.get());
|
| - PutFileMetadataToDB(*app_root_metadata, db_.get());
|
| - PutFileTrackerToDB(*app_root_tracker, db_.get());
|
| - PutFileMetadataToDB(*file_metadata, db_.get());
|
| - PutFileTrackerToDB(*file_tracker, db_.get());
|
| - PutFileTrackerToDB(*placeholder_tracker, db_.get());
|
| + PutFileMetadataToDB(*sync_root_metadata, db);
|
| + PutFileTrackerToDB(*sync_root_tracker, db);
|
| + PutFileMetadataToDB(*app_root_metadata, db);
|
| + PutFileTrackerToDB(*app_root_tracker, db);
|
| + PutFileMetadataToDB(*file_metadata, db);
|
| + PutFileTrackerToDB(*file_tracker, db);
|
| + PutFileTrackerToDB(*placeholder_tracker, db);
|
| }
|
|
|
| - ASSERT_TRUE(db_->Commit().ok());
|
| + ASSERT_TRUE(db->Commit().ok());
|
| }
|
|
|
| MetadataDatabaseIndexOnDisk* index() { return index_.get(); }
|
| +
|
| void WriteToDB() {
|
| ASSERT_TRUE(db_->Commit().ok());
|
| }
|
|
|
| - private:
|
| - void InitializeLevelDB() {
|
| + scoped_ptr<LevelDBWrapper> InitializeLevelDB() {
|
| leveldb::DB* db = NULL;
|
| leveldb::Options options;
|
| options.create_if_missing = true;
|
| @@ -108,10 +121,11 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| options.env = in_memory_env_.get();
|
| leveldb::Status status =
|
| leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db);
|
| - ASSERT_TRUE(status.ok());
|
| - db_.reset(new LevelDBWrapper(make_scoped_ptr(db)));
|
| + EXPECT_TRUE(status.ok());
|
| + return make_scoped_ptr(new LevelDBWrapper(make_scoped_ptr(db)));
|
| }
|
|
|
| + private:
|
| scoped_ptr<MetadataDatabaseIndexOnDisk> index_;
|
|
|
| base::ScopedTempDir database_dir_;
|
| @@ -120,7 +134,7 @@ class MetadataDatabaseIndexOnDiskTest : public testing::Test {
|
| };
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, GetEntryTest) {
|
| - CreateTestDatabase(false);
|
| + CreateTestDatabase(false, NULL);
|
|
|
| FileTracker tracker;
|
| EXPECT_FALSE(index()->GetFileTracker(kInvalidTrackerID, NULL));
|
| @@ -135,8 +149,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, GetEntryTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, SetEntryTest) {
|
| - // This test does not check updates of indexes.
|
| - CreateTestDatabase(false);
|
| + CreateTestDatabase(false, NULL);
|
|
|
| const int64 tracker_id = 10;
|
| scoped_ptr<FileMetadata> metadata =
|
| @@ -176,8 +189,43 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, SetEntryTest) {
|
| EXPECT_FALSE(index()->GetFileTracker(tracker_id, NULL));
|
| }
|
|
|
| +TEST_F(MetadataDatabaseIndexOnDiskTest, RemoveUnreachableItemsTest) {
|
| + scoped_ptr<LevelDBWrapper> db = InitializeLevelDB();
|
| + CreateTestDatabase(false, db.get());
|
| +
|
| + const int kOrphanedFileTrackerID = 13;
|
| + scoped_ptr<FileMetadata> orphaned_metadata =
|
| + test_util::CreateFileMetadata("orphaned_id", "orphaned", "md5");
|
| + scoped_ptr<FileTracker> orphaned_tracker =
|
| + test_util::CreateTracker(*orphaned_metadata,
|
| + kOrphanedFileTrackerID,
|
| + NULL);
|
| +
|
| + PutFileMetadataToDB(*orphaned_metadata, db.get());
|
| + PutFileTrackerToDB(*orphaned_tracker, db.get());
|
| + EXPECT_TRUE(db->Commit().ok());
|
| +
|
| + const std::string key =
|
| + kFileTrackerKeyPrefix + base::Int64ToString(kOrphanedFileTrackerID);
|
| + std::string value;
|
| + EXPECT_TRUE(db->Get(key, &value).ok());
|
| +
|
| + // RemoveUnreachableItems() is expected to run on index creation.
|
| + scoped_ptr<MetadataDatabaseIndexOnDisk> index_on_disk =
|
| + MetadataDatabaseIndexOnDisk::Create(db.get());
|
| + EXPECT_TRUE(db->Commit().ok());
|
| +
|
| + EXPECT_TRUE(db->Get(key, &value).IsNotFound());
|
| + EXPECT_FALSE(index_on_disk->GetFileTracker(kOrphanedFileTrackerID, NULL));
|
| +
|
| + EXPECT_TRUE(index_on_disk->GetFileTracker(kSyncRootTrackerID, NULL));
|
| + EXPECT_TRUE(index_on_disk->GetFileTracker(kAppRootTrackerID, NULL));
|
| + EXPECT_TRUE(index_on_disk->GetFileTracker(kFileTrackerID, NULL));
|
| +}
|
| +
|
| +
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, BuildIndexTest) {
|
| - CreateTestDatabase(false);
|
| + CreateTestDatabase(false, NULL);
|
|
|
| TrackerIDSet tracker_ids;
|
| // Before building indexes, no references exist.
|
| @@ -205,7 +253,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, BuildIndexTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, AllEntriesTest) {
|
| - CreateTestDatabase(true);
|
| + CreateTestDatabase(true, NULL);
|
|
|
| EXPECT_EQ(3U, index()->CountFileMetadata());
|
| std::vector<std::string> file_ids(index()->GetAllMetadataIDs());
|
| @@ -226,7 +274,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, AllEntriesTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, IndexAppRootIDByAppIDTest) {
|
| - CreateTestDatabase(true);
|
| + CreateTestDatabase(true, NULL);
|
|
|
| std::vector<std::string> app_ids = index()->GetRegisteredAppIDs();
|
| ASSERT_EQ(1U, app_ids.size());
|
| @@ -286,7 +334,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, IndexAppRootIDByAppIDTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, TrackerIDSetByFileIDTest) {
|
| - CreateTestDatabase(true);
|
| + CreateTestDatabase(true, NULL);
|
|
|
| FileTracker app_root_tracker;
|
| EXPECT_TRUE(index()->GetFileTracker(kAppRootTrackerID, &app_root_tracker));
|
| @@ -350,7 +398,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, TrackerIDSetByFileIDTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, TrackerIDSetByParentIDAndTitleTest) {
|
| - CreateTestDatabase(true);
|
| + CreateTestDatabase(true, NULL);
|
|
|
| FileTracker app_root_tracker;
|
| EXPECT_TRUE(index()->GetFileTracker(kAppRootTrackerID, &app_root_tracker));
|
| @@ -427,7 +475,7 @@ TEST_F(MetadataDatabaseIndexOnDiskTest, TrackerIDSetByParentIDAndTitleTest) {
|
| }
|
|
|
| TEST_F(MetadataDatabaseIndexOnDiskTest, DirtyTrackersTest) {
|
| - CreateTestDatabase(true);
|
| + CreateTestDatabase(true, NULL);
|
|
|
| // Testing public methods
|
| EXPECT_EQ(1U, index()->CountDirtyTracker());
|
|
|