Moved dispatching to Server 95/42995/4
authorJan Olszak <j.olszak@samsung.com>
Mon, 6 Jul 2015 09:58:10 +0000 (11:58 +0200)
committerDariusz Michaluk <d.michaluk@samsung.com>
Tue, 7 Jul 2015 13:26:47 +0000 (06:26 -0700)
[Feature]       Dispatcher can be used outside IPC.
[Cause]         Will be needed to process signalfd
[Solution]      N/A
[Verification]  Build, install, run tests

Change-Id: I17298da5e4758bbf0fa266bcf896f464df29c9a3

server/host-ipc-connection.cpp
server/host-ipc-connection.hpp
server/server.cpp
server/server.hpp
server/zones-manager.cpp
server/zones-manager.hpp
tests/unit_tests/client/ut-client.cpp
tests/unit_tests/server/ut-server.cpp
tests/unit_tests/server/ut-zones-manager.cpp

index f110999..e881d2f 100644 (file)
@@ -35,7 +35,7 @@
 
 namespace vasum {
 
-HostIPCConnection::HostIPCConnection(ZonesManager* zonesManagerPtr)
+HostIPCConnection::HostIPCConnection(ipc::epoll::EventPoll& eventPoll, ZonesManager* zonesManagerPtr)
     : mZonesManagerPtr(zonesManagerPtr)
 {
     LOGT("Connecting to host IPC socket");
@@ -45,7 +45,7 @@ HostIPCConnection::HostIPCConnection(ZonesManager* zonesManagerPtr)
         std::string id = api::IPC_CONNECTION_PREFIX + std::to_string(peerID);
         mZonesManagerPtr->disconnectedCallback(id);
     };
-    mService.reset(new ipc::Service(mDispatcher.getPoll(), HOST_IPC_SOCKET,
+    mService.reset(new ipc::Service(eventPoll, HOST_IPC_SOCKET,
                                     nullptr, removedCallback));
 
     using namespace std::placeholders;
index 28e3725..dcadc4a 100644 (file)
@@ -27,7 +27,7 @@
 #define SERVER_HOST_IPC_CONNECTION_HPP
 
 #include "api/messages.hpp"
-#include "ipc/epoll/thread-dispatcher.hpp"
+#include "ipc/epoll/event-poll.hpp"
 #include "ipc/service.hpp"
 #include "ipc-callback-wrapper.hpp"
 
@@ -48,7 +48,7 @@ public:
         typedef typename IPCSignalWrapper<ArgIn>::type type;
     };
 
-    HostIPCConnection(ZonesManager* zm);
+    HostIPCConnection(ipc::epoll::EventPoll& eventPoll, ZonesManager* zm);
     ~HostIPCConnection();
 
     void start();
@@ -90,7 +90,6 @@ private:
                              api::FileMoveRequestStatus>::type& callback);
     void setCreateFileCallback(const Method<const api::CreateFileIn, api::CreateFileOut>::type& callback);
 
-    ipc::epoll::ThreadDispatcher mDispatcher;
     std::unique_ptr<ipc::Service> mService;
     ZonesManager* mZonesManagerPtr;
 };
index 1f749cc..5abd430 100644 (file)
@@ -118,7 +118,7 @@ void Server::run(bool asRoot)
     LOGI("Starting daemon...");
     {
         utils::ScopedGlibLoop loop;
-        ZonesManager manager(mConfigPath);
+        ZonesManager manager(mDispatcher.getPoll(), mConfigPath);
 
         // Do not restore zones state at Vasum start
         // manager.restoreAll();
index e034e0f..bf2519b 100644 (file)
@@ -27,6 +27,7 @@
 #define SERVER_SERVER_HPP
 
 #include "utils/latch.hpp"
+#include "ipc/epoll/thread-dispatcher.hpp"
 
 #include <string>
 
@@ -61,6 +62,7 @@ public:
 
 private:
     std::string mConfigPath;
+    ipc::epoll::ThreadDispatcher mDispatcher;
 
     /**
      * Set needed caps, groups and drop root privileges.
index ace7ee4..98b5a1e 100644 (file)
@@ -112,9 +112,9 @@ bool zoneIsRunning(const std::unique_ptr<Zone>& zone) {
 } // namespace
 
 
-ZonesManager::ZonesManager(const std::string& configPath)
+ZonesManager::ZonesManager(ipc::epoll::EventPoll& eventPoll, const std::string& configPath)
     : mWorker(utils::Worker::create())
-    , mHostIPCConnection(this)
+    , mHostIPCConnection(eventPoll, this)
     , mDetachOnExit(false)
     , mExclusiveIDLock(INVALID_CONNECTION_ID)
 #ifdef DBUS_CONNECTION
index e7b6675..75f83a7 100644 (file)
@@ -34,6 +34,7 @@
 #include "api/method-result-builder.hpp"
 
 #include "host-ipc-connection.hpp"
+#include "ipc/epoll/event-poll.hpp"
 #ifdef DBUS_CONNECTION
 #include "host-dbus-connection.hpp"
 #include "proxy-call-policy.hpp"
@@ -50,7 +51,7 @@ const std::string INVALID_CONNECTION_ID = "invalid://";
 class ZonesManager final {
 
 public:
-    ZonesManager(const std::string& managerConfigPath);
+    ZonesManager(ipc::epoll::EventPoll& eventPoll, const std::string& managerConfigPath);
     ~ZonesManager();
 
     /**
index 5e1f4d8..2fea841 100644 (file)
@@ -31,6 +31,7 @@
 #include "zones-manager.hpp"
 #include "host-ipc-connection.hpp"
 #include "host-ipc-definitions.hpp"
+#include "ipc/epoll/thread-dispatcher.hpp"
 #include "logger/logger.hpp"
 
 #ifdef DBUS_CONNECTION
@@ -61,6 +62,7 @@ const int EVENT_TIMEOUT = 500; // ms
 struct Fixture {
     utils::ScopedDir mZonesPathGuard;
     utils::ScopedDir mRunGuard;
+    ipc::epoll::ThreadDispatcher mDispatcher;
 #ifdef DBUS_CONNECTION
     utils::ScopedGlibLoop mLoop;
 #endif //DBUS_CONNECTION
@@ -70,7 +72,7 @@ struct Fixture {
     Fixture()
         : mZonesPathGuard(ZONES_PATH)
         , mRunGuard("/tmp/ut-run")
-        , cm(new ZonesManager(TEST_CONFIG_PATH))
+        , cm(new ZonesManager(mDispatcher.getPoll(), TEST_CONFIG_PATH))
     {
         cm->createZone("zone1", TEMPLATE_NAME);
         cm->createZone("zone2", TEMPLATE_NAME);
index af6d5ca..6f21872 100644 (file)
@@ -54,6 +54,7 @@ const bool AS_ROOT = true;
 
 struct Fixture {
     utils::ScopedDir mZonesPathGuard;
+    ipc::epoll::ThreadDispatcher mDispatcher;
 
     Fixture()
         : mZonesPathGuard(ZONES_PATH)
@@ -65,7 +66,7 @@ struct Fixture {
     void prepare()
     {
         ScopedGlibLoop loop;
-        ZonesManager manager(TEST_CONFIG_PATH);
+        ZonesManager manager(mDispatcher.getPoll(), TEST_CONFIG_PATH);
         manager.createZone("zone1", TEMPLATE_NAME);
         manager.createZone("zone2", TEMPLATE_NAME);
         manager.restoreAll();
index 1fb3316..cd402b8 100644 (file)
@@ -655,7 +655,7 @@ bool spinWaitFor(int timeoutMs, Predicate pred)
 
 struct Fixture {
     ScopedGlibLoop mLoop;
-
+    ipc::epoll::ThreadDispatcher dispatcher;
     ScopedDir mZonesPathGuard;
     ScopedDir mRunGuard;
 
@@ -687,27 +687,27 @@ BOOST_FIXTURE_TEST_SUITE(ZonesManagerSuite, Fixture)
 BOOST_AUTO_TEST_CASE(ConstructorDestructor)
 {
     std::unique_ptr<ZonesManager> cm;
-    cm.reset(new ZonesManager(TEST_CONFIG_PATH));
+    cm.reset(new ZonesManager(dispatcher.getPoll(), TEST_CONFIG_PATH));
     cm.reset();
 }
 
 BOOST_AUTO_TEST_CASE(MissingConfig)
 {
-    BOOST_REQUIRE_EXCEPTION(ZonesManager{MISSING_CONFIG_PATH},
+    BOOST_REQUIRE_EXCEPTION((ZonesManager(dispatcher.getPoll(), MISSING_CONFIG_PATH)),
                             ConfigException,
                             WhatEquals("Could not load " + MISSING_CONFIG_PATH));
 }
 
 BOOST_AUTO_TEST_CASE(Create)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
 }
 
 BOOST_AUTO_TEST_CASE(StartStop)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
 
@@ -720,7 +720,7 @@ BOOST_AUTO_TEST_CASE(StartStop)
 BOOST_AUTO_TEST_CASE(DetachOnExit)
 {
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
         cm.createZone("zone1", SIMPLE_TEMPLATE);
         cm.createZone("zone2", SIMPLE_TEMPLATE);
         cm.restoreAll();
@@ -728,7 +728,7 @@ BOOST_AUTO_TEST_CASE(DetachOnExit)
         cm.setZonesDetachOnExit();
     }
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
         cm.restoreAll();
         BOOST_CHECK_EQUAL(cm.getRunningForegroundZoneId(), "zone1");
     }
@@ -736,7 +736,7 @@ BOOST_AUTO_TEST_CASE(DetachOnExit)
 
 BOOST_AUTO_TEST_CASE(Focus)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -754,7 +754,7 @@ BOOST_AUTO_TEST_CASE(Focus)
 #ifdef ZONE_CONNECTION
 BOOST_AUTO_TEST_CASE(NotifyActiveZone)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -810,7 +810,7 @@ BOOST_AUTO_TEST_CASE(NotifyActiveZone)
 
 BOOST_AUTO_TEST_CASE(MoveFile)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -898,7 +898,7 @@ BOOST_AUTO_TEST_CASE(MoveFile)
 
 MULTI_FIXTURE_TEST_CASE(SwitchToDefault, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -921,7 +921,7 @@ MULTI_FIXTURE_TEST_CASE(SwitchToDefault, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(AllowSwitchToDefault, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -955,7 +955,7 @@ MULTI_FIXTURE_TEST_CASE(AllowSwitchToDefault, F, ACCESSORS)
 #ifdef DBUS_CONNECTION
 MULTI_FIXTURE_TEST_CASE(ProxyCall, F, DbusFixture)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -1008,7 +1008,7 @@ const std::set<std::string> EXPECTED_CONNECTIONS_NONE = { "zone1", "zone2", "zon
 
 MULTI_FIXTURE_TEST_CASE(GetZoneIds, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -1025,7 +1025,7 @@ MULTI_FIXTURE_TEST_CASE(GetZoneIds, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(GetActiveZoneId, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -1048,7 +1048,7 @@ MULTI_FIXTURE_TEST_CASE(GetActiveZoneId, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(SetActiveZone, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -1081,7 +1081,7 @@ MULTI_FIXTURE_TEST_CASE(CreateDestroyZone, F, ACCESSORS)
     const std::string zone2 = "test2";
     const std::string zone3 = "test3";
 
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.restoreAll();
 
     BOOST_CHECK_EQUAL(cm.getRunningForegroundZoneId(), "");
@@ -1136,8 +1136,8 @@ MULTI_FIXTURE_TEST_CASE(CreateDestroyZonePersistence, F, ACCESSORS)
         callDone.set();
     };
 
-    auto getZoneIds = []() -> std::vector<std::string> {
-        ZonesManager cm(TEST_CONFIG_PATH);
+    auto getZoneIds = [this]() -> std::vector<std::string> {
+        ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
         cm.restoreAll();
 
         typename F::HostAccessory host;
@@ -1148,7 +1148,7 @@ MULTI_FIXTURE_TEST_CASE(CreateDestroyZonePersistence, F, ACCESSORS)
 
     // create zone
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
         typename F::HostAccessory host;
         host.callAsyncMethodCreateZone(zone, SIMPLE_TEMPLATE, resultCallback);
         BOOST_REQUIRE(callDone.wait(EVENT_TIMEOUT));
@@ -1162,7 +1162,7 @@ MULTI_FIXTURE_TEST_CASE(CreateDestroyZonePersistence, F, ACCESSORS)
 
     // destroy zone
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
         typename F::HostAccessory host;
         host.callAsyncMethodDestroyZone(zone, resultCallback);
         BOOST_REQUIRE(callDone.wait(EVENT_TIMEOUT));
@@ -1186,7 +1186,7 @@ MULTI_FIXTURE_TEST_CASE(ZoneStatePersistence, F, ACCESSORS)
 
     // firts run
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
         typename F::HostAccessory host;
 
         // zone1 - created
@@ -1231,7 +1231,7 @@ MULTI_FIXTURE_TEST_CASE(ZoneStatePersistence, F, ACCESSORS)
 
     // second run
     {
-        ZonesManager cm(TEST_CONFIG_PATH);
+        ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
         cm.restoreAll();
 
         BOOST_CHECK(cm.isRunning(zone1)); // because the default json value
@@ -1247,7 +1247,7 @@ MULTI_FIXTURE_TEST_CASE(StartShutdownZone, F, ACCESSORS)
     const std::string zone1 = "zone1";
     const std::string zone2 = "zone2";
 
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone(zone1, SIMPLE_TEMPLATE);
     cm.createZone(zone2, SIMPLE_TEMPLATE);
 
@@ -1284,7 +1284,7 @@ MULTI_FIXTURE_TEST_CASE(StartShutdownZone, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(LockUnlockZone, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.createZone("zone2", SIMPLE_TEMPLATE);
     cm.createZone("zone3", SIMPLE_TEMPLATE);
@@ -1330,7 +1330,7 @@ MULTI_FIXTURE_TEST_CASE(LockUnlockZone, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(CreateFile, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.restoreAll();
 
@@ -1350,7 +1350,7 @@ MULTI_FIXTURE_TEST_CASE(CreateFile, F, ACCESSORS)
 
 MULTI_FIXTURE_TEST_CASE(CreateWriteReadFile, F, ACCESSORS)
 {
-    ZonesManager cm(TEST_CONFIG_PATH);
+    ZonesManager cm(F::dispatcher.getPoll(), TEST_CONFIG_PATH);
     cm.createZone("zone1", SIMPLE_TEMPLATE);
     cm.restoreAll();