Add object manager automatically in ObjectManager_adaptor constructor

This commit is contained in:
Stanislav Angelovic
2019-06-05 12:17:43 +02:00
parent 65b3e7ba00
commit 5c0a8d5ab4
4 changed files with 14 additions and 43 deletions

View File

@ -130,30 +130,6 @@ namespace sdbus {
getObject().unregister(); getObject().unregister();
} }
/*!
* @brief Adds an ObjectManager interface at the path of this D-Bus object
*
* Creates an ObjectManager interface at the specified object path on
* the connection. This is a convenient way to interrogate a connection
* to see what objects it has.
*
* @throws sdbus::Error in case of failure
*/
void addObjectManager()
{
getObject().addObjectManager();
}
/*!
* @brief Removes an ObjectManager interface from the path of this D-Bus object
*
* @throws sdbus::Error in case of failure
*/
void removeObjectManager()
{
getObject().removeObjectManager();
}
protected: protected:
using base_type = AdaptorInterfaces; using base_type = AdaptorInterfaces;
}; };

View File

@ -216,6 +216,7 @@ namespace sdbus {
ObjectManager_adaptor(sdbus::IObject& object) ObjectManager_adaptor(sdbus::IObject& object)
: object_(object) : object_(object)
{ {
object_.addObjectManager();
} }
public: public:

View File

@ -496,22 +496,8 @@ TEST_F(SdbusTestObject, EmitsPropertyChangedSignalForAllProperties)
ASSERT_TRUE(waitUntil(signalReceived)); ASSERT_TRUE(waitUntil(signalReceived));
} }
TEST_F(SdbusTestObject, DoesNotProvideObjectManagerInterfaceByDefault)
{
ASSERT_THROW(m_proxy->GetManagedObjects(), sdbus::Error);
}
TEST_F(SdbusTestObject, ProvidesObjectManagerInterfaceWhenExplicitlyAdded)
{
m_adaptor->addObjectManager();
ASSERT_NO_THROW(m_proxy->GetManagedObjects());
}
TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects) TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects)
{ {
m_adaptor->addObjectManager();
const auto objectsInterfacesAndProperties = m_proxy->GetManagedObjects(); const auto objectsInterfacesAndProperties = m_proxy->GetManagedObjects();
ASSERT_THAT(objectsInterfacesAndProperties, SizeIs(0)); ASSERT_THAT(objectsInterfacesAndProperties, SizeIs(0));
@ -519,7 +505,6 @@ TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects)
TEST_F(SdbusTestObject, GetsManagedObjectsSuccessfully) TEST_F(SdbusTestObject, GetsManagedObjectsSuccessfully)
{ {
m_adaptor->addObjectManager();
auto subObject1 = sdbus::createObject(*s_connection, "/sub/path1"); auto subObject1 = sdbus::createObject(*s_connection, "/sub/path1");
subObject1->registerProperty("aProperty1").onInterface("org.sdbuscpp.integrationtests.iface1").withGetter([]{return uint8_t{123};}); subObject1->registerProperty("aProperty1").onInterface("org.sdbuscpp.integrationtests.iface1").withGetter([]{return uint8_t{123};});
subObject1->finishRegistration(); subObject1->finishRegistration();
@ -546,7 +531,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesAddedSignalForSelectedObjectInterfaces)
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3)); EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3));
signalReceived = true; signalReceived = true;
}; };
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
m_adaptor->emitInterfacesAddedSignal({INTERFACE_NAME}); m_adaptor->emitInterfacesAddedSignal({INTERFACE_NAME});
@ -564,7 +548,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesAddedSignalForAllObjectInterfaces)
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3)); // 3 properties under INTERFACE_NAME EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3)); // 3 properties under INTERFACE_NAME
signalReceived = true; signalReceived = true;
}; };
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
m_adaptor->emitInterfacesAddedSignal(); m_adaptor->emitInterfacesAddedSignal();
@ -582,7 +565,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesRemovedSignalForSelectedObjectInterfaces)
EXPECT_THAT(interfaces[0], Eq(INTERFACE_NAME)); EXPECT_THAT(interfaces[0], Eq(INTERFACE_NAME));
signalReceived = true; signalReceived = true;
}; };
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
m_adaptor->emitInterfacesRemovedSignal({INTERFACE_NAME}); m_adaptor->emitInterfacesRemovedSignal({INTERFACE_NAME});
@ -599,7 +581,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesRemovedSignalForAllObjectInterfaces)
ASSERT_THAT(interfaces, SizeIs(5)); // INTERFACE_NAME + 4 standard interfaces ASSERT_THAT(interfaces, SizeIs(5)); // INTERFACE_NAME + 4 standard interfaces
signalReceived = true; signalReceived = true;
}; };
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
m_adaptor->emitInterfacesRemovedSignal(); m_adaptor->emitInterfacesRemovedSignal();

View File

@ -211,6 +211,19 @@ R"delimiter(<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspectio
<arg type="as" name="invalidated_properties"/> <arg type="as" name="invalidated_properties"/>
</signal> </signal>
</interface> </interface>
<interface name="org.freedesktop.DBus.ObjectManager">
<method name="GetManagedObjects">
<arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out"/>
</method>
<signal name="InterfacesAdded">
<arg type="o" name="object_path"/>
<arg type="a{sa{sv}}" name="interfaces_and_properties"/>
</signal>
<signal name="InterfacesRemoved">
<arg type="o" name="object_path"/>
<arg type="as" name="interfaces"/>
</signal>
</interface>
<interface name="org.sdbuscpp.integrationtests"> <interface name="org.sdbuscpp.integrationtests">
<annotation name="org.freedesktop.DBus.Deprecated" value="true"/> <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
<method name="doOperation"> <method name="doOperation">