From 5c0431b218f6cf6aff9fcf2767268725cef3c2ef Mon Sep 17 00:00:00 2001 From: Jan Olszak Date: Mon, 6 Jul 2015 11:58:10 +0200 Subject: [PATCH] Moved dispatching to Server [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 | 4 +-- server/host-ipc-connection.hpp | 5 ++- server/server.cpp | 2 +- server/server.hpp | 2 ++ server/zones-manager.cpp | 4 +-- server/zones-manager.hpp | 3 +- tests/unit_tests/client/ut-client.cpp | 4 ++- tests/unit_tests/server/ut-server.cpp | 3 +- tests/unit_tests/server/ut-zones-manager.cpp | 54 ++++++++++++++-------------- 9 files changed, 43 insertions(+), 38 deletions(-) diff --git a/server/host-ipc-connection.cpp b/server/host-ipc-connection.cpp index f110999..e881d2f 100644 --- a/server/host-ipc-connection.cpp +++ b/server/host-ipc-connection.cpp @@ -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; diff --git a/server/host-ipc-connection.hpp b/server/host-ipc-connection.hpp index 28e3725..dcadc4a 100644 --- a/server/host-ipc-connection.hpp +++ b/server/host-ipc-connection.hpp @@ -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::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::type& callback); - ipc::epoll::ThreadDispatcher mDispatcher; std::unique_ptr mService; ZonesManager* mZonesManagerPtr; }; diff --git a/server/server.cpp b/server/server.cpp index 1f749cc..5abd430 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -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(); diff --git a/server/server.hpp b/server/server.hpp index e034e0f..bf2519b 100644 --- a/server/server.hpp +++ b/server/server.hpp @@ -27,6 +27,7 @@ #define SERVER_SERVER_HPP #include "utils/latch.hpp" +#include "ipc/epoll/thread-dispatcher.hpp" #include @@ -61,6 +62,7 @@ public: private: std::string mConfigPath; + ipc::epoll::ThreadDispatcher mDispatcher; /** * Set needed caps, groups and drop root privileges. diff --git a/server/zones-manager.cpp b/server/zones-manager.cpp index ace7ee4..98b5a1e 100644 --- a/server/zones-manager.cpp +++ b/server/zones-manager.cpp @@ -112,9 +112,9 @@ bool zoneIsRunning(const std::unique_ptr& 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 diff --git a/server/zones-manager.hpp b/server/zones-manager.hpp index e7b6675..75f83a7 100644 --- a/server/zones-manager.hpp +++ b/server/zones-manager.hpp @@ -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(); /** diff --git a/tests/unit_tests/client/ut-client.cpp b/tests/unit_tests/client/ut-client.cpp index 5e1f4d8..2fea841 100644 --- a/tests/unit_tests/client/ut-client.cpp +++ b/tests/unit_tests/client/ut-client.cpp @@ -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); diff --git a/tests/unit_tests/server/ut-server.cpp b/tests/unit_tests/server/ut-server.cpp index af6d5ca..6f21872 100644 --- a/tests/unit_tests/server/ut-server.cpp +++ b/tests/unit_tests/server/ut-server.cpp @@ -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(); diff --git a/tests/unit_tests/server/ut-zones-manager.cpp b/tests/unit_tests/server/ut-zones-manager.cpp index 1fb3316..cd402b8 100644 --- a/tests/unit_tests/server/ut-zones-manager.cpp +++ b/tests/unit_tests/server/ut-zones-manager.cpp @@ -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 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 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 { - ZonesManager cm(TEST_CONFIG_PATH); + auto getZoneIds = [this]() -> std::vector { + 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(); -- 2.7.4