fixed unit tests

pull/87/head
Falk Werner 4 years ago
parent 4b544ef35d
commit 017e04f77f

@ -122,7 +122,7 @@ wf_impl_client_protocol_on_add_filesystem_finished(
struct wf_client_protocol * protocol = context->protocol;
int reason = WF_CLIENT_FILESYSTEM_ADD_FAILED;
if (NULL == protocol->filesystem)
if ((NULL == protocol->filesystem) && (NULL != result))
{
struct wf_json const * id = wf_impl_json_object_get(result, "id");
if (wf_impl_json_is_string(id))

@ -21,18 +21,21 @@ void wf_impl_credentials_init(
char const * type,
struct wf_json const * data)
{
size_t count = wf_impl_json_object_size(data);
size_t count = (NULL != data) ? wf_impl_json_object_size(data) : 0;
credentials->type = strdup(type);
credentials->capacity = (count > 0) ? count : WF_CREDENTIALS_INITIAL_CAPACITY;
credentials->entries = malloc(sizeof(struct wf_credentials_entry) * credentials->capacity);
credentials->size = 0;
for (size_t i; i < count; i++)
for (size_t i = 0; i < count; i++)
{
char const * key = wf_impl_json_object_key(data, i);
struct wf_json const * value = wf_impl_json_object_value(data, i);
wf_impl_credentials_add(credentials, key, wf_impl_json_string_get(value));
if (wf_impl_json_is_string(value))
{
wf_impl_credentials_add(credentials, key, wf_impl_json_string_get(value));
}
}
}
@ -82,6 +85,16 @@ void wf_impl_credentials_add(
char const * key,
char const * value)
{
for(size_t i = 0; i < credentials->size; i++)
{
if (0 == strcmp(key, credentials->entries[i].key))
{
free(credentials->entries[i].value);
credentials->entries[i].value = strdup(value);
return;
}
}
if (credentials->size >= credentials->capacity)
{
credentials->capacity *= 2;

@ -20,6 +20,8 @@ bool
wf_impl_jsonrpc_is_request(
struct wf_json const * message)
{
if (NULL == message) { return false; }
struct wf_json const * id = wf_impl_json_object_get(message, "id");
struct wf_json const * method = wf_impl_json_object_get(message, "method");
struct wf_json const * params = wf_impl_json_object_get(message, "params");

@ -7,6 +7,8 @@ bool
wf_impl_jsonrpc_is_response(
struct wf_json const * message)
{
if (NULL == message) { return false; }
struct wf_json const * id = wf_impl_json_object_get(message, "id");
struct wf_json const * err = wf_impl_json_object_get(message, "error");
struct wf_json const * result = wf_impl_json_object_get(message, "result");
@ -26,7 +28,7 @@ wf_impl_jsonrpc_response_init(
result->error = NULL;
struct wf_json const * id_holder = wf_impl_json_object_get(response, "id");
if (wf_impl_json_is_int(id_holder))
if (!wf_impl_json_is_int(id_holder))
{
result->error = wf_impl_jsonrpc_error(WF_BAD_FORMAT, "invalid format: missing id");
return;
@ -49,6 +51,7 @@ wf_impl_jsonrpc_response_init(
}
result->error = wf_impl_jsonrpc_error(code, message);
result->result = NULL;
}
}

@ -33,7 +33,7 @@ void wf_impl_operation_lookup_finished(
struct wf_json const * type_holder = wf_impl_json_object_get(result, "type");
if ((wf_impl_json_is_int(inode_holder)) &&
(wf_impl_json_is_int(mode_holder)) &&
(wf_impl_json_is_int(type_holder)))
(wf_impl_json_is_string(type_holder)))
{
memset(&buffer, 0, sizeof(struct stat));

@ -78,7 +78,7 @@ void wf_impl_operation_readdir_finished(
struct wf_impl_dirbuffer buffer;
wf_impl_dirbuffer_init(&buffer);
if (wf_impl_json_is_array(result))
if ((NULL != result) && (wf_impl_json_is_array(result)))
{
size_t const count = wf_impl_json_array_size(result);
for(size_t i = 0; i < count; i++)

@ -8,6 +8,7 @@ wf_impl_json_get_int(
char const * key,
int default_value)
{
if (NULL == object) { return default_value; }
int result = default_value;
struct wf_json const * holder = wf_impl_json_object_get(object, key);

@ -1,28 +1,21 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/request.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
TEST(wf_jsonrpc_is_request, request_with_object_params)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("method"));
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_integer(42));
JsonDoc doc("{\"method\": \"method\", \"params\": {}, \"id\": 42}");
ASSERT_TRUE(wf_impl_jsonrpc_is_request(request));
json_decref(request);
ASSERT_TRUE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, request_with_array_params)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("method"));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(42));
ASSERT_TRUE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("{\"method\": \"method\", \"params\": [], \"id\": 42}");
json_decref(request);
ASSERT_TRUE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, null_request)
@ -32,81 +25,49 @@ TEST(wf_jsonrpc_is_request, null_request)
TEST(wf_jsonrpc_is_request, invalid_request)
{
json_t * request = json_array();
json_array_append_new(request, json_string("method"));
json_array_append_new(request, json_object());
json_array_append_new(request, json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("[\"method\", {}, 42]");
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_without_id)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("method"));
json_object_set_new(request, "params", json_object());
JsonDoc doc("{\"method\": \"method\", \"params\": {}}");
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_due_to_invalid_id)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("method"));
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_string("42"));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("{\"method\": \"method\", \"params\": [], \"id\": \"42\"}");
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_without_method)
{
json_t * request = json_object();
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("{\"params\": [], \"id\": 42}");
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_due_to_invalid_method)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_integer(42));
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_integer(42));
JsonDoc doc("{\"method\": 42, \"params\": [], \"id\": 42}");
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_without_params)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("method"));
json_object_set_new(request, "id", json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("{\"method\": \"method\", \"id\": 42}");
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}
TEST(wf_jsonrpc_is_request, invalid_request_due_to_invalid_params)
{
json_t * request = json_object();
json_object_set_new(request, "methdo", json_string("method"));
json_object_set_new(request, "params", json_string("params"));
json_object_set_new(request, "id", json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
JsonDoc doc("{\"method\": \"method\", \"params\": \"params\", \"id\": 42}");
json_decref(request);
ASSERT_FALSE(wf_impl_jsonrpc_is_request(doc.root()));
}

@ -1,37 +1,28 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/response.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
TEST(wf_jsonrpc_is_response, valid_result)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_object());
json_object_set_new(message, "id", json_integer(42));
JsonDoc doc("{\"result\": {}, \"id\": 42}");
ASSERT_TRUE(wf_impl_jsonrpc_is_response(message));
json_decref(message);
ASSERT_TRUE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, valid_result_string)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_string("also valid"));
json_object_set_new(message, "id", json_integer(42));
ASSERT_TRUE(wf_impl_jsonrpc_is_response(message));
JsonDoc doc("{\"result\": \"also valid\", \"id\": 42}");
json_decref(message);
ASSERT_TRUE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, valid_error)
{
json_t * message = json_object();
json_object_set_new(message, "error", json_object());
json_object_set_new(message, "id", json_integer(42));
ASSERT_TRUE(wf_impl_jsonrpc_is_response(message));
JsonDoc doc("{\"error\": {}, \"id\": 42}");
json_decref(message);
ASSERT_TRUE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, invalid_null)
@ -41,54 +32,36 @@ TEST(wf_jsonrpc_is_response, invalid_null)
TEST(wf_jsonrpc_is_response, invalid_message)
{
json_t * message = json_array();
json_array_append_new(message, json_object());
json_array_append_new(message, json_integer(42));
JsonDoc doc("[{}, 42]");
ASSERT_FALSE(wf_impl_jsonrpc_is_response(message));
json_decref(message);
ASSERT_FALSE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, invalid_missing_id)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_object());
ASSERT_FALSE(wf_impl_jsonrpc_is_response(message));
JsonDoc doc("{\"result\": {}}");
json_decref(message);
ASSERT_FALSE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, invalid_id_wrong_type)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_object());
json_object_set_new(message, "id", json_string("42"));
ASSERT_FALSE(wf_impl_jsonrpc_is_response(message));
JsonDoc doc("{\"result\": {}, \"id\": \"42\"}");
json_decref(message);
ASSERT_FALSE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, invalid_missing_result_and_error)
{
json_t * message = json_object();
json_object_set_new(message, "id", json_integer(42));
JsonDoc doc("{\"id\": 42}");
ASSERT_FALSE(wf_impl_jsonrpc_is_response(message));
json_decref(message);
ASSERT_FALSE(wf_impl_jsonrpc_is_response(doc.root()));
}
TEST(wf_jsonrpc_is_response, invalid_error_wrong_type)
{
json_t * message = json_object();
json_object_set_new(message, "error", json_array());
json_object_set_new(message, "id", json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_response(message));
JsonDoc doc("{\"error\": [], \"id\": 42}");
json_decref(message);
ASSERT_FALSE(wf_impl_jsonrpc_is_response(doc.root()));
}

@ -1,17 +1,20 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/proxy.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/impl/json/node.h"
#include "webfuse/impl/message.h"
#include "webfuse/status.h"
#include "webfuse/impl/timer/manager.h"
#include "webfuse/jsonrpc/mock_timer.hpp"
#include "webfuse/test_util/json_doc.hpp"
#include <thread>
#include <chrono>
using namespace std::chrono_literals;
using wf_jsonrpc_test::MockTimer;
using webfuse_test::JsonDoc;
using testing::Return;
using testing::_;
using testing::DoAll;
@ -23,21 +26,18 @@ namespace
{
struct SendContext
{
json_t * response;
JsonDoc doc;
wf_json const * response;
bool result;
bool is_called;
explicit SendContext(bool result_ = true)
: response(nullptr)
: doc("null")
, response(nullptr)
, result(result_)
, is_called(false)
{
}
~SendContext()
{
json_decref(response);
}
};
bool jsonrpc_send(
@ -46,11 +46,8 @@ namespace
{
SendContext * context = reinterpret_cast<SendContext*>(user_data);
context->is_called = true;
if (nullptr != context->response)
{
json_decref(context->response);
}
context->response = json_loadb(request->data, request->length, 0, nullptr);
context->doc = std::move(JsonDoc(std::string(request->data, request->length)));
context->response = context->doc.root();
wf_impl_message_dispose(request);
return context->result;
@ -59,12 +56,10 @@ namespace
struct FinishedContext
{
bool is_called;
json_t * result;
wf_jsonrpc_error * error;
FinishedContext()
: is_called(false)
, result(nullptr)
, error(nullptr)
{
@ -72,23 +67,17 @@ namespace
~FinishedContext()
{
if (nullptr != result)
{
json_decref(result);
}
wf_impl_jsonrpc_error_dispose(error);
}
};
void jsonrpc_finished(
void * user_data,
json_t const * result,
wf_json const *,
wf_jsonrpc_error const * error)
{
FinishedContext * context = reinterpret_cast<FinishedContext*>(user_data);
context->is_called = true;
context->result = json_deep_copy(result);
if (nullptr != error)
{
@ -125,22 +114,22 @@ TEST(wf_jsonrpc_proxy, invoke)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
json_t * method = json_object_get(send_context.response, "method");
ASSERT_TRUE(json_is_string(method));
ASSERT_STREQ("foo", json_string_value(method));
wf_json const * method = wf_impl_json_object_get(send_context.response, "method");
ASSERT_TRUE(wf_impl_json_is_string(method));
ASSERT_STREQ("foo", wf_impl_json_string_get(method));
json_t * params = json_object_get(send_context.response, "params");
ASSERT_TRUE(json_is_array(params));
ASSERT_EQ(2, json_array_size(params));
ASSERT_TRUE(json_is_string(json_array_get(params, 0)));
ASSERT_STREQ("bar", json_string_value(json_array_get(params, 0)));
ASSERT_TRUE(json_is_integer(json_array_get(params, 1)));
ASSERT_EQ(42, json_integer_value(json_array_get(params, 1)));
wf_json const * params = wf_impl_json_object_get(send_context.response, "params");
ASSERT_TRUE(wf_impl_json_is_array(params));
ASSERT_EQ(2, wf_impl_json_array_size(params));
ASSERT_TRUE(wf_impl_json_is_string(wf_impl_json_array_get(params, 0)));
ASSERT_STREQ("bar", wf_impl_json_string_get(wf_impl_json_array_get(params, 0)));
ASSERT_TRUE(wf_impl_json_is_int(wf_impl_json_array_get(params, 1)));
ASSERT_EQ(42, wf_impl_json_int_get(wf_impl_json_array_get(params, 1)));
json_t * id = json_object_get(send_context.response, "id");
ASSERT_TRUE(json_is_integer(id));
wf_json const * id = wf_impl_json_object_get(send_context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_FALSE(finished_context.is_called);
@ -164,7 +153,7 @@ TEST(wf_jsonrpc_proxy, invoke_calls_finish_if_send_fails)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
ASSERT_TRUE(finished_context.is_called);
ASSERT_FALSE(nullptr == finished_context.error);
@ -190,7 +179,7 @@ TEST(wf_jsonrpc_proxy, invoke_if_another_request_is_pending)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data2, "foo", "");
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
ASSERT_FALSE(finished_context.is_called);
@ -231,22 +220,16 @@ TEST(wf_jsonrpc_proxy, on_result)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
json_t * id = json_object_get(send_context.response, "id");
ASSERT_TRUE(json_is_number(id));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
json_t * response = json_object();
json_object_set_new(response, "result", json_string("okay"));
json_object_set(response, "id", id);
wf_json const * id = wf_impl_json_object_get(send_context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
wf_impl_jsonrpc_proxy_onresult(proxy, response);
json_decref(response);
JsonDoc response("{\"result\": \"okay\", \"id\": " + std::to_string(wf_impl_json_int_get(id)) + "}");
wf_impl_jsonrpc_proxy_onresult(proxy, response.root());
ASSERT_TRUE(finished_context.is_called);
ASSERT_EQ(nullptr, finished_context.error);
ASSERT_TRUE(json_is_string(finished_context.result));
ASSERT_STREQ("okay", json_string_value(finished_context.result));
wf_impl_jsonrpc_proxy_dispose(proxy);
wf_impl_timer_manager_dispose(timer_manager);
@ -265,17 +248,13 @@ TEST(wf_jsonrpc_proxy, on_result_reject_response_with_unknown_id)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
json_t * id = json_object_get(send_context.response, "id");
ASSERT_TRUE(json_is_number(id));
wf_json const * id = wf_impl_json_object_get(send_context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
json_t * response = json_object();
json_object_set_new(response, "result", json_string("okay"));
json_object_set_new(response, "id", json_integer(1 + json_integer_value(id)));
wf_impl_jsonrpc_proxy_onresult(proxy, response);
json_decref(response);
JsonDoc response("{\"result\": \"okay\", \"id\": " + std::to_string(wf_impl_json_int_get(id) + 1) + "}");
wf_impl_jsonrpc_proxy_onresult(proxy, response.root());
ASSERT_FALSE(finished_context.is_called);
@ -296,7 +275,7 @@ TEST(wf_jsonrpc_proxy, timeout)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
std::this_thread::sleep_for(10ms);
wf_impl_timer_manager_check(timer_manager);
@ -321,7 +300,7 @@ TEST(wf_jsonrpc_proxy, cleanup_pending_request)
wf_impl_jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
ASSERT_FALSE(finished_context.is_called);
@ -345,22 +324,22 @@ TEST(wf_jsonrpc_proxy, notify)
wf_impl_jsonrpc_proxy_notify(proxy, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
ASSERT_TRUE(wf_impl_json_is_object(send_context.response));
json_t * method = json_object_get(send_context.response, "method");
ASSERT_TRUE(json_is_string(method));
ASSERT_STREQ("foo", json_string_value(method));
wf_json const * method = wf_impl_json_object_get(send_context.response, "method");
ASSERT_TRUE(wf_impl_json_is_string(method));
ASSERT_STREQ("foo", wf_impl_json_string_get(method));
json_t * params = json_object_get(send_context.response, "params");
ASSERT_TRUE(json_is_array(params));
ASSERT_EQ(2, json_array_size(params));
ASSERT_TRUE(json_is_string(json_array_get(params, 0)));
ASSERT_STREQ("bar", json_string_value(json_array_get(params, 0)));
ASSERT_TRUE(json_is_integer(json_array_get(params, 1)));
ASSERT_EQ(42, json_integer_value(json_array_get(params, 1)));
wf_json const * params = wf_impl_json_object_get(send_context.response, "params");
ASSERT_TRUE(wf_impl_json_is_array(params));
ASSERT_EQ(2, wf_impl_json_array_size(params));
ASSERT_TRUE(wf_impl_json_is_string(wf_impl_json_array_get(params, 0)));
ASSERT_STREQ("bar", wf_impl_json_string_get(wf_impl_json_array_get(params, 0)));
ASSERT_TRUE(wf_impl_json_is_int(wf_impl_json_array_get(params, 1)));
ASSERT_EQ(42, wf_impl_json_int_get(wf_impl_json_array_get(params, 1)));
json_t * id = json_object_get(send_context.response, "id");
ASSERT_EQ(nullptr, id);
wf_json const * id = wf_impl_json_object_get(send_context.response, "id");
ASSERT_TRUE(wf_impl_json_is_undefined(id));
wf_impl_jsonrpc_proxy_dispose(proxy);
wf_impl_timer_manager_dispose(timer_manager);
@ -390,12 +369,8 @@ TEST(wf_jsonrpc_proxy, on_result_swallow_if_no_request_pending)
void * send_data = reinterpret_cast<void*>(&send_context);
struct wf_jsonrpc_proxy * proxy = wf_impl_jsonrpc_proxy_create(timer_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
json_t * response = json_object();
json_object_set_new(response, "result", json_string("okay"));
json_object_set_new(response, "id", json_integer(42));
wf_impl_jsonrpc_proxy_onresult(proxy, response);
json_decref(response);
JsonDoc response("{\"result\": \"okay\", \"id\": 42}");
wf_impl_jsonrpc_proxy_onresult(proxy, response.root());
wf_impl_jsonrpc_proxy_dispose(proxy);
wf_impl_timer_manager_dispose(timer_manager);

@ -1,7 +1,12 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/request.h"
#include "webfuse/impl/json/node.h"
#include "webfuse/impl/message.h"
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
namespace
{
@ -48,19 +53,18 @@ TEST(wf_jsonrpc_request, respond)
wf_impl_jsonrpc_respond(request);
json_t * response = json_loads(context.response.c_str(), 0, nullptr);
ASSERT_TRUE(json_is_object(response));
JsonDoc doc(context.response);
struct wf_json const * response = doc.root();
ASSERT_TRUE(wf_impl_json_is_object(response));
json_t * id = json_object_get(response, "id");
ASSERT_TRUE(json_is_integer(id));
ASSERT_EQ(42, json_integer_value(id));
json_t * result = json_object_get(response, "result");
ASSERT_TRUE(json_is_object(result));
struct wf_json const * id = wf_impl_json_object_get(response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_EQ(42, wf_impl_json_int_get(id));
ASSERT_EQ(nullptr, json_object_get(response, "error"));
struct wf_json const * result = wf_impl_json_object_get(response, "result");
ASSERT_TRUE(wf_impl_json_is_object(result));
json_decref(response);
ASSERT_TRUE(wf_impl_json_is_undefined(wf_impl_json_object_get(response, "error")));
}
TEST(wf_jsonrpc_request, respond_error)
@ -73,60 +77,24 @@ TEST(wf_jsonrpc_request, respond_error)
wf_impl_jsonrpc_respond_error(request, WF_BAD, "Bad");
json_t * response = json_loads(context.response.c_str(), 0, nullptr);
ASSERT_TRUE(json_is_object(response));
JsonDoc doc(context.response);
struct wf_json const * response = doc.root();
ASSERT_TRUE(wf_impl_json_is_object(response));
json_t * id = json_object_get(response, "id");
ASSERT_TRUE(json_is_integer(id));
ASSERT_EQ(42, json_integer_value(id));
ASSERT_EQ(nullptr, json_object_get(response, "result"));
struct wf_json const * id = wf_impl_json_object_get(response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_EQ(42, wf_impl_json_int_get(id));
json_t * err = json_object_get(response, "error");
ASSERT_TRUE(json_is_object(err));
ASSERT_TRUE(wf_impl_json_is_undefined(wf_impl_json_object_get(response, "result")));
json_t * err_code = json_object_get(err, "code");
ASSERT_TRUE(json_is_integer(err_code));
ASSERT_EQ(WF_BAD, json_integer_value(err_code));
json_t * err_message = json_object_get(err, "message");
ASSERT_TRUE(json_is_string(err_message));
ASSERT_STREQ("Bad", json_string_value(err_message));
json_decref(response);
}
TEST(wf_jsonrpc_request, is_request_object_params)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("some_method"));
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_integer(42));
ASSERT_TRUE(wf_impl_jsonrpc_is_request(request));
json_decref(request);
}
TEST(wf_jsonrpc_request, is_request_fail_missing_params)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("some_method"));
json_object_set_new(request, "id", json_integer(42));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
json_decref(request);
}
TEST(wf_jsonrpc_request, is_request_fail_params_wrong_type)
{
json_t * request = json_object();
json_object_set_new(request, "method", json_string("some_method"));
json_object_set_new(request, "params", json_string("invalid_params"));
json_object_set_new(request, "id", json_integer(42));
struct wf_json const * err = wf_impl_json_object_get(response, "error");
ASSERT_TRUE(wf_impl_json_is_object(err));
ASSERT_FALSE(wf_impl_jsonrpc_is_request(request));
struct wf_json const * err_code = wf_impl_json_object_get(err, "code");
ASSERT_TRUE(wf_impl_json_is_int(err_code));
ASSERT_EQ(WF_BAD, wf_impl_json_int_get(err_code));
json_decref(request);
struct wf_json const * err_message = wf_impl_json_object_get(err, "message");
ASSERT_TRUE(wf_impl_json_is_string(err_message));
ASSERT_STREQ("Bad", wf_impl_json_string_get(err_message));
}

@ -1,37 +1,34 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/response_intern.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/impl/json/node.h"
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
TEST(wf_json_response, init_result)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_integer(47));
json_object_set_new(message, "id", json_integer(11));
JsonDoc doc("{\"result\": 47, \"id\": 11}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(nullptr, response.error);
ASSERT_TRUE(json_is_integer(response.result));
ASSERT_EQ(47, json_integer_value(response.result));
ASSERT_TRUE(wf_impl_json_is_int(response.result));
ASSERT_EQ(47, wf_impl_json_int_get(response.result));
ASSERT_EQ(11, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_error)
{
json_t * message = json_object();
json_t * err = json_object();
json_object_set_new(err, "code", json_integer(42));
json_object_set_new(err, "message", json_string("Don't Panic!"));
json_object_set_new(message, "error", err);
json_object_set_new(message, "id", json_integer(23));
JsonDoc doc("{\"error\": {\"code\": 42, \"message\": \"Don't Panic!\"}, \"id\": 23}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(42, wf_impl_jsonrpc_error_code(response.error));
ASSERT_STREQ("Don't Panic!", wf_impl_jsonrpc_error_message(response.error));
@ -39,110 +36,88 @@ TEST(wf_json_response, init_error)
ASSERT_EQ(23, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_missing_result_and_error)
{
json_t * message = json_object();
json_object_set_new(message, "id", json_integer(12));
JsonDoc doc("{\"id\": 12}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(12, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_missing_id)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_integer(47));
JsonDoc doc("{\"result\": 47}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(-1, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_wrong_id_type)
{
json_t * message = json_object();
json_object_set_new(message, "result", json_integer(47));
json_object_set_new(message, "id", json_string("42"));
JsonDoc doc("{\"result\": 47, \"id\": \"42\"}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(-1, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_error_missing_code)
{
json_t * message = json_object();
json_t * err = json_object();
json_object_set_new(err, "message", json_string("Don't Panic!"));
json_object_set_new(message, "error", err);
json_object_set_new(message, "id", json_integer(23));
JsonDoc doc("{\"error\": {\"message\": \"Don't Panic!\"}, \"id\": 23}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_error_wrong_code_type)
{
json_t * message = json_object();
json_t * err = json_object();
json_object_set_new(err, "code", json_string("42"));
json_object_set_new(err, "message", json_string("Don't Panic!"));
json_object_set_new(message, "error", err);
json_object_set_new(message, "id", json_integer(23));
JsonDoc doc("{\"error\": {\"code\": \"42\", \"message\": \"Don't Panic!\"}, \"id\": 23}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}
TEST(wf_json_response, init_fail_error_wrong_type)
{
json_t * message = json_object();
json_object_set_new(message, "error", json_string("invalid error type"));
json_object_set_new(message, "id", json_integer(23));
JsonDoc doc("{\"error\": \"invalid error type\", \"id\": 23}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message);
wf_impl_jsonrpc_response_init(&response, doc.root());
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id);
wf_impl_jsonrpc_response_cleanup(&response);
json_decref(message);
}

@ -1,57 +1,68 @@
#include <string>
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/response_intern.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
#include <string>
static void response_parse_str(
std::string const & buffer,
struct wf_jsonrpc_response * response)
{
json_t * message = json_loadb(buffer.c_str(), buffer.size(), 0, nullptr);
if (nullptr != message)
{
wf_impl_jsonrpc_response_init(response, message);
json_decref(message);
}
}
using webfuse_test::JsonDoc;
TEST(response_parser, test)
TEST(response_parser, invalid_no_object)
{
JsonDoc doc("[]");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, doc.root());
// no object
response_parse_str("[]", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(-1, response.id);
ASSERT_EQ(nullptr, response.result);
wf_impl_jsonrpc_response_cleanup(&response);
}
TEST(response_parser, invalid_empty_object)
{
JsonDoc doc("{}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, doc.root());
// empty
response_parse_str("{}", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(-1, response.id);
ASSERT_EQ(nullptr, response.result);
wf_impl_jsonrpc_response_cleanup(&response);
}
TEST(response_parser, invalid_missin_result_and_error)
{
JsonDoc doc("{\"id\":42}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, doc.root());
// no data
response_parse_str("{\"id\":42}", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(42, response.id);
ASSERT_EQ(nullptr, response.result);
wf_impl_jsonrpc_response_cleanup(&response);
}
TEST(response_parser, custom_error_code)
{
JsonDoc doc("{\"error\":{\"code\": 42}, \"id\": 42}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, doc.root());
// custom error code
response_parse_str("{\"error\":{\"code\": 42}, \"id\": 42}", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(42, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(42, response.id);
ASSERT_EQ(nullptr, response.result);
wf_impl_jsonrpc_response_cleanup(&response);
}
TEST(response_parser, valid_response)
{
JsonDoc doc("{\"result\": true, \"id\": 42}");
struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, doc.root());
// valid response
response_parse_str("{\"result\": true, \"id\": 42}", &response);
ASSERT_EQ(nullptr, response.error);
ASSERT_EQ(42, response.id);
ASSERT_NE(nullptr, response.result);

@ -1,14 +1,29 @@
#include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/server.h"
#include "webfuse/impl/jsonrpc/request.h"
#include "webfuse/impl/json/node.h"
#include "webfuse/impl/message.h"
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
using webfuse_test::JsonDoc;
namespace
{
struct Context
class Context
{
json_t * response;
public:
Context()
: doc("{}")
, response(nullptr)
, is_called(false)
{
}
JsonDoc doc;
wf_json const * response;
bool is_called;
};
@ -18,7 +33,8 @@ namespace
{
Context * context = reinterpret_cast<Context*>(user_data);
context->is_called = true;
context->response = json_loadb(request->data, request->length, 0, nullptr);
context->doc = std::move(JsonDoc(std::string(request->data, request->length)));
context->response = context->doc.root();
wf_impl_message_dispose(request);
return true;
@ -27,7 +43,7 @@ namespace
void sayHello(
struct wf_jsonrpc_request * request,
char const * method_name,
json_t * params,
wf_json const * params,
void * user_data)
{
(void) method_name;
@ -44,27 +60,23 @@ TEST(wf_jsonrpc_server, process_request)
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
wf_impl_jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(23));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"params\": [], \"id\": 23}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_TRUE(context.is_called);
ASSERT_NE(nullptr, context.response);
ASSERT_TRUE(json_is_object(context.response));
ASSERT_TRUE(wf_impl_json_is_object(context.response));
json_t * id = json_object_get(context.response, "id");
ASSERT_TRUE(json_is_integer(id));
ASSERT_EQ(23, json_integer_value(id));
struct wf_json const * id = wf_impl_json_object_get(context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_EQ(23, wf_impl_json_int_get(id));
json_t * result = json_object_get(context.response, "result");
ASSERT_TRUE(json_is_object(result));
struct wf_json const * result = wf_impl_json_object_get(context.response, "result");
ASSERT_TRUE(wf_impl_json_is_object(result));
json_decref(context.response);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -73,27 +85,22 @@ TEST(wf_jsonrpc_server, process_request_with_object_params)
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
wf_impl_jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "params", json_object());
json_object_set_new(request, "id", json_integer(23));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"params\": {}, \"id\": 23}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_TRUE(context.is_called);
ASSERT_NE(nullptr, context.response);
ASSERT_TRUE(json_is_object(context.response));
ASSERT_TRUE(wf_impl_json_is_object(context.response));
json_t * id = json_object_get(context.response, "id");
ASSERT_TRUE(json_is_integer(id));
ASSERT_EQ(23, json_integer_value(id));
struct wf_json const * id = wf_impl_json_object_get(context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_EQ(23, wf_impl_json_int_get(id));
json_t * result = json_object_get(context.response, "result");
ASSERT_TRUE(json_is_object(result));
struct wf_json const * result = wf_impl_json_object_get(context.response, "result");
ASSERT_TRUE(wf_impl_json_is_object(result));
json_decref(context.response);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -102,34 +109,29 @@ TEST(wf_jsonrpc_server, invoke_unknown_method)
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
wf_impl_jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("greet"));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(42));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"greet\", \"params\": [], \"id\": 42}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_TRUE(context.is_called);
ASSERT_NE(nullptr, context.response);
ASSERT_TRUE(json_is_object(context.response));
ASSERT_TRUE(wf_impl_json_is_object(context.response));
json_t * id = json_object_get(context.response, "id");
ASSERT_TRUE(json_is_integer(id));
ASSERT_EQ(42, json_integer_value(id));
struct wf_json const * id = wf_impl_json_object_get(context.response, "id");
ASSERT_TRUE(wf_impl_json_is_int(id));
ASSERT_EQ(42, wf_impl_json_int_get(id));
json_t * err = json_object_get(context.response, "error");
ASSERT_TRUE(json_is_object(err));
struct wf_json const * err = wf_impl_json_object_get(context.response, "error");
ASSERT_TRUE(wf_impl_json_is_object(err));
json_t * err_code = json_object_get(err, "code");
ASSERT_TRUE(json_is_integer(err_code));
ASSERT_EQ(WF_BAD_NOTIMPLEMENTED, json_integer_value(err_code));
struct wf_json const * err_code = wf_impl_json_object_get(err, "code");
ASSERT_TRUE(wf_impl_json_is_int(err_code));
ASSERT_EQ(WF_BAD_NOTIMPLEMENTED, wf_impl_json_int_get(err_code));
json_t * err_message = json_object_get(err, "message");
ASSERT_TRUE(json_is_string(err_message));
struct wf_json const * err_message = wf_impl_json_object_get(err, "message");
ASSERT_TRUE(wf_impl_json_is_string(err_message));
json_decref(context.response);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -137,16 +139,13 @@ TEST(wf_jsonrpc_server, skip_invalid_request_missing_id)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "params", json_array());
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"params\": []}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -154,17 +153,13 @@ TEST(wf_jsonrpc_server, skip_invalid_request_wrong_id_type)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_string("42"));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"params\": [], \"id\": \"42\"}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -172,16 +167,13 @@ TEST(wf_jsonrpc_server, skip_invalid_request_missing_params)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "id", json_integer(42));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"id\": 23}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -189,17 +181,13 @@ TEST(wf_jsonrpc_server, skip_invalid_request_wrong_params_type)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_string("sayHello"));
json_object_set_new(request, "params", json_string("invalid"));
json_object_set_new(request, "id", json_integer(42));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": \"sayHello\", \"params\": \"invalid\", \"id\": 42}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -207,16 +195,13 @@ TEST(wf_jsonrpc_server, skip_invalid_request_missing_method)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(42));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"params\": [], \"id\": 23}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}
@ -224,16 +209,12 @@ TEST(wf_jsonrpc_server, skip_invalid_request_wront_method_type)
{
struct wf_jsonrpc_server * server = wf_impl_jsonrpc_server_create();
Context context{nullptr, false};
Context context;
void * user_data = reinterpret_cast<void*>(&context);
json_t * request = json_object();
json_object_set_new(request, "method", json_integer(42));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(42));
wf_impl_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
JsonDoc request("{\"method\": 42, \"params\": [], \"id\": 23}");
wf_impl_jsonrpc_server_process(server, request.root(), &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
wf_impl_jsonrpc_server_dispose(server);
}

@ -3,12 +3,14 @@
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp"
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
using webfuse_test::MockJsonRpcProxy;
using webfuse_test::MockOperationContext;
using webfuse_test::FuseMock;
@ -80,16 +82,13 @@ TEST(wf_impl_operation_getattr, finished_file)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_attr(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"mode\": 493, \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_dir)
@ -97,16 +96,13 @@ TEST(wf_impl_operation_getattr, finished_dir)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_attr(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("dir"));
JsonDoc result("{\"mode\": 493, \"type\": \"dir\"}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_unknown_type)
@ -114,16 +110,13 @@ TEST(wf_impl_operation_getattr, finished_unknown_type)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_attr(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("unknown"));
JsonDoc result("{\"mode\": 493, \"type\": \"unknown\"}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_fail_missing_mode)
@ -132,15 +125,13 @@ TEST(wf_impl_operation_getattr, finished_fail_missing_mode)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_fail_invalid_mode_type)
@ -149,33 +140,28 @@ TEST(wf_impl_operation_getattr, finished_fail_invalid_mode_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_string("0755"));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"mode\": \"0755\", \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_fail_type_mode)
TEST(wf_impl_operation_getattr, finished_fail_missing_type)
{
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
JsonDoc result("{\"mode\": 493}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_fail_invalid_type_type)
@ -184,16 +170,13 @@ TEST(wf_impl_operation_getattr, finished_fail_invalid_type_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_integer(42));
JsonDoc result("{\"mode\": 493, \"type\": 42}");
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1;
context->gid = 0;
context->uid = 0;
wf_impl_operation_getattr_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_getattr_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_getattr, finished_error)

@ -3,12 +3,14 @@
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp"
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
using webfuse_test::MockJsonRpcProxy;
using webfuse_test::MockOperationContext;
using webfuse_test::FuseMock;
@ -78,17 +80,12 @@ TEST(wf_impl_operation_lookup, finished_file)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_entry(_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"inode\": 42, \"mode\": 493, \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_dir)
@ -96,17 +93,12 @@ TEST(wf_impl_operation_lookup, finished_dir)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_entry(_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("dir"));
JsonDoc result("{\"inode\": 42, \"mode\": 493, \"type\": \"dir\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_unknown_type)
@ -114,17 +106,12 @@ TEST(wf_impl_operation_lookup, finished_unknown_type)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_entry(_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("unknown"));
JsonDoc result("{\"inode\": 42, \"mode\": 493, \"type\": \"unknown\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_missing_inode)
@ -133,16 +120,12 @@ TEST(wf_impl_operation_lookup, finished_fail_missing_inode)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"mode\": 493, \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_invalid_inode_type)
@ -151,17 +134,12 @@ TEST(wf_impl_operation_lookup, finished_fail_invalid_inode_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_string("42"));
json_object_set_new(result, "mode", json_string("0755"));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"inode\": \"42\", \"mode\": 493, \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_missing_mode)
@ -170,16 +148,12 @@ TEST(wf_impl_operation_lookup, finished_fail_missing_mode)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"inode\": 42, \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_invalid_mode_type)
@ -188,35 +162,26 @@ TEST(wf_impl_operation_lookup, finished_fail_invalid_mode_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_string("0755"));
json_object_set_new(result, "type", json_string("file"));
JsonDoc result("{\"inode\": 42, \"mode\": \"0755\", \"type\": \"file\"}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_type_mode)
TEST(wf_impl_operation_lookup, finished_fail_missing_type)
{
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_integer(0755));
JsonDoc result("{\"inode\": 42, \"mode\": 493}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_fail_invalid_type_type)
@ -225,17 +190,12 @@ TEST(wf_impl_operation_lookup, finished_fail_invalid_type_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(42));
json_object_set_new(result, "mode", json_integer(0755));
json_object_set_new(result, "type", json_integer(42));
JsonDoc result("{\"inode\": 42, \"mode\": 493, \"type\": 42}");
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0;
context->gid = 0;
context->uid = 0;
wf_impl_operation_lookup_finished(context, result, nullptr);
json_decref(result);
wf_impl_operation_lookup_finished(context, result.root(), nullptr);
}
TEST(wf_impl_operation_lookup, finished_error)

@ -3,12 +3,14 @@
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp"
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
using webfuse_test::MockJsonRpcProxy;
using webfuse_test::MockOperationContext;
using webfuse_test::FuseMock;
@ -59,10 +61,8 @@ TEST(wf_impl_operation_open, finished)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "handle", json_integer(42));
wf_impl_operation_open_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"handle\": 42}");
wf_impl_operation_open_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_open, finished_fail_error)
@ -82,9 +82,8 @@ TEST(wf_impl_operation_open, finished_fail_no_handle)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
wf_impl_operation_open_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{}");
wf_impl_operation_open_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_open, finished_fail_invalid_handle_type)
@ -93,8 +92,6 @@ TEST(wf_impl_operation_open, finished_fail_invalid_handle_type)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "handle", json_string("42"));
wf_impl_operation_open_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"handle\": \"42\"}");
wf_impl_operation_open_finished(nullptr, result.root(), nullptr);
}

@ -1,12 +1,14 @@
#include "webfuse/impl/operation/read.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/test_util/json_doc.hpp"
#include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp"
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
using webfuse_test::MockJsonRpcProxy;
using webfuse_test::MockOperationContext;
using webfuse_test::FuseMock;
@ -136,12 +138,8 @@ TEST(wf_impl_operation_read, finished)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_buf(_,_,7)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_string("brummni"));
json_object_set_new(result, "format", json_string("identity"));
json_object_set_new(result, "count", json_integer(7));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": \"brummni\", \"format\": \"identity\", \"count\": 7}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_no_data)
@ -150,11 +148,8 @@ TEST(wf_impl_operation_read, finished_fail_no_data)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "format", json_string("identity"));
json_object_set_new(result, "count", json_integer(7));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"format\": \"identity\", \"count\": 7}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_invalid_data_type)
@ -163,12 +158,8 @@ TEST(wf_impl_operation_read, finished_fail_invalid_data_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_integer(42));
json_object_set_new(result, "format", json_string("identity"));
json_object_set_new(result, "count", json_integer(7));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": 42, \"format\": \"identity\", \"count\": 7}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_no_format)
@ -177,11 +168,8 @@ TEST(wf_impl_operation_read, finished_fail_no_format)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_string("brummni"));
json_object_set_new(result, "count", json_integer(7));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": \"brummni\", \"count\": 7}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_invalid_format_type)
@ -190,12 +178,8 @@ TEST(wf_impl_operation_read, finished_fail_invalid_format_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_string("brummni"));
json_object_set_new(result, "format", json_integer(42));
json_object_set_new(result, "count", json_integer(7));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": \"brummni\", \"format\": 42, \"count\": 7}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_no_count)
@ -204,11 +188,8 @@ TEST(wf_impl_operation_read, finished_fail_no_count)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_string("brummni"));
json_object_set_new(result, "format", json_string("identity"));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": \"brummni\", \"format\": \"identity\"}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_invalid_count_type)
@ -217,12 +198,8 @@ TEST(wf_impl_operation_read, finished_fail_invalid_count_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
json_object_set_new(result, "data", json_string("brummni"));
json_object_set_new(result, "format", json_string("identity"));
json_object_set_new(result, "count", json_string("7"));
wf_impl_operation_read_finished(nullptr, result, nullptr);
json_decref(result);
JsonDoc result("{\"data\": \"brummni\", \"format\": \"identity\", \"count\": \"7\"}");
wf_impl_operation_read_finished(nullptr, result.root(), nullptr);
}
TEST(wf_impl_operation_read, finished_fail_error)

@ -3,12 +3,15 @@
#include "webfuse/status.h"
#include "webfuse/test_util/json_doc.hpp"
#include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp"
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
#include <gtest/gtest.h>
#include <sstream>
using webfuse_test::JsonDoc;
using webfuse_test::MockJsonRpcProxy;
using webfuse_test::MockOperationContext;
using webfuse_test::FuseMock;
@ -81,18 +84,12 @@ TEST(wf_impl_operation_readdir, finished)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "name", json_string("a.file"));
json_object_set_new(item, "inode", json_integer(42));
json_array_append_new(result, item);
JsonDoc result("[{\"name\": \"a.file\", \"inode\": 42}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_many_items)
@ -100,22 +97,20 @@ TEST(wf_impl_operation_readdir, finished_many_items)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
for(int i = 0; i < 100; i++)
std::ostringstream stream;
stream << "[" << "{\"name\": \"file_0.txt\", \"inode\": 1}";
for(int i = 1; i < 100; i++)
{
json_t * item = json_object();
json_object_set_new(item, "name", json_sprintf("file_%d.txt", i));
json_object_set_new(item, "inode", json_integer(1 + i));
json_array_append_new(result, item);
stream << ",{\"name\": \"file_" << i << ".txt\", \"inode\": " << (i+1) << "}";
}
stream << "]";
JsonDoc result(stream.str());
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 100;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_read_after_end)
@ -123,18 +118,12 @@ TEST(wf_impl_operation_readdir, finished_read_after_end)
FuseMock fuse;
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "name", json_string("a.file"));
json_object_set_new(item, "inode", json_integer(42));
json_array_append_new(result, item);
JsonDoc result("[{\"name\": \"a.file\", \"inode\": 42}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 10;
context->offset = 2;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_error)
@ -159,14 +148,12 @@ TEST(wf_impl_operation_readdir, finished_fail_invalid_result_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_object();
JsonDoc result("{}");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_missing_name)
@ -175,17 +162,12 @@ TEST(wf_impl_operation_readdir, finished_fail_missing_name)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "inode", json_integer(42));
json_array_append_new(result, item);
JsonDoc result("[{\"inode\": 42}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_invalid_name_type)
@ -194,18 +176,12 @@ TEST(wf_impl_operation_readdir, finished_fail_invalid_name_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "name", json_integer(42));
json_object_set_new(item, "inode", json_integer(42));
json_array_append_new(result, item);
JsonDoc result("[{\"name\": 42, \"inode\": 42}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_missing_inode)
@ -214,17 +190,12 @@ TEST(wf_impl_operation_readdir, finished_fail_missing_inode)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "name", json_string("a.file"));
json_array_append_new(result, item);
JsonDoc result("[{\"name\": \"a.file\"}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_invalid_inode_type)
@ -233,18 +204,12 @@ TEST(wf_impl_operation_readdir, finished_fail_invalid_inode_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_t * item = json_object();
json_object_set_new(item, "name", json_string("a.file"));
json_object_set_new(item, "inode", json_string("42"));
json_array_append_new(result, item);
JsonDoc result("[{\"name\": \"a.file\", \"inode\": \"42\"}]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}
TEST(wf_impl_operation_readdir, finished_fail_invalid_item_type)
@ -253,13 +218,10 @@ TEST(wf_impl_operation_readdir, finished_fail_invalid_item_type)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * result = json_array();
json_array_append_new(result, json_string("item"));
JsonDoc result("[\"item\"]");
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr;
context->size = 1;
context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result, nullptr);
json_decref(result);
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), result.root(), nullptr);
}

@ -1,8 +1,11 @@
#include <gtest/gtest.h>
#include "webfuse/credentials.h"
#include "webfuse/impl/credentials.h"
#include "webfuse/test_util/json_doc.hpp"
#include <jansson.h>
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
TEST(Credentials, Type)
{
@ -16,31 +19,27 @@ TEST(Credentials, Type)
TEST(Credentials, Get)
{
struct wf_credentials creds;
json_t * data = json_object();
json_object_set_new(data, "username", json_string("bob"));
json_object_set_new(data, "password", json_string("<secret>"));
JsonDoc doc("{\"username\": \"bob\", \"password\": \"<secret>\"}");
wf_impl_credentials_init(&creds, "username", data);
wf_impl_credentials_init(&creds, "username", doc.root());
ASSERT_STREQ("username", wf_credentials_type(&creds));
ASSERT_STREQ("bob", wf_credentials_get(&creds, "username"));
ASSERT_STREQ("<secret>", wf_credentials_get(&creds, "password"));
wf_impl_credentials_cleanup(&creds);
json_decref(data);
}
TEST(Credentials, FailedToGetNonexistingValue)
{
struct wf_credentials creds;
json_t * data = json_object();
JsonDoc doc("{}");
wf_impl_credentials_init(&creds, "username", data);
wf_impl_credentials_init(&creds, "username", doc.root());
ASSERT_STREQ("username", wf_credentials_type(&creds));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "username"));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "password"));
wf_impl_credentials_cleanup(&creds);
json_decref(data);
}
TEST(Credentials, FailedToGetWithoutData)
@ -58,30 +57,27 @@ TEST(Credentials, FailedToGetWithoutData)
TEST(Credentials, FailedToGetWrongDataType)
{
struct wf_credentials creds;
json_t * data = json_string("invalid_creds");
JsonDoc doc("invalid_creds");
wf_impl_credentials_init(&creds, "username", data);
wf_impl_credentials_init(&creds, "username", doc.root());
ASSERT_STREQ("username", wf_credentials_type(&creds));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "username"));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "password"));
wf_impl_credentials_cleanup(&creds);
json_decref(data);
}
TEST(Credentials, FailedToGetWrongElementDataType)
{
struct wf_credentials creds;
json_t * data = json_object();
json_object_set_new(data, "username", json_integer(42));
JsonDoc doc("{\"username\": 42}");
wf_impl_credentials_init(&creds, "username", data);
wf_impl_credentials_init(&creds, "username", doc.root());
ASSERT_STREQ("username", wf_credentials_type(&creds));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "username"));
ASSERT_STREQ(nullptr, wf_credentials_get(&creds, "password"));
wf_impl_credentials_cleanup(&creds);
json_decref(data);
}
TEST(Credentials, SetType)

@ -9,9 +9,32 @@ JsonDoc::JsonDoc(std::string const & text)
doc = wf_impl_json_doc_loadb(const_cast<char*>(contents.data()), contents.size());
}
JsonDoc::JsonDoc(JsonDoc && other)
{
contents = std::move(other.contents);
doc = other.doc;
other.doc = nullptr;
}
JsonDoc& JsonDoc::operator=(JsonDoc && other)
{
if (this != &other)
{
wf_impl_json_doc_dispose(doc);
contents = std::move(other.contents);
doc = other.doc;
other.doc = nullptr;
}
return *this;
}
JsonDoc::~JsonDoc()
{
wf_impl_json_doc_dispose(doc);
if (nullptr != doc)
{
wf_impl_json_doc_dispose(doc);
}
}
wf_json const * JsonDoc::root()

@ -9,8 +9,12 @@ namespace webfuse_test
class JsonDoc
{
JsonDoc(JsonDoc const&) = delete;
JsonDoc& operator=(JsonDoc const&) = delete;
public:
JsonDoc(std::string const & text);
JsonDoc(JsonDoc && other);
JsonDoc& operator=(JsonDoc && other);
~JsonDoc();
wf_json const * root();
private:

@ -1,14 +1,15 @@
#include <gtest/gtest.h>
#include "webfuse/impl/util/json_util.h"
#include "webfuse/test_util/json_doc.hpp"
#include <gtest/gtest.h>
using webfuse_test::JsonDoc;
TEST(jsonrpc_util, get_int)
{
json_t * object = json_object();
json_object_set_new(object, "key", json_integer(23));
int value = wf_impl_json_get_int(object, "key", 42);
JsonDoc doc("{\"key\": 23}");
int value = wf_impl_json_get_int(doc.root(), "key", 42);
ASSERT_EQ(23, value);
json_decref(object);
}
TEST(jsonrpc_util, failed_to_get_null_object)
@ -20,28 +21,21 @@ TEST(jsonrpc_util, failed_to_get_null_object)
TEST(jsonrpc_util, failed_to_get_not_object)
{
json_t * object = json_array();
int value = wf_impl_json_get_int(nullptr, "key", 42);
JsonDoc doc("[]");
int value = wf_impl_json_get_int(doc.root(), "key", 42);
ASSERT_EQ(42, value);
json_decref(object);
}
TEST(jsonrpc_util, failed_to_get_invalid_key)
{
json_t * object = json_object();
int value = wf_impl_json_get_int(object, "key", 42);
JsonDoc doc("{}");
int value = wf_impl_json_get_int(doc.root(), "key", 42);
ASSERT_EQ(42, value);
json_decref(object);
}
TEST(jsonrpc_util, failed_to_get_invalid_value_type)
{
json_t * object = json_object();
json_object_set_new(object, "key", json_string("42"));
int value = wf_impl_json_get_int(object, "key", 42);
JsonDoc doc("{\"key\": \"42\"}");
int value = wf_impl_json_get_int(doc.root(), "key", 42);
ASSERT_EQ(42, value);
json_decref(object);
}
Loading…
Cancel
Save