1
0
mirror of https://github.com/falk-werner/webfuse synced 2024-10-27 20:34:10 +00:00

refactor: use wf_jsonrpc_error struct instead of json_t to express errors

This commit is contained in:
Falk Werner 2020-07-16 19:30:18 +02:00
parent d71f24504b
commit 2a0ac6d2dd
26 changed files with 141 additions and 74 deletions

View File

@ -102,7 +102,7 @@ static void
wf_impl_client_protocol_on_authenticate_finished( wf_impl_client_protocol_on_authenticate_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * WF_UNUSED_PARAM(error)) struct wf_jsonrpc_error const * WF_UNUSED_PARAM(error))
{ {
struct wf_client_protocol * protocol = user_data; struct wf_client_protocol * protocol = user_data;
int const reason = (NULL != result) ? WF_CLIENT_AUTHENTICATED : WF_CLIENT_AUTHENTICATION_FAILED; int const reason = (NULL != result) ? WF_CLIENT_AUTHENTICATED : WF_CLIENT_AUTHENTICATION_FAILED;
@ -114,7 +114,7 @@ static void
wf_impl_client_protocol_on_add_filesystem_finished( wf_impl_client_protocol_on_add_filesystem_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * WF_UNUSED_PARAM(error)) struct wf_jsonrpc_error const * WF_UNUSED_PARAM(error))
{ {
struct wf_impl_client_protocol_add_filesystem_context * context = user_data; struct wf_impl_client_protocol_add_filesystem_context * context = user_data;
struct wf_client_protocol * protocol = context->protocol; struct wf_client_protocol * protocol = context->protocol;

View File

@ -1,17 +1,51 @@
#include "webfuse/impl/jsonrpc/error.h" #include "webfuse/impl/jsonrpc/error.h"
json_t * #include <stdlib.h>
#include <string.h>
struct wf_jsonrpc_error
{
int code;
char * message;
};
struct wf_jsonrpc_error *
wf_impl_jsonrpc_error( wf_impl_jsonrpc_error(
int code, int code,
char const * message) char const * message)
{ {
json_t * error = json_object(); struct wf_jsonrpc_error * error = malloc(sizeof(struct wf_jsonrpc_error));
json_object_set_new(error, "code", json_integer(code)); error->code = code;
json_object_set_new(error, "message", json_string(message)); error->message = strdup(message);
return error; return error;
} }
void
wf_impl_jsonrpc_error_dispose(
struct wf_jsonrpc_error * error)
{
if (NULL != error)
{
free(error->message);
free(error);
}
}
int
wf_impl_jsonrpc_error_code(
struct wf_jsonrpc_error const * error)
{
return error->code;
}
char const *
wf_impl_jsonrpc_error_message(
struct wf_jsonrpc_error const * error)
{
return error->message;
}
void void
wf_impl_jsonrpc_propate_error( wf_impl_jsonrpc_propate_error(
wf_jsonrpc_proxy_finished_fn * finised, wf_jsonrpc_proxy_finished_fn * finised,
@ -19,9 +53,12 @@ wf_impl_jsonrpc_propate_error(
int code, int code,
char const * message) char const * message)
{ {
json_t * error = wf_impl_jsonrpc_error(code, message); struct wf_jsonrpc_error error =
finised(user_data, NULL, error); {
.code = code,
.message = (char*) message
};
json_decref(error); finised(user_data, NULL, &error);
} }

View File

@ -9,11 +9,25 @@ extern "C"
{ {
#endif #endif
extern json_t * struct wf_jsonrpc_error;
extern struct wf_jsonrpc_error *
wf_impl_jsonrpc_error( wf_impl_jsonrpc_error(
int code, int code,
char const * message); char const * message);
extern void
wf_impl_jsonrpc_error_dispose(
struct wf_jsonrpc_error * error);
extern int
wf_impl_jsonrpc_error_code(
struct wf_jsonrpc_error const * error);
extern char const *
wf_impl_jsonrpc_error_message(
struct wf_jsonrpc_error const * error);
extern void extern void
wf_impl_jsonrpc_propate_error( wf_impl_jsonrpc_propate_error(
wf_jsonrpc_proxy_finished_fn * finised, wf_jsonrpc_proxy_finished_fn * finised,

View File

@ -8,10 +8,12 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
typedef void wf_jsonrpc_proxy_finished_fn( typedef void wf_jsonrpc_proxy_finished_fn(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -39,16 +39,19 @@ wf_impl_jsonrpc_response_init(
} }
else else
{ {
int code = WF_BAD_FORMAT;
char const * message = "invalid format: invalid error object";
json_t * error = json_object_get(response, "error"); json_t * error = json_object_get(response, "error");
if ((json_is_object(error)) && (json_is_integer(json_object_get(error, "code")))) json_t * code_holder = json_object_get(error, "code");
if (json_is_integer(code_holder))
{ {
result->error = error; code = json_integer_value(json_object_get(error, "code"));
json_incref(result->error); json_t * message_holder = json_object_get(error, "message");
} message = json_is_string(message_holder) ? json_string_value(message_holder) : "";
else
{
result->error = wf_impl_jsonrpc_error(WF_BAD_FORMAT, "invalid format: invalid error object");
} }
result->error = wf_impl_jsonrpc_error(code, message);
} }
} }
@ -61,8 +64,5 @@ wf_impl_jsonrpc_response_cleanup(
json_decref(response->result); json_decref(response->result);
} }
if (NULL != response->error) wf_impl_jsonrpc_error_dispose(response->error);
{
json_decref(response->error);
}
} }

View File

@ -14,10 +14,12 @@ using std::size_t;
extern "C" { extern "C" {
#endif #endif
struct wf_jsonrpc_error;
struct wf_jsonrpc_response struct wf_jsonrpc_response
{ {
json_t * result; json_t * result;
json_t * error; struct wf_jsonrpc_error * error;
int id; int id;
}; };

View File

@ -15,7 +15,7 @@
void wf_impl_operation_getattr_finished( void wf_impl_operation_getattr_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error) struct wf_jsonrpc_error const * error)
{ {
wf_status status = wf_impl_jsonrpc_get_status(error); wf_status status = wf_impl_jsonrpc_get_status(error);
struct wf_impl_operation_getattr_context * context = user_data; struct wf_impl_operation_getattr_context * context = user_data;

View File

@ -11,6 +11,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
struct wf_impl_operation_getattr_context struct wf_impl_operation_getattr_context
{ {
fuse_req_t request; fuse_req_t request;
@ -23,7 +25,7 @@ struct wf_impl_operation_getattr_context
extern void wf_impl_operation_getattr_finished( extern void wf_impl_operation_getattr_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
extern void wf_impl_operation_getattr ( extern void wf_impl_operation_getattr (
fuse_req_t request, fuse_req_t request,

View File

@ -18,7 +18,7 @@
void wf_impl_operation_lookup_finished( void wf_impl_operation_lookup_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error struct wf_jsonrpc_error const * error
) )
{ {
wf_status status = wf_impl_jsonrpc_get_status(error); wf_status status = wf_impl_jsonrpc_get_status(error);

View File

@ -11,6 +11,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
struct wf_impl_operation_lookup_context struct wf_impl_operation_lookup_context
{ {
fuse_req_t request; fuse_req_t request;
@ -22,7 +24,7 @@ struct wf_impl_operation_lookup_context
extern void wf_impl_operation_lookup_finished( extern void wf_impl_operation_lookup_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
extern void wf_impl_operation_lookup ( extern void wf_impl_operation_lookup (
fuse_req_t req, fuse_req_t req,

View File

@ -12,7 +12,7 @@
void wf_impl_operation_open_finished( void wf_impl_operation_open_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error) struct wf_jsonrpc_error const * error)
{ {
wf_status status = wf_impl_jsonrpc_get_status(error); wf_status status = wf_impl_jsonrpc_get_status(error);
fuse_req_t request = user_data; fuse_req_t request = user_data;

View File

@ -9,6 +9,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
extern void wf_impl_operation_open( extern void wf_impl_operation_open(
fuse_req_t request, fuse_req_t request,
fuse_ino_t inode, fuse_ino_t inode,
@ -17,7 +19,7 @@ extern void wf_impl_operation_open(
extern void wf_impl_operation_open_finished( extern void wf_impl_operation_open_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -62,7 +62,7 @@ char * wf_impl_fill_buffer(
void wf_impl_operation_read_finished( void wf_impl_operation_read_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error) struct wf_jsonrpc_error const * error)
{ {
wf_status status = wf_impl_jsonrpc_get_status(error); wf_status status = wf_impl_jsonrpc_get_status(error);
fuse_req_t request = user_data; fuse_req_t request = user_data;

View File

@ -11,6 +11,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
extern void wf_impl_operation_read( extern void wf_impl_operation_read(
fuse_req_t request, fuse_req_t request,
fuse_ino_t ino, size_t size, off_t off, fuse_ino_t ino, size_t size, off_t off,
@ -26,7 +28,7 @@ extern char * wf_impl_fill_buffer(
extern void wf_impl_operation_read_finished( extern void wf_impl_operation_read_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -69,7 +69,7 @@ static size_t wf_impl_min(size_t a, size_t b)
void wf_impl_operation_readdir_finished( void wf_impl_operation_readdir_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error) struct wf_jsonrpc_error const * error)
{ {
wf_status status = wf_impl_jsonrpc_get_status(error); wf_status status = wf_impl_jsonrpc_get_status(error);
struct wf_impl_operation_readdir_context * context = user_data; struct wf_impl_operation_readdir_context * context = user_data;

View File

@ -9,6 +9,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
struct wf_impl_operation_readdir_context struct wf_impl_operation_readdir_context
{ {
fuse_req_t request; fuse_req_t request;
@ -26,7 +28,7 @@ extern void wf_impl_operation_readdir (
extern void wf_impl_operation_readdir_finished( extern void wf_impl_operation_readdir_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error); struct wf_jsonrpc_error const * error);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/util/json_util.h" #include "webfuse/impl/util/json_util.h"
#include "webfuse/impl/jsonrpc/error.h"
int wf_impl_json_get_int(json_t const * object, char const * key, int default_value) int wf_impl_json_get_int(json_t const * object, char const * key, int default_value)
{ {
@ -15,12 +16,12 @@ int wf_impl_json_get_int(json_t const * object, char const * key, int default_va
wf_status wf_status
wf_impl_jsonrpc_get_status( wf_impl_jsonrpc_get_status(
json_t const * error) struct wf_jsonrpc_error const * error)
{ {
wf_status status = WF_GOOD; wf_status status = WF_GOOD;
if (NULL != error) if (NULL != error)
{ {
status = wf_impl_json_get_int(error, "code", WF_BAD_FORMAT); status = wf_impl_jsonrpc_error_code(error);
} }
return status; return status;

View File

@ -9,6 +9,8 @@ extern "C"
{ {
#endif #endif
struct wf_jsonrpc_error;
extern int extern int
wf_impl_json_get_int( wf_impl_json_get_int(
json_t const * object, json_t const * object,
@ -17,7 +19,7 @@ wf_impl_json_get_int(
extern wf_status extern wf_status
wf_impl_jsonrpc_get_status( wf_impl_jsonrpc_get_status(
json_t const * error); struct wf_jsonrpc_error const * error);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1,5 +1,6 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/proxy.h" #include "webfuse/impl/jsonrpc/proxy.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/impl/message.h" #include "webfuse/impl/message.h"
#include "webfuse/status.h" #include "webfuse/status.h"
#include "webfuse/impl/timer/manager.h" #include "webfuse/impl/timer/manager.h"
@ -20,12 +21,6 @@ using testing::SaveArg;
namespace namespace
{ {
int jsonrpc_get_status(json_t * error)
{
json_t * code = json_object_get(error, "code");
return (json_is_integer(code)) ? json_integer_value(code) : WF_BAD_FORMAT;
}
struct SendContext struct SendContext
{ {
json_t * response; json_t * response;
@ -65,7 +60,7 @@ namespace
{ {
bool is_called; bool is_called;
json_t * result; json_t * result;
json_t * error; wf_jsonrpc_error * error;
FinishedContext() FinishedContext()
: is_called(false) : is_called(false)
@ -82,22 +77,24 @@ namespace
json_decref(result); json_decref(result);
} }
if (nullptr != error) wf_impl_jsonrpc_error_dispose(error);
{
json_decref(error);
}
} }
}; };
void jsonrpc_finished( void jsonrpc_finished(
void * user_data, void * user_data,
json_t const * result, json_t const * result,
json_t const * error) wf_jsonrpc_error const * error)
{ {
FinishedContext * context = reinterpret_cast<FinishedContext*>(user_data); FinishedContext * context = reinterpret_cast<FinishedContext*>(user_data);
context->is_called = true; context->is_called = true;
context->result = json_deep_copy(result); context->result = json_deep_copy(result);
context->error = json_deep_copy(error);
if (nullptr != error)
{
context->error = wf_impl_jsonrpc_error(wf_impl_jsonrpc_error_code(error),
wf_impl_jsonrpc_error_message(error));
}
} }
} }
@ -305,7 +302,7 @@ TEST(wf_jsonrpc_proxy, timeout)
wf_impl_timer_manager_check(timer_manager); wf_impl_timer_manager_check(timer_manager);
ASSERT_TRUE(finished_context.is_called); ASSERT_TRUE(finished_context.is_called);
ASSERT_EQ(WF_BAD_TIMEOUT, jsonrpc_get_status(finished_context.error)); ASSERT_EQ(WF_BAD_TIMEOUT, wf_impl_jsonrpc_error_code(finished_context.error));
wf_impl_jsonrpc_proxy_dispose(proxy); wf_impl_jsonrpc_proxy_dispose(proxy);
wf_impl_timer_manager_dispose(timer_manager); wf_impl_timer_manager_dispose(timer_manager);

View File

@ -1,5 +1,6 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/response_intern.h" #include "webfuse/impl/jsonrpc/response_intern.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/status.h" #include "webfuse/status.h"
TEST(wf_json_response, init_result) TEST(wf_json_response, init_result)
@ -32,8 +33,8 @@ TEST(wf_json_response, init_error)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(42, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(42, wf_impl_jsonrpc_error_code(response.error));
ASSERT_STREQ("Don't Panic!", json_string_value(json_object_get(response.error, "message"))); ASSERT_STREQ("Don't Panic!", wf_impl_jsonrpc_error_message(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id); ASSERT_EQ(23, response.id);
@ -49,7 +50,7 @@ TEST(wf_json_response, init_fail_missing_result_and_error)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(12, response.id); ASSERT_EQ(12, response.id);
@ -65,7 +66,7 @@ TEST(wf_json_response, init_fail_missing_id)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(-1, response.id); ASSERT_EQ(-1, response.id);
@ -82,7 +83,7 @@ TEST(wf_json_response, init_fail_wrong_id_type)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(-1, response.id); ASSERT_EQ(-1, response.id);
@ -101,7 +102,7 @@ TEST(wf_json_response, init_fail_error_missing_code)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id); ASSERT_EQ(23, response.id);
@ -121,7 +122,7 @@ TEST(wf_json_response, init_fail_error_wrong_code_type)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id); ASSERT_EQ(23, response.id);
@ -138,7 +139,7 @@ TEST(wf_json_response, init_fail_error_wrong_type)
struct wf_jsonrpc_response response; struct wf_jsonrpc_response response;
wf_impl_jsonrpc_response_init(&response, message); wf_impl_jsonrpc_response_init(&response, message);
ASSERT_EQ(WF_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(WF_BAD_FORMAT, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
ASSERT_EQ(23, response.id); ASSERT_EQ(23, response.id);

View File

@ -2,6 +2,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "webfuse/impl/jsonrpc/response_intern.h" #include "webfuse/impl/jsonrpc/response_intern.h"
#include "webfuse/impl/jsonrpc/error.h"
static void response_parse_str( static void response_parse_str(
@ -44,7 +45,7 @@ TEST(response_parser, test)
// custom error code // custom error code
response_parse_str("{\"error\":{\"code\": 42}, \"id\": 42}", &response); response_parse_str("{\"error\":{\"code\": 42}, \"id\": 42}", &response);
ASSERT_NE(nullptr, response.error); ASSERT_NE(nullptr, response.error);
ASSERT_EQ(42, json_integer_value(json_object_get(response.error, "code"))); ASSERT_EQ(42, wf_impl_jsonrpc_error_code(response.error));
ASSERT_EQ(42, response.id); ASSERT_EQ(42, response.id);
ASSERT_EQ(nullptr, response.result); ASSERT_EQ(nullptr, response.result);
wf_impl_jsonrpc_response_cleanup(&response); wf_impl_jsonrpc_response_cleanup(&response);

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/operation/getattr.h" #include "webfuse/impl/operation/getattr.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/status.h" #include "webfuse/status.h"
@ -201,13 +202,12 @@ TEST(wf_impl_operation_getattr, finished_error)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0); EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0)); EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * error = json_object(); wf_jsonrpc_error * error = wf_impl_jsonrpc_error(WF_BAD, "");
json_object_set_new(error, "code", json_integer(WF_BAD));
auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context))); auto * context = reinterpret_cast<wf_impl_operation_getattr_context*>(malloc(sizeof(wf_impl_operation_getattr_context)));
context->inode = 1; context->inode = 1;
context->gid = 0; context->gid = 0;
context->uid = 0; context->uid = 0;
wf_impl_operation_getattr_finished(context, nullptr, error); wf_impl_operation_getattr_finished(context, nullptr, error);
json_decref(error); wf_impl_jsonrpc_error_dispose(error);
} }

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/operation/lookup.h" #include "webfuse/impl/operation/lookup.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/status.h" #include "webfuse/status.h"
@ -243,13 +244,12 @@ TEST(wf_impl_operation_lookup, finished_error)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0); EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0)); EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * error = json_object(); struct wf_jsonrpc_error * error = wf_impl_jsonrpc_error(WF_BAD, "");
json_object_set_new(error, "code", json_integer(WF_BAD));
auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context))); auto * context = reinterpret_cast<wf_impl_operation_lookup_context*>(malloc(sizeof(wf_impl_operation_lookup_context)));
context->timeout = 1.0; context->timeout = 1.0;
context->gid = 0; context->gid = 0;
context->uid = 0; context->uid = 0;
wf_impl_operation_lookup_finished(context, nullptr, error); wf_impl_operation_lookup_finished(context, nullptr, error);
json_decref(error); wf_impl_jsonrpc_error_dispose(error);
} }

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/operation/open.h" #include "webfuse/impl/operation/open.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/status.h" #include "webfuse/status.h"
@ -70,10 +71,9 @@ TEST(wf_impl_operation_open, finished_fail_error)
EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0); EXPECT_CALL(fuse, fuse_reply_open(_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0)); EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * error = json_object(); struct wf_jsonrpc_error * error = wf_impl_jsonrpc_error(WF_BAD, "");
json_object_set_new(error, "code", json_integer(WF_BAD));
wf_impl_operation_open_finished(nullptr, nullptr, error); wf_impl_operation_open_finished(nullptr, nullptr, error);
json_decref(error); wf_impl_jsonrpc_error_dispose(error);
} }
TEST(wf_impl_operation_open, finished_fail_no_handle) TEST(wf_impl_operation_open, finished_fail_no_handle)

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/operation/read.h" #include "webfuse/impl/operation/read.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/mocks/mock_fuse.hpp" #include "webfuse/mocks/mock_fuse.hpp"
#include "webfuse/mocks/mock_operation_context.hpp" #include "webfuse/mocks/mock_operation_context.hpp"
@ -230,8 +231,7 @@ TEST(wf_impl_operation_read, finished_fail_error)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0); EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0)); EXPECT_CALL(fuse, fuse_reply_err(_, _)).Times(1).WillOnce(Return(0));
json_t * error = json_object(); struct wf_jsonrpc_error * error = wf_impl_jsonrpc_error(WF_BAD, "");
json_object_set_new(error, "code", json_integer(WF_BAD));
wf_impl_operation_read_finished(nullptr, nullptr, error); wf_impl_operation_read_finished(nullptr, nullptr, error);
json_decref(error); wf_impl_jsonrpc_error_dispose(error);
} }

View File

@ -1,4 +1,5 @@
#include "webfuse/impl/operation/readdir.h" #include "webfuse/impl/operation/readdir.h"
#include "webfuse/impl/jsonrpc/error.h"
#include "webfuse/status.h" #include "webfuse/status.h"
@ -142,15 +143,14 @@ TEST(wf_impl_operation_readdir, finished_fail_error)
EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0); EXPECT_CALL(fuse, fuse_reply_buf(_,_,_)).Times(0);
EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0)); EXPECT_CALL(fuse, fuse_reply_err(_, ENOENT)).Times(1).WillOnce(Return(0));
json_t * error = json_array(); struct wf_jsonrpc_error * error = wf_impl_jsonrpc_error(WF_BAD, "");
json_object_set_new(error, "code", json_integer(WF_BAD));
auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context))); auto * context = reinterpret_cast<wf_impl_operation_readdir_context*>(malloc(sizeof(wf_impl_operation_readdir_context)));
context->request = nullptr; context->request = nullptr;
context->size = 1; context->size = 1;
context->offset = 0; context->offset = 0;
wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), nullptr, error); wf_impl_operation_readdir_finished(reinterpret_cast<void*>(context), nullptr, error);
json_decref(error); wf_impl_jsonrpc_error_dispose(error);
} }
TEST(wf_impl_operation_readdir, finished_fail_invalid_result_type) TEST(wf_impl_operation_readdir, finished_fail_invalid_result_type)