| 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 |
| 8 #include <utility> | 9 #include <utility> |
| 9 | 10 |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 11 #include "base/files/scoped_temp_dir.h" | 12 #include "base/files/scoped_temp_dir.h" |
| 12 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/memory/ptr_util.h" |
| 13 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
| 14 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 16 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 18 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
| 17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" | 19 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" |
| 18 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 20 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
| 19 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" | 21 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" |
| 20 #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" |
| 21 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.
h" | 23 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.
h" |
| 22 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_
interface.h" | 24 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_
interface.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 | 103 |
| 102 template <typename Key, typename Value> | 104 template <typename Key, typename Value> |
| 103 void ExpectEquivalent(const base::hash_map<Key, Value>& left, | 105 void ExpectEquivalent(const base::hash_map<Key, Value>& left, |
| 104 const base::hash_map<Key, Value>& right) { | 106 const base::hash_map<Key, Value>& right) { |
| 105 ExpectEquivalentMaps(std::map<Key, Value>(left.begin(), left.end()), | 107 ExpectEquivalentMaps(std::map<Key, Value>(left.begin(), left.end()), |
| 106 std::map<Key, Value>(right.begin(), right.end())); | 108 std::map<Key, Value>(right.begin(), right.end())); |
| 107 } | 109 } |
| 108 | 110 |
| 109 template <typename Key, typename Value> | 111 template <typename Key, typename Value> |
| 110 void ExpectEquivalent( | 112 void ExpectEquivalent( |
| 111 const base::ScopedPtrHashMap<Key, scoped_ptr<Value>>& left, | 113 const base::ScopedPtrHashMap<Key, std::unique_ptr<Value>>& left, |
| 112 const base::ScopedPtrHashMap<Key, scoped_ptr<Value>>& right) { | 114 const base::ScopedPtrHashMap<Key, std::unique_ptr<Value>>& right) { |
| 113 ExpectEquivalentMaps(std::map<Key, Value*>(left.begin(), left.end()), | 115 ExpectEquivalentMaps(std::map<Key, Value*>(left.begin(), left.end()), |
| 114 std::map<Key, Value*>(right.begin(), right.end())); | 116 std::map<Key, Value*>(right.begin(), right.end())); |
| 115 } | 117 } |
| 116 | 118 |
| 117 template <typename Container> | 119 template <typename Container> |
| 118 void ExpectEquivalentSets(const Container& left, const Container& right); | 120 void ExpectEquivalentSets(const Container& left, const Container& right); |
| 119 | 121 |
| 120 template <typename Value, typename Comparator> | 122 template <typename Value, typename Comparator> |
| 121 void ExpectEquivalent(const std::set<Value, Comparator>& left, | 123 void ExpectEquivalent(const std::set<Value, Comparator>& left, |
| 122 const std::set<Value, Comparator>& right) { | 124 const std::set<Value, Comparator>& right) { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 return status; | 215 return status; |
| 214 } | 216 } |
| 215 | 217 |
| 216 void DropDatabase() { | 218 void DropDatabase() { |
| 217 metadata_database_.reset(); | 219 metadata_database_.reset(); |
| 218 message_loop_.RunUntilIdle(); | 220 message_loop_.RunUntilIdle(); |
| 219 } | 221 } |
| 220 | 222 |
| 221 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, | 223 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, |
| 222 int size) { | 224 int size) { |
| 223 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 225 std::unique_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 224 ASSERT_TRUE(db); | 226 ASSERT_TRUE(db); |
| 225 | 227 |
| 226 for (int i = 0; i < size; ++i) { | 228 for (int i = 0; i < size; ++i) { |
| 227 const TrackedFile* file = tracked_files[i]; | 229 const TrackedFile* file = tracked_files[i]; |
| 228 if (file->should_be_absent) | 230 if (file->should_be_absent) |
| 229 continue; | 231 continue; |
| 230 if (!file->tracker_only) | 232 if (!file->tracker_only) |
| 231 EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok()); | 233 EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok()); |
| 232 EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok()); | 234 EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok()); |
| 233 } | 235 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 251 file.tracker.tracker_id(), nullptr)); | 253 file.tracker.tracker_id(), nullptr)); |
| 252 } | 254 } |
| 253 | 255 |
| 254 void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) { | 256 void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) { |
| 255 for (int i = 0; i < size; ++i) | 257 for (int i = 0; i < size; ++i) |
| 256 VerifyTrackedFile(*tracked_files[i]); | 258 VerifyTrackedFile(*tracked_files[i]); |
| 257 } | 259 } |
| 258 | 260 |
| 259 MetadataDatabase* metadata_database() { return metadata_database_.get(); } | 261 MetadataDatabase* metadata_database() { return metadata_database_.get(); } |
| 260 | 262 |
| 261 scoped_ptr<LevelDBWrapper> InitializeLevelDB() { | 263 std::unique_ptr<LevelDBWrapper> InitializeLevelDB() { |
| 262 leveldb::DB* db = nullptr; | 264 leveldb::DB* db = nullptr; |
| 263 leveldb::Options options; | 265 leveldb::Options options; |
| 264 options.create_if_missing = true; | 266 options.create_if_missing = true; |
| 265 options.max_open_files = 0; // Use minimum. | 267 options.max_open_files = 0; // Use minimum. |
| 266 options.env = in_memory_env_.get(); | 268 options.env = in_memory_env_.get(); |
| 267 leveldb::Status status = | 269 leveldb::Status status = |
| 268 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); | 270 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); |
| 269 EXPECT_TRUE(status.ok()); | 271 EXPECT_TRUE(status.ok()); |
| 270 | 272 |
| 271 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db))); | 273 std::unique_ptr<LevelDBWrapper> wrapper( |
| 274 new LevelDBWrapper(base::WrapUnique(db))); |
| 272 | 275 |
| 273 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); | 276 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); |
| 274 SetUpServiceMetadata(wrapper.get()); | 277 SetUpServiceMetadata(wrapper.get()); |
| 275 | 278 |
| 276 return wrapper; | 279 return wrapper; |
| 277 } | 280 } |
| 278 | 281 |
| 279 void SetUpServiceMetadata(LevelDBWrapper* db) { | 282 void SetUpServiceMetadata(LevelDBWrapper* db) { |
| 280 ServiceMetadata service_metadata; | 283 ServiceMetadata service_metadata; |
| 281 service_metadata.set_largest_change_id(kInitialChangeID); | 284 service_metadata.set_largest_change_id(kInitialChangeID); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 } | 375 } |
| 373 | 376 |
| 374 TrackedFile CreateTrackedFolder(const TrackedFile& parent, | 377 TrackedFile CreateTrackedFolder(const TrackedFile& parent, |
| 375 const std::string& title) { | 378 const std::string& title) { |
| 376 TrackedFile folder; | 379 TrackedFile folder; |
| 377 folder.metadata = CreateFolderMetadata(parent.metadata, title); | 380 folder.metadata = CreateFolderMetadata(parent.metadata, title); |
| 378 folder.tracker = CreateTracker(parent.tracker, folder.metadata); | 381 folder.tracker = CreateTracker(parent.tracker, folder.metadata); |
| 379 return folder; | 382 return folder; |
| 380 } | 383 } |
| 381 | 384 |
| 382 scoped_ptr<google_apis::FileResource> CreateFileResourceFromMetadata( | 385 std::unique_ptr<google_apis::FileResource> CreateFileResourceFromMetadata( |
| 383 const FileMetadata& file) { | 386 const FileMetadata& file) { |
| 384 scoped_ptr<google_apis::FileResource> file_resource( | 387 std::unique_ptr<google_apis::FileResource> file_resource( |
| 385 new google_apis::FileResource); | 388 new google_apis::FileResource); |
| 386 for (int i = 0; i < file.details().parent_folder_ids_size(); ++i) { | 389 for (int i = 0; i < file.details().parent_folder_ids_size(); ++i) { |
| 387 google_apis::ParentReference parent; | 390 google_apis::ParentReference parent; |
| 388 parent.set_file_id(file.details().parent_folder_ids(i)); | 391 parent.set_file_id(file.details().parent_folder_ids(i)); |
| 389 file_resource->mutable_parents()->push_back(parent); | 392 file_resource->mutable_parents()->push_back(parent); |
| 390 } | 393 } |
| 391 | 394 |
| 392 file_resource->set_file_id(file.file_id()); | 395 file_resource->set_file_id(file.file_id()); |
| 393 file_resource->set_title(file.details().title()); | 396 file_resource->set_title(file.details().title()); |
| 394 if (file.details().file_kind() == FILE_KIND_FOLDER) { | 397 if (file.details().file_kind() == FILE_KIND_FOLDER) { |
| 395 file_resource->set_mime_type("application/vnd.google-apps.folder"); | 398 file_resource->set_mime_type("application/vnd.google-apps.folder"); |
| 396 } else if (file.details().file_kind() == FILE_KIND_FILE) { | 399 } else if (file.details().file_kind() == FILE_KIND_FILE) { |
| 397 file_resource->set_mime_type("text/plain"); | 400 file_resource->set_mime_type("text/plain"); |
| 398 file_resource->set_file_size(0); | 401 file_resource->set_file_size(0); |
| 399 } else { | 402 } else { |
| 400 file_resource->set_mime_type("application/vnd.google-apps.document"); | 403 file_resource->set_mime_type("application/vnd.google-apps.document"); |
| 401 } | 404 } |
| 402 file_resource->set_md5_checksum(file.details().md5()); | 405 file_resource->set_md5_checksum(file.details().md5()); |
| 403 file_resource->set_etag(file.details().etag()); | 406 file_resource->set_etag(file.details().etag()); |
| 404 file_resource->set_created_date(base::Time::FromInternalValue( | 407 file_resource->set_created_date(base::Time::FromInternalValue( |
| 405 file.details().creation_time())); | 408 file.details().creation_time())); |
| 406 file_resource->set_modified_date(base::Time::FromInternalValue( | 409 file_resource->set_modified_date(base::Time::FromInternalValue( |
| 407 file.details().modification_time())); | 410 file.details().modification_time())); |
| 408 | 411 |
| 409 return file_resource; | 412 return file_resource; |
| 410 } | 413 } |
| 411 | 414 |
| 412 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( | 415 std::unique_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( |
| 413 const FileMetadata& file) { | 416 const FileMetadata& file) { |
| 414 scoped_ptr<google_apis::ChangeResource> change( | 417 std::unique_ptr<google_apis::ChangeResource> change( |
| 415 new google_apis::ChangeResource); | 418 new google_apis::ChangeResource); |
| 416 change->set_change_id(file.details().change_id()); | 419 change->set_change_id(file.details().change_id()); |
| 417 change->set_file_id(file.file_id()); | 420 change->set_file_id(file.file_id()); |
| 418 change->set_deleted(file.details().missing()); | 421 change->set_deleted(file.details().missing()); |
| 419 if (change->is_deleted()) | 422 if (change->is_deleted()) |
| 420 return change; | 423 return change; |
| 421 | 424 |
| 422 change->set_file(CreateFileResourceFromMetadata(file)); | 425 change->set_file(CreateFileResourceFromMetadata(file)); |
| 423 return change; | 426 return change; |
| 424 } | 427 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 442 FileDetails* details = file->mutable_details(); | 445 FileDetails* details = file->mutable_details(); |
| 443 details->set_md5( | 446 details->set_md5( |
| 444 "md5_value_" + base::Int64ToString(next_md5_sequence_number_++)); | 447 "md5_value_" + base::Int64ToString(next_md5_sequence_number_++)); |
| 445 details->set_change_id(++current_change_id_); | 448 details->set_change_id(++current_change_id_); |
| 446 } | 449 } |
| 447 | 450 |
| 448 void ApplyNoopChangeToMetadata(FileMetadata* file) { | 451 void ApplyNoopChangeToMetadata(FileMetadata* file) { |
| 449 file->mutable_details()->set_change_id(++current_change_id_); | 452 file->mutable_details()->set_change_id(++current_change_id_); |
| 450 } | 453 } |
| 451 | 454 |
| 452 void PushToChangeList(scoped_ptr<google_apis::ChangeResource> change, | 455 void PushToChangeList(std::unique_ptr<google_apis::ChangeResource> change, |
| 453 ScopedVector<google_apis::ChangeResource>* changes) { | 456 ScopedVector<google_apis::ChangeResource>* changes) { |
| 454 changes->push_back(change.release()); | 457 changes->push_back(change.release()); |
| 455 } | 458 } |
| 456 | 459 |
| 457 leveldb::Status PutFileToDB(LevelDBWrapper* db, const FileMetadata& file) { | 460 leveldb::Status PutFileToDB(LevelDBWrapper* db, const FileMetadata& file) { |
| 458 PutFileMetadataToDB(file, db); | 461 PutFileMetadataToDB(file, db); |
| 459 return db->Commit(); | 462 return db->Commit(); |
| 460 } | 463 } |
| 461 | 464 |
| 462 leveldb::Status PutTrackerToDB(LevelDBWrapper* db, | 465 leveldb::Status PutTrackerToDB(LevelDBWrapper* db, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 { | 497 { |
| 495 SCOPED_TRACE("Expect equivalent dirty_trackers_ contents."); | 498 SCOPED_TRACE("Expect equivalent dirty_trackers_ contents."); |
| 496 ExpectEquivalent(index1->dirty_trackers_, index2->dirty_trackers_); | 499 ExpectEquivalent(index1->dirty_trackers_, index2->dirty_trackers_); |
| 497 } | 500 } |
| 498 } | 501 } |
| 499 | 502 |
| 500 void VerifyReloadConsistencyForOnDisk( | 503 void VerifyReloadConsistencyForOnDisk( |
| 501 MetadataDatabaseIndexOnDisk* index1, | 504 MetadataDatabaseIndexOnDisk* index1, |
| 502 MetadataDatabaseIndexOnDisk* index2) { | 505 MetadataDatabaseIndexOnDisk* index2) { |
| 503 ExpectEquivalentServiceMetadata(index1, index2); | 506 ExpectEquivalentServiceMetadata(index1, index2); |
| 504 scoped_ptr<LevelDBWrapper::Iterator> itr1 = | 507 std::unique_ptr<LevelDBWrapper::Iterator> itr1 = |
| 505 index1->GetDBForTesting()->NewIterator(); | 508 index1->GetDBForTesting()->NewIterator(); |
| 506 scoped_ptr<LevelDBWrapper::Iterator> itr2 = | 509 std::unique_ptr<LevelDBWrapper::Iterator> itr2 = |
| 507 index2->GetDBForTesting()->NewIterator(); | 510 index2->GetDBForTesting()->NewIterator(); |
| 508 for (itr1->SeekToFirst(), itr2->SeekToFirst(); | 511 for (itr1->SeekToFirst(), itr2->SeekToFirst(); |
| 509 itr1->Valid() && itr2->Valid(); | 512 itr1->Valid() && itr2->Valid(); |
| 510 itr1->Next(), itr2->Next()) { | 513 itr1->Next(), itr2->Next()) { |
| 511 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); | 514 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); |
| 512 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); | 515 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); |
| 513 } | 516 } |
| 514 EXPECT_TRUE(!itr1->Valid()); | 517 EXPECT_TRUE(!itr1->Valid()); |
| 515 EXPECT_TRUE(!itr2->Valid()); | 518 EXPECT_TRUE(!itr2->Valid()); |
| 516 } | 519 } |
| 517 | 520 |
| 518 void VerifyReloadConsistency() { | 521 void VerifyReloadConsistency() { |
| 519 scoped_ptr<MetadataDatabase> metadata_database_2; | 522 std::unique_ptr<MetadataDatabase> metadata_database_2; |
| 520 ASSERT_EQ(SYNC_STATUS_OK, MetadataDatabase::CreateForTesting( | 523 ASSERT_EQ(SYNC_STATUS_OK, MetadataDatabase::CreateForTesting( |
| 521 std::move(metadata_database_->db_), | 524 std::move(metadata_database_->db_), |
| 522 metadata_database_->enable_on_disk_index_, | 525 metadata_database_->enable_on_disk_index_, |
| 523 &metadata_database_2)); | 526 &metadata_database_2)); |
| 524 metadata_database_->db_ = std::move(metadata_database_2->db_); | 527 metadata_database_->db_ = std::move(metadata_database_2->db_); |
| 525 | 528 |
| 526 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); | 529 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); |
| 527 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); | 530 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); |
| 528 if (GetParam()) { | 531 if (GetParam()) { |
| 529 VerifyReloadConsistencyForOnDisk( | 532 VerifyReloadConsistencyForOnDisk( |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 void ResetTrackerID(FileTracker* tracker) { | 603 void ResetTrackerID(FileTracker* tracker) { |
| 601 tracker->set_tracker_id(GetTrackerIDByFileID(tracker->file_id())); | 604 tracker->set_tracker_id(GetTrackerIDByFileID(tracker->file_id())); |
| 602 } | 605 } |
| 603 | 606 |
| 604 int64_t current_change_id() const { return current_change_id_; } | 607 int64_t current_change_id() const { return current_change_id_; } |
| 605 | 608 |
| 606 private: | 609 private: |
| 607 base::ScopedTempDir database_dir_; | 610 base::ScopedTempDir database_dir_; |
| 608 base::MessageLoop message_loop_; | 611 base::MessageLoop message_loop_; |
| 609 | 612 |
| 610 scoped_ptr<leveldb::Env> in_memory_env_; | 613 std::unique_ptr<leveldb::Env> in_memory_env_; |
| 611 scoped_ptr<MetadataDatabase> metadata_database_; | 614 std::unique_ptr<MetadataDatabase> metadata_database_; |
| 612 | 615 |
| 613 int64_t current_change_id_; | 616 int64_t current_change_id_; |
| 614 int64_t next_tracker_id_; | 617 int64_t next_tracker_id_; |
| 615 int64_t next_file_id_number_; | 618 int64_t next_file_id_number_; |
| 616 int64_t next_md5_sequence_number_; | 619 int64_t next_md5_sequence_number_; |
| 617 | 620 |
| 618 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); | 621 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); |
| 619 }; | 622 }; |
| 620 | 623 |
| 621 INSTANTIATE_TEST_CASE_P(MetadataDatabaseTestWithIndexesOnDisk, | 624 INSTANTIATE_TEST_CASE_P(MetadataDatabaseTestWithIndexesOnDisk, |
| 622 MetadataDatabaseTest, | 625 MetadataDatabaseTest, |
| 623 ::testing::Values(true, false)); | 626 ::testing::Values(true, false)); |
| 624 | 627 |
| 625 TEST_P(MetadataDatabaseTest, InitializationTest_Empty) { | 628 TEST_P(MetadataDatabaseTest, InitializationTest_Empty) { |
| 626 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 629 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 627 DropDatabase(); | 630 DropDatabase(); |
| 628 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 631 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 629 | 632 |
| 630 DropDatabase(); | 633 DropDatabase(); |
| 631 | 634 |
| 632 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 635 std::unique_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 633 db->Put(kServiceMetadataKey, "Unparsable string"); | 636 db->Put(kServiceMetadataKey, "Unparsable string"); |
| 634 EXPECT_TRUE(db->Commit().ok()); | 637 EXPECT_TRUE(db->Commit().ok()); |
| 635 db.reset(); | 638 db.reset(); |
| 636 | 639 |
| 637 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 640 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 638 } | 641 } |
| 639 | 642 |
| 640 TEST_P(MetadataDatabaseTest, InitializationTest_SimpleTree) { | 643 TEST_P(MetadataDatabaseTest, InitializationTest_SimpleTree) { |
| 641 TrackedFile sync_root(CreateTrackedSyncRoot()); | 644 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 642 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); | 645 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 | 734 |
| 732 FileMetadata file(CreateFileMetadata(folder, "file")); | 735 FileMetadata file(CreateFileMetadata(folder, "file")); |
| 733 FileTracker file_tracker(CreateTracker(folder_tracker, file)); | 736 FileTracker file_tracker(CreateTracker(folder_tracker, file)); |
| 734 | 737 |
| 735 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder")); | 738 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder")); |
| 736 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, | 739 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, |
| 737 inactive_folder)); | 740 inactive_folder)); |
| 738 inactive_folder_tracker.set_active(false); | 741 inactive_folder_tracker.set_active(false); |
| 739 | 742 |
| 740 { | 743 { |
| 741 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 744 std::unique_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 742 ASSERT_TRUE(db); | 745 ASSERT_TRUE(db); |
| 743 | 746 |
| 744 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | 747 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); |
| 745 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | 748 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); |
| 746 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | 749 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); |
| 747 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | 750 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); |
| 748 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); | 751 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); |
| 749 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); | 752 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); |
| 750 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | 753 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); |
| 751 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | 754 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2)); | 787 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2)); |
| 785 FileMetadata file(CreateFileMetadata(folder2, "file")); | 788 FileMetadata file(CreateFileMetadata(folder2, "file")); |
| 786 FileTracker file_tracker(CreateTracker(folder_tracker2, file)); | 789 FileTracker file_tracker(CreateTracker(folder_tracker2, file)); |
| 787 | 790 |
| 788 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1")); | 791 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1")); |
| 789 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, | 792 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, |
| 790 inactive_folder)); | 793 inactive_folder)); |
| 791 inactive_folder_tracker.set_active(false); | 794 inactive_folder_tracker.set_active(false); |
| 792 | 795 |
| 793 { | 796 { |
| 794 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 797 std::unique_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 795 ASSERT_TRUE(db); | 798 ASSERT_TRUE(db); |
| 796 | 799 |
| 797 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | 800 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); |
| 798 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | 801 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); |
| 799 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | 802 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); |
| 800 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | 803 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); |
| 801 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok()); | 804 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok()); |
| 802 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok()); | 805 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok()); |
| 803 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok()); | 806 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok()); |
| 804 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok()); | 807 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok()); |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1094 | 1097 |
| 1095 TEST_P(MetadataDatabaseTest, PopulateInitialDataTest) { | 1098 TEST_P(MetadataDatabaseTest, PopulateInitialDataTest) { |
| 1096 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1099 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1097 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_root")); | 1100 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_root")); |
| 1098 app_root.tracker.set_active(false); | 1101 app_root.tracker.set_active(false); |
| 1099 | 1102 |
| 1100 const TrackedFile* tracked_files[] = { | 1103 const TrackedFile* tracked_files[] = { |
| 1101 &sync_root, &app_root | 1104 &sync_root, &app_root |
| 1102 }; | 1105 }; |
| 1103 | 1106 |
| 1104 scoped_ptr<google_apis::FileResource> sync_root_folder( | 1107 std::unique_ptr<google_apis::FileResource> sync_root_folder( |
| 1105 CreateFileResourceFromMetadata(sync_root.metadata)); | 1108 CreateFileResourceFromMetadata(sync_root.metadata)); |
| 1106 scoped_ptr<google_apis::FileResource> app_root_folder( | 1109 std::unique_ptr<google_apis::FileResource> app_root_folder( |
| 1107 CreateFileResourceFromMetadata(app_root.metadata)); | 1110 CreateFileResourceFromMetadata(app_root.metadata)); |
| 1108 | 1111 |
| 1109 ScopedVector<google_apis::FileResource> app_root_folders; | 1112 ScopedVector<google_apis::FileResource> app_root_folders; |
| 1110 app_root_folders.push_back(app_root_folder.release()); | 1113 app_root_folders.push_back(app_root_folder.release()); |
| 1111 | 1114 |
| 1112 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1115 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 1113 EXPECT_EQ(SYNC_STATUS_OK, PopulateInitialData( | 1116 EXPECT_EQ(SYNC_STATUS_OK, PopulateInitialData( |
| 1114 current_change_id(), | 1117 current_change_id(), |
| 1115 *sync_root_folder, | 1118 *sync_root_folder, |
| 1116 app_root_folders)); | 1119 app_root_folders)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1132 TrackedFile file_0(CreateTrackedFile(folder_0, "file_0")); | 1135 TrackedFile file_0(CreateTrackedFile(folder_0, "file_0")); |
| 1133 | 1136 |
| 1134 const TrackedFile* tracked_files[] = { | 1137 const TrackedFile* tracked_files[] = { |
| 1135 &sync_root, &app_root, &folder_0, &file_0 | 1138 &sync_root, &app_root, &folder_0, &file_0 |
| 1136 }; | 1139 }; |
| 1137 | 1140 |
| 1138 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1141 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1139 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1142 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 1140 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1143 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1141 | 1144 |
| 1142 scoped_ptr<base::ListValue> files = | 1145 std::unique_ptr<base::ListValue> files = |
| 1143 metadata_database()->DumpFiles(app_root.tracker.app_id()); | 1146 metadata_database()->DumpFiles(app_root.tracker.app_id()); |
| 1144 ASSERT_EQ(2u, files->GetSize()); | 1147 ASSERT_EQ(2u, files->GetSize()); |
| 1145 | 1148 |
| 1146 base::DictionaryValue* file = nullptr; | 1149 base::DictionaryValue* file = nullptr; |
| 1147 std::string str; | 1150 std::string str; |
| 1148 | 1151 |
| 1149 ASSERT_TRUE(files->GetDictionary(0, &file)); | 1152 ASSERT_TRUE(files->GetDictionary(0, &file)); |
| 1150 EXPECT_TRUE(file->GetString("title", &str) && str == "folder_0"); | 1153 EXPECT_TRUE(file->GetString("title", &str) && str == "folder_0"); |
| 1151 EXPECT_TRUE(file->GetString("type", &str) && str == "folder"); | 1154 EXPECT_TRUE(file->GetString("type", &str) && str == "folder"); |
| 1152 EXPECT_TRUE(file->HasKey("details")); | 1155 EXPECT_TRUE(file->HasKey("details")); |
| 1153 | 1156 |
| 1154 ASSERT_TRUE(files->GetDictionary(1, &file)); | 1157 ASSERT_TRUE(files->GetDictionary(1, &file)); |
| 1155 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); | 1158 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); |
| 1156 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); | 1159 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); |
| 1157 EXPECT_TRUE(file->HasKey("details")); | 1160 EXPECT_TRUE(file->HasKey("details")); |
| 1158 } | 1161 } |
| 1159 | 1162 |
| 1160 } // namespace drive_backend | 1163 } // namespace drive_backend |
| 1161 } // namespace sync_file_system | 1164 } // namespace sync_file_system |
| OLD | NEW |