blob: 305e7bec189fdc06a6299fd4563336cf404dd69d [file] [log] [blame]
#include "libpldmresponder/bios_attribute.hpp"
#include <nlohmann/json.hpp>
#include <gtest/gtest.h>
using namespace pldm::utils;
using namespace pldm::responder::bios;
class TestAttribute : public BIOSAttribute
{
public:
TestAttribute(const Json& entry, DBusHandler* const dbusHandler) :
BIOSAttribute(entry, dbusHandler)
{}
void setAttrValueOnDbus(const pldm_bios_attr_val_table_entry*,
const pldm_bios_attr_table_entry*,
const BIOSStringTable&) override
{}
void constructEntry(
const BIOSStringTable&, Table&, Table&,
std::optional<std::variant<int64_t, std::string>>) override
{}
const std::optional<DBusMapping>& getDbusMap()
{
return dBusMap;
}
int updateAttrVal(Table& /*newValue*/, uint16_t /*attrHdl*/,
uint8_t /*attrType*/,
const PropertyValue& /*newPropVal*/) override
{
return PLDM_SUCCESS;
}
void generateAttributeEntry(
const std::variant<int64_t, std::string>& /*attributevalue*/,
Table& /*attrValueEntry*/)
{}
};
TEST(BIOSAttribute, CtorTest)
{
auto jsonReadOnly = R"({
"attribute_name" : "ReadOnly",
"readOnly" : true,
"helpText" : "HelpText",
"displayName" : "DisplayName"
})"_json;
TestAttribute readOnly{jsonReadOnly, nullptr};
EXPECT_EQ(readOnly.name, "ReadOnly");
EXPECT_EQ(readOnly.readOnly, true);
auto jsonReadOnlyError = R"({
"attribute_nam":"ReadOnly"
})"_json;
using Json = nlohmann::json;
EXPECT_THROW((TestAttribute{jsonReadOnlyError, nullptr}), Json::exception);
auto jsonReadWrite = R"({
"attribute_name":"ReadWrite",
"readOnly" : false,
"helpText" : "HelpText",
"displayName" : "DisplayName",
"dbus":
{
"object_path" : "/xyz/abc/def",
"interface" : "xyz.openbmc.FWBoot.Side",
"property_name" : "Side",
"property_type" : "bool"
}
})"_json;
TestAttribute readWrite{jsonReadWrite, nullptr};
EXPECT_EQ(readWrite.name, "ReadWrite");
EXPECT_EQ(readWrite.readOnly, false);
auto dbusMap = readWrite.getDbusMap();
EXPECT_NE(dbusMap, std::nullopt);
EXPECT_EQ(dbusMap->objectPath, "/xyz/abc/def");
EXPECT_EQ(dbusMap->interface, "xyz.openbmc.FWBoot.Side");
EXPECT_EQ(dbusMap->propertyName, "Side");
EXPECT_EQ(dbusMap->propertyType, "bool");
auto jsonReadWriteError = R"({
"attribute_name":"ReadWrite",
"dbus":
{
"object_path" : "/xyz/abc/def",
"interface" : "xyz.openbmc.FWBoot.Side",
"property_name" : "Side"
}
})"_json; // missing property_type.
EXPECT_THROW((TestAttribute{jsonReadWriteError, nullptr}), Json::exception);
}