sync_engine_initializer_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
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 3// found in the LICENSE file. 4 5#include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h" 6 7#include "base/bind.h" 8#include "base/files/scoped_temp_dir.h" 9#include "base/message_loop/message_loop.h" 10#include "chrome/browser/drive/drive_api_util.h" 11#include "chrome/browser/drive/fake_drive_service.h" 12#include "chrome/browser/google_apis/drive_api_parser.h" 13#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 14#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 15#include "content/public/test/test_browser_thread_bundle.h" 16#include "testing/gtest/include/gtest/gtest.h" 17 18namespace sync_file_system { 19namespace drive_backend { 20 21namespace { 22 23void SyncStatusResultCallback(SyncStatusCode* status_out, 24 SyncStatusCode status) { 25 ASSERT_TRUE(status_out); 26 EXPECT_EQ(SYNC_STATUS_UNKNOWN, *status_out); 27 *status_out = status; 28} 29 30void ResourceEntryResultCallback( 31 google_apis::GDataErrorCode* error_out, 32 scoped_ptr<google_apis::ResourceEntry>* entry_out, 33 google_apis::GDataErrorCode error, 34 scoped_ptr<google_apis::ResourceEntry> entry) { 35 ASSERT_TRUE(error_out); 36 ASSERT_TRUE(entry_out); 37 EXPECT_EQ(google_apis::GDATA_OTHER_ERROR, *error_out); 38 *error_out = error; 39 *entry_out = entry.Pass(); 40} 41 42} // namespace 43 44class SyncEngineInitializerTest : public testing::Test { 45 public: 46 struct TrackedFile { 47 scoped_ptr<google_apis::FileResource> resource; 48 FileMetadata metadata; 49 FileTracker tracker; 50 }; 51 52 SyncEngineInitializerTest() {} 53 virtual ~SyncEngineInitializerTest() {} 54 55 virtual void SetUp() OVERRIDE { 56 ASSERT_TRUE(database_dir_.CreateUniqueTempDir()); 57 ASSERT_TRUE(fake_drive_service_.LoadAccountMetadataForWapi( 58 "sync_file_system/account_metadata.json")); 59 ASSERT_TRUE(fake_drive_service_.LoadResourceListForWapi( 60 "gdata/empty_feed.json")); 61 } 62 63 virtual void TearDown() OVERRIDE { 64 } 65 66 base::FilePath database_path() { 67 return database_dir_.path(); 68 } 69 70 SyncStatusCode RunInitializer() { 71 initializer_.reset(new SyncEngineInitializer( 72 base::MessageLoopProxy::current(), 73 &fake_drive_service_, 74 database_path())); 75 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 76 77 initializer_->Run(base::Bind(&SyncStatusResultCallback, &status)); 78 base::MessageLoop::current()->RunUntilIdle(); 79 80 metadata_database_ = initializer_->PassMetadataDatabase(); 81 return status; 82 } 83 84 google_apis::GDataErrorCode FillTrackedFileByTrackerID( 85 int64 tracker_id, 86 scoped_ptr<TrackedFile>* file_out) { 87 scoped_ptr<TrackedFile> file(new TrackedFile); 88 if (!metadata_database_->FindTrackerByTrackerID( 89 tracker_id, &file->tracker)) 90 return google_apis::HTTP_NOT_FOUND; 91 if (!metadata_database_->FindFileByFileID( 92 file->tracker.file_id(), &file->metadata)) 93 return google_apis::HTTP_NOT_FOUND; 94 95 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; 96 scoped_ptr<google_apis::ResourceEntry> entry; 97 fake_drive_service_.GetResourceEntry( 98 file->metadata.file_id(), 99 base::Bind(&ResourceEntryResultCallback, 100 &error, &entry)); 101 base::MessageLoop::current()->RunUntilIdle(); 102 103 if (entry) { 104 file->resource = 105 drive::util::ConvertResourceEntryToFileResource(*entry); 106 } 107 108 if (file_out) 109 *file_out = file.Pass(); 110 return error; 111 } 112 113 google_apis::GDataErrorCode GetSyncRoot( 114 scoped_ptr<TrackedFile>* sync_root_out) { 115 return FillTrackedFileByTrackerID( 116 metadata_database_->GetSyncRootTrackerID(), 117 sync_root_out); 118 } 119 120 private: 121 content::TestBrowserThreadBundle browser_threads_; 122 base::ScopedTempDir database_dir_; 123 drive::FakeDriveService fake_drive_service_; 124 125 scoped_ptr<SyncEngineInitializer> initializer_; 126 scoped_ptr<MetadataDatabase> metadata_database_; 127 128 DISALLOW_COPY_AND_ASSIGN(SyncEngineInitializerTest); 129}; 130 131TEST_F(SyncEngineInitializerTest, EmptyDatabase_NoRemoteSyncRoot) { 132 EXPECT_EQ(SYNC_STATUS_OK, RunInitializer()); 133 134 scoped_ptr<TrackedFile> sync_root; 135 ASSERT_EQ(google_apis::HTTP_SUCCESS, GetSyncRoot(&sync_root)); 136 EXPECT_EQ("Chrome Syncable FileSystem", sync_root->resource->title()); 137} 138 139} // namespace drive_backend 140} // namespace sync_file_system 141