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
17 using ::testing::Return;
18
19 namespace {
20
21 #if defined(ENABLE_PRE_SYNC_BACKUP)
22
23 class MockSigninManagerWrapper : public SupervisedUserSigninManagerWrapper {
24 public:
MockSigninManagerWrapper()25 MockSigninManagerWrapper() : SupervisedUserSigninManagerWrapper(NULL, NULL) {}
26
27 MOCK_CONST_METHOD0(GetEffectiveUsername, std::string());
28 };
29
30 class FakeSyncPrefs : public sync_driver::SyncPrefs {
31 public:
FakeSyncPrefs()32 FakeSyncPrefs() : rollback_tries_left_(0) {}
33
GetRemainingRollbackTries() const34 virtual int GetRemainingRollbackTries() const OVERRIDE {
35 return rollback_tries_left_;
36 }
37
SetRemainingRollbackTries(int v)38 virtual void SetRemainingRollbackTries(int v) OVERRIDE {
39 rollback_tries_left_ = v;
40 }
41
42 private:
43 int rollback_tries_left_;
44 };
45
46 class BackupRollbackControllerTest : public testing::Test {
47 public:
ControllerCallback(bool start_backup)48 void ControllerCallback(bool start_backup) {
49 if (start_backup)
50 backup_started_ = true;
51 else
52 rollback_started_ = true;
53 }
54
55 protected:
SetUp()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
PumpLoop()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
TEST_F(BackupRollbackControllerTest,StartBackup)85 TEST_F(BackupRollbackControllerTest, StartBackup) {
86 EXPECT_TRUE(controller_->StartBackup());
87 PumpLoop();
88 EXPECT_TRUE(backup_started_);
89 }
90
TEST_F(BackupRollbackControllerTest,NoBackupIfDisabled)91 TEST_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
TEST_F(BackupRollbackControllerTest,StartRollback)102 TEST_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
TEST_F(BackupRollbackControllerTest,NoRollbackIfOutOfTries)111 TEST_F(BackupRollbackControllerTest, NoRollbackIfOutOfTries) {
112 fake_prefs_.SetRemainingRollbackTries(0);
113
114 EXPECT_FALSE(controller_->StartRollback());
115 PumpLoop();
116 EXPECT_FALSE(rollback_started_);
117 }
118
TEST_F(BackupRollbackControllerTest,NoRollbackIfUserSignedIn)119 TEST_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
TEST_F(BackupRollbackControllerTest,NoRollbackIfDisabled)132 TEST_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