Add new oem command to set accel power mode
Signed-off-by: Gaurav Gandhi <gauravgandhi@google.com>
Change-Id: Ie0b47477b7ae9e8ae206ac0645571a7a79dbda40
diff --git a/test/google_accel_oob_unittest.cpp b/test/google_accel_oob_unittest.cpp
index 163b602..5797cd3 100644
--- a/test/google_accel_oob_unittest.cpp
+++ b/test/google_accel_oob_unittest.cpp
@@ -26,6 +26,7 @@
namespace ipmi
{
+using ::testing::_;
using ::testing::Return;
TEST(GoogleAccelOobTest, DeviceCount_Success)
@@ -235,5 +236,96 @@
EXPECT_EQ(reply->data, kTestData);
}
+TEST(GoogleAccelOobTest, SetVrSettings_Success)
+{
+ ::testing::StrictMock<HandlerMock> h;
+ constexpr uint8_t kChipId = 2;
+ constexpr uint8_t kSettingsId = 1;
+ constexpr uint16_t kTestValue = 0xAABB;
+
+ std::vector<uint8_t> testData = {kChipId, kSettingsId, 0xBB, 0xAA};
+
+ EXPECT_CALL(h, accelSetVrSettings(_, kChipId, kSettingsId, kTestValue))
+ .WillOnce(Return());
+
+ Resp r = accelSetVrSettings(nullptr, testData, &h);
+
+ const auto response = std::get<0>(r);
+ EXPECT_EQ(response, IPMI_CC_OK);
+
+ const auto payload = std::get<1>(r);
+ ASSERT_EQ(payload.has_value(), true);
+ const auto payload_tuple = payload.value();
+ const auto reply_cmd = std::get<0>(payload_tuple);
+ EXPECT_EQ(reply_cmd, SysSetAccelVrSettings);
+ const auto reply_buff = std::get<1>(payload_tuple);
+ ASSERT_EQ(reply_buff.size(), 0);
+}
+
+TEST(GoogleAccelOobTest, SetVrSettings_HandleIncorrectDataSize)
+{
+ ::testing::StrictMock<HandlerMock> h;
+ constexpr uint8_t kChipId = 2;
+ uint8_t kSettingsId = 1;
+
+ std::vector<uint8_t> testData = {kChipId, kSettingsId};
+
+ EXPECT_CALL(h, accelSetVrSettings(_, _, _, _)).Times(0);
+
+ Resp r = accelSetVrSettings(nullptr, testData, &h);
+
+ const auto response = std::get<0>(r);
+ EXPECT_EQ(response, IPMI_CC_REQ_DATA_LEN_INVALID);
+
+ const auto payload = std::get<1>(r);
+ ASSERT_EQ(payload.has_value(), false);
+}
+
+TEST(GoogleAccelOobTest, GetVrSettings_Success)
+{
+ ::testing::StrictMock<HandlerMock> h;
+ constexpr uint8_t kChipId = 3;
+ constexpr uint8_t kSettingsId = 2;
+
+ std::vector<uint8_t> testData = {kChipId, kSettingsId};
+
+ EXPECT_CALL(h, accelGetVrSettings(_, kChipId, kSettingsId))
+ .WillOnce(Return(0xAABB));
+
+ Resp r = accelGetVrSettings(nullptr, testData, &h);
+
+ const auto response = std::get<0>(r);
+ EXPECT_EQ(response, IPMI_CC_OK);
+
+ const auto payload = std::get<1>(r);
+ ASSERT_EQ(payload.has_value(), true);
+ const auto payload_tuple = payload.value();
+ const auto reply_cmd = std::get<0>(payload_tuple);
+ EXPECT_EQ(reply_cmd, SysGetAccelVrSettings);
+ const auto reply_buff = std::get<1>(payload_tuple);
+ ASSERT_EQ(reply_buff.size(), 2);
+
+ EXPECT_EQ(reply_buff.at(0), 0xBB);
+ EXPECT_EQ(reply_buff.at(1), 0xAA);
+}
+
+TEST(GoogleAccelOobTest, GetVrSettings_HandleIncorrectDataSize)
+{
+ ::testing::StrictMock<HandlerMock> h;
+ constexpr uint8_t kChipId = 2;
+ uint8_t kSettingsId = 1;
+
+ std::vector<uint8_t> testData = {kChipId, kSettingsId, 0xCC};
+
+ EXPECT_CALL(h, accelGetVrSettings(_, _, _)).Times(0);
+
+ Resp r = accelGetVrSettings(nullptr, testData, &h);
+
+ const auto response = std::get<0>(r);
+ EXPECT_EQ(response, IPMI_CC_REQ_DATA_LEN_INVALID);
+
+ const auto payload = std::get<1>(r);
+ ASSERT_EQ(payload.has_value(), false);
+}
} // namespace ipmi
} // namespace google
diff --git a/test/handler_mock.hpp b/test/handler_mock.hpp
index f62564e..579dfc6 100644
--- a/test/handler_mock.hpp
+++ b/test/handler_mock.hpp
@@ -16,6 +16,8 @@
#include "handler.hpp"
+#include <ipmid/message.hpp>
+
#include <cstddef>
#include <cstdint>
#include <string>
@@ -64,6 +66,11 @@
MOCK_METHOD(std::vector<uint8_t>, pcieBifurcation, (uint8_t), (override));
MOCK_METHOD(uint8_t, getBmcMode, (), (override));
MOCK_METHOD(void, linuxBootDone, (), (const, override));
+ MOCK_METHOD(void, accelSetVrSettings,
+ (::ipmi::Context::ptr, uint8_t, uint8_t, uint16_t),
+ (const, override));
+ MOCK_METHOD(uint16_t, accelGetVrSettings,
+ (::ipmi::Context::ptr, uint8_t, uint8_t), (const, override));
};
} // namespace ipmi