1 #include "libpldmresponder/bios_attribute.hpp" 2 3 #include <nlohmann/json.hpp> 4 5 #include <gtest/gtest.h> 6 7 using namespace pldm::responder::bios; 8 9 class TestAttribute : public BIOSAttribute 10 { 11 public: 12 TestAttribute(const Json& entry, DBusHandler* const dbusHandler) : 13 BIOSAttribute(entry, dbusHandler) 14 {} 15 16 void setAttrValueOnDbus(const pldm_bios_attr_val_table_entry*, 17 const pldm_bios_attr_table_entry*, 18 const BIOSStringTable&) override 19 {} 20 21 void constructEntry( 22 const BIOSStringTable&, Table&, Table&, 23 std::optional<std::variant<int64_t, std::string>>) override 24 {} 25 26 const std::optional<DBusMapping>& getDbusMap() 27 { 28 return dBusMap; 29 } 30 31 int updateAttrVal(Table& /*newValue*/, uint16_t /*attrHdl*/, 32 uint8_t /*attrType*/, 33 const PropertyValue& /*newPropVal*/) override 34 { 35 return PLDM_SUCCESS; 36 } 37 38 void generateAttributeEntry( 39 const std::variant<int64_t, std::string>& /*attributevalue*/, 40 Table& /*attrValueEntry*/) 41 {} 42 }; 43 44 TEST(BIOSAttribute, CtorTest) 45 { 46 auto jsonReadOnly = R"({ 47 "attribute_name" : "ReadOnly", 48 "readOnly" : true, 49 "helpText" : "HelpText", 50 "displayName" : "DisplayName" 51 })"_json; 52 53 TestAttribute readOnly{jsonReadOnly, nullptr}; 54 EXPECT_EQ(readOnly.name, "ReadOnly"); 55 EXPECT_EQ(readOnly.readOnly, true); 56 57 auto jsonReadOnlyError = R"({ 58 "attribute_nam":"ReadOnly" 59 })"_json; 60 using Json = nlohmann::json; 61 62 EXPECT_THROW((TestAttribute{jsonReadOnlyError, nullptr}), Json::exception); 63 64 auto jsonReadWrite = R"({ 65 "attribute_name":"ReadWrite", 66 "readOnly" : false, 67 "helpText" : "HelpText", 68 "displayName" : "DisplayName", 69 "dbus": 70 { 71 "object_path" : "/xyz/abc/def", 72 "interface" : "xyz.openbmc.FWBoot.Side", 73 "property_name" : "Side", 74 "property_type" : "bool" 75 } 76 })"_json; 77 78 TestAttribute readWrite{jsonReadWrite, nullptr}; 79 EXPECT_EQ(readWrite.name, "ReadWrite"); 80 EXPECT_EQ(readWrite.readOnly, false); 81 auto dbusMap = readWrite.getDbusMap(); 82 EXPECT_NE(dbusMap, std::nullopt); 83 EXPECT_EQ(dbusMap->objectPath, "/xyz/abc/def"); 84 EXPECT_EQ(dbusMap->interface, "xyz.openbmc.FWBoot.Side"); 85 EXPECT_EQ(dbusMap->propertyName, "Side"); 86 EXPECT_EQ(dbusMap->propertyType, "bool"); 87 88 auto jsonReadWriteError = R"({ 89 "attribute_name":"ReadWrite", 90 "dbus": 91 { 92 "object_path" : "/xyz/abc/def", 93 "interface" : "xyz.openbmc.FWBoot.Side", 94 "property_name" : "Side" 95 } 96 })"_json; // missing property_type. 97 98 EXPECT_THROW((TestAttribute{jsonReadWriteError, nullptr}), Json::exception); 99 } 100