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

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

Powered by Google App Engine
This is Rietveld 408576698