blob: f7b9d50b8a9d23a666a47f89266282aeadeb5a92 [file] [log] [blame]
John Wange2efdcc2020-02-12 17:02:06 +08001#include "libpldmresponder/bios_attribute.hpp"
2
3#include <nlohmann/json.hpp>
4
5#include <gtest/gtest.h>
6
7using namespace pldm::responder::bios;
8
9class TestAttribute : public BIOSAttribute
10{
11 public:
12 TestAttribute(const Json& entry, DBusHandler* const dbusHandler) :
13 BIOSAttribute(entry, dbusHandler)
George Liu6492f522020-06-16 10:34:05 +080014 {}
John Wange2efdcc2020-02-12 17:02:06 +080015
16 void setAttrValueOnDbus(const pldm_bios_attr_val_table_entry*,
17 const pldm_bios_attr_table_entry*,
18 const BIOSStringTable&) override
George Liu6492f522020-06-16 10:34:05 +080019 {}
John Wange2efdcc2020-02-12 17:02:06 +080020
Tom Josephca7b2522020-11-18 12:27:11 +053021 void constructEntry(
22 const BIOSStringTable&, Table&, Table&,
23 std::optional<std::variant<int64_t, std::string>>) override
George Liu6492f522020-06-16 10:34:05 +080024 {}
John Wange2efdcc2020-02-12 17:02:06 +080025
26 const std::optional<DBusMapping>& getDbusMap()
27 {
28 return dBusMap;
29 }
Sampa Misra46ece062020-03-18 07:17:44 -050030
31 int updateAttrVal(Table& /*newValue*/, uint16_t /*attrHdl*/,
32 uint8_t /*attrType*/,
33 const PropertyValue& /*newPropVal*/) override
34 {
35 return PLDM_SUCCESS;
36 }
George Liu1244acf2020-08-14 09:11:11 +080037
38 void generateAttributeEntry(
39 const std::variant<int64_t, std::string>& /*attributevalue*/,
40 Table& /*attrValueEntry*/)
41 {}
John Wange2efdcc2020-02-12 17:02:06 +080042};
43
44TEST(BIOSAttribute, CtorTest)
45{
46 auto jsonReadOnly = R"({
George Liudaa69232020-09-02 17:22:09 +080047 "attribute_name" : "ReadOnly",
George Liu92bb4022020-09-03 14:58:24 +080048 "readOnly" : true,
49 "helpText" : "HelpText",
50 "displayName" : "DisplayName"
John Wange2efdcc2020-02-12 17:02:06 +080051 })"_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",
George Liudaa69232020-09-02 17:22:09 +080066 "readOnly" : false,
George Liu92bb4022020-09-03 14:58:24 +080067 "helpText" : "HelpText",
68 "displayName" : "DisplayName",
John Wange2efdcc2020-02-12 17:02:06 +080069 "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");
George Liu92bb4022020-09-03 14:58:24 +080087
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);
Sampa Misra46ece062020-03-18 07:17:44 -050099}