Enhance ServiceManager with socket unit names
[platform/core/test/security-tests.git] / src / common / service_manager.cpp
index 5349171..c571d5f 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <dpl/test/test_runner.h>
 
+#include <algorithm>
 #include <sstream>
 #include <unistd.h>
 #include <vector>
@@ -45,9 +46,11 @@ const std::string MATCH_RELOADING("Reloading");
 
 }
 
-ServiceManager::ServiceManager(const std::string &serviceName)
+ServiceManager::ServiceManager(const std::string &serviceName,
+                               const std::vector<std::string>& socketsNames)
     : m_connection(DBUS_BUS_SYSTEM, true)
     , m_serviceName(serviceName)
+    , m_socketsNames(socketsNames)
 {
     addBusMatch(MATCH_JOB_REMOVED);
     addBusMatch(MATCH_JOB_NEW);
@@ -126,10 +129,10 @@ uint64_t ServiceManager::handleVariantUInt64MsgReply(DBus::MessageIn &messageIn)
     return iteratorSub.getArgUint64();
 }
 
-void ServiceManager::sendToService(const std::string &method)
+void ServiceManager::sendToService(const std::string &method, const std::string &unit)
 {
     DBus::MessageOut messageOut = newMethodCall(method);
-    messageOut.append(m_serviceName);
+    messageOut.append(unit);
     messageOut.append("fail");
     DBus::MessageIn messageIn = m_connection.sendWithReplyAndBlock(messageOut);
     m_runningJobs.insert(handleObjectPathMsgReply(messageIn));
@@ -222,7 +225,8 @@ void ServiceManager::signalJobRemovedHandler(DBus::MessageIn &messageIn)
     iterator.expectArgType(DBUS_TYPE_STRING);
     std::string result = iterator.getArgString();
 
-    if(m_serviceName == unit) {
+    if (unit == m_serviceName
+        || std::count(m_socketsNames.begin(), m_socketsNames.end(), unit) > 0) {
         RUNNER_ASSERT_MSG(result == "done" || result == "canceled",
                           "RemoveJob signal delivered bad news. Job wasn't completed successfully: "
                               << "expected job results = {done, canceled}, "
@@ -270,25 +274,40 @@ void ServiceManager::waitForRunningJobsFinish()
         m_connection.readWriteDispatch();
 }
 
-void ServiceManager::startService()
+void ServiceManager::executeMethod(const std::string &method, const std::string &unit)
 {
-    sendToService("StartUnit");
+    sendToService(method, unit);
     waitForRunningJobsFinish();
     sendResetFailedToService();
 }
 
-void ServiceManager::stopService()
+void ServiceManager::startService(bool withSockets)
 {
-    sendToService("StopUnit");
-    waitForRunningJobsFinish();
-    sendResetFailedToService();
+    executeMethod("StartUnit", m_serviceName);
+    if (withSockets)
+        for (const auto &socket : m_socketsNames)
+            executeMethod("StartUnit", socket);
 }
 
-void ServiceManager::restartService()
+void ServiceManager::stopService(bool withSockets)
 {
-    sendToService("RestartUnit");
-    waitForRunningJobsFinish();
-    sendResetFailedToService();
+    if (withSockets)
+        for (const auto &socket : m_socketsNames)
+            executeMethod("StopUnit", socket);
+    executeMethod("StopUnit", m_serviceName);
+}
+
+void ServiceManager::restartService(bool withSockets)
+{
+    if (withSockets)
+        for (const auto &socket : m_socketsNames)
+            executeMethod("StopUnit", socket);
+
+    executeMethod("RestartUnit", m_serviceName);
+
+    if (withSockets)
+        for (const auto &socket : m_socketsNames)
+            executeMethod("StartUnit", socket);
 }
 
 pid_t ServiceManager::getServicePid()