blob: 483221c7cd620802899bb1766e2cb3210674a9bd [file] [log] [blame]
// Copyright 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 "base/run_loop.h"
#include "chrome/browser/sync/supervised_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(ENABLE_PRE_SYNC_BACKUP)
class MockSigninManagerWrapper : public SupervisedUserSigninManagerWrapper {
public:
MockSigninManagerWrapper() : SupervisedUserSigninManagerWrapper(NULL, NULL) {}
MOCK_CONST_METHOD0(GetEffectiveUsername, std::string());
};
class FakeSyncPrefs : public sync_driver::SyncPrefs {
public:
FakeSyncPrefs() : rollback_tries_left_(0) {}
int GetRemainingRollbackTries() const override {
return rollback_tries_left_;
}
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;
}
protected:
void SetUp() override {
backup_started_ = false;
rollback_started_ = 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)));
}
void PumpLoop() {
base::RunLoop run_loop;
loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
run_loop.Run();
}
MockSigninManagerWrapper signin_wrapper_;
FakeSyncPrefs fake_prefs_;
scoped_ptr<browser_sync::BackupRollbackController> controller_;
bool backup_started_;
bool rollback_started_;
base::MessageLoop loop_;
};
TEST_F(BackupRollbackControllerTest, StartBackup) {
EXPECT_TRUE(controller_->StartBackup());
PumpLoop();
EXPECT_TRUE(backup_started_);
}
TEST_F(BackupRollbackControllerTest, NoBackupIfDisabled) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kSyncDisableBackup);
base::RunLoop run_loop;
EXPECT_FALSE(controller_->StartBackup());
loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
run_loop.Run();
EXPECT_FALSE(backup_started_);
}
TEST_F(BackupRollbackControllerTest, StartRollback) {
fake_prefs_.SetRemainingRollbackTries(1);
EXPECT_TRUE(controller_->StartRollback());
PumpLoop();
EXPECT_TRUE(rollback_started_);
EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries());
}
TEST_F(BackupRollbackControllerTest, NoRollbackIfOutOfTries) {
fake_prefs_.SetRemainingRollbackTries(0);
EXPECT_FALSE(controller_->StartRollback());
PumpLoop();
EXPECT_FALSE(rollback_started_);
}
TEST_F(BackupRollbackControllerTest, NoRollbackIfUserSignedIn) {
fake_prefs_.SetRemainingRollbackTries(1);
EXPECT_CALL(signin_wrapper_, GetEffectiveUsername())
.Times(1)
.WillOnce(Return("test"));
EXPECT_FALSE(controller_->StartRollback());
EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries());
PumpLoop();
EXPECT_FALSE(backup_started_);
EXPECT_FALSE(rollback_started_);
}
TEST_F(BackupRollbackControllerTest, NoRollbackIfDisabled) {
fake_prefs_.SetRemainingRollbackTries(1);
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kSyncDisableRollback);
EXPECT_FALSE(controller_->StartRollback());
EXPECT_EQ(0, fake_prefs_.GetRemainingRollbackTries());
PumpLoop();
EXPECT_FALSE(rollback_started_);
}
#endif
} // anonymous namespace