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

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

Issue 428063002: [SyncFS] Replace leveldb classes with LevelDBWrapper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on cl/437943002 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/metadata_database.h" 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h" 12 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h"
13 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util. h" 13 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util. h"
14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" 14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
15 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
15 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index. h" 17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index. h"
17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_ interface.h" 18 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_ interface.h"
18 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" 19 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
19 #include "google_apis/drive/drive_api_parser.h" 20 #include "google_apis/drive/drive_api_parser.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 22 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
22 #include "third_party/leveldatabase/src/include/leveldb/db.h" 23 #include "third_party/leveldatabase/src/include/leveldb/db.h"
23 #include "third_party/leveldatabase/src/include/leveldb/env.h" 24 #include "third_party/leveldatabase/src/include/leveldb/env.h"
24 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 25 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 return status; 210 return status;
210 } 211 }
211 212
212 void DropDatabase() { 213 void DropDatabase() {
213 metadata_database_.reset(); 214 metadata_database_.reset();
214 message_loop_.RunUntilIdle(); 215 message_loop_.RunUntilIdle();
215 } 216 }
216 217
217 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, 218 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files,
218 int size) { 219 int size) {
219 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); 220 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB();
220 ASSERT_TRUE(db); 221 ASSERT_TRUE(db);
221 222
222 for (int i = 0; i < size; ++i) { 223 for (int i = 0; i < size; ++i) {
223 const TrackedFile* file = tracked_files[i]; 224 const TrackedFile* file = tracked_files[i];
224 if (file->should_be_absent) 225 if (file->should_be_absent)
225 continue; 226 continue;
226 if (!file->tracker_only) 227 if (!file->tracker_only)
227 EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok()); 228 EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok());
228 EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok()); 229 EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok());
229 } 230 }
(...skipping 17 matching lines...) Expand all
247 file.tracker.tracker_id(), NULL)); 248 file.tracker.tracker_id(), NULL));
248 } 249 }
249 250
250 void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) { 251 void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) {
251 for (int i = 0; i < size; ++i) 252 for (int i = 0; i < size; ++i)
252 VerifyTrackedFile(*tracked_files[i]); 253 VerifyTrackedFile(*tracked_files[i]);
253 } 254 }
254 255
255 MetadataDatabase* metadata_database() { return metadata_database_.get(); } 256 MetadataDatabase* metadata_database() { return metadata_database_.get(); }
256 257
257 scoped_ptr<leveldb::DB> InitializeLevelDB() { 258 scoped_ptr<LevelDBWrapper> InitializeLevelDB() {
258 leveldb::DB* db = NULL; 259 leveldb::DB* db = NULL;
259 leveldb::Options options; 260 leveldb::Options options;
260 options.create_if_missing = true; 261 options.create_if_missing = true;
261 options.max_open_files = 0; // Use minimum. 262 options.max_open_files = 0; // Use minimum.
262 options.env = in_memory_env_.get(); 263 options.env = in_memory_env_.get();
263 leveldb::Status status = 264 leveldb::Status status =
264 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); 265 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db);
265 EXPECT_TRUE(status.ok()); 266 EXPECT_TRUE(status.ok());
266 267
267 db->Put(leveldb::WriteOptions(), 268 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db)));
268 kDatabaseVersionKey,
269 base::Int64ToString(3));
270 SetUpServiceMetadata(db);
271 269
272 return make_scoped_ptr(db); 270 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3));
271 SetUpServiceMetadata(wrapper.get());
272
273 return wrapper.Pass();
273 } 274 }
274 275
275 void SetUpServiceMetadata(leveldb::DB* db) { 276 void SetUpServiceMetadata(LevelDBWrapper* db) {
276 ServiceMetadata service_metadata; 277 ServiceMetadata service_metadata;
277 service_metadata.set_largest_change_id(kInitialChangeID); 278 service_metadata.set_largest_change_id(kInitialChangeID);
278 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); 279 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID);
279 service_metadata.set_next_tracker_id(next_tracker_id_); 280 service_metadata.set_next_tracker_id(next_tracker_id_);
280 leveldb::WriteBatch batch; 281 PutServiceMetadataToDB(service_metadata, db);
281 PutServiceMetadataToBatch(service_metadata, &batch); 282 EXPECT_TRUE(db->Commit().ok());
282 EXPECT_TRUE(db->Write(leveldb::WriteOptions(), &batch).ok());
283 } 283 }
284 284
285 FileMetadata CreateSyncRootMetadata() { 285 FileMetadata CreateSyncRootMetadata() {
286 FileMetadata sync_root; 286 FileMetadata sync_root;
287 sync_root.set_file_id(kSyncRootFolderID); 287 sync_root.set_file_id(kSyncRootFolderID);
288 FileDetails* details = sync_root.mutable_details(); 288 FileDetails* details = sync_root.mutable_details();
289 details->set_title(kSyncRootFolderTitle); 289 details->set_title(kSyncRootFolderTitle);
290 details->set_file_kind(FILE_KIND_FOLDER); 290 details->set_file_kind(FILE_KIND_FOLDER);
291 details->set_change_id(current_change_id_); 291 details->set_change_id(current_change_id_);
292 return sync_root; 292 return sync_root;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 444
445 void ApplyNoopChangeToMetadata(FileMetadata* file) { 445 void ApplyNoopChangeToMetadata(FileMetadata* file) {
446 file->mutable_details()->set_change_id(++current_change_id_); 446 file->mutable_details()->set_change_id(++current_change_id_);
447 } 447 }
448 448
449 void PushToChangeList(scoped_ptr<google_apis::ChangeResource> change, 449 void PushToChangeList(scoped_ptr<google_apis::ChangeResource> change,
450 ScopedVector<google_apis::ChangeResource>* changes) { 450 ScopedVector<google_apis::ChangeResource>* changes) {
451 changes->push_back(change.release()); 451 changes->push_back(change.release());
452 } 452 }
453 453
454 leveldb::Status PutFileToDB(leveldb::DB* db, const FileMetadata& file) { 454 leveldb::Status PutFileToDB(LevelDBWrapper* db, const FileMetadata& file) {
455 leveldb::WriteBatch batch; 455 PutFileMetadataToDB(file, db);
456 PutFileMetadataToBatch(file, &batch); 456 return db->Commit();
457 return db->Write(leveldb::WriteOptions(), &batch);
458 } 457 }
459 458
460 leveldb::Status PutTrackerToDB(leveldb::DB* db, 459 leveldb::Status PutTrackerToDB(LevelDBWrapper* db,
461 const FileTracker& tracker) { 460 const FileTracker& tracker) {
462 leveldb::WriteBatch batch; 461 PutFileTrackerToDB(tracker, db);
463 PutFileTrackerToBatch(tracker, &batch); 462 return db->Commit();
464 return db->Write(leveldb::WriteOptions(), &batch);
465 } 463 }
466 464
467 void VerifyReloadConsistency() { 465 void VerifyReloadConsistency() {
468 scoped_ptr<MetadataDatabase> metadata_database_2; 466 scoped_ptr<MetadataDatabase> metadata_database_2;
469 ASSERT_EQ(SYNC_STATUS_OK, 467 ASSERT_EQ(SYNC_STATUS_OK,
470 MetadataDatabase::CreateForTesting( 468 MetadataDatabase::CreateForTesting(
471 metadata_database_->db_.Pass(), 469 metadata_database_->db_.Pass(),
472 &metadata_database_2)); 470 &metadata_database_2));
473 metadata_database_->db_ = metadata_database_2->db_.Pass(); 471 metadata_database_->db_ = metadata_database_2->db_.Pass();
474 472
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 737
740 FileMetadata file(CreateFileMetadata(folder, "file")); 738 FileMetadata file(CreateFileMetadata(folder, "file"));
741 FileTracker file_tracker(CreateTracker(folder_tracker, file)); 739 FileTracker file_tracker(CreateTracker(folder_tracker, file));
742 740
743 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder")); 741 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder"));
744 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, 742 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker,
745 inactive_folder)); 743 inactive_folder));
746 inactive_folder_tracker.set_active(false); 744 inactive_folder_tracker.set_active(false);
747 745
748 { 746 {
749 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); 747 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB();
750 ASSERT_TRUE(db); 748 ASSERT_TRUE(db);
751 749
752 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); 750 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
753 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); 751 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok());
754 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); 752 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
755 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); 753 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok());
756 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); 754 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
757 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); 755 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok());
758 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); 756 EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
759 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); 757 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2)); 790 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2));
793 FileMetadata file(CreateFileMetadata(folder2, "file")); 791 FileMetadata file(CreateFileMetadata(folder2, "file"));
794 FileTracker file_tracker(CreateTracker(folder_tracker2, file)); 792 FileTracker file_tracker(CreateTracker(folder_tracker2, file));
795 793
796 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1")); 794 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1"));
797 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, 795 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker,
798 inactive_folder)); 796 inactive_folder));
799 inactive_folder_tracker.set_active(false); 797 inactive_folder_tracker.set_active(false);
800 798
801 { 799 {
802 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); 800 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB();
803 ASSERT_TRUE(db); 801 ASSERT_TRUE(db);
804 802
805 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); 803 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
806 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); 804 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok());
807 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); 805 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
808 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); 806 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok());
809 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok()); 807 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok());
810 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok()); 808 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok());
811 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok()); 809 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok());
812 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok()); 810 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok());
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 EXPECT_TRUE(file->HasKey("details")); 1158 EXPECT_TRUE(file->HasKey("details"));
1161 1159
1162 ASSERT_TRUE(files->GetDictionary(1, &file)); 1160 ASSERT_TRUE(files->GetDictionary(1, &file));
1163 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); 1161 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0");
1164 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); 1162 EXPECT_TRUE(file->GetString("type", &str) && str == "file");
1165 EXPECT_TRUE(file->HasKey("details")); 1163 EXPECT_TRUE(file->HasKey("details"));
1166 } 1164 }
1167 1165
1168 } // namespace drive_backend 1166 } // namespace drive_backend
1169 } // namespace sync_file_system 1167 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698