1// Copyright 2014 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/backup_rollback_controller.h" 6 7#include "base/command_line.h" 8#include "base/memory/scoped_ptr.h" 9#include "base/message_loop/message_loop.h" 10#include "base/run_loop.h" 11#include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h" 12#include "chrome/common/chrome_switches.h" 13#include "components/sync_driver/sync_prefs.h" 14#include "testing/gmock/include/gmock/gmock.h" 15#include "testing/gtest/include/gtest/gtest.h" 16 17using ::testing::Return; 18 19namespace { 20 21#if defined(ENABLE_PRE_SYNC_BACKUP) 22 23class MockSigninManagerWrapper : public SupervisedUserSigninManagerWrapper { 24 public: 25 MockSigninManagerWrapper() : SupervisedUserSigninManagerWrapper(NULL, NULL) {} 26 27 MOCK_CONST_METHOD0(GetEffectiveUsername, std::string()); 28}; 29 30class FakeSyncPrefs : public sync_driver::SyncPrefs { 31 public: 32 FakeSyncPrefs() : rollback_tries_left_(0) {} 33 34 virtual int GetRemainingRollbackTries() const OVERRIDE { 35 return rollback_tries_left_; 36 } 37 38 virtual void SetRemainingRollbackTries(int v) OVERRIDE { 39 rollback_tries_left_ = v; 40 } 41 42 private: 43 int rollback_tries_left_; 44}; 45 46class BackupRollbackControllerTest : public testing::Test { 47 public: 48 void ControllerCallback(bool start_backup) { 49 if (start_backup) 50 backup_started_ = true; 51 else 52 rollback_started_ = true; 53 } 54 55 protected: 56 virtual void SetUp() OVERRIDE { 57 backup_started_ = false; 58 rollback_started_ = false; 59 60 EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) 61 .WillRepeatedly(Return("")); 62 63 controller_.reset(new browser_sync::BackupRollbackController( 64 &fake_prefs_, &signin_wrapper_, 65 base::Bind(&BackupRollbackControllerTest::ControllerCallback, 66 base::Unretained(this), true), 67 base::Bind(&BackupRollbackControllerTest::ControllerCallback, 68 base::Unretained(this), false))); 69 } 70 71 void PumpLoop() { 72 base::RunLoop run_loop; 73 loop_.PostTask(FROM_HERE, run_loop.QuitClosure()); 74 run_loop.Run(); 75 } 76 77 MockSigninManagerWrapper signin_wrapper_; 78 FakeSyncPrefs fake_prefs_; 79 scoped_ptr<browser_sync::BackupRollbackController> controller_; 80 bool backup_started_; 81 bool rollback_started_; 82 base::MessageLoop loop_; 83}; 84 85TEST_F(BackupRollbackControllerTest, StartBackup) { 86 EXPECT_TRUE(controller_->StartBackup()); 87 PumpLoop(); 88 EXPECT_TRUE(backup_started_); 89} 90 91TEST_F(BackupRollbackControllerTest, NoBackupIfDisabled) { 92 CommandLine::ForCurrentProcess()->AppendSwitch( 93 switches::kSyncDisableBackup); 94 95 base::RunLoop run_loop; 96 EXPECT_FALSE(controller_->StartBackup()); 97 loop_.PostTask(FROM_HERE, run_loop.QuitClosure()); 98 run_loop.Run(); 99 EXPECT_FALSE(backup_started_); 100} 101 102TEST_F(BackupRollbackControllerTest, StartRollback) { 103 fake_prefs_.SetRemainingRollbackTries(1); 104 105 EXPECT_TRUE(controller_->StartRollback()); 106 PumpLoop(); 107 EXPECT_TRUE(rollback_started_); 108 EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries()); 109} 110 111TEST_F(BackupRollbackControllerTest, NoRollbackIfOutOfTries) { 112 fake_prefs_.SetRemainingRollbackTries(0); 113 114 EXPECT_FALSE(controller_->StartRollback()); 115 PumpLoop(); 116 EXPECT_FALSE(rollback_started_); 117} 118 119TEST_F(BackupRollbackControllerTest, NoRollbackIfUserSignedIn) { 120 fake_prefs_.SetRemainingRollbackTries(1); 121 EXPECT_CALL(signin_wrapper_, GetEffectiveUsername()) 122 .Times(1) 123 .WillOnce(Return("test")); 124 EXPECT_FALSE(controller_->StartRollback()); 125 EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries()); 126 127 PumpLoop(); 128 EXPECT_FALSE(backup_started_); 129 EXPECT_FALSE(rollback_started_); 130} 131 132TEST_F(BackupRollbackControllerTest, NoRollbackIfDisabled) { 133 fake_prefs_.SetRemainingRollbackTries(1); 134 135 CommandLine::ForCurrentProcess()->AppendSwitch( 136 switches::kSyncDisableRollback); 137 EXPECT_FALSE(controller_->StartRollback()); 138 EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries()); 139 140 PumpLoop(); 141 EXPECT_FALSE(rollback_started_); 142} 143 144#endif 145 146} // anonymous namespace 147 148