metadata_database_index_unittest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.h" 6 7#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" 8#include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h" 9#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 10#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13namespace sync_file_system { 14namespace drive_backend { 15 16namespace { 17 18const int64 kSyncRootTrackerID = 1; 19const int64 kAppRootTrackerID = 2; 20const int64 kFileTrackerID = 3; 21const int64 kPlaceholderTrackerID = 4; 22 23scoped_ptr<DatabaseContents> CreateTestDatabaseContents() { 24 scoped_ptr<DatabaseContents> contents(new DatabaseContents); 25 26 scoped_ptr<FileMetadata> sync_root_metadata = 27 test_util::CreateFolderMetadata("sync_root_folder_id", 28 "Chrome Syncable FileSystem"); 29 scoped_ptr<FileTracker> sync_root_tracker = 30 test_util::CreateTracker(*sync_root_metadata, kSyncRootTrackerID, NULL); 31 32 scoped_ptr<FileMetadata> app_root_metadata = 33 test_util::CreateFolderMetadata("app_root_folder_id", "app_id"); 34 scoped_ptr<FileTracker> app_root_tracker = 35 test_util::CreateTracker(*app_root_metadata, kAppRootTrackerID, 36 sync_root_tracker.get()); 37 app_root_tracker->set_app_id("app_id"); 38 app_root_tracker->set_tracker_kind(TRACKER_KIND_APP_ROOT); 39 40 scoped_ptr<FileMetadata> file_metadata = 41 test_util::CreateFileMetadata("file_id", "file", "file_md5"); 42 scoped_ptr<FileTracker> file_tracker = 43 test_util::CreateTracker(*file_metadata, kFileTrackerID, 44 app_root_tracker.get()); 45 46 scoped_ptr<FileTracker> placeholder_tracker = 47 test_util::CreatePlaceholderTracker("unsynced_file_id", 48 kPlaceholderTrackerID, 49 app_root_tracker.get()); 50 51 contents->file_metadata.push_back(sync_root_metadata.release()); 52 contents->file_trackers.push_back(sync_root_tracker.release()); 53 contents->file_metadata.push_back(app_root_metadata.release()); 54 contents->file_trackers.push_back(app_root_tracker.release()); 55 contents->file_metadata.push_back(file_metadata.release()); 56 contents->file_trackers.push_back(file_tracker.release()); 57 contents->file_trackers.push_back(placeholder_tracker.release()); 58 return contents.Pass(); 59} 60 61} // namespace 62 63TEST(MetadataDatabaseIndexTest, GetEntryTest) { 64 scoped_ptr<MetadataDatabaseIndex> index = 65 MetadataDatabaseIndex::CreateForTesting( 66 CreateTestDatabaseContents().get()); 67 68 FileTracker tracker; 69 EXPECT_FALSE(index->GetFileTracker(kInvalidTrackerID, NULL)); 70 ASSERT_TRUE(index->GetFileTracker(kFileTrackerID, &tracker)); 71 EXPECT_EQ(kFileTrackerID, tracker.tracker_id()); 72 EXPECT_EQ("file_id", tracker.file_id()); 73 74 FileMetadata metadata; 75 EXPECT_FALSE(index->GetFileMetadata(std::string(), NULL)); 76 ASSERT_TRUE(index->GetFileMetadata("file_id", &metadata)); 77 EXPECT_EQ("file_id", metadata.file_id()); 78} 79 80TEST(MetadataDatabaseIndexTest, IndexLookUpTest) { 81 scoped_ptr<MetadataDatabaseIndex> index = 82 MetadataDatabaseIndex::CreateForTesting( 83 CreateTestDatabaseContents().get()); 84 85 TrackerIDSet trackers = index->GetFileTrackerIDsByFileID("file_id"); 86 EXPECT_EQ(1u, trackers.size()); 87 EXPECT_TRUE(trackers.has_active()); 88 EXPECT_EQ(kFileTrackerID, trackers.active_tracker()); 89 90 int64 app_root_tracker_id = index->GetAppRootTracker("app_id"); 91 EXPECT_EQ(kAppRootTrackerID, app_root_tracker_id); 92 93 trackers = index->GetFileTrackerIDsByParentAndTitle( 94 app_root_tracker_id, "file"); 95 EXPECT_EQ(1u, trackers.size()); 96 EXPECT_TRUE(trackers.has_active()); 97 EXPECT_EQ(kFileTrackerID, trackers.active_tracker()); 98 99 EXPECT_TRUE(index->PickMultiTrackerFileID().empty()); 100 EXPECT_EQ(kInvalidTrackerID, 101 index->PickMultiBackingFilePath().parent_id); 102 EXPECT_EQ(kPlaceholderTrackerID, index->PickDirtyTracker()); 103} 104 105TEST(MetadataDatabaseIndexTest, UpdateTest) { 106 scoped_ptr<MetadataDatabaseIndex> index = 107 MetadataDatabaseIndex::CreateForTesting( 108 CreateTestDatabaseContents().get()); 109 110 index->DemoteDirtyTracker(kPlaceholderTrackerID, NULL); 111 EXPECT_EQ(kInvalidTrackerID, index->PickDirtyTracker()); 112 index->PromoteDemotedDirtyTrackers(NULL); 113 EXPECT_EQ(kPlaceholderTrackerID, index->PickDirtyTracker()); 114 115 FileMetadata metadata; 116 ASSERT_TRUE(index->GetFileMetadata("file_id", &metadata)); 117 FileTracker app_root_tracker; 118 ASSERT_TRUE(index->GetFileTracker(kAppRootTrackerID, &app_root_tracker)); 119 120 int64 new_tracker_id = 100; 121 scoped_ptr<FileTracker> new_tracker = 122 test_util::CreateTracker(metadata, new_tracker_id, &app_root_tracker); 123 new_tracker->set_active(false); 124 index->StoreFileTracker(new_tracker.Pass(), NULL); 125 126 EXPECT_EQ("file_id", index->PickMultiTrackerFileID()); 127 EXPECT_EQ(ParentIDAndTitle(kAppRootTrackerID, std::string("file")), 128 index->PickMultiBackingFilePath()); 129 130 index->RemoveFileMetadata("file_id", NULL); 131 index->RemoveFileTracker(kFileTrackerID, NULL); 132 133 EXPECT_FALSE(index->GetFileMetadata("file_id", NULL)); 134 EXPECT_FALSE(index->GetFileTracker(kFileTrackerID, NULL)); 135} 136 137} // namespace drive_backend 138} // namespace sync_file_system 139