| 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 "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/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| 11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 12 #include "chrome/browser/google_apis/drive_api_parser.h" | 12 #include "chrome/browser/google_apis/drive_api_parser.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/metadata_database.pb.h" | 14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 16 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 17 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 17 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
| 18 | 18 |
| 19 #define FPL(a) FILE_PATH_LITERAL(a) | 19 #define FPL(a) FILE_PATH_LITERAL(a) |
| 20 | 20 |
| 21 namespace sync_file_system { | 21 namespace sync_file_system { |
| 22 namespace drive_backend { | 22 namespace drive_backend { |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 | 25 |
| 26 typedef MetadataDatabase::FileIDList FileIDList; | 26 typedef MetadataDatabase::FileIDList FileIDList; |
| 27 | 27 using test_util::CreateResultReceiver; |
| 28 using test_util::DatabaseCreateResultCallback; | |
| 29 using test_util::SyncStatusResultCallback; | |
| 30 | 28 |
| 31 const int64 kInitialChangeID = 1234; | 29 const int64 kInitialChangeID = 1234; |
| 32 const int64 kSyncRootTrackerID = 100; | 30 const int64 kSyncRootTrackerID = 100; |
| 33 const char kSyncRootFolderID[] = "sync_root_folder_id"; | 31 const char kSyncRootFolderID[] = "sync_root_folder_id"; |
| 34 | 32 |
| 35 // This struct is used to setup initial state of the database in the test and | 33 // This struct is used to setup initial state of the database in the test and |
| 36 // also used to match to the modified content of the database as the | 34 // also used to match to the modified content of the database as the |
| 37 // expectation. | 35 // expectation. |
| 38 struct TrackedFile { | 36 struct TrackedFile { |
| 39 // Holds the latest remote metadata which may be not-yet-synced to |tracker|. | 37 // Holds the latest remote metadata which may be not-yet-synced to |tracker|. |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 EXPECT_FALSE(trackers.empty()); | 163 EXPECT_FALSE(trackers.empty()); |
| 166 return (*trackers.begin())->tracker_id(); | 164 return (*trackers.begin())->tracker_id(); |
| 167 } | 165 } |
| 168 return 0; | 166 return 0; |
| 169 } | 167 } |
| 170 | 168 |
| 171 SyncStatusCode InitializeMetadataDatabase() { | 169 SyncStatusCode InitializeMetadataDatabase() { |
| 172 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 170 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 173 MetadataDatabase::Create(base::MessageLoopProxy::current(), | 171 MetadataDatabase::Create(base::MessageLoopProxy::current(), |
| 174 database_dir_.path(), | 172 database_dir_.path(), |
| 175 base::Bind(&DatabaseCreateResultCallback, | 173 CreateResultReceiver(&status, |
| 176 &status, &metadata_database_)); | 174 &metadata_database_)); |
| 177 message_loop_.RunUntilIdle(); | 175 message_loop_.RunUntilIdle(); |
| 178 return status; | 176 return status; |
| 179 } | 177 } |
| 180 | 178 |
| 181 void DropDatabase() { | 179 void DropDatabase() { |
| 182 metadata_database_.reset(); | 180 metadata_database_.reset(); |
| 183 message_loop_.RunUntilIdle(); | 181 message_loop_.RunUntilIdle(); |
| 184 } | 182 } |
| 185 | 183 |
| 186 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, | 184 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 SCOPED_TRACE("Expect equivalent tracker[" + | 498 SCOPED_TRACE("Expect equivalent tracker[" + |
| 501 base::Int64ToString(tracker.tracker_id()) + "]"); | 499 base::Int64ToString(tracker.tracker_id()) + "]"); |
| 502 ExpectEquivalent(&tracker, &tracker_in_metadata_database); | 500 ExpectEquivalent(&tracker, &tracker_in_metadata_database); |
| 503 } | 501 } |
| 504 | 502 |
| 505 SyncStatusCode RegisterApp(const std::string& app_id, | 503 SyncStatusCode RegisterApp(const std::string& app_id, |
| 506 const std::string& folder_id) { | 504 const std::string& folder_id) { |
| 507 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 505 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 508 metadata_database_->RegisterApp( | 506 metadata_database_->RegisterApp( |
| 509 app_id, folder_id, | 507 app_id, folder_id, |
| 510 base::Bind(&SyncStatusResultCallback, &status)); | 508 CreateResultReceiver(&status)); |
| 511 message_loop_.RunUntilIdle(); | 509 message_loop_.RunUntilIdle(); |
| 512 return status; | 510 return status; |
| 513 } | 511 } |
| 514 | 512 |
| 515 SyncStatusCode DisableApp(const std::string& app_id) { | 513 SyncStatusCode DisableApp(const std::string& app_id) { |
| 516 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 514 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 517 metadata_database_->DisableApp( | 515 metadata_database_->DisableApp( |
| 518 app_id, base::Bind(&SyncStatusResultCallback, &status)); | 516 app_id, CreateResultReceiver(&status)); |
| 519 message_loop_.RunUntilIdle(); | 517 message_loop_.RunUntilIdle(); |
| 520 return status; | 518 return status; |
| 521 } | 519 } |
| 522 | 520 |
| 523 SyncStatusCode EnableApp(const std::string& app_id) { | 521 SyncStatusCode EnableApp(const std::string& app_id) { |
| 524 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 522 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 525 metadata_database_->EnableApp( | 523 metadata_database_->EnableApp( |
| 526 app_id, base::Bind(&SyncStatusResultCallback, &status)); | 524 app_id, CreateResultReceiver(&status)); |
| 527 message_loop_.RunUntilIdle(); | 525 message_loop_.RunUntilIdle(); |
| 528 return status; | 526 return status; |
| 529 } | 527 } |
| 530 | 528 |
| 531 SyncStatusCode UnregisterApp(const std::string& app_id) { | 529 SyncStatusCode UnregisterApp(const std::string& app_id) { |
| 532 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 530 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 533 metadata_database_->UnregisterApp( | 531 metadata_database_->UnregisterApp( |
| 534 app_id, base::Bind(&SyncStatusResultCallback, &status)); | 532 app_id, CreateResultReceiver(&status)); |
| 535 message_loop_.RunUntilIdle(); | 533 message_loop_.RunUntilIdle(); |
| 536 return status; | 534 return status; |
| 537 } | 535 } |
| 538 | 536 |
| 539 SyncStatusCode UpdateByChangeList( | 537 SyncStatusCode UpdateByChangeList( |
| 540 ScopedVector<google_apis::ChangeResource> changes) { | 538 ScopedVector<google_apis::ChangeResource> changes) { |
| 541 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 539 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 542 metadata_database_->UpdateByChangeList( | 540 metadata_database_->UpdateByChangeList( |
| 543 changes.Pass(), base::Bind(&SyncStatusResultCallback, &status)); | 541 changes.Pass(), CreateResultReceiver(&status)); |
| 544 message_loop_.RunUntilIdle(); | 542 message_loop_.RunUntilIdle(); |
| 545 return status; | 543 return status; |
| 546 } | 544 } |
| 547 | 545 |
| 548 SyncStatusCode PopulateFolder(const std::string& folder_id, | 546 SyncStatusCode PopulateFolder(const std::string& folder_id, |
| 549 const FileIDList& listed_children) { | 547 const FileIDList& listed_children) { |
| 550 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 548 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 551 metadata_database_->PopulateFolderByChildList( | 549 metadata_database_->PopulateFolderByChildList( |
| 552 folder_id, listed_children, | 550 folder_id, listed_children, |
| 553 base::Bind(&SyncStatusResultCallback, &status)); | 551 CreateResultReceiver(&status)); |
| 554 message_loop_.RunUntilIdle(); | 552 message_loop_.RunUntilIdle(); |
| 555 return status; | 553 return status; |
| 556 } | 554 } |
| 557 | 555 |
| 558 SyncStatusCode UpdateTracker(const FileTracker& tracker) { | 556 SyncStatusCode UpdateTracker(const FileTracker& tracker) { |
| 559 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 557 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 560 metadata_database_->UpdateTracker( | 558 metadata_database_->UpdateTracker( |
| 561 tracker.tracker_id(), tracker.synced_details(), | 559 tracker.tracker_id(), tracker.synced_details(), |
| 562 base::Bind(&SyncStatusResultCallback, &status)); | 560 CreateResultReceiver(&status)); |
| 563 message_loop_.RunUntilIdle(); | 561 message_loop_.RunUntilIdle(); |
| 564 return status; | 562 return status; |
| 565 } | 563 } |
| 566 | 564 |
| 567 SyncStatusCode PopulateInitialData( | 565 SyncStatusCode PopulateInitialData( |
| 568 int64 largest_change_id, | 566 int64 largest_change_id, |
| 569 const google_apis::FileResource& sync_root_folder, | 567 const google_apis::FileResource& sync_root_folder, |
| 570 const ScopedVector<google_apis::FileResource>& app_root_folders) { | 568 const ScopedVector<google_apis::FileResource>& app_root_folders) { |
| 571 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 569 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 572 metadata_database_->PopulateInitialData( | 570 metadata_database_->PopulateInitialData( |
| 573 largest_change_id, | 571 largest_change_id, |
| 574 sync_root_folder, | 572 sync_root_folder, |
| 575 app_root_folders, | 573 app_root_folders, |
| 576 base::Bind(&SyncStatusResultCallback, &status)); | 574 CreateResultReceiver(&status)); |
| 577 message_loop_.RunUntilIdle(); | 575 message_loop_.RunUntilIdle(); |
| 578 return status; | 576 return status; |
| 579 } | 577 } |
| 580 | 578 |
| 581 void ResetTrackerID(FileTracker* tracker) { | 579 void ResetTrackerID(FileTracker* tracker) { |
| 582 tracker->set_tracker_id(GetTrackerIDByFileID(tracker->file_id())); | 580 tracker->set_tracker_id(GetTrackerIDByFileID(tracker->file_id())); |
| 583 } | 581 } |
| 584 | 582 |
| 585 private: | 583 private: |
| 586 base::ScopedTempDir database_dir_; | 584 base::ScopedTempDir database_dir_; |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 ResetTrackerID(&sync_root.tracker); | 972 ResetTrackerID(&sync_root.tracker); |
| 975 ResetTrackerID(&app_root.tracker); | 973 ResetTrackerID(&app_root.tracker); |
| 976 app_root.tracker.set_parent_tracker_id(sync_root.tracker.tracker_id()); | 974 app_root.tracker.set_parent_tracker_id(sync_root.tracker.tracker_id()); |
| 977 | 975 |
| 978 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 976 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 979 VerifyReloadConsistency(); | 977 VerifyReloadConsistency(); |
| 980 } | 978 } |
| 981 | 979 |
| 982 } // namespace drive_backend | 980 } // namespace drive_backend |
| 983 } // namespace sync_file_system | 981 } // namespace sync_file_system |
| OLD | NEW |