blob: 5950440ac62d44e993e4490e1cb704e38b3ddd72 [file] [edit]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "minios/mock_process_manager.h"
#include "minios/recovery_installer.h"
using testing::_;
using testing::DoAll;
using testing::Return;
using testing::SetArgPointee;
namespace minios {
class RecoveryInstallerTest : public ::testing::Test {
protected:
std::shared_ptr<MockProcessManager> mock_process_manager_ =
std::make_shared<MockProcessManager>();
RecoveryInstaller recovery_installer_{mock_process_manager_};
};
TEST_F(RecoveryInstallerTest, RepartitionDiskProcessFailure) {
EXPECT_CALL(*mock_process_manager_, RunCommandWithOutput(_, _, _, _))
.WillOnce(DoAll(SetArgPointee<1>(0), Return(false)));
EXPECT_FALSE(recovery_installer_.RepartitionDisk());
}
TEST_F(RecoveryInstallerTest, RepartitionDiskExitFailure) {
EXPECT_CALL(*mock_process_manager_, RunCommandWithOutput(_, _, _, _))
.WillOnce(DoAll(SetArgPointee<1>(1), Return(true)));
EXPECT_FALSE(recovery_installer_.RepartitionDisk());
}
TEST_F(RecoveryInstallerTest, RepeatedRepartitionDisk) {
EXPECT_CALL(*mock_process_manager_, RunCommandWithOutput(_, _, _, _))
.WillOnce(DoAll(SetArgPointee<1>(0), Return(true)));
EXPECT_TRUE(recovery_installer_.RepartitionDisk());
// Does not call to repartition the disk again since it completed successfully
// last time. Still returns true.
EXPECT_TRUE(recovery_installer_.RepartitionDisk());
}
} // namespace minios