Fix getManagedObjects on ObjectManager returning no objects
Currently, when calling getManagedObjects
```
busctl call xyz.openbmc_project.State.Host \
/xyz/openbmc_project/state/host0 org.freedesktop.DBus.ObjectManager \
GetManagedObjects
```
we end up getting no objects `a{oa{sa{sv}}} 0`. This is incorrect
and we technically should return the managed objects.
Looking further at the spec:
```
All returned object paths are children of the object path implementing
this interface, i.e. their object paths start with the ObjectManager's
object path plus '/'.
```
This implies that the the path owned by the object manager should
not be the hostX sub-entries but `/xyz/openbmc_project/state`
Tested by building a harma image and in qemu calling introspect on
each of the object paths and ensuring that we get the correct responses
```
busctl introspect xyz.openbmc_project.State.BMC \
/xyz/openbmc_project/state
busctl introspect xyz.openbmc_project.State.BMC \
/xyz/openbmc_project/state/bmc0
busctl introspect xyz.openbmc_project.State.Host \
/xyz/openbmc_project/state
busctl introspect xyz.openbmc_project.State.Host \
/xyz/openbmc_project/state/host0
busctl introspect xyz.openbmc_project.State.Chassis \
/xyz/openbmc_project/state
busctl introspect xyz.openbmc_project.State.Chassis \
/xyz/openbmc_project/state/chassis0
```
Also tested that we get the correct managed object
```
busctl call xyz.openbmc_project.State.Host /xyz/openbmc_project/state \
org.freedesktop.DBus.ObjectManager GetManagedObjects
busctl call xyz.openbmc_project.State.BMC /xyz/openbmc_project/state \
org.freedesktop.DBus.ObjectManager GetManagedObjects
busctl call xyz.openbmc_project.State.Chassis \
/xyz/openbmc_project/state \
org.freedesktop.DBus.ObjectManager GetManagedObjects
```
Change-Id: I525c8719c326cfbbe568c4f1f7fe95e3aa13c660
Signed-off-by: Amithash Prasad <amithash@meta.com>
diff --git a/bmc_state_manager_main.cpp b/bmc_state_manager_main.cpp
index f574a52..2b34ea8 100644
--- a/bmc_state_manager_main.cpp
+++ b/bmc_state_manager_main.cpp
@@ -18,7 +18,7 @@
sdbusplus::message::object_path(objPath) / BMCName;
// Add sdbusplus ObjectManager.
- sdbusplus::server::manager_t objManager(bus, objPathInst.c_str());
+ sdbusplus::server::manager_t objManager(bus, objPath);
phosphor::state::manager::BMC manager(bus, objPathInst.c_str());
diff --git a/chassis_state_manager_main.cpp b/chassis_state_manager_main.cpp
index 0d169b9..188f4d5 100644
--- a/chassis_state_manager_main.cpp
+++ b/chassis_state_manager_main.cpp
@@ -74,7 +74,7 @@
}
// Add sdbusplus ObjectManager.
- sdbusplus::server::manager_t objManager(bus, objPathInst.c_str());
+ sdbusplus::server::manager_t objManager(bus, objPath);
phosphor::state::manager::Chassis manager(bus, objPathInst.c_str(),
chassisId);
diff --git a/host_state_manager_main.cpp b/host_state_manager_main.cpp
index 406a642..75ab60f 100644
--- a/host_state_manager_main.cpp
+++ b/host_state_manager_main.cpp
@@ -67,7 +67,7 @@
}
// Add sdbusplus ObjectManager.
- sdbusplus::server::manager_t objManager(bus, objPathInst.c_str());
+ sdbusplus::server::manager_t objManager(bus, objPath);
phosphor::state::manager::Host manager(bus, objPathInst.c_str(), hostId);
diff --git a/hypervisor_state_manager_main.cpp b/hypervisor_state_manager_main.cpp
index bb94750..d3a0e1f 100644
--- a/hypervisor_state_manager_main.cpp
+++ b/hypervisor_state_manager_main.cpp
@@ -6,6 +6,8 @@
#include <cstdlib>
+using HostState = sdbusplus::server::xyz::openbmc_project::state::Host;
+
int main()
{
auto bus = sdbusplus::bus::new_default();
@@ -14,7 +16,8 @@
auto objPathInst = std::string{HYPERVISOR_OBJPATH} + '0';
// Add sdbusplus ObjectManager.
- sdbusplus::server::manager_t objManager(bus, objPathInst.c_str());
+ sdbusplus::server::manager_t objManager(bus,
+ HostState::namespace_path::value);
phosphor::state::manager::Hypervisor manager(bus, objPathInst.c_str());