| // 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/cbi_utils_impl.h" |
| |
| #include <memory> |
| #include <string> |
| #include <utility> |
| |
| #include <base/files/file_path.h> |
| #include <base/files/scoped_temp_dir.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "rmad/constants.h" |
| #include "rmad/utils/mock_cmd_utils.h" |
| |
| using testing::_; |
| using testing::DoAll; |
| using testing::Return; |
| using testing::SetArgPointee; |
| using testing::StrictMock; |
| |
| namespace { |
| |
| constexpr char kGetIntSuccessOutput[] = R"( |
| As uint: 1234 (0x4d2) |
| As binary: d2 04 |
| )"; |
| constexpr char kGetStrSuccessOutput[] = "part_num"; |
| constexpr char kRandomOutput[] = "*[)^"; |
| |
| } // namespace |
| |
| namespace rmad { |
| |
| class CbiUtilsTest : public testing::Test { |
| public: |
| CbiUtilsTest() = default; |
| ~CbiUtilsTest() override = default; |
| }; |
| |
| TEST_F(CbiUtilsTest, GetSkuId_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(kGetIntSuccessOutput), Return(true))); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t sku_id; |
| EXPECT_TRUE(cbi_utils->GetSkuId(&sku_id)); |
| EXPECT_EQ(sku_id, 1234); |
| } |
| |
| TEST_F(CbiUtilsTest, GetSkuId_Success_ParseFail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(kRandomOutput), Return(true))); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t sku_id; |
| EXPECT_FALSE(cbi_utils->GetSkuId(&sku_id)); |
| } |
| |
| TEST_F(CbiUtilsTest, GetSkuId_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t sku_id; |
| EXPECT_FALSE(cbi_utils->GetSkuId(&sku_id)); |
| } |
| |
| TEST_F(CbiUtilsTest, GetSkuId_Nullptr) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_DEATH(cbi_utils->GetSkuId(nullptr), ""); |
| } |
| |
| TEST_F(CbiUtilsTest, GetDramPartNum_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(kGetStrSuccessOutput), Return(true))); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| std::string part_num; |
| EXPECT_TRUE(cbi_utils->GetDramPartNum(&part_num)); |
| EXPECT_EQ(part_num, "part_num"); |
| } |
| |
| TEST_F(CbiUtilsTest, GetDramPartNum_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| std::string part_num; |
| EXPECT_FALSE(cbi_utils->GetDramPartNum(&part_num)); |
| } |
| |
| TEST_F(CbiUtilsTest, GetDramPartNum_Nullptr) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_DEATH(cbi_utils->GetDramPartNum(nullptr), ""); |
| } |
| |
| TEST_F(CbiUtilsTest, GetFirmwareConfig_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(kGetIntSuccessOutput), Return(true))); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t firmware_config; |
| EXPECT_TRUE(cbi_utils->GetFirmwareConfig(&firmware_config)); |
| EXPECT_EQ(firmware_config, 1234); |
| } |
| |
| TEST_F(CbiUtilsTest, GetFirmwareConfig_Success_ParseFail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(kRandomOutput), Return(true))); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t firmware_config; |
| EXPECT_FALSE(cbi_utils->GetFirmwareConfig(&firmware_config)); |
| } |
| |
| TEST_F(CbiUtilsTest, GetFirmwareConfig_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| uint32_t firmware_config; |
| EXPECT_FALSE(cbi_utils->GetFirmwareConfig(&firmware_config)); |
| } |
| |
| TEST_F(CbiUtilsTest, GetFirmwareConfig_Nullptr) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_DEATH(cbi_utils->GetFirmwareConfig(nullptr), ""); |
| } |
| |
| TEST_F(CbiUtilsTest, SetSkuId_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(true)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_TRUE(cbi_utils->SetSkuId(1)); |
| } |
| |
| TEST_F(CbiUtilsTest, SetSkuId_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_FALSE(cbi_utils->SetSkuId(123)); |
| } |
| |
| TEST_F(CbiUtilsTest, SetDramPartNum_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(true)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_TRUE(cbi_utils->SetDramPartNum("part_num")); |
| } |
| |
| TEST_F(CbiUtilsTest, SetDramPartNum_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_FALSE(cbi_utils->SetDramPartNum("part_num")); |
| } |
| |
| TEST_F(CbiUtilsTest, SetFirmwareConfig_Success) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(true)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_TRUE(cbi_utils->SetFirmwareConfig(1)); |
| } |
| |
| TEST_F(CbiUtilsTest, SetFirmwareConfig_Fail) { |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); |
| auto cbi_utils = std::make_unique<CbiUtilsImpl>(std::move(mock_cmd_utils)); |
| |
| EXPECT_FALSE(cbi_utils->SetFirmwareConfig(1)); |
| } |
| |
| } // namespace rmad |