Index: chrome/browser/sync/backup_rollback_controller_unittest.cc |
diff --git a/chrome/browser/sync/backup_rollback_controller_unittest.cc b/chrome/browser/sync/backup_rollback_controller_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6ff5792507d80135612624d7d1fd56f736179751 |
--- /dev/null |
+++ b/chrome/browser/sync/backup_rollback_controller_unittest.cc |
@@ -0,0 +1,170 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/sync/backup_rollback_controller.h" |
+ |
+#include "base/command_line.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/message_loop/message_loop.h" |
+#include "chrome/browser/sync/managed_user_signin_manager_wrapper.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "components/sync_driver/sync_prefs.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using ::testing::Return; |
+ |
+namespace { |
+ |
+#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) |
+ |
+class MockSigninManagerWrapper : public ManagedUserSigninManagerWrapper { |
+ public: |
+ MockSigninManagerWrapper() : ManagedUserSigninManagerWrapper(NULL, NULL) {} |
+ |
+ MOCK_CONST_METHOD0(GetEffectiveUsername, std::string()); |
+}; |
+ |
+class FakeSyncPrefs : public sync_driver::SyncPrefs { |
+ public: |
+ FakeSyncPrefs() : rollback_tries_left_(0) {} |
+ |
+ virtual int GetRemainingRollbackTries() const OVERRIDE { |
+ return rollback_tries_left_; |
+ } |
+ |
+ virtual void SetRemainingRollbackTries(int v) OVERRIDE { |
+ rollback_tries_left_ = v; |
+ } |
+ |
+ private: |
+ int rollback_tries_left_; |
+}; |
+ |
+class BackupRollbackControllerTest : public testing::Test { |
+ public: |
+ void ControllerCallback(bool start_backup) { |
+ if (start_backup) |
+ backup_started_ = true; |
+ else |
+ rollback_started_ = true; |
+ |
+ if (need_loop_quit_) |
+ base::MessageLoop::current()->Quit(); |
+ } |
+ |
+ protected: |
+ virtual void SetUp() OVERRIDE { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kSyncEnableBackupRollback); |
+ |
+ backup_started_ = false; |
+ rollback_started_ = false; |
+ need_loop_quit_ = false; |
+ |
+ EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) |
+ .WillRepeatedly(Return("")); |
+ |
+ controller_.reset(new browser_sync::BackupRollbackController( |
+ &fake_prefs_, &signin_wrapper_, |
+ base::Bind(&BackupRollbackControllerTest::ControllerCallback, |
+ base::Unretained(this), true), |
+ base::Bind(&BackupRollbackControllerTest::ControllerCallback, |
+ base::Unretained(this), false))); |
+ } |
+ |
+ MockSigninManagerWrapper signin_wrapper_; |
+ FakeSyncPrefs fake_prefs_; |
+ scoped_ptr<browser_sync::BackupRollbackController> controller_; |
+ bool backup_started_; |
+ bool rollback_started_; |
+ bool need_loop_quit_; |
+ base::MessageLoop loop_; |
+}; |
+ |
+TEST_F(BackupRollbackControllerTest, DelayStart) { |
+ controller_->Start(base::TimeDelta::FromMilliseconds(100)); |
+ EXPECT_FALSE(backup_started_); |
+ need_loop_quit_ = true; |
+ base::MessageLoop::current()->Run(); |
+ EXPECT_TRUE(backup_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, NoDelayStart) { |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(backup_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, NoStartWithUserSignedIn) { |
+ EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) |
+ .Times(1) |
+ .WillOnce(Return("test")); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_FALSE(backup_started_); |
+ EXPECT_FALSE(rollback_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, StartOnUserSignedOut) { |
+ EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) |
+ .Times(2) |
+ .WillOnce(Return("test")) |
+ .WillOnce(Return("")); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_FALSE(backup_started_); |
+ EXPECT_FALSE(rollback_started_); |
+ |
+ // 2nd time no signed-in user. Starts backup. |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(backup_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, StartRollback) { |
+ EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) |
+ .Times(2) |
+ .WillOnce(Return("test")) |
+ .WillOnce(Return("")); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_FALSE(backup_started_); |
+ EXPECT_FALSE(rollback_started_); |
+ |
+ controller_->OnRollbackReceived(); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(rollback_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, RollbackOnBrowserStart) { |
+ fake_prefs_.SetRemainingRollbackTries(1); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(rollback_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, BackupAfterRollbackDone) { |
+ fake_prefs_.SetRemainingRollbackTries(3); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(rollback_started_); |
+ EXPECT_FALSE(backup_started_); |
+ |
+ controller_->OnRollbackDone(); |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(backup_started_); |
+} |
+ |
+TEST_F(BackupRollbackControllerTest, GiveUpRollback) { |
+ fake_prefs_.SetRemainingRollbackTries(3); |
+ for (int i = 0; i < 3; ++i) { |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_TRUE(rollback_started_); |
+ EXPECT_FALSE(backup_started_); |
+ rollback_started_ = false; |
+ } |
+ |
+ controller_->Start(base::TimeDelta()); |
+ EXPECT_FALSE(rollback_started_); |
+ EXPECT_TRUE(backup_started_); |
+} |
+ |
+#endif |
+ |
+} // anonymous namespace |
+ |