1
0
mirror of https://github.com/falk-werner/webfuse-provider synced 2026-03-02 04:09:18 +00:00

chore: cleanup jsonrpc library

This commit is contained in:
Falk Werner
2020-02-29 02:32:03 +01:00
parent e3a3427ca8
commit 69a1faaa3f
38 changed files with 792 additions and 345 deletions

View File

@@ -92,10 +92,9 @@ TEST(jsonrpc_proxy, init)
SendContext context;
void * user_data = reinterpret_cast<void*>(&context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, user_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, user_data);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
ASSERT_FALSE(context.is_called);
@@ -108,12 +107,11 @@ TEST(jsonrpc_proxy, invoke)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -135,7 +133,7 @@ TEST(jsonrpc_proxy, invoke)
ASSERT_FALSE(finished_context.is_called);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
ASSERT_TRUE(finished_context.is_called);
@@ -149,12 +147,11 @@ TEST(jsonrpc_proxy, invoke_calls_finish_if_send_fails)
SendContext send_context(false);
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -162,7 +159,7 @@ TEST(jsonrpc_proxy, invoke_calls_finish_if_send_fails)
ASSERT_TRUE(finished_context.is_called);
ASSERT_FALSE(nullptr == finished_context.error);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -173,16 +170,15 @@ TEST(jsonrpc_proxy, invoke_fails_if_another_request_is_pending)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
FinishedContext finished_context2;
void * finished_data2 = reinterpret_cast<void*>(&finished_context2);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data2, "foo", "");
jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data2, "foo", "");
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
@@ -192,7 +188,7 @@ TEST(jsonrpc_proxy, invoke_fails_if_another_request_is_pending)
ASSERT_TRUE(finished_context2.is_called);
ASSERT_EQ(WF_BAD_BUSY, wf_impl_jsonrpc_get_status(finished_context2.error));
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -203,19 +199,18 @@ TEST(jsonrpc_proxy, invoke_fails_if_request_is_invalid)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "?", "error");
jsonrpc_proxy_invoke(proxy, &jsonrpc_finished, finished_data, "foo", "?", "error");
ASSERT_FALSE(send_context.is_called);
ASSERT_TRUE(finished_context.is_called);
ASSERT_EQ(WF_BAD, wf_impl_jsonrpc_get_status(finished_context.error));
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -226,12 +221,11 @@ TEST(jsonrpc_proxy, on_result)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -243,7 +237,7 @@ TEST(jsonrpc_proxy, on_result)
json_object_set_new(response, "result", json_string("okay"));
json_object_set(response, "id", id);
jsonrpc_proxy_onresult(&proxy, response);
jsonrpc_proxy_onresult(proxy, response);
json_decref(response);
ASSERT_TRUE(finished_context.is_called);
@@ -251,7 +245,7 @@ TEST(jsonrpc_proxy, on_result)
ASSERT_TRUE(json_is_string(finished_context.result));
ASSERT_STREQ("okay", json_string_value(finished_context.result));
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -262,12 +256,11 @@ TEST(jsonrpc_proxy, on_result_reject_response_with_unknown_id)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -279,12 +272,12 @@ TEST(jsonrpc_proxy, on_result_reject_response_with_unknown_id)
json_object_set_new(response, "result", json_string("okay"));
json_object_set_new(response, "id", json_integer(1 + json_integer_value(id)));
jsonrpc_proxy_onresult(&proxy, response);
jsonrpc_proxy_onresult(proxy, response);
json_decref(response);
ASSERT_FALSE(finished_context.is_called);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -295,12 +288,11 @@ TEST(jsonrpc_proxy, timeout)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, 0, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, 0, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -311,7 +303,7 @@ TEST(jsonrpc_proxy, timeout)
ASSERT_TRUE(finished_context.is_called);
ASSERT_EQ(WF_BAD_TIMEOUT, wf_impl_jsonrpc_get_status(finished_context.error));
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -322,12 +314,11 @@ TEST(jsonrpc_proxy, cleanup_pending_request)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, 10, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, 10, &jsonrpc_send, send_data);
FinishedContext finished_context;
void * finished_data = reinterpret_cast<void*>(&finished_context);
jsonrpc_proxy_invoke(&proxy, &jsonrpc_finished, finished_data, "foo", "si", "bar", 42);
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));
@@ -335,7 +326,7 @@ TEST(jsonrpc_proxy, cleanup_pending_request)
ASSERT_FALSE(finished_context.is_called);
ASSERT_NE(nullptr, timeout_manager.timers);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
ASSERT_TRUE(finished_context.is_called);
ASSERT_EQ(nullptr, timeout_manager.timers);
@@ -352,10 +343,9 @@ TEST(jsonrpc_proxy, notify)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
jsonrpc_proxy_notify(&proxy, "foo", "si", "bar", 42);
jsonrpc_proxy_notify(proxy, "foo", "si", "bar", 42);
ASSERT_TRUE(send_context.is_called);
ASSERT_TRUE(json_is_object(send_context.response));
@@ -376,7 +366,7 @@ TEST(jsonrpc_proxy, notify)
ASSERT_EQ(nullptr, id);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}
@@ -387,13 +377,12 @@ TEST(jsonrpc_proxy, notify_dont_send_invalid_request)
SendContext send_context;
void * send_data = reinterpret_cast<void*>(&send_context);
struct jsonrpc_proxy proxy;
jsonrpc_proxy_init(&proxy, &timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
struct jsonrpc_proxy * proxy = jsonrpc_proxy_create(&timeout_manager, WF_DEFAULT_TIMEOUT, &jsonrpc_send, send_data);
jsonrpc_proxy_notify(&proxy, "foo", "?");
jsonrpc_proxy_notify(proxy, "foo", "?");
ASSERT_FALSE(send_context.is_called);
jsonrpc_proxy_cleanup(&proxy);
jsonrpc_proxy_dispose(proxy);
wf_impl_timeout_manager_cleanup(&timeout_manager);
}

View File

@@ -1,5 +1,6 @@
#include <gtest/gtest.h>
#include "jsonrpc/request.h"
#include "jsonrpc/status.h"
namespace
{
@@ -73,7 +74,7 @@ TEST(jsonrpc_request, respond_error)
struct jsonrpc_request * request =
jsonrpc_request_create(42, &jsonrpc_send, user_data);
jsonrpc_respond_error(request, WF_BAD);
jsonrpc_respond_error(request, JSONRPC_BAD, "Bad");
ASSERT_NE(nullptr, context.response);
@@ -92,7 +93,7 @@ TEST(jsonrpc_request, respond_error)
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));
ASSERT_EQ(JSONRPC_BAD, json_integer_value(err_code));
json_t * err_message = json_object_get(err, "message");
ASSERT_TRUE(json_is_string(err_message));

View File

@@ -1,5 +1,5 @@
#include <gtest/gtest.h>
#include "jsonrpc/response.h"
#include "jsonrpc/impl/response.h"
#include "webfuse/core/status.h"
#include "webfuse/core/json_util.h"
@@ -10,14 +10,14 @@ TEST(json_response, init_result)
json_object_set_new(message, "id", json_integer(11));
struct jsonrpc_response response;
jsonrpc_response_init(&response, message);
jsonrpc_impl_response_init(&response, message);
ASSERT_EQ(nullptr, response.error);
ASSERT_TRUE(json_is_integer(response.result));
ASSERT_EQ(47, json_integer_value(response.result));
ASSERT_EQ(11, response.id);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
json_decref(message);
}
@@ -31,13 +31,13 @@ TEST(json_response, init_error)
json_object_set_new(message, "id", json_integer(23));
struct jsonrpc_response response;
jsonrpc_response_init(&response, message);
jsonrpc_impl_response_init(&response, message);
ASSERT_EQ(WF_BAD_ACCESS_DENIED, wf_impl_jsonrpc_get_status(response.error)) << json_string_value(json_object_get(response.error, "message"));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
json_decref(message);
}
@@ -47,12 +47,12 @@ TEST(json_response, init_format_error)
json_object_set_new(message, "id", json_integer(12));
struct jsonrpc_response response;
jsonrpc_response_init(&response, message);
jsonrpc_impl_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_get_status(response.error));
ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(12, response.id);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
json_decref(message);
}

View File

@@ -1,7 +1,7 @@
#include <string>
#include <gtest/gtest.h>
#include "jsonrpc/response.h"
#include "jsonrpc/impl/response.h"
#include "webfuse/core/json_util.h"
@@ -12,7 +12,7 @@ static void response_parse_str(
json_t * message = json_loadb(buffer.c_str(), buffer.size(), 0, nullptr);
if (nullptr != message)
{
jsonrpc_response_init(response, message);
jsonrpc_impl_response_init(response, message);
json_decref(message);
}
}
@@ -26,21 +26,21 @@ TEST(response_parser, test)
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(-1, response.id);
ASSERT_EQ(nullptr, response.result);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
// empty
response_parse_str("{}", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(-1, response.id);
ASSERT_EQ(nullptr, response.result);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
// no data
response_parse_str("{\"id\":42}", &response);
ASSERT_NE(nullptr, response.error);
ASSERT_EQ(42, response.id);
ASSERT_EQ(nullptr, response.result);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
// custom error code
response_parse_str("{\"error\":{\"code\": 42}, \"id\": 42}", &response);
@@ -48,12 +48,12 @@ TEST(response_parser, test)
ASSERT_EQ(42, json_integer_value(json_object_get(response.error, "code")));
ASSERT_EQ(42, response.id);
ASSERT_EQ(nullptr, response.result);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
// valid response
response_parse_str("{\"result\": true, \"id\": 42}", &response);
ASSERT_EQ(WF_GOOD, response.error);
ASSERT_EQ(42, response.id);
ASSERT_NE(nullptr, response.result);
jsonrpc_response_cleanup(&response);
jsonrpc_impl_response_cleanup(&response);
}

View File

@@ -1,6 +1,7 @@
#include <gtest/gtest.h>
#include "jsonrpc/server.h"
#include "jsonrpc/request.h"
#include "jsonrpc/status.h"
namespace
{
@@ -40,9 +41,8 @@ namespace
TEST(jsonrpc_server, process_request)
{
struct jsonrpc_server server;
jsonrpc_server_init(&server);
jsonrpc_server_add(&server, "sayHello", &sayHello, nullptr);
struct jsonrpc_server * server = jsonrpc_server_create();
jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
Context context{nullptr, false};
void * user_data = reinterpret_cast<void*>(&context);
@@ -50,7 +50,7 @@ TEST(jsonrpc_server, process_request)
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));
jsonrpc_server_process(&server, request, &jsonrpc_send, user_data);
jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
ASSERT_TRUE(context.is_called);
ASSERT_NE(nullptr, context.response);
@@ -66,14 +66,13 @@ TEST(jsonrpc_server, process_request)
json_decref(context.response);
json_decref(request);
jsonrpc_server_cleanup(&server);
jsonrpc_server_dispose(server);
}
TEST(jsonrpc_server, invoke_unknown_method)
{
struct jsonrpc_server server;
jsonrpc_server_init(&server);
jsonrpc_server_add(&server, "sayHello", &sayHello, nullptr);
struct jsonrpc_server * server = jsonrpc_server_create();
jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
Context context{nullptr, false};
void * user_data = reinterpret_cast<void*>(&context);
@@ -81,7 +80,7 @@ TEST(jsonrpc_server, invoke_unknown_method)
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));
jsonrpc_server_process(&server, request, &jsonrpc_send, user_data);
jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
ASSERT_TRUE(context.is_called);
ASSERT_NE(nullptr, context.response);
@@ -96,30 +95,29 @@ TEST(jsonrpc_server, invoke_unknown_method)
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));
ASSERT_EQ(JSONRPC_BAD_NOTIMPLEMENTED, json_integer_value(err_code));
json_t * err_message = json_object_get(err, "message");
ASSERT_TRUE(json_is_string(err_message));
json_decref(context.response);
json_decref(request);
jsonrpc_server_cleanup(&server);
jsonrpc_server_dispose(server);
}
TEST(jsonrpc_server, skip_invalid_request)
{
struct jsonrpc_server server;
jsonrpc_server_init(&server);
struct jsonrpc_server * server = jsonrpc_server_create();
Context context{nullptr, false};
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());
jsonrpc_server_process(&server, request, &jsonrpc_send, user_data);
jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
ASSERT_FALSE(context.is_called);
json_decref(request);
jsonrpc_server_cleanup(&server);
jsonrpc_server_dispose(server);
}