Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/register_app_task_unittest.cc

Issue 428063002: [SyncFS] Replace leveldb classes with LevelDBWrapper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_backend/register_app_task.h" 5 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
15 #include "chrome/browser/drive/drive_uploader.h" 15 #include "chrome/browser/drive/drive_uploader.h"
16 #include "chrome/browser/drive/fake_drive_service.h" 16 #include "chrome/browser/drive/fake_drive_service.h"
17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h" 17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h"
18 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" 18 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
19 #include "chrome/browser/sync_file_system/drive_backend/fake_drive_service_helpe r.h" 19 #include "chrome/browser/sync_file_system/drive_backend/fake_drive_service_helpe r.h"
20 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
20 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 21 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
21 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 22 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
22 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" 23 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
23 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" 24 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
24 #include "content/public/test/test_browser_thread_bundle.h" 25 #include "content/public/test/test_browser_thread_bundle.h"
25 #include "google_apis/drive/drive_api_parser.h" 26 #include "google_apis/drive/drive_api_parser.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 28 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
28 #include "third_party/leveldatabase/src/include/leveldb/db.h" 29 #include "third_party/leveldatabase/src/include/leveldb/db.h"
29 #include "third_party/leveldatabase/src/include/leveldb/env.h" 30 #include "third_party/leveldatabase/src/include/leveldb/env.h"
30 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
31 31
32 namespace sync_file_system { 32 namespace sync_file_system {
33 namespace drive_backend { 33 namespace drive_backend {
34 34
35 namespace { 35 namespace {
36 const int64 kSyncRootTrackerID = 100; 36 const int64 kSyncRootTrackerID = 100;
37 } // namespace 37 } // namespace
38 38
39 class RegisterAppTaskTest : public testing::Test { 39 class RegisterAppTaskTest : public testing::Test {
40 public: 40 public:
(...skipping 30 matching lines...) Expand all
71 fake_drive_service_helper_->AddOrphanedFolder( 71 fake_drive_service_helper_->AddOrphanedFolder(
72 kSyncRootFolderTitle, &sync_root_folder_id_)); 72 kSyncRootFolderTitle, &sync_root_folder_id_));
73 } 73 }
74 74
75 virtual void TearDown() OVERRIDE { 75 virtual void TearDown() OVERRIDE {
76 context_.reset(); 76 context_.reset();
77 base::RunLoop().RunUntilIdle(); 77 base::RunLoop().RunUntilIdle();
78 } 78 }
79 79
80 protected: 80 protected:
81 scoped_ptr<leveldb::DB> OpenLevelDB() { 81 scoped_ptr<LevelDBWrapper> OpenLevelDB() {
82 leveldb::DB* db = NULL; 82 leveldb::DB* db = NULL;
83 leveldb::Options options; 83 leveldb::Options options;
84 options.create_if_missing = true; 84 options.create_if_missing = true;
85 options.env = in_memory_env_.get(); 85 options.env = in_memory_env_.get();
86 leveldb::Status status = 86 leveldb::Status status =
87 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); 87 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db);
88 EXPECT_TRUE(status.ok()); 88 EXPECT_TRUE(status.ok());
89 return make_scoped_ptr<leveldb::DB>(db); 89 return make_scoped_ptr(new LevelDBWrapper(make_scoped_ptr(db)));
90 } 90 }
91 91
92 void SetUpInitialData(leveldb::DB* db) { 92 void SetUpInitialData(LevelDBWrapper* db) {
93 ServiceMetadata service_metadata; 93 ServiceMetadata service_metadata;
94 service_metadata.set_largest_change_id(100); 94 service_metadata.set_largest_change_id(100);
95 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); 95 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID);
96 service_metadata.set_next_tracker_id(next_tracker_id_); 96 service_metadata.set_next_tracker_id(next_tracker_id_);
97 97
98 FileDetails sync_root_details; 98 FileDetails sync_root_details;
99 sync_root_details.set_title(kSyncRootFolderTitle); 99 sync_root_details.set_title(kSyncRootFolderTitle);
100 sync_root_details.set_file_kind(FILE_KIND_FOLDER); 100 sync_root_details.set_file_kind(FILE_KIND_FOLDER);
101 sync_root_details.set_change_id(1); 101 sync_root_details.set_change_id(1);
102 102
103 FileMetadata sync_root_metadata; 103 FileMetadata sync_root_metadata;
104 sync_root_metadata.set_file_id(sync_root_folder_id_); 104 sync_root_metadata.set_file_id(sync_root_folder_id_);
105 *sync_root_metadata.mutable_details() = sync_root_details; 105 *sync_root_metadata.mutable_details() = sync_root_details;
106 106
107 FileTracker sync_root_tracker; 107 FileTracker sync_root_tracker;
108 sync_root_tracker.set_tracker_id(service_metadata.sync_root_tracker_id()); 108 sync_root_tracker.set_tracker_id(service_metadata.sync_root_tracker_id());
109 sync_root_tracker.set_parent_tracker_id(0); 109 sync_root_tracker.set_parent_tracker_id(0);
110 sync_root_tracker.set_file_id(sync_root_metadata.file_id()); 110 sync_root_tracker.set_file_id(sync_root_metadata.file_id());
111 sync_root_tracker.set_tracker_kind(TRACKER_KIND_REGULAR); 111 sync_root_tracker.set_tracker_kind(TRACKER_KIND_REGULAR);
112 *sync_root_tracker.mutable_synced_details() = sync_root_details; 112 *sync_root_tracker.mutable_synced_details() = sync_root_details;
113 sync_root_tracker.set_active(true); 113 sync_root_tracker.set_active(true);
114 114
115 leveldb::WriteBatch batch; 115 db->Put(kDatabaseVersionKey,
116 batch.Put(kDatabaseVersionKey, 116 base::Int64ToString(kCurrentDatabaseVersion));
117 base::Int64ToString(kCurrentDatabaseVersion)); 117 PutServiceMetadataToDB(service_metadata, db);
118 PutServiceMetadataToBatch(service_metadata, &batch); 118 PutFileMetadataToDB(sync_root_metadata, db);
119 PutFileMetadataToBatch(sync_root_metadata, &batch); 119 PutFileTrackerToDB(sync_root_tracker, db);
120 PutFileTrackerToBatch(sync_root_tracker, &batch); 120 EXPECT_TRUE(db->Commit().ok());
121 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok());
122 } 121 }
123 122
124 void CreateMetadataDatabase(scoped_ptr<leveldb::DB> db) { 123 void CreateMetadataDatabase(scoped_ptr<LevelDBWrapper> db) {
125 ASSERT_TRUE(db); 124 ASSERT_TRUE(db);
126 ASSERT_FALSE(context_->GetMetadataDatabase()); 125 ASSERT_FALSE(context_->GetMetadataDatabase());
127 scoped_ptr<MetadataDatabase> metadata_db; 126 scoped_ptr<MetadataDatabase> metadata_db;
128 ASSERT_EQ(SYNC_STATUS_OK, 127 ASSERT_EQ(SYNC_STATUS_OK,
129 MetadataDatabase::CreateForTesting( 128 MetadataDatabase::CreateForTesting(
130 db.Pass(), &metadata_db)); 129 db.Pass(), &metadata_db));
131 context_->SetMetadataDatabase(metadata_db.Pass()); 130 context_->SetMetadataDatabase(metadata_db.Pass());
132 } 131 }
133 132
134 SyncStatusCode RunRegisterAppTask(const std::string& app_id) { 133 SyncStatusCode RunRegisterAppTask(const std::string& app_id) {
135 RegisterAppTask task(context_.get(), app_id); 134 RegisterAppTask task(context_.get(), app_id);
136 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 135 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
137 task.RunExclusive(CreateResultReceiver(&status)); 136 task.RunExclusive(CreateResultReceiver(&status));
138 base::RunLoop().RunUntilIdle(); 137 base::RunLoop().RunUntilIdle();
139 return status; 138 return status;
140 } 139 }
141 140
142 void SetUpRegisteredAppRoot( 141 void SetUpRegisteredAppRoot(
143 const std::string& app_id, 142 const std::string& app_id,
144 leveldb::DB* db) { 143 LevelDBWrapper* db) {
145 FileDetails details; 144 FileDetails details;
146 details.set_title(app_id); 145 details.set_title(app_id);
147 details.set_file_kind(FILE_KIND_FOLDER); 146 details.set_file_kind(FILE_KIND_FOLDER);
148 details.add_parent_folder_ids(sync_root_folder_id_); 147 details.add_parent_folder_ids(sync_root_folder_id_);
149 148
150 FileMetadata metadata; 149 FileMetadata metadata;
151 metadata.set_file_id(GenerateFileID()); 150 metadata.set_file_id(GenerateFileID());
152 *metadata.mutable_details() = details; 151 *metadata.mutable_details() = details;
153 152
154 FileTracker tracker; 153 FileTracker tracker;
155 tracker.set_parent_tracker_id(kSyncRootTrackerID); 154 tracker.set_parent_tracker_id(kSyncRootTrackerID);
156 tracker.set_tracker_id(next_tracker_id_++); 155 tracker.set_tracker_id(next_tracker_id_++);
157 tracker.set_file_id(metadata.file_id()); 156 tracker.set_file_id(metadata.file_id());
158 tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); 157 tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT);
159 tracker.set_app_id(app_id); 158 tracker.set_app_id(app_id);
160 *tracker.mutable_synced_details() = details; 159 *tracker.mutable_synced_details() = details;
161 tracker.set_active(true); 160 tracker.set_active(true);
162 161
163 leveldb::WriteBatch batch; 162 PutFileMetadataToDB(metadata, db);
164 PutFileMetadataToBatch(metadata, &batch); 163 PutFileTrackerToDB(tracker, db);
165 PutFileTrackerToBatch(tracker, &batch); 164 EXPECT_TRUE(db->Commit().ok());
166 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok());
167 } 165 }
168 166
169 void SetUpUnregisteredAppRoot(const std::string& app_id, 167 void SetUpUnregisteredAppRoot(const std::string& app_id,
170 leveldb::DB* db) { 168 LevelDBWrapper* db) {
171 FileDetails details; 169 FileDetails details;
172 details.set_title(app_id); 170 details.set_title(app_id);
173 details.set_file_kind(FILE_KIND_FOLDER); 171 details.set_file_kind(FILE_KIND_FOLDER);
174 details.add_parent_folder_ids(sync_root_folder_id_); 172 details.add_parent_folder_ids(sync_root_folder_id_);
175 173
176 FileMetadata metadata; 174 FileMetadata metadata;
177 metadata.set_file_id(GenerateFileID()); 175 metadata.set_file_id(GenerateFileID());
178 *metadata.mutable_details() = details; 176 *metadata.mutable_details() = details;
179 177
180 FileTracker tracker; 178 FileTracker tracker;
181 tracker.set_parent_tracker_id(kSyncRootTrackerID); 179 tracker.set_parent_tracker_id(kSyncRootTrackerID);
182 tracker.set_tracker_id(next_tracker_id_++); 180 tracker.set_tracker_id(next_tracker_id_++);
183 tracker.set_file_id(metadata.file_id()); 181 tracker.set_file_id(metadata.file_id());
184 tracker.set_tracker_kind(TRACKER_KIND_REGULAR); 182 tracker.set_tracker_kind(TRACKER_KIND_REGULAR);
185 *tracker.mutable_synced_details() = details; 183 *tracker.mutable_synced_details() = details;
186 tracker.set_active(false); 184 tracker.set_active(false);
187 185
188 leveldb::WriteBatch batch; 186 PutFileMetadataToDB(metadata, db);
189 PutFileMetadataToBatch(metadata, &batch); 187 PutFileTrackerToDB(tracker, db);
190 PutFileTrackerToBatch(tracker, &batch); 188 EXPECT_TRUE(db->Commit().ok());
191 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok());
192 } 189 }
193 190
194 size_t CountRegisteredAppRoot() { 191 size_t CountRegisteredAppRoot() {
195 std::vector<std::string> app_ids; 192 std::vector<std::string> app_ids;
196 context_->GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids); 193 context_->GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids);
197 return app_ids.size(); 194 return app_ids.size();
198 } 195 }
199 196
200 bool IsAppRegistered(const std::string& app_id) { 197 bool IsAppRegistered(const std::string& app_id) {
201 TrackerIDSet trackers; 198 TrackerIDSet trackers;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 content::TestBrowserThreadBundle browser_threads_; 244 content::TestBrowserThreadBundle browser_threads_;
248 base::ScopedTempDir database_dir_; 245 base::ScopedTempDir database_dir_;
249 246
250 scoped_ptr<SyncEngineContext> context_; 247 scoped_ptr<SyncEngineContext> context_;
251 scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_; 248 scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_;
252 249
253 DISALLOW_COPY_AND_ASSIGN(RegisterAppTaskTest); 250 DISALLOW_COPY_AND_ASSIGN(RegisterAppTaskTest);
254 }; 251 };
255 252
256 TEST_F(RegisterAppTaskTest, AlreadyRegistered) { 253 TEST_F(RegisterAppTaskTest, AlreadyRegistered) {
257 scoped_ptr<leveldb::DB> db(OpenLevelDB()); 254 scoped_ptr<LevelDBWrapper> db = OpenLevelDB();
258 ASSERT_TRUE(db); 255 ASSERT_TRUE(db);
259 SetUpInitialData(db.get()); 256 SetUpInitialData(db.get());
260 257
261 const std::string kAppID = "app_id"; 258 const std::string kAppID = "app_id";
262 SetUpRegisteredAppRoot(kAppID, db.get()); 259 SetUpRegisteredAppRoot(kAppID, db.get());
263 260
264 CreateMetadataDatabase(db.Pass()); 261 CreateMetadataDatabase(db.Pass());
265 EXPECT_EQ(SYNC_STATUS_OK, RunRegisterAppTask(kAppID)); 262 EXPECT_EQ(SYNC_STATUS_OK, RunRegisterAppTask(kAppID));
266 263
267 EXPECT_EQ(1u, CountRegisteredAppRoot()); 264 EXPECT_EQ(1u, CountRegisteredAppRoot());
268 EXPECT_TRUE(IsAppRegistered(kAppID)); 265 EXPECT_TRUE(IsAppRegistered(kAppID));
269 } 266 }
270 267
271 TEST_F(RegisterAppTaskTest, CreateAppFolder) { 268 TEST_F(RegisterAppTaskTest, CreateAppFolder) {
272 scoped_ptr<leveldb::DB> db(OpenLevelDB()); 269 scoped_ptr<LevelDBWrapper> db = OpenLevelDB();
273 ASSERT_TRUE(db); 270 ASSERT_TRUE(db);
274 SetUpInitialData(db.get()); 271 SetUpInitialData(db.get());
275 272
276 const std::string kAppID = "app_id"; 273 const std::string kAppID = "app_id";
277 CreateMetadataDatabase(db.Pass()); 274 CreateMetadataDatabase(db.Pass());
278 RunRegisterAppTask(kAppID); 275 RunRegisterAppTask(kAppID);
279 276
280 EXPECT_EQ(1u, CountRegisteredAppRoot()); 277 EXPECT_EQ(1u, CountRegisteredAppRoot());
281 EXPECT_TRUE(IsAppRegistered(kAppID)); 278 EXPECT_TRUE(IsAppRegistered(kAppID));
282 279
283 EXPECT_EQ(1u, CountRemoteFileInSyncRoot()); 280 EXPECT_EQ(1u, CountRemoteFileInSyncRoot());
284 EXPECT_TRUE(HasRemoteAppRoot(kAppID)); 281 EXPECT_TRUE(HasRemoteAppRoot(kAppID));
285 } 282 }
286 283
287 TEST_F(RegisterAppTaskTest, RegisterExistingFolder) { 284 TEST_F(RegisterAppTaskTest, RegisterExistingFolder) {
288 scoped_ptr<leveldb::DB> db(OpenLevelDB()); 285 scoped_ptr<LevelDBWrapper> db = OpenLevelDB();
289 ASSERT_TRUE(db); 286 ASSERT_TRUE(db);
290 SetUpInitialData(db.get()); 287 SetUpInitialData(db.get());
291 288
292 const std::string kAppID = "app_id"; 289 const std::string kAppID = "app_id";
293 SetUpUnregisteredAppRoot(kAppID, db.get()); 290 SetUpUnregisteredAppRoot(kAppID, db.get());
294 291
295 CreateMetadataDatabase(db.Pass()); 292 CreateMetadataDatabase(db.Pass());
296 RunRegisterAppTask(kAppID); 293 RunRegisterAppTask(kAppID);
297 294
298 EXPECT_EQ(1u, CountRegisteredAppRoot()); 295 EXPECT_EQ(1u, CountRegisteredAppRoot());
299 EXPECT_TRUE(IsAppRegistered(kAppID)); 296 EXPECT_TRUE(IsAppRegistered(kAppID));
300 } 297 }
301 298
302 TEST_F(RegisterAppTaskTest, RegisterExistingFolder_MultipleCandidate) { 299 TEST_F(RegisterAppTaskTest, RegisterExistingFolder_MultipleCandidate) {
303 scoped_ptr<leveldb::DB> db(OpenLevelDB()); 300 scoped_ptr<LevelDBWrapper> db = OpenLevelDB();
304 ASSERT_TRUE(db); 301 ASSERT_TRUE(db);
305 SetUpInitialData(db.get()); 302 SetUpInitialData(db.get());
306 303
307 const std::string kAppID = "app_id"; 304 const std::string kAppID = "app_id";
308 SetUpUnregisteredAppRoot(kAppID, db.get()); 305 SetUpUnregisteredAppRoot(kAppID, db.get());
309 SetUpUnregisteredAppRoot(kAppID, db.get()); 306 SetUpUnregisteredAppRoot(kAppID, db.get());
310 307
311 CreateMetadataDatabase(db.Pass()); 308 CreateMetadataDatabase(db.Pass());
312 RunRegisterAppTask(kAppID); 309 RunRegisterAppTask(kAppID);
313 310
314 EXPECT_EQ(1u, CountRegisteredAppRoot()); 311 EXPECT_EQ(1u, CountRegisteredAppRoot());
315 EXPECT_TRUE(IsAppRegistered(kAppID)); 312 EXPECT_TRUE(IsAppRegistered(kAppID));
316 } 313 }
317 314
318 } // namespace drive_backend 315 } // namespace drive_backend
319 } // namespace sync_file_system 316 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698