| 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 "chrome/browser/sync_file_system/sync_file_system_test_util.h" | 
|   15 #include "testing/gtest/include/gtest/gtest.h" |   16 #include "testing/gtest/include/gtest/gtest.h" | 
|   16 #include "third_party/leveldatabase/src/include/leveldb/db.h" |   17 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 
|   17 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |   18 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 
|   18  |   19  | 
|   19 #define FPL(a) FILE_PATH_LITERAL(a) |   20 #define FPL(a) FILE_PATH_LITERAL(a) | 
|   20  |   21  | 
|   21 namespace sync_file_system { |   22 namespace sync_file_system { | 
|   22 namespace drive_backend { |   23 namespace drive_backend { | 
|   23  |   24  | 
|   24 namespace { |   25 namespace { | 
|   25  |   26  | 
|   26 typedef MetadataDatabase::FileIDList FileIDList; |   27 typedef MetadataDatabase::FileIDList FileIDList; | 
|   27  |   28  | 
|   28 using test_util::DatabaseCreateResultCallback; |  | 
|   29 using test_util::SyncStatusResultCallback; |  | 
|   30  |  | 
|   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|. | 
|   40   FileMetadata metadata; |   38   FileMetadata metadata; | 
| (...skipping 124 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 |