From: Lukasz Wojciechowski Date: Mon, 24 Nov 2014 03:08:32 +0000 (+0100) Subject: Subscribe to dbus signals from systemd X-Git-Tag: security-manager_5.5_testing~122^2~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f91fbfb87cd805405ff1b7b593d87fc708fda9f7;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git Subscribe to dbus signals from systemd Set bus matching filters for JobNew and JobRemove signals from systemd. Subscribe to signals from systemd over dbus Add dbus filter for all incoming messages (stub - empty body). Change-Id: I516bf562d50a4e7a3933e0a1d5905bffb73dbc68 --- diff --git a/tests/common/dbus_access.cpp b/tests/common/dbus_access.cpp index a172ef8f..b81de1fa 100644 --- a/tests/common/dbus_access.cpp +++ b/tests/common/dbus_access.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include "dbus_access.h" @@ -52,6 +53,26 @@ void DBusAccess::connect() { dbus_connection_set_exit_on_disconnect(m_conn, FALSE); } +void DBusAccess::addBusMatch(const char *member) { + std::ostringstream rule; + rule << "type='signal'," + << "sender='" << m_dbus_systemd_destination << "'," + << "interface='" << m_dbus_systemd_manager_interface << "'," + << "member='" << member << "'," + << "path='" << m_dbus_systemd_path << "'"; + + dbus_bus_add_match(m_conn, rule.str().c_str(), &m_err); + RUNNER_ASSERT_MSG(dbus_error_is_set(&m_err) != 1, + "Error in dbus_bus_add_match: " << m_err.message); +} + +void DBusAccess::subscribeSignals() { + newMethodCall("Subscribe"); + sendMsgWithReply(); + getMsgReply(); + finalizeMsgReply(); +} + void DBusAccess::requestName() { dbus_bus_request_name(m_conn, m_dbus_client_name.c_str(), DBUS_NAME_FLAG_REPLACE_EXISTING , &m_err); @@ -123,6 +144,14 @@ void DBusAccess::finalizeMsgReply() { void DBusAccess::connectToDBus() { connect(); + addBusMatch("JobRemoved"); + addBusMatch("JobNew"); + dbus_connection_flush(m_conn); + dbus_connection_add_filter(m_conn, + messageHandler, + reinterpret_cast(this), + [](void*)->void {}); + subscribeSignals(); requestName(); } @@ -141,7 +170,15 @@ void DBusAccess::sendResetFailedToService() { appendToMsg(m_service_name.c_str()); sendMsgWithReply(); getMsgReply(); - ignoreMsgReply(); + finalizeMsgReply(); +} + +DBusHandlerResult DBusAccess::messageHandler(DBusConnection *conn, DBusMessage *msg, void *t) { + (void) conn; + (void) msg; + (void) t; + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } void DBusAccess::startService() { diff --git a/tests/common/dbus_access.h b/tests/common/dbus_access.h index 9668b37c..cb9fdf3a 100644 --- a/tests/common/dbus_access.h +++ b/tests/common/dbus_access.h @@ -43,6 +43,8 @@ public: virtual ~DBusAccess(); private: void connect(); + void addBusMatch(const char *member); + void subscribeSignals(); void requestName(); void newMethodCall(const char *method); void appendToMsg(const char *argument); @@ -55,6 +57,8 @@ private: void sendToService(const char *method); void sendResetFailedToService(); + static DBusHandlerResult messageHandler(DBusConnection *conn, DBusMessage *msg, void *t); + DBusConnection *m_conn; DBusMessage *m_msg; DBusError m_err;