| // 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/vpd_utils_impl.h" | |
| #include <memory> | |
| #include <string> | |
| #include <utility> | |
| #include <vector> | |
| #include <base/files/file_path.h> | |
| #include <base/files/scoped_temp_dir.h> | |
| #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 rmad { | |
| class VpdUtilsTest : public testing::Test { | |
| public: | |
| VpdUtilsTest() = default; | |
| ~VpdUtilsTest() override = default; | |
| }; | |
| TEST_F(VpdUtilsTest, GetSerialNumber_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string serial_number; | |
| EXPECT_TRUE(vpd_utils->GetSerialNumber(&serial_number)); | |
| EXPECT_EQ(serial_number, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, GetSerialNumber_Fail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string serial_number; | |
| EXPECT_FALSE(vpd_utils->GetSerialNumber(&serial_number)); | |
| } | |
| TEST_F(VpdUtilsTest, GetSerialNumber_Nullptr) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_DEATH(vpd_utils->GetSerialNumber(nullptr), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetCustomLabelTag_NonLegacy_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string custom_label_tag; | |
| EXPECT_TRUE(vpd_utils->GetCustomLabelTag(&custom_label_tag, false)); | |
| EXPECT_EQ(custom_label_tag, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, GetCustomLabelTag_Legacy_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string custom_label_tag; | |
| EXPECT_TRUE(vpd_utils->GetCustomLabelTag(&custom_label_tag, true)); | |
| EXPECT_EQ(custom_label_tag, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, GetCustomLabelTag_Empty) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string custom_label_tag; | |
| EXPECT_FALSE(vpd_utils->GetCustomLabelTag(&custom_label_tag, false)); | |
| EXPECT_EQ(custom_label_tag, ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetCustomLabelTag_Nullptr) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_DEATH(vpd_utils->GetCustomLabelTag(nullptr, false), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegion_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string region; | |
| EXPECT_TRUE(vpd_utils->GetRegion(®ion)); | |
| EXPECT_EQ(region, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegion_Fail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string region; | |
| EXPECT_FALSE(vpd_utils->GetRegion(®ion)); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegion_Nullptr) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_DEATH(vpd_utils->GetRegion(nullptr), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetCalibbias_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| { | |
| InSequence seq; | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("123"), Return(true))); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("456"), Return(true))); | |
| } | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::vector<int> calibbias; | |
| EXPECT_TRUE(vpd_utils->GetCalibbias({"x", "y"}, &calibbias)); | |
| EXPECT_EQ(calibbias.size(), 2); | |
| EXPECT_EQ(calibbias[0], 123); | |
| EXPECT_EQ(calibbias[1], 456); | |
| } | |
| TEST_F(VpdUtilsTest, GetCalibbias_Fail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::vector<int> calibbias; | |
| EXPECT_FALSE(vpd_utils->GetCalibbias({"x", "y"}, &calibbias)); | |
| } | |
| TEST_F(VpdUtilsTest, GetCalibbias_Fail_ParseError) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| { | |
| InSequence seq; | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("123"), Return(true))); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| } | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::vector<int> calibbias; | |
| EXPECT_FALSE(vpd_utils->GetCalibbias({"x", "y"}, &calibbias)); | |
| } | |
| TEST_F(VpdUtilsTest, GetCalibbias_Nullptr) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_DEATH(vpd_utils->GetCalibbias({"x", "y"}, nullptr), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegistrationCode_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| { | |
| InSequence seq; | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("def"), Return(true))); | |
| } | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string ubind, gbind; | |
| EXPECT_TRUE(vpd_utils->GetRegistrationCode(&ubind, &gbind)); | |
| EXPECT_EQ(ubind, "abc"); | |
| EXPECT_EQ(gbind, "def"); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegistrationCode_Fail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillOnce(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string ubind, gbind; | |
| EXPECT_FALSE(vpd_utils->GetRegistrationCode(&ubind, &gbind)); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegistrationCode_NullptrUbind) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string gbind; | |
| EXPECT_DEATH(vpd_utils->GetRegistrationCode(nullptr, &gbind), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetRegistrationCode_NullptrGbind) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string ubind; | |
| EXPECT_DEATH(vpd_utils->GetRegistrationCode(&ubind, nullptr), ""); | |
| } | |
| TEST_F(VpdUtilsTest, GetStableDeviceSecret_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce(DoAll(SetArgPointee<1>("abc"), Return(true))); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string stable_dev_secret; | |
| EXPECT_TRUE(vpd_utils->GetStableDeviceSecret(&stable_dev_secret)); | |
| EXPECT_EQ(stable_dev_secret, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, SetSerialNumber_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "serial_number=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string serial_number; | |
| EXPECT_TRUE(vpd_utils->SetSerialNumber("abc")); | |
| EXPECT_TRUE(vpd_utils->GetSerialNumber(&serial_number)); | |
| EXPECT_EQ(serial_number, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, SetCustomLabelTag_NonLegacy_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "custom_label_tag=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string custom_label_tag; | |
| EXPECT_TRUE(vpd_utils->SetCustomLabelTag("abc", false)); | |
| EXPECT_TRUE(vpd_utils->GetCustomLabelTag(&custom_label_tag, false)); | |
| EXPECT_EQ(custom_label_tag, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, SetCustomLabelTag_Legacy_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "whitelabel_tag=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string custom_label_tag; | |
| EXPECT_TRUE(vpd_utils->SetCustomLabelTag("abc", true)); | |
| EXPECT_TRUE(vpd_utils->GetCustomLabelTag(&custom_label_tag, true)); | |
| EXPECT_EQ(custom_label_tag, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, SetRegion_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = {"/usr/sbin/vpd", "-i", | |
| "RO_VPD", "-s", "region=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string region; | |
| EXPECT_TRUE(vpd_utils->SetRegion("abc")); | |
| EXPECT_TRUE(vpd_utils->GetRegion(®ion)); | |
| EXPECT_EQ(region, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, SetCalibbias_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| // The command can be in either order. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect1 = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "x=123", "-s", "y=456"}; | |
| const std::vector<std::string> expect2 = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "y=456", "-s", "x=123"}; | |
| EXPECT_TRUE(argv == expect1 || argv == expect2); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::vector<int> calibbias; | |
| EXPECT_TRUE(vpd_utils->SetCalibbias({{"x", 123}, {"y", 456}})); | |
| EXPECT_TRUE(vpd_utils->GetCalibbias({"x", "y"}, &calibbias)); | |
| EXPECT_EQ(calibbias.size(), 2); | |
| EXPECT_EQ(calibbias[0], 123); | |
| EXPECT_EQ(calibbias[1], 456); | |
| } | |
| TEST_F(VpdUtilsTest, SetRegistrationCode_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| // The command can be in either order. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect1 = {"/usr/sbin/vpd", | |
| "-i", | |
| "RW_VPD", | |
| "-s", | |
| "ubind_attribute=abc", | |
| "-s", | |
| "gbind_attribute=def"}; | |
| const std::vector<std::string> expect2 = {"/usr/sbin/vpd", | |
| "-i", | |
| "RW_VPD", | |
| "-s", | |
| "gbind_attribute=def", | |
| "-s", | |
| "ubind_attribute=abc"}; | |
| EXPECT_TRUE(argv == expect1 || argv == expect2); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string ubind, gbind; | |
| EXPECT_TRUE(vpd_utils->SetRegistrationCode("abc", "def")); | |
| EXPECT_TRUE(vpd_utils->GetRegistrationCode(&ubind, &gbind)); | |
| EXPECT_EQ(ubind, "abc"); | |
| EXPECT_EQ(gbind, "def"); | |
| } | |
| TEST_F(VpdUtilsTest, SetStableDeviceSecret_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| // The command can be in either order. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", | |
| "stable_device_secret_DO_NOT_SHARE=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string stable_dev_secret; | |
| EXPECT_TRUE(vpd_utils->SetStableDeviceSecret("abc")); | |
| EXPECT_TRUE(vpd_utils->GetStableDeviceSecret(&stable_dev_secret)); | |
| EXPECT_EQ(stable_dev_secret, "abc"); | |
| } | |
| TEST_F(VpdUtilsTest, RemoveCustomLabelTag_Success) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| // The command can be in either order. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-d", "custom_label_tag"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string stable_dev_secret; | |
| EXPECT_TRUE(vpd_utils->RemoveCustomLabelTag()); | |
| } | |
| TEST_F(VpdUtilsTest, RemoveCustomLabelTag_Failed) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| // Expect this to be called when flushing the cached values in destructor. | |
| // The command can be in either order. | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-d", "custom_label_tag"}; | |
| EXPECT_EQ(argv, expect); | |
| return false; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| std::string stable_dev_secret; | |
| EXPECT_FALSE(vpd_utils->RemoveCustomLabelTag()); | |
| } | |
| TEST_F(VpdUtilsTest, FlushRoSuccess) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect = { | |
| "/usr/sbin/vpd", "-i", "RO_VPD", "-s", "serial_number=abc"}; | |
| EXPECT_EQ(argv, expect); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetSerialNumber("abc")); | |
| EXPECT_TRUE(vpd_utils->FlushOutRoVpdCache()); | |
| } | |
| TEST_F(VpdUtilsTest, FlushRwSuccess) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)) | |
| .WillOnce([](const std::vector<std::string>& argv, std::string* output) { | |
| const std::vector<std::string> expect1 = {"/usr/sbin/vpd", | |
| "-i", | |
| "RW_VPD", | |
| "-s", | |
| "ubind_attribute=abc", | |
| "-s", | |
| "gbind_attribute=def"}; | |
| const std::vector<std::string> expect2 = {"/usr/sbin/vpd", | |
| "-i", | |
| "RW_VPD", | |
| "-s", | |
| "gbind_attribute=def", | |
| "-s", | |
| "ubind_attribute=abc"}; | |
| EXPECT_TRUE(argv == expect1 || argv == expect2); | |
| return true; | |
| }); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetRegistrationCode("abc", "def")); | |
| EXPECT_TRUE(vpd_utils->FlushOutRwVpdCache()); | |
| } | |
| TEST_F(VpdUtilsTest, FlushRoFail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutputAndError(_, _)) | |
| .WillRepeatedly(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetSerialNumber("abc")); | |
| EXPECT_FALSE(vpd_utils->FlushOutRoVpdCache()); | |
| } | |
| TEST_F(VpdUtilsTest, FlushRwFail) { | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| EXPECT_CALL(*mock_cmd_utils, GetOutput(_, _)).WillRepeatedly(Return(false)); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetRegistrationCode("abc", "def")); | |
| EXPECT_FALSE(vpd_utils->FlushOutRwVpdCache()); | |
| } | |
| TEST_F(VpdUtilsTest, ClearRoSuccess) { | |
| // If we clear the cache after setting the value, we expect nothing to | |
| // happen during the flush. | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetSerialNumber("abc")); | |
| vpd_utils->ClearRoVpdCache(); | |
| EXPECT_TRUE(vpd_utils->FlushOutRoVpdCache()); | |
| } | |
| TEST_F(VpdUtilsTest, ClearRwSuccess) { | |
| // If we clear the cache after setting the value, we expect nothing to | |
| // happen during the flush. | |
| auto mock_cmd_utils = std::make_unique<StrictMock<MockCmdUtils>>(); | |
| auto vpd_utils = std::make_unique<VpdUtilsImpl>(std::move(mock_cmd_utils)); | |
| EXPECT_TRUE(vpd_utils->SetRegistrationCode("abc", "def")); | |
| vpd_utils->ClearRwVpdCache(); | |
| EXPECT_TRUE(vpd_utils->FlushOutRwVpdCache()); | |
| } | |
| } // namespace rmad |