summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--netfs/daemon/daemon.cpp1
-rw-r--r--netfs/unittests/Jamfile.jam2
-rw-r--r--netfs/unittests/mockDaemon.cpp74
-rw-r--r--netfs/unittests/mockDaemon.h35
-rw-r--r--netfs/unittests/testCore.cpp75
5 files changed, 118 insertions, 69 deletions
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
: :
:
<define>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 <boost/filesystem/operations.hpp>
+
+#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 <daemon.h>
+
+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 <boost/scope_exit.hpp>
#include <Ice/ObjectAdapter.h>
#include <Ice/Service.h>
-#include <daemon.h>
+#include "mockDaemon.h"
#include <fuseApp.h>
#include <boost/filesystem/path.hpp>
@@ -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<MockDaemonHost> 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;