BIOS: Fix readOnly BIOS attributes
Previously, the readOnly property is true when without a D-Bus section in BIOS
JSON. Now, the readOnly property should be determined by a new readOnly field,
which should be introduced in the JSON. The checks are updated to ensure that
if there is D-Bus mapping then only D-Bus lookups are done.
Tested: test with json
https://gist.github.com/lxwinspur/2afffff2e445fddf90dfed6eceef4014
busctl get-property xyz.openbmc_project.BIOSConfigManager
/xyz/openbmc_project/bios_config/manager xyz.openbmc_project.BIOSConfig.Manager
BaseBIOSTable
a{s(sbsssvva(sv))} 5
"CodeUpdatePolicy"
"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Enumeration"
true "" "" "" s "Concurrent" s "Concurrent" 2
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.OneOf" s "Concurrent"
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.OneOf" s "Disruptive"
"Led"
"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Enumeration"
false "" "" "" s "Off" s "Off" 2
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.OneOf" s "On"
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.OneOf" s "Off"
"Model"
"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.String"
false "" "" "" s "powersupply0" s "FP5280G2" 2
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.MinStringLength" x 1
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.MaxStringLength" x 100
"OUTLET"
"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Integer"
false "" "" "" x 9149282306036291456 x 0 3
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.LowerBound" x 0
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.UpperBound" x 68002
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.ScalarIncrement" x 1
"str_example3"
"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.String"
true "" "" "" s "ef" s "ef" 2
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.MinStringLength" x 1
"xyz.openbmc_project.BIOSConfig.Manager.BoundType.MaxStringLength" x 100
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I73d2dcb9fc65a1aa8bbd060cfb9d44e708b47aae
diff --git a/test/libpldmresponder_bios_enum_attribute_test.cpp b/test/libpldmresponder_bios_enum_attribute_test.cpp
index b6b53be..4a91dcb 100644
--- a/test/libpldmresponder_bios_enum_attribute_test.cpp
+++ b/test/libpldmresponder_bios_enum_attribute_test.cpp
@@ -34,7 +34,8 @@
auto jsonEnumReadOnly = R"({
"attribute_name" : "CodeUpdatePolicy",
"possible_values" : [ "Concurrent", "Disruptive" ],
- "default_values" : [ "Concurrent" ]
+ "default_values" : [ "Concurrent" ],
+ "readOnly" : true
})"_json;
BIOSEnumAttribute enumReadOnly{jsonEnumReadOnly, nullptr};
@@ -47,7 +48,8 @@
auto jsonEnumReadOnlyError = R"({
"attribute_name" : "CodeUpdatePolicy",
"possible_value" : [ "Concurrent", "Disruptive" ],
- "default_values" : [ "Concurrent" ]
+ "default_values" : [ "Concurrent" ],
+ "readOnly" : true
})"_json; // possible_value -> possible_values
EXPECT_THROW((BIOSEnumAttribute{jsonEnumReadOnlyError, nullptr}),
Json::exception);
@@ -56,6 +58,7 @@
"attribute_name" : "FWBootSide",
"possible_values" : [ "Perm", "Temp" ],
"default_values" : [ "Perm" ],
+ "readOnly" : false,
"dbus":
{
"object_path" : "/xyz/abc/def",
@@ -79,7 +82,8 @@
auto jsonEnumReadOnly = R"({
"attribute_name" : "CodeUpdatePolicy",
"possible_values" : [ "Concurrent", "Disruptive" ],
- "default_values" : [ "Disruptive" ]
+ "default_values" : [ "Disruptive" ],
+ "readOnly" : true
})"_json;
std::vector<uint8_t> expectedAttrEntry{
@@ -116,6 +120,7 @@
"attribute_name" : "CodeUpdatePolicy",
"possible_values" : [ "Concurrent", "Disruptive" ],
"default_values" : [ "Disruptive" ],
+ "readOnly" : false,
"dbus":
{
"object_path" : "/xyz/abc/def",
@@ -165,6 +170,7 @@
"attribute_name" : "CodeUpdatePolicy",
"possible_values" : [ "Concurrent", "Disruptive" ],
"default_values" : [ "Disruptive" ],
+ "readOnly" : false,
"dbus":
{
"object_path" : "/xyz/abc/def",