From 0e1525c54e190b8869afe789db599b74543b7b72 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 15 Jul 2015 00:37:03 +0100 Subject: Refactor mocked fuse client into it's own files --- netfs/unittests/Jamfile.jam | 2 +- netfs/unittests/mockFuse.cpp | 68 +++++++++++++++++++++++++++++++++++ netfs/unittests/mockFuse.h | 39 ++++++++++++++++++++ netfs/unittests/testCore.cpp | 86 ++++---------------------------------------- 4 files changed, 114 insertions(+), 81 deletions(-) create mode 100644 netfs/unittests/mockFuse.cpp create mode 100644 netfs/unittests/mockFuse.h 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 : : : 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 + +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 #include #include "mockDaemon.h" -#include +#include "mockFuse.h" #include #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)); -- cgit v1.2.3