summaryrefslogtreecommitdiff
path: root/netfs/unittests/mockFuse.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/unittests/mockFuse.cpp')
-rw-r--r--netfs/unittests/mockFuse.cpp68
1 files changed, 68 insertions, 0 deletions
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;
+}
+