2020-06-28 17:43:08 +00:00
|
|
|
#include "webfuse/impl/jsonrpc/request.h"
|
2020-07-18 21:16:18 +00:00
|
|
|
#include "webfuse/impl/json/node.h"
|
2020-07-13 20:41:19 +00:00
|
|
|
#include "webfuse/impl/message.h"
|
2020-06-28 13:51:34 +00:00
|
|
|
#include "webfuse/status.h"
|
2020-07-18 21:16:18 +00:00
|
|
|
#include "webfuse/test_util/json_doc.hpp"
|
|
|
|
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
using webfuse_test::JsonDoc;
|
2019-05-19 12:33:42 +00:00
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
|
|
|
|
struct Context
|
|
|
|
{
|
2020-07-13 20:41:19 +00:00
|
|
|
std::string response;
|
2019-05-19 12:33:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
bool jsonrpc_send(
|
2020-07-13 20:41:19 +00:00
|
|
|
wf_message * request,
|
2019-05-19 12:33:42 +00:00
|
|
|
void * user_data)
|
|
|
|
{
|
|
|
|
Context * context = reinterpret_cast<Context*>(user_data);
|
2020-07-13 20:41:19 +00:00
|
|
|
context->response = std::string(request->data, request->length);
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-13 20:41:19 +00:00
|
|
|
wf_impl_message_dispose(request);
|
2019-05-19 12:33:42 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
TEST(wf_jsonrpc_request, create_dispose)
|
2019-05-19 12:33:42 +00:00
|
|
|
{
|
2020-07-13 20:41:19 +00:00
|
|
|
Context context;
|
2019-05-19 12:33:42 +00:00
|
|
|
void * user_data = reinterpret_cast<void*>(&context);
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
struct wf_jsonrpc_request * request =
|
2020-06-28 17:43:08 +00:00
|
|
|
wf_impl_jsonrpc_request_create(42, &jsonrpc_send, user_data);
|
2019-05-19 12:33:42 +00:00
|
|
|
|
|
|
|
ASSERT_NE(nullptr, request);
|
2020-06-28 17:43:08 +00:00
|
|
|
ASSERT_EQ(user_data, wf_impl_jsonrpc_request_get_userdata(request));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-06-28 17:43:08 +00:00
|
|
|
wf_impl_jsonrpc_request_dispose(request);
|
2019-05-19 12:33:42 +00:00
|
|
|
}
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
TEST(wf_jsonrpc_request, respond)
|
2019-05-19 12:33:42 +00:00
|
|
|
{
|
2020-07-13 20:41:19 +00:00
|
|
|
Context context;
|
2019-05-19 12:33:42 +00:00
|
|
|
void * user_data = reinterpret_cast<void*>(&context);
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
struct wf_jsonrpc_request * request =
|
2020-06-28 17:43:08 +00:00
|
|
|
wf_impl_jsonrpc_request_create(42, &jsonrpc_send, user_data);
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-13 20:41:19 +00:00
|
|
|
wf_impl_jsonrpc_respond(request);
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
JsonDoc doc(context.response);
|
|
|
|
struct wf_json const * response = doc.root();
|
|
|
|
ASSERT_TRUE(wf_impl_json_is_object(response));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
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));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
struct wf_json const * result = wf_impl_json_object_get(response, "result");
|
|
|
|
ASSERT_TRUE(wf_impl_json_is_object(result));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
ASSERT_TRUE(wf_impl_json_is_undefined(wf_impl_json_object_get(response, "error")));
|
2019-05-19 12:33:42 +00:00
|
|
|
}
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
TEST(wf_jsonrpc_request, respond_error)
|
2019-05-19 12:33:42 +00:00
|
|
|
{
|
2020-07-13 20:41:19 +00:00
|
|
|
Context context;
|
2019-05-19 12:33:42 +00:00
|
|
|
void * user_data = reinterpret_cast<void*>(&context);
|
|
|
|
|
2020-03-01 15:55:58 +00:00
|
|
|
struct wf_jsonrpc_request * request =
|
2020-06-28 17:43:08 +00:00
|
|
|
wf_impl_jsonrpc_request_create(42, &jsonrpc_send, user_data);
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-06-28 17:43:08 +00:00
|
|
|
wf_impl_jsonrpc_respond_error(request, WF_BAD, "Bad");
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
JsonDoc doc(context.response);
|
|
|
|
struct wf_json const * response = doc.root();
|
|
|
|
ASSERT_TRUE(wf_impl_json_is_object(response));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
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));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
ASSERT_TRUE(wf_impl_json_is_undefined(wf_impl_json_object_get(response, "result")));
|
2019-05-19 12:33:42 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
struct wf_json const * err = wf_impl_json_object_get(response, "error");
|
|
|
|
ASSERT_TRUE(wf_impl_json_is_object(err));
|
2020-03-22 12:36:03 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
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));
|
2020-03-22 12:36:03 +00:00
|
|
|
|
2020-07-18 21:16:18 +00:00
|
|
|
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));
|
2020-03-22 12:36:03 +00:00
|
|
|
}
|