OLD | NEW |
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 <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
11 #include "base/macros.h" | 12 #include "base/macros.h" |
12 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
13 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
14 #include "base/thread_task_runner_handle.h" | 15 #include "base/thread_task_runner_handle.h" |
15 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 16 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
16 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" | 17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" |
17 #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" |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 options.env = in_memory_env_.get(); | 266 options.env = in_memory_env_.get(); |
266 leveldb::Status status = | 267 leveldb::Status status = |
267 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); | 268 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); |
268 EXPECT_TRUE(status.ok()); | 269 EXPECT_TRUE(status.ok()); |
269 | 270 |
270 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db))); | 271 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db))); |
271 | 272 |
272 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); | 273 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); |
273 SetUpServiceMetadata(wrapper.get()); | 274 SetUpServiceMetadata(wrapper.get()); |
274 | 275 |
275 return wrapper.Pass(); | 276 return wrapper; |
276 } | 277 } |
277 | 278 |
278 void SetUpServiceMetadata(LevelDBWrapper* db) { | 279 void SetUpServiceMetadata(LevelDBWrapper* db) { |
279 ServiceMetadata service_metadata; | 280 ServiceMetadata service_metadata; |
280 service_metadata.set_largest_change_id(kInitialChangeID); | 281 service_metadata.set_largest_change_id(kInitialChangeID); |
281 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); | 282 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); |
282 service_metadata.set_next_tracker_id(next_tracker_id_); | 283 service_metadata.set_next_tracker_id(next_tracker_id_); |
283 PutServiceMetadataToDB(service_metadata, db); | 284 PutServiceMetadataToDB(service_metadata, db); |
284 EXPECT_TRUE(db->Commit().ok()); | 285 EXPECT_TRUE(db->Commit().ok()); |
285 } | 286 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 } else { | 399 } else { |
399 file_resource->set_mime_type("application/vnd.google-apps.document"); | 400 file_resource->set_mime_type("application/vnd.google-apps.document"); |
400 } | 401 } |
401 file_resource->set_md5_checksum(file.details().md5()); | 402 file_resource->set_md5_checksum(file.details().md5()); |
402 file_resource->set_etag(file.details().etag()); | 403 file_resource->set_etag(file.details().etag()); |
403 file_resource->set_created_date(base::Time::FromInternalValue( | 404 file_resource->set_created_date(base::Time::FromInternalValue( |
404 file.details().creation_time())); | 405 file.details().creation_time())); |
405 file_resource->set_modified_date(base::Time::FromInternalValue( | 406 file_resource->set_modified_date(base::Time::FromInternalValue( |
406 file.details().modification_time())); | 407 file.details().modification_time())); |
407 | 408 |
408 return file_resource.Pass(); | 409 return file_resource; |
409 } | 410 } |
410 | 411 |
411 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( | 412 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( |
412 const FileMetadata& file) { | 413 const FileMetadata& file) { |
413 scoped_ptr<google_apis::ChangeResource> change( | 414 scoped_ptr<google_apis::ChangeResource> change( |
414 new google_apis::ChangeResource); | 415 new google_apis::ChangeResource); |
415 change->set_change_id(file.details().change_id()); | 416 change->set_change_id(file.details().change_id()); |
416 change->set_file_id(file.file_id()); | 417 change->set_file_id(file.file_id()); |
417 change->set_deleted(file.details().missing()); | 418 change->set_deleted(file.details().missing()); |
418 if (change->is_deleted()) | 419 if (change->is_deleted()) |
419 return change.Pass(); | 420 return change; |
420 | 421 |
421 change->set_file(CreateFileResourceFromMetadata(file)); | 422 change->set_file(CreateFileResourceFromMetadata(file)); |
422 return change.Pass(); | 423 return change; |
423 } | 424 } |
424 | 425 |
425 void ApplyRenameChangeToMetadata(const std::string& new_title, | 426 void ApplyRenameChangeToMetadata(const std::string& new_title, |
426 FileMetadata* file) { | 427 FileMetadata* file) { |
427 FileDetails* details = file->mutable_details(); | 428 FileDetails* details = file->mutable_details(); |
428 details->set_title(new_title); | 429 details->set_title(new_title); |
429 details->set_change_id(++current_change_id_); | 430 details->set_change_id(++current_change_id_); |
430 } | 431 } |
431 | 432 |
432 void ApplyReorganizeChangeToMetadata(const std::string& new_parent, | 433 void ApplyReorganizeChangeToMetadata(const std::string& new_parent, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 itr1->Next(), itr2->Next()) { | 510 itr1->Next(), itr2->Next()) { |
510 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); | 511 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); |
511 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); | 512 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); |
512 } | 513 } |
513 EXPECT_TRUE(!itr1->Valid()); | 514 EXPECT_TRUE(!itr1->Valid()); |
514 EXPECT_TRUE(!itr2->Valid()); | 515 EXPECT_TRUE(!itr2->Valid()); |
515 } | 516 } |
516 | 517 |
517 void VerifyReloadConsistency() { | 518 void VerifyReloadConsistency() { |
518 scoped_ptr<MetadataDatabase> metadata_database_2; | 519 scoped_ptr<MetadataDatabase> metadata_database_2; |
519 ASSERT_EQ(SYNC_STATUS_OK, | 520 ASSERT_EQ(SYNC_STATUS_OK, MetadataDatabase::CreateForTesting( |
520 MetadataDatabase::CreateForTesting( | 521 std::move(metadata_database_->db_), |
521 metadata_database_->db_.Pass(), | 522 metadata_database_->enable_on_disk_index_, |
522 metadata_database_->enable_on_disk_index_, | 523 &metadata_database_2)); |
523 &metadata_database_2)); | 524 metadata_database_->db_ = std::move(metadata_database_2->db_); |
524 metadata_database_->db_ = metadata_database_2->db_.Pass(); | |
525 | 525 |
526 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); | 526 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); |
527 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); | 527 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); |
528 if (GetParam()) { | 528 if (GetParam()) { |
529 VerifyReloadConsistencyForOnDisk( | 529 VerifyReloadConsistencyForOnDisk( |
530 static_cast<MetadataDatabaseIndexOnDisk*>(index1), | 530 static_cast<MetadataDatabaseIndexOnDisk*>(index1), |
531 static_cast<MetadataDatabaseIndexOnDisk*>(index2)); | 531 static_cast<MetadataDatabaseIndexOnDisk*>(index2)); |
532 } else { | 532 } else { |
533 VerifyReloadConsistencyForOnMemory( | 533 VerifyReloadConsistencyForOnMemory( |
534 static_cast<MetadataDatabaseIndex*>(index1), | 534 static_cast<MetadataDatabaseIndex*>(index1), |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 SyncStatusCode EnableApp(const std::string& app_id) { | 567 SyncStatusCode EnableApp(const std::string& app_id) { |
568 return metadata_database_->EnableApp(app_id); | 568 return metadata_database_->EnableApp(app_id); |
569 } | 569 } |
570 | 570 |
571 SyncStatusCode UnregisterApp(const std::string& app_id) { | 571 SyncStatusCode UnregisterApp(const std::string& app_id) { |
572 return metadata_database_->UnregisterApp(app_id); | 572 return metadata_database_->UnregisterApp(app_id); |
573 } | 573 } |
574 | 574 |
575 SyncStatusCode UpdateByChangeList( | 575 SyncStatusCode UpdateByChangeList( |
576 ScopedVector<google_apis::ChangeResource> changes) { | 576 ScopedVector<google_apis::ChangeResource> changes) { |
577 return metadata_database_->UpdateByChangeList( | 577 return metadata_database_->UpdateByChangeList(current_change_id_, |
578 current_change_id_, changes.Pass()); | 578 std::move(changes)); |
579 } | 579 } |
580 | 580 |
581 SyncStatusCode PopulateFolder(const std::string& folder_id, | 581 SyncStatusCode PopulateFolder(const std::string& folder_id, |
582 const FileIDList& listed_children) { | 582 const FileIDList& listed_children) { |
583 return metadata_database_->PopulateFolderByChildList( | 583 return metadata_database_->PopulateFolderByChildList( |
584 folder_id, listed_children); | 584 folder_id, listed_children); |
585 } | 585 } |
586 | 586 |
587 SyncStatusCode UpdateTracker(const FileTracker& tracker) { | 587 SyncStatusCode UpdateTracker(const FileTracker& tracker) { |
588 return metadata_database_->UpdateTracker( | 588 return metadata_database_->UpdateTracker( |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 PushToChangeList( | 906 PushToChangeList( |
907 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); | 907 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); |
908 PushToChangeList( | 908 PushToChangeList( |
909 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); | 909 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); |
910 PushToChangeList( | 910 PushToChangeList( |
911 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); | 911 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); |
912 PushToChangeList( | 912 PushToChangeList( |
913 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); | 913 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); |
914 PushToChangeList( | 914 PushToChangeList( |
915 CreateChangeResourceFromMetadata(new_file.metadata), &changes); | 915 CreateChangeResourceFromMetadata(new_file.metadata), &changes); |
916 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); | 916 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(std::move(changes))); |
917 | 917 |
918 renamed_file.tracker.set_dirty(true); | 918 renamed_file.tracker.set_dirty(true); |
919 reorganized_file.tracker.set_dirty(true); | 919 reorganized_file.tracker.set_dirty(true); |
920 updated_file.tracker.set_dirty(true); | 920 updated_file.tracker.set_dirty(true); |
921 noop_file.tracker.set_dirty(true); | 921 noop_file.tracker.set_dirty(true); |
922 new_file.tracker.mutable_synced_details()->set_missing(true); | 922 new_file.tracker.mutable_synced_details()->set_missing(true); |
923 new_file.tracker.mutable_synced_details()->clear_md5(); | 923 new_file.tracker.mutable_synced_details()->clear_md5(); |
924 new_file.tracker.set_active(false); | 924 new_file.tracker.set_active(false); |
925 new_file.tracker.set_dirty(true); | 925 new_file.tracker.set_dirty(true); |
926 ResetTrackerID(&new_file.tracker); | 926 ResetTrackerID(&new_file.tracker); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1152 EXPECT_TRUE(file->HasKey("details")); | 1152 EXPECT_TRUE(file->HasKey("details")); |
1153 | 1153 |
1154 ASSERT_TRUE(files->GetDictionary(1, &file)); | 1154 ASSERT_TRUE(files->GetDictionary(1, &file)); |
1155 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); | 1155 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); |
1156 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); | 1156 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); |
1157 EXPECT_TRUE(file->HasKey("details")); | 1157 EXPECT_TRUE(file->HasKey("details")); |
1158 } | 1158 } |
1159 | 1159 |
1160 } // namespace drive_backend | 1160 } // namespace drive_backend |
1161 } // namespace sync_file_system | 1161 } // namespace sync_file_system |
OLD | NEW |