mirror of
https://github.com/falk-werner/webfuse
synced 2024-10-27 20:34:10 +00:00
07e32757f8
* removes unnecessary code * adds test of wf_status * adds tests of wf_message * adds tests of wf_message_queue * changed branch of coverage badge to display correct results * moves core tests into separate subdirectory * increases coverage of timer test * moves adapter specific tests into separate directory * moves provider specific tests into separate directory * adds tests of jsonrpc utilities * adds tests of jsonrpc request * adds test of jsonrpc response * adds tests of jsonrpc server * adds tests of jsonrpc proxy * adds integration test (found some issues) * disables problematic tests * fixes resource leak: pending timer after cleanup proxy * fixes order of cleanup to prevent processing pending requests after filesystem shut down * fixes some memcheck and helgrind errors: initialization of lws_log; setup of client and server * disabled a test * fixes error in msleep utility * fixes deadlock at IntegrationTest using valgrind * removes unit test code from coverage report * adds some integration tests * makes badge show coverage of master * fixes some coding style issues * fixes eary trigger of is_connected (provider) * fixes read error in 32 bit environments\n\ninode is always 64 bit, but variadic wf_impl_jsonrpc_proxy_invoke expects int
99 lines
1.8 KiB
C++
99 lines
1.8 KiB
C++
#include "integration/server.hpp"
|
|
#include <thread>
|
|
#include <mutex>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <unistd.h>
|
|
#include "webfuse_adapter.h"
|
|
#include "webfuse/adapter/impl/server.h"
|
|
#include "msleep.hpp"
|
|
|
|
#define WF_PATH_MAX (100)
|
|
|
|
namespace webfuse_test
|
|
{
|
|
|
|
class Server::Private
|
|
{
|
|
public:
|
|
Private()
|
|
: is_shutdown_requested(false)
|
|
{
|
|
snprintf(base_dir, WF_PATH_MAX, "%s", "/tmp/webfuse_test_integration_XXXXXX");
|
|
mkdtemp(base_dir);
|
|
|
|
config = wf_server_config_create();
|
|
wf_server_config_set_port(config, 8080);
|
|
wf_server_config_set_mountpoint(config, base_dir);
|
|
|
|
server = wf_server_create(config);
|
|
|
|
while (!wf_impl_server_is_operational(server))
|
|
{
|
|
wf_server_service(server, 100);
|
|
}
|
|
|
|
thread = std::thread(Run, this);
|
|
|
|
}
|
|
|
|
~Private()
|
|
{
|
|
RequestShutdown();
|
|
thread.join();
|
|
rmdir(base_dir);
|
|
wf_server_dispose(server);
|
|
wf_server_config_dispose(config);
|
|
}
|
|
|
|
bool IsShutdownRequested()
|
|
{
|
|
std::lock_guard<std::mutex> lock(shutdown_lock);
|
|
return is_shutdown_requested;
|
|
}
|
|
|
|
private:
|
|
void RequestShutdown()
|
|
{
|
|
std::lock_guard<std::mutex> lock(shutdown_lock);
|
|
is_shutdown_requested = true;
|
|
}
|
|
|
|
static void Run(Server::Private * context)
|
|
{
|
|
while (!context->IsShutdownRequested())
|
|
{
|
|
wf_server_service(context->server, 100);
|
|
}
|
|
}
|
|
|
|
|
|
std::mutex shutdown_lock;
|
|
std::thread thread;
|
|
bool is_shutdown_requested;
|
|
|
|
|
|
public:
|
|
char base_dir[WF_PATH_MAX];
|
|
wf_server_config * config;
|
|
wf_server * server;
|
|
};
|
|
|
|
Server::Server()
|
|
: d(new Server::Private())
|
|
{
|
|
|
|
}
|
|
|
|
Server::~Server()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
char const * Server::GetBaseDir(void) const
|
|
{
|
|
return d->base_dir;
|
|
}
|
|
|
|
|
|
} |