Add support for LocationCode
LocationCode is needed to populate ServiceLabel by BMCWeb for Redfish
resource associated with eStorage.
LocationCode is derived from config object exported by Entity Manager
in the the following interface:
"xyz.openbmc_project.Configuration.EmmcDevice
To surface LocationCode, the "Exposes" entry in board's Entity Manager
config can add "LocationCode" property as follows:
{
"Name": "example_emmc",
"Type": "EmmcDevice",
"LocationCode": "U1000"
}
Here the LocationCode is the silk screen label.
Tested:
busctl introspect xyz.openbmc_project.eStoraged \
/xyz/openbmc_project/inventory/storage/mmcblk0 \
xyz.openbmc_project.Inventory.Decorator.LocationCode
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.LocationCode property s "U1000" emits-change
wget -qO- localhost:80/redfish/v1/Chassis/DCSCM/Drives/mmcblk0
{
"@odata.id": "/redfish/v1/Chassis/DCSCM/Drives/mmcblk0",
"@odata.type": "#Drive.v1_7_0.Drive",
"Id": "mmcblk0",
"Links": {
"Chassis": {
"@odata.id": "/redfish/v1/Chassis/DCSCM"
}
},
"Name": "mmcblk0",
"PhysicalLocation": {
"PartLocation": {
"LocationType": "Embedded",
"ServiceLabel": "U1000"
},
"PartLocationContext": "DC_SCM"
},
"PredictedMediaLifeLeftPercent": 100,
"Status": {
"State": "Enabled"
}
}
Change-Id: Ibf53ede5ee65787f9cef53d4bad4cb8fccba3606
Signed-off-by: Rahul Kapoor <rahulkpr@google.com>
diff --git a/src/test/util_test.cpp b/src/test/util_test.cpp
index b85fca0..5f8dca5 100644
--- a/src/test/util_test.cpp
+++ b/src/test/util_test.cpp
@@ -107,6 +107,8 @@
data.emplace(std::string("Type"),
estoraged::BasicVariantType("EmmcDevice"));
data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
+ data.emplace(std::string("LocationCode"),
+ estoraged::BasicVariantType("U102020"));
/* Create a dummy device. */
std::filesystem::create_directories("abc/device");
@@ -128,14 +130,16 @@
/* Look for the device file. */
std::filesystem::path deviceFile, sysfsDir;
- std::string luksName;
+ std::string luksName, locationCode;
EXPECT_TRUE(estoraged::util::findDevice(data, std::filesystem::path("./"),
- deviceFile, sysfsDir, luksName));
+ deviceFile, sysfsDir, luksName,
+ locationCode));
/* Validate the results. */
EXPECT_EQ("/dev/mmcblk0", deviceFile.string());
EXPECT_EQ("./mmcblk0/device", sysfsDir.string());
EXPECT_EQ("luks-mmcblk0", luksName);
+ EXPECT_EQ("U102020", locationCode);
/* Delete the dummy files. */
EXPECT_EQ(3U, std::filesystem::remove_all("mmcblk0"));
@@ -171,9 +175,10 @@
/* Look for the device file. */
std::filesystem::path deviceFile, sysfsDir;
- std::string luksName;
+ std::string luksName, locationCode;
EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
- deviceFile, sysfsDir, luksName));
+ deviceFile, sysfsDir, luksName,
+ locationCode));
/* Delete the dummy files. */
EXPECT_EQ(3U, std::filesystem::remove_all("mmcblk0"));
@@ -211,9 +216,10 @@
/* Look for the device file. */
std::filesystem::path deviceFile, sysfsDir;
- std::string luksName;
+ std::string luksName, locationCode;
EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
- deviceFile, sysfsDir, luksName));
+ deviceFile, sysfsDir, luksName,
+ locationCode));
/* Delete the dummy files. */
EXPECT_EQ(3U, std::filesystem::remove_all("mmcblk0"));
@@ -244,9 +250,10 @@
/* Look for the device file. */
std::filesystem::path deviceFile, sysfsDir;
- std::string luksName;
+ std::string luksName, locationCode;
EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
- deviceFile, sysfsDir, luksName));
+ deviceFile, sysfsDir, luksName,
+ locationCode));
/* Delete the dummy files. */
EXPECT_EQ(3U, std::filesystem::remove_all("abc"));