15327988eSTom Joseph #include "libpldmresponder/bios_attribute.hpp"
25327988eSTom Joseph 
35327988eSTom Joseph #include <nlohmann/json.hpp>
45327988eSTom Joseph 
55327988eSTom Joseph #include <gtest/gtest.h>
65327988eSTom Joseph 
75079ac4aSBrad Bishop using namespace pldm::utils;
85327988eSTom Joseph using namespace pldm::responder::bios;
95327988eSTom Joseph 
105327988eSTom Joseph class TestAttribute : public BIOSAttribute
115327988eSTom Joseph {
125327988eSTom Joseph   public:
TestAttribute(const Json & entry,DBusHandler * const dbusHandler)135327988eSTom Joseph     TestAttribute(const Json& entry, DBusHandler* const dbusHandler) :
145327988eSTom Joseph         BIOSAttribute(entry, dbusHandler)
155327988eSTom Joseph     {}
165327988eSTom Joseph 
setAttrValueOnDbus(const pldm_bios_attr_val_table_entry *,const pldm_bios_attr_table_entry *,const BIOSStringTable &)175327988eSTom Joseph     void setAttrValueOnDbus(const pldm_bios_attr_val_table_entry*,
185327988eSTom Joseph                             const pldm_bios_attr_table_entry*,
195327988eSTom Joseph                             const BIOSStringTable&) override
205327988eSTom Joseph     {}
215327988eSTom Joseph 
constructEntry(const BIOSStringTable &,Table &,Table &,std::optional<std::variant<int64_t,std::string>>)225327988eSTom Joseph     void constructEntry(
235327988eSTom Joseph         const BIOSStringTable&, Table&, Table&,
245327988eSTom Joseph         std::optional<std::variant<int64_t, std::string>>) override
255327988eSTom Joseph     {}
265327988eSTom Joseph 
getDbusMap()275327988eSTom Joseph     const std::optional<DBusMapping>& getDbusMap()
285327988eSTom Joseph     {
295327988eSTom Joseph         return dBusMap;
305327988eSTom Joseph     }
315327988eSTom Joseph 
updateAttrVal(Table &,uint16_t,uint8_t,const PropertyValue &)325327988eSTom Joseph     int updateAttrVal(Table& /*newValue*/, uint16_t /*attrHdl*/,
335327988eSTom Joseph                       uint8_t /*attrType*/,
345327988eSTom Joseph                       const PropertyValue& /*newPropVal*/) override
355327988eSTom Joseph     {
365327988eSTom Joseph         return PLDM_SUCCESS;
375327988eSTom Joseph     }
385327988eSTom Joseph 
generateAttributeEntry(const std::variant<int64_t,std::string> &,Table &)395327988eSTom Joseph     void generateAttributeEntry(
405327988eSTom Joseph         const std::variant<int64_t, std::string>& /*attributevalue*/,
41165749d1SPavithra Barithaya         Table& /*attrValueEntry*/) override
425327988eSTom Joseph     {}
435327988eSTom Joseph };
445327988eSTom Joseph 
TEST(BIOSAttribute,CtorTest)455327988eSTom Joseph TEST(BIOSAttribute, CtorTest)
465327988eSTom Joseph {
475327988eSTom Joseph     auto jsonReadOnly = R"({
485327988eSTom Joseph       "attribute_name" : "ReadOnly",
49*d6608096SArchana Kakani       "read_only" : true,
50*d6608096SArchana Kakani       "help_text" : "HelpText",
51*d6608096SArchana Kakani       "display_name" : "DisplayName"
525327988eSTom Joseph     })"_json;
535327988eSTom Joseph 
545327988eSTom Joseph     TestAttribute readOnly{jsonReadOnly, nullptr};
555327988eSTom Joseph     EXPECT_EQ(readOnly.name, "ReadOnly");
565327988eSTom Joseph     EXPECT_EQ(readOnly.readOnly, true);
575327988eSTom Joseph 
585327988eSTom Joseph     auto jsonReadOnlyError = R"({
595327988eSTom Joseph       "attribute_nam":"ReadOnly"
605327988eSTom Joseph     })"_json;
615327988eSTom Joseph     using Json = nlohmann::json;
625327988eSTom Joseph 
635327988eSTom Joseph     EXPECT_THROW((TestAttribute{jsonReadOnlyError, nullptr}), Json::exception);
645327988eSTom Joseph 
655327988eSTom Joseph     auto jsonReadWrite = R"({
665327988eSTom Joseph       "attribute_name":"ReadWrite",
67*d6608096SArchana Kakani       "read_only" : false,
68*d6608096SArchana Kakani       "help_text" : "HelpText",
69*d6608096SArchana Kakani       "display_name" : "DisplayName",
705327988eSTom Joseph       "dbus":
715327988eSTom Joseph            {
725327988eSTom Joseph                "object_path" : "/xyz/abc/def",
735327988eSTom Joseph                "interface" : "xyz.openbmc.FWBoot.Side",
745327988eSTom Joseph                "property_name" : "Side",
755327988eSTom Joseph                "property_type" : "bool"
765327988eSTom Joseph            }
775327988eSTom Joseph     })"_json;
785327988eSTom Joseph 
795327988eSTom Joseph     TestAttribute readWrite{jsonReadWrite, nullptr};
805327988eSTom Joseph     EXPECT_EQ(readWrite.name, "ReadWrite");
815327988eSTom Joseph     EXPECT_EQ(readWrite.readOnly, false);
825327988eSTom Joseph     auto dbusMap = readWrite.getDbusMap();
835327988eSTom Joseph     EXPECT_NE(dbusMap, std::nullopt);
845327988eSTom Joseph     EXPECT_EQ(dbusMap->objectPath, "/xyz/abc/def");
855327988eSTom Joseph     EXPECT_EQ(dbusMap->interface, "xyz.openbmc.FWBoot.Side");
865327988eSTom Joseph     EXPECT_EQ(dbusMap->propertyName, "Side");
875327988eSTom Joseph     EXPECT_EQ(dbusMap->propertyType, "bool");
885327988eSTom Joseph 
895327988eSTom Joseph     auto jsonReadWriteError = R"({
905327988eSTom Joseph       "attribute_name":"ReadWrite",
915327988eSTom Joseph       "dbus":
925327988eSTom Joseph            {
935327988eSTom Joseph                "object_path" : "/xyz/abc/def",
945327988eSTom Joseph                "interface" : "xyz.openbmc.FWBoot.Side",
955327988eSTom Joseph                "property_name" : "Side"
965327988eSTom Joseph            }
975327988eSTom Joseph     })"_json; // missing property_type.
985327988eSTom Joseph 
995327988eSTom Joseph     EXPECT_THROW((TestAttribute{jsonReadWriteError, nullptr}), Json::exception);
1005327988eSTom Joseph }
101