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