Chromium Code Reviews| Index: chrome/browser/sync_file_system/drive_file_sync_service_sync_unittest.cc |
| diff --git a/chrome/browser/sync_file_system/drive_file_sync_service_sync_unittest.cc b/chrome/browser/sync_file_system/drive_file_sync_service_sync_unittest.cc |
| index f57aa6ab36c94a19ac4e3fd423906370728cd4ee..c5c69a7682cc464f06027a2c9b76fd8fd7d40076 100644 |
| --- a/chrome/browser/sync_file_system/drive_file_sync_service_sync_unittest.cc |
| +++ b/chrome/browser/sync_file_system/drive_file_sync_service_sync_unittest.cc |
| @@ -31,7 +31,6 @@ const char kAppOrigin[] = "chrome-extension://app-id"; |
| void DidInitialize(bool* done, SyncStatusCode status, bool created) { |
| EXPECT_EQ(SYNC_STATUS_OK, status); |
| - EXPECT_TRUE(created); |
| *done = true; |
| } |
| @@ -61,30 +60,6 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| virtual void SetUp() OVERRIDE { |
| RegisterSyncableFileSystem(DriveFileSyncService::kServiceName); |
| - |
| - ASSERT_TRUE(base_dir_.CreateUniqueTempDir()); |
| - |
| - fake_sync_client_ = new FakeDriveFileSyncClient; |
| - fake_remote_processor_.reset(new FakeRemoteChangeProcessor); |
| - |
| - metadata_store_ = new DriveMetadataStore( |
| - base_dir_.path(), |
| - base::MessageLoopProxy::current()); |
| - |
| - bool done = false; |
| - metadata_store_->Initialize(base::Bind(&DidInitialize, &done)); |
| - message_loop_.RunUntilIdle(); |
| - EXPECT_TRUE(done); |
| - |
| - metadata_store_->SetSyncRootDirectory(kSyncRootResourceId); |
| - metadata_store_->AddBatchSyncOrigin(GURL(kAppOrigin), kParentResourceId); |
| - metadata_store_->MoveBatchSyncOriginToIncremental(GURL(kAppOrigin)); |
| - |
| - sync_service_ = DriveFileSyncService::CreateForTesting( |
| - &profile_, |
| - base_dir_.path(), |
| - scoped_ptr<DriveFileSyncClientInterface>(fake_sync_client_), |
| - scoped_ptr<DriveMetadataStore>(metadata_store_)).Pass(); |
| } |
| virtual void TearDown() OVERRIDE { |
| @@ -103,6 +78,12 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| } |
| }; |
| + struct SyncEventComparator { |
| + bool operator()(const SyncEvent& left, const SyncEvent& right) { |
| + return left.description < right.description; |
| + } |
| + }; |
|
kinuko
2013/02/28 13:58:30
Not used?
tzik
2013/02/28 14:00:38
Done.
|
| + |
| SyncEvent CreateRemoteFileAddOrUpdateEvent(const std::string& title) { |
| return SyncEvent( |
| "SyncEvent: Add or Update remote file [" + title + "]", |
| @@ -117,6 +98,13 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| base::Unretained(this), title)); |
| } |
| + SyncEvent CreateRelaunchEvent() { |
| + return SyncEvent( |
| + "SyncEvent: Relaunch service", |
| + base::Bind(&DriveFileSyncServiceSyncTest::RelaunchService, |
| + base::Unretained(this))); |
| + } |
| + |
| SyncEvent CreateFetchEvent() { |
| return SyncEvent( |
| "SyncEvent: Fetch remote changes", |
| @@ -143,8 +131,11 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| } |
| void RunTest(const std::vector<SyncEvent>& events) { |
| + SetUpForTestCase(); |
| + |
| typedef std::vector<SyncEvent>::const_iterator iterator; |
| std::ostringstream out; |
| + out << '\n'; |
| for (iterator itr = events.begin(); itr != events.end(); ++itr) |
| out << itr->description << '\n'; |
| SCOPED_TRACE(out.str()); |
| @@ -156,9 +147,44 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| while (ProcessRemoteChange()) {} |
| VerifyResult(); |
| + TearDownForTestCase(); |
| } |
| private: |
| + void SetUpForTestCase() { |
| + ASSERT_TRUE(base_dir_.CreateUniqueTempDir()); |
| + |
| + fake_sync_client_ = new FakeDriveFileSyncClient; |
| + fake_remote_processor_.reset(new FakeRemoteChangeProcessor); |
| + |
| + metadata_store_ = new DriveMetadataStore( |
| + base_dir_.path(), |
| + base::MessageLoopProxy::current()); |
| + |
| + bool done = false; |
| + metadata_store_->Initialize(base::Bind(&DidInitialize, &done)); |
| + message_loop_.RunUntilIdle(); |
| + EXPECT_TRUE(done); |
| + |
| + metadata_store_->SetSyncRootDirectory(kSyncRootResourceId); |
| + metadata_store_->AddBatchSyncOrigin(GURL(kAppOrigin), kParentResourceId); |
| + metadata_store_->MoveBatchSyncOriginToIncremental(GURL(kAppOrigin)); |
| + |
| + sync_service_ = DriveFileSyncService::CreateForTesting( |
| + &profile_, |
| + base_dir_.path(), |
| + scoped_ptr<DriveFileSyncClientInterface>(fake_sync_client_), |
| + scoped_ptr<DriveMetadataStore>(metadata_store_)).Pass(); |
| + } |
| + |
| + void TearDownForTestCase() { |
| + metadata_store_ = NULL; |
| + fake_sync_client_ = NULL; |
| + sync_service_.reset(); |
| + fake_remote_processor_.reset(); |
| + ASSERT_TRUE(base_dir_.Delete()); |
| + } |
| + |
| void AddOrUpdateResource(const std::string& title) { |
| typedef ResourceIdByTitle::iterator iterator; |
| std::pair<iterator, bool> inserted = |
| @@ -186,6 +212,29 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| message_loop_.RunUntilIdle(); |
| } |
| + void RelaunchService() { |
| + metadata_store_ = NULL; |
| + scoped_ptr<DriveFileSyncClientInterface> sync_client = |
| + DriveFileSyncService::DestroyAndPassSyncClientForTesting( |
| + sync_service_.Pass()); |
| + message_loop_.RunUntilIdle(); |
| + |
| + metadata_store_ = new DriveMetadataStore( |
| + base_dir_.path(), |
| + base::MessageLoopProxy::current()); |
| + |
| + bool done = false; |
| + metadata_store_->Initialize(base::Bind(&DidInitialize, &done)); |
| + message_loop_.RunUntilIdle(); |
| + EXPECT_TRUE(done); |
| + |
| + sync_service_ = DriveFileSyncService::CreateForTesting( |
| + &profile_, |
| + base_dir_.path(), |
| + sync_client.Pass(), |
| + scoped_ptr<DriveMetadataStore>(metadata_store_)).Pass(); |
| + } |
| + |
| void FetchRemoteChange() { |
| sync_service_->may_have_unfetched_changes_ = true; |
| sync_service_->MaybeStartFetchChanges(); |
| @@ -200,7 +249,7 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| base::Bind(&DidProcessRemoteChange, &done, &status)); |
| message_loop_.RunUntilIdle(); |
| EXPECT_TRUE(done); |
| - return status == SYNC_STATUS_OK; |
| + return status != SYNC_STATUS_NO_CHANGE_TO_SYNC; |
| } |
| @@ -264,9 +313,9 @@ class DriveFileSyncServiceSyncTest : public testing::Test { |
| TestingProfile profile_; |
| base::ScopedTempDir base_dir_; |
| - FakeDriveFileSyncClient* fake_sync_client_; |
| + FakeDriveFileSyncClient* fake_sync_client_; // Owned by |sync_service_|. |
| scoped_ptr<FakeRemoteChangeProcessor> fake_remote_processor_; |
| - DriveMetadataStore* metadata_store_; |
| + DriveMetadataStore* metadata_store_; // Owned by |sync_service_|. |
| scoped_ptr<DriveFileSyncService> sync_service_; |
| @@ -296,15 +345,34 @@ TEST_F(DriveFileSyncServiceSyncTest, UpdateFileTest) { |
| RunTest(CreateTestCase(sync_event)); |
| } |
| - |
| TEST_F(DriveFileSyncServiceSyncTest, DeleteFileTest) { |
| std::string kFile1 = "file title 1"; |
| SyncEvent sync_event[] = { |
| CreateRemoteFileAddOrUpdateEvent(kFile1), |
| + CreateFetchEvent(), |
| + CreateProcessRemoteChangeEvent(), |
| CreateRemoteFileDeleteEvent(kFile1), |
| }; |
| RunTest(CreateTestCase(sync_event)); |
| } |
| +TEST_F(DriveFileSyncServiceSyncTest, RelaunchTest) { |
| + SyncEvent sync_event[] = { |
| + CreateRelaunchEvent(), |
| + }; |
| + |
| + RunTest(CreateTestCase(sync_event)); |
| +} |
| + |
| +TEST_F(DriveFileSyncServiceSyncTest, SquashedFileAddTest) { |
| + std::string kFile1 = "file title 1"; |
| + SyncEvent sync_event[] = { |
| + CreateRemoteFileAddOrUpdateEvent(kFile1), |
| + CreateFetchEvent(), |
| + CreateRemoteFileDeleteEvent(kFile1), |
| + }; |
| + RunTest(CreateTestCase(sync_event)); |
| +} |
| + |
| } // namespace sync_file_system |