summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--netfs/unittests/Jamfile.jam2
-rw-r--r--netfs/unittests/mockFuse.cpp68
-rw-r--r--netfs/unittests/mockFuse.h39
-rw-r--r--netfs/unittests/testCore.cpp86
4 files changed, 114 insertions, 81 deletions
diff --git a/netfs/unittests/Jamfile.jam b/netfs/unittests/Jamfile.jam
index ac6ec38..3b4694b 100644
--- a/netfs/unittests/Jamfile.jam
+++ b/netfs/unittests/Jamfile.jam
@@ -9,7 +9,7 @@ lib Ice ;
path-constant me : . ;
run
- testCore.cpp mockDaemon.cpp
+ testCore.cpp mockDaemon.cpp mockFuse.cpp
: :
:
<define>BOOST_TEST_DYN_LINK
diff --git a/netfs/unittests/mockFuse.cpp b/netfs/unittests/mockFuse.cpp
new file mode 100644
index 0000000..7f9790b
--- /dev/null
+++ b/netfs/unittests/mockFuse.cpp
@@ -0,0 +1,68 @@
+#include "mockFuse.h"
+
+FuseMock::FuseMock(const std::string & ep, int & argc, char ** argv) :
+ NetFS::FuseApp(argc, argv),
+ testEndpoint(ep)
+{
+ ::memset(&context, 0, sizeof(fuse_context));
+ context.pid = getpid();
+ context.uid = getuid();
+ context.gid = getgid();
+}
+
+struct fuse_context *
+FuseMock::fuse_get_context()
+{
+ return &context;
+}
+
+int
+FuseMock::fuse_opt_parse(struct fuse_args * args, void * data, const struct fuse_opt [], fuse_opt_proc_t proc)
+{
+ for (int n = 0; n < args->argc; n += 1) {
+ proc(data, args->argv[n], n, args);
+ }
+ return 0;
+}
+
+int
+FuseMock::main(int &, char **, const struct fuse_operations * o)
+{
+ o->init(NULL);
+ ops = *o;
+ return 0;
+}
+
+NetFS::Client::ConfigurationPtr
+FuseMock::ReadConfiguration(const std::string &) const
+{
+ return new NetFS::Client::Configuration(
+ {
+ { "testvol", new NetFS::Client::Resource("testvol", "Service", { testEndpoint }) }
+ });
+}
+
+/*
+FuseMockHost::FuseMockHost() :
+ argc(2),
+ app(new FuseMock(argc, argv)),
+ fuse(&app->ops)
+{
+ char ** a = argv;
+ FuseAppBase::run(argc, a, app);
+}
+*/
+
+FuseMockHost::FuseMockHost(const std::string & ep, int c, char ** v) :
+ argc(c),
+ app(new FuseMock(ep, c, v)),
+ fuse(&app->ops)
+{
+ FuseAppBase::run(argc, v, app);
+}
+
+FuseMockHost::~FuseMockHost()
+{
+ delete app;
+}
+
diff --git a/netfs/unittests/mockFuse.h b/netfs/unittests/mockFuse.h
new file mode 100644
index 0000000..3ca88fe
--- /dev/null
+++ b/netfs/unittests/mockFuse.h
@@ -0,0 +1,39 @@
+#ifndef MOCKFUSE_H
+#define MOCKFUSE_H
+
+#include <fuseApp.h>
+
+class FuseMock : public NetFS::FuseApp {
+ public:
+ FuseMock(const std::string &, int & argc, char ** argv);
+
+ struct fuse_context * fuse_get_context() override;
+ int fuse_opt_parse(struct fuse_args * args, void * data, const struct fuse_opt [], fuse_opt_proc_t proc) override;
+ int main(int &, char **, const struct fuse_operations * o) override;
+
+ fuse_operations ops;
+
+ protected:
+ virtual NetFS::Client::ConfigurationPtr ReadConfiguration(const std::string &) const override;
+
+ private:
+ const std::string testEndpoint;
+ fuse_context context;
+};
+
+class FuseMockHost {
+ public:
+ FuseMockHost(const std::string &, int c, char ** v);
+ ~FuseMockHost();
+
+ private:
+ int argc;
+ FuseMock * app;
+
+ public:
+ fuse_operations * fuse;
+};
+
+
+#endif
+
diff --git a/netfs/unittests/testCore.cpp b/netfs/unittests/testCore.cpp
index 440fd29..6589838 100644
--- a/netfs/unittests/testCore.cpp
+++ b/netfs/unittests/testCore.cpp
@@ -6,7 +6,7 @@
#include <Ice/ObjectAdapter.h>
#include <Ice/Service.h>
#include "mockDaemon.h"
-#include <fuseApp.h>
+#include "mockFuse.h"
#include <boost/filesystem/path.hpp>
#ifndef ROOT
@@ -18,90 +18,16 @@
const boost::filesystem::path RootDir(XSTR(ROOT));
const std::string testEndpoint("tcp -h localhost -p 12012");
-char * argv[] = {
+char * defaultFuseArgv[] = {
strdup((RootDir / ":testvol").string().c_str()),
strdup((RootDir / "test").string().c_str())
};
-class FuseMock : public NetFS::FuseApp {
- public:
- FuseMock(int & argc, char ** argv) :
- NetFS::FuseApp(argc, argv)
- {
- ::memset(&context, 0, sizeof(fuse_context));
- context.pid = getpid();
- context.uid = getuid();
- context.gid = getgid();
- }
-
- struct fuse_context * fuse_get_context() override
- {
- return &context;
- }
-
- int fuse_opt_parse(struct fuse_args * args, void * data, const struct fuse_opt [], fuse_opt_proc_t proc) override
- {
- for (int n = 0; n < args->argc; n += 1) {
- proc(data, args->argv[n], n, args);
- }
- return 0;
- }
-
- int main(int &, char **, const struct fuse_operations * o) override
- {
- o->init(NULL);
- ops = *o;
- return 0;
- }
-
- fuse_operations ops;
-
- protected:
- virtual NetFS::Client::ConfigurationPtr ReadConfiguration(const std::string &) const override
- {
- return new NetFS::Client::Configuration(
- {
- { "testvol", new NetFS::Client::Resource("testvol", "Service", { testEndpoint }) }
- });
- }
-
- private:
- fuse_context context;
-};
-
-class FuseMockHost {
- public:
- FuseMockHost() :
- argc(2),
- app(new FuseMock(argc, argv)),
- fuse(&app->ops)
- {
- char ** a = argv;
- FuseAppBase::run(argc, a, app);
- }
-
- FuseMockHost(int c, char ** v) :
- argc(c),
- app(new FuseMock(c, v)),
- fuse(&app->ops)
- {
- FuseAppBase::run(argc, v, app);
- }
-
- ~FuseMockHost()
- {
- delete app;
- }
-
- int argc;
- FuseMock * app;
- fuse_operations * fuse;
-};
-
class Core {
public:
Core() :
daemonHost(testEndpoint),
+ fuseHost(testEndpoint, 2, defaultFuseArgv),
ic(daemonHost.ic),
fuse(fuseHost.fuse)
{
@@ -135,7 +61,7 @@ BOOST_AUTO_TEST_SUITE_END();
BOOST_AUTO_TEST_CASE ( createAndDaemonRestart )
{
MockDaemonHost daemon(testEndpoint);
- FuseMockHost fuse;
+ FuseMockHost fuse(testEndpoint, 2, defaultFuseArgv);
struct statvfs s;
BOOST_REQUIRE_EQUAL(0, fuse.fuse->statfs("/", &s));
@@ -183,14 +109,14 @@ BOOST_AUTO_TEST_CASE ( withRouter )
} BOOST_SCOPE_EXIT_END;
{
- char * argv[] = {
+ char * glacierFuseArgv[] = {
strdup((RootDir / ":testvol").string().c_str()),
strdup((RootDir / "test").string().c_str()),
strdup("--Ice.Default.Router=Glacier2/router:tcp -h localhost -p 4063")
};
MockDaemonHost daemon(testEndpoint);
- FuseMockHost fuse(3, argv);
+ FuseMockHost fuse(testEndpoint, 3, glacierFuseArgv);
struct statvfs s;
BOOST_REQUIRE_EQUAL(0, fuse.fuse->statfs("/", &s));