From 71ed9d0d33acea71ad4cb42c124d605c42e2be0f Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 14 Jul 2015 23:44:31 +0100 Subject: Refactor mocked daemon and sandbox export into it's own files --- netfs/daemon/daemon.cpp | 1 + netfs/unittests/Jamfile.jam | 2 +- netfs/unittests/mockDaemon.cpp | 74 +++++++++++++++++++++++++++++++++++++++++ netfs/unittests/mockDaemon.h | 35 ++++++++++++++++++++ netfs/unittests/testCore.cpp | 75 ++++-------------------------------------- 5 files changed, 118 insertions(+), 69 deletions(-) create mode 100644 netfs/unittests/mockDaemon.cpp create mode 100644 netfs/unittests/mockDaemon.h diff --git a/netfs/daemon/daemon.cpp b/netfs/daemon/daemon.cpp index f703386..9296b72 100644 --- a/netfs/daemon/daemon.cpp +++ b/netfs/daemon/daemon.cpp @@ -67,6 +67,7 @@ void NetFSDaemon::stop() { adapter->deactivate(); + adapter = nullptr; } extern "C" { diff --git a/netfs/unittests/Jamfile.jam b/netfs/unittests/Jamfile.jam index af02411..ac6ec38 100644 --- a/netfs/unittests/Jamfile.jam +++ b/netfs/unittests/Jamfile.jam @@ -9,7 +9,7 @@ lib Ice ; path-constant me : . ; run - testCore.cpp + testCore.cpp mockDaemon.cpp : : : BOOST_TEST_DYN_LINK diff --git a/netfs/unittests/mockDaemon.cpp b/netfs/unittests/mockDaemon.cpp new file mode 100644 index 0000000..4a735e8 --- /dev/null +++ b/netfs/unittests/mockDaemon.cpp @@ -0,0 +1,74 @@ +#include "mockDaemon.h" +#include + +#ifndef ROOT +#error "ROOT needs to be defined at compilation time" +#endif + +#define XSTR(s) STR(s) +#define STR(s) #s +const boost::filesystem::path RootDir(XSTR(ROOT)); +const boost::filesystem::path TestExportRoot(RootDir / "testExport"); + +MockDaemon::MockDaemon(const std::string & ep) : + NetFSDaemon(), + testEndpoint(ep) +{ +} + +NetFS::Daemon::ConfigurationPtr +MockDaemon::ReadConfiguration(const boost::filesystem::path &) const +{ + return new NetFS::Daemon::Configuration( + { + { "testvol", new NetFS::Daemon::Export(TestExportRoot.string()) } + }, + { + { "unittest", new NetFS::Daemon::Host(testEndpoint) } + }); +} + +MockDaemonHost::MockDaemonHost(const std::string & ep, const Ice::StringSeq & ps) : + testEndpoint(ep), + params(ps), + daemon(nullptr) +{ + boost::filesystem::remove_all(TestExportRoot); + boost::filesystem::create_directories(TestExportRoot); + restart(); +} + +MockDaemonHost::~MockDaemonHost() +{ + stop(); + boost::filesystem::remove_all(TestExportRoot); +} + +void +MockDaemonHost::stop() +{ + if (daemon) { + daemon->stop(); + delete daemon; + } + if (ic) { + ic->destroy(); + } +} + +void +MockDaemonHost::start() +{ + ic = Ice::initialize(params); + ic->getProperties()->setProperty("NetFSD.HostNameOverride", "unittest"); + daemon = new MockDaemon(testEndpoint); + daemon->start("NetFSDaemonAdapter", ic, {}); +} + +void +MockDaemonHost::restart() +{ + stop(); + start(); +} + diff --git a/netfs/unittests/mockDaemon.h b/netfs/unittests/mockDaemon.h new file mode 100644 index 0000000..d2afe18 --- /dev/null +++ b/netfs/unittests/mockDaemon.h @@ -0,0 +1,35 @@ +#ifndef MOCKDAEMON_H +#define MOCKDAEMON_H + +#include + +class MockDaemon : public NetFSDaemon { + public: + MockDaemon(const std::string & ep); + + const std::string testEndpoint; + + protected: + virtual NetFS::Daemon::ConfigurationPtr ReadConfiguration(const boost::filesystem::path &) const override; +}; + +class MockDaemonHost { + public: + MockDaemonHost(const std::string & ep, const Ice::StringSeq & ps = {}); + ~MockDaemonHost(); + + void restart(); + + Ice::CommunicatorPtr ic; + + private: + void start(); + void stop(); + + const std::string testEndpoint; + Ice::StringSeq params; + NetFSDaemon * daemon; +}; + +#endif + diff --git a/netfs/unittests/testCore.cpp b/netfs/unittests/testCore.cpp index b19c453..440fd29 100644 --- a/netfs/unittests/testCore.cpp +++ b/netfs/unittests/testCore.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include "mockDaemon.h" #include #include @@ -16,50 +16,7 @@ #define XSTR(s) STR(s) #define STR(s) #s const boost::filesystem::path RootDir(XSTR(ROOT)); -const boost::filesystem::path TestExportRoot(RootDir / "testExport"); - -std::string testEndpoint("tcp -h localhost -p 12012"); - -class MockDaemon : public NetFSDaemon { - public: - MockDaemon() : NetFSDaemon() { } - - protected: - virtual NetFS::Daemon::ConfigurationPtr ReadConfiguration(const boost::filesystem::path &) const override - { - return new NetFS::Daemon::Configuration( - { - { "testvol", new NetFS::Daemon::Export(TestExportRoot.string()) } - }, - { - { "unittest", new NetFS::Daemon::Host(testEndpoint) } - }); - } -}; - -class MockDaemonHost { - public: - MockDaemonHost(const Ice::StringSeq & ps = {}) : - params(ps), - ic(Ice::initialize(params)), - daemon(new MockDaemon()) - { - ic->getProperties()->setProperty("NetFSD.HostNameOverride", "unittest"); - daemon->start("NetFSDaemonAdapter", ic, {}); - - } - - ~MockDaemonHost() - { - delete daemon; - ic->destroy(); - } - - Ice::StringSeq params; - Ice::CommunicatorPtr ic; - NetFSDaemon * daemon; -}; -typedef boost::shared_ptr MockDaemonHostPtr; +const std::string testEndpoint("tcp -h localhost -p 12012"); char * argv[] = { strdup((RootDir / ":testvol").string().c_str()), @@ -144,8 +101,8 @@ class FuseMockHost { class Core { public: Core() : + daemonHost(testEndpoint), ic(daemonHost.ic), - daemon(daemonHost.daemon), fuse(fuseHost.fuse) { } @@ -155,25 +112,9 @@ class Core { FuseMockHost fuseHost; Ice::CommunicatorPtr ic; - NetFSDaemon * const daemon; fuse_operations * fuse;; }; -class GlobalSandBox { - public: - GlobalSandBox() - { - boost::filesystem::remove_all(TestExportRoot); - boost::filesystem::create_directories(TestExportRoot); - } - ~GlobalSandBox() - { - boost::filesystem::remove_all(TestExportRoot); - } -}; - -BOOST_GLOBAL_FIXTURE(GlobalSandBox); - BOOST_FIXTURE_TEST_SUITE( NetfsCore, Core ) BOOST_AUTO_TEST_CASE ( daemonInitialised ) @@ -193,7 +134,7 @@ BOOST_AUTO_TEST_SUITE_END(); BOOST_AUTO_TEST_CASE ( createAndDaemonRestart ) { - MockDaemonHostPtr daemon(new MockDaemonHost()); + MockDaemonHost daemon(testEndpoint); FuseMockHost fuse; struct statvfs s; @@ -221,10 +162,8 @@ BOOST_AUTO_TEST_CASE ( createAndDaemonRestart ) BOOST_REQUIRE_EQUAL(0, fuse.fuse->fgetattr(fileName, &st, &fh)); BOOST_REQUIRE_EQUAL(st.st_size, sizeof(someData)); - BOOST_CHECKPOINT("Delete old daemon object"); - daemon.reset(); - BOOST_CHECKPOINT("Create new daemon object"); - daemon = MockDaemonHostPtr(new MockDaemonHost()); + BOOST_CHECKPOINT("Restart daemon object"); + daemon.restart(); BOOST_CHECKPOINT("Fetch file attributes again"); BOOST_REQUIRE_EQUAL(0, fuse.fuse->fgetattr(fileName, &st, &fh)); @@ -250,7 +189,7 @@ BOOST_AUTO_TEST_CASE ( withRouter ) strdup("--Ice.Default.Router=Glacier2/router:tcp -h localhost -p 4063") }; - MockDaemonHostPtr daemon(new MockDaemonHost()); + MockDaemonHost daemon(testEndpoint); FuseMockHost fuse(3, argv); struct statvfs s; -- cgit v1.2.3