blob: 4b46f18d5e22103bbf41aedef6ef648d14ae7362 [file] [log] [blame] [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 "rmad/utils/flashrom_utils_impl.h"
#include <memory>
#include <utility>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "rmad/utils/mock_cmd_utils.h"
using testing::_;
using testing::DoAll;
using testing::InSequence;
using testing::Return;
using testing::SetArgPointee;
using testing::StrictMock;
namespace {
constexpr char kFlashromWriteProtectEnabledOutput[] =
R"(WP: write protect is enabled.)";
constexpr char kFlashromWriteProtectDisabledOutput[] =
R"(WP: write protect is disabled.)";
constexpr char kFutilityWriteProtectEnabledOutput[] = R"(WP status: enabled.)";
constexpr char kFutilityWriteProtectDisabledOutput[] = R"(WP status: disabled)";
constexpr char kFutilityWriteProtectMisconfiguredOutput[] =
R"(WP status: misconfigured (srp = 1, start = 0000000000, length = 0000000000))";
} // namespace
namespace rmad {
class FlashromUtilsTest : public testing::Test {
public:
FlashromUtilsTest() = default;
~FlashromUtilsTest() override = default;
};
TEST_F(FlashromUtilsTest, GetApWriteProtectionStatus_Enabled) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _))
.WillOnce(DoAll(SetArgPointee<1>(kFutilityWriteProtectEnabledOutput),
Return(true)));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_TRUE(flashrom_utils->GetApWriteProtectionStatus(&enabled));
EXPECT_TRUE(enabled);
}
TEST_F(FlashromUtilsTest, GetApWriteProtectionStatus_Disabled) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _))
.WillOnce(DoAll(SetArgPointee<1>(kFutilityWriteProtectDisabledOutput),
Return(true)));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_TRUE(flashrom_utils->GetApWriteProtectionStatus(&enabled));
EXPECT_FALSE(enabled);
}
TEST_F(FlashromUtilsTest, GetApWriteProtectionStatus_Misconfigured) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _))
.WillOnce(
DoAll(SetArgPointee<1>(kFutilityWriteProtectMisconfiguredOutput),
Return(true)));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_TRUE(flashrom_utils->GetApWriteProtectionStatus(&enabled));
EXPECT_TRUE(enabled);
}
TEST_F(FlashromUtilsTest, GetApWriteProtectionStatus_Failed) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_FALSE(flashrom_utils->GetApWriteProtectionStatus(&enabled));
}
TEST_F(FlashromUtilsTest, GetEcWriteProtectionStatus_Enabled) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _))
.WillOnce(DoAll(SetArgPointee<1>(kFlashromWriteProtectEnabledOutput),
Return(true)));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_TRUE(flashrom_utils->GetEcWriteProtectionStatus(&enabled));
EXPECT_TRUE(enabled);
}
TEST_F(FlashromUtilsTest, GetEcWriteProtectionStatus_Disabled) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _))
.WillOnce(DoAll(SetArgPointee<1>(kFlashromWriteProtectDisabledOutput),
Return(true)));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_TRUE(flashrom_utils->GetEcWriteProtectionStatus(&enabled));
EXPECT_FALSE(enabled);
}
TEST_F(FlashromUtilsTest, GetEcWriteProtectionStatus_Failed) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false));
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
bool enabled;
EXPECT_FALSE(flashrom_utils->GetEcWriteProtectionStatus(&enabled));
}
TEST_F(FlashromUtilsTest, EnableApSoftwareWriteProtection_Success) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
{
InSequence seq;
// Futility set AP WP range.
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(true));
}
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
EXPECT_TRUE(flashrom_utils->EnableApSoftwareWriteProtection());
}
TEST_F(FlashromUtilsTest, EnableApSoftwareWriteProtection_EnableApWpFail) {
auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>();
{
InSequence seq;
// Futtility set AP WP range.
EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false));
}
auto flashrom_utils =
std::make_unique<FlashromUtilsImpl>(std::move(mock_cmd_utils));
EXPECT_FALSE(flashrom_utils->EnableApSoftwareWriteProtection());
}
} // namespace rmad