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