From 4cf84645aeacc41c7143348775567e0a004fae55 Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Sun, 28 Apr 2019 11:40:04 +0200 Subject: [PATCH] adds test of jsonrpc response --- CMakeLists.txt | 2 + test/adapter/jsonrpc/test_is_response.cc | 94 ++++++++++++++++++++++++ test/adapter/jsonrpc/test_response.cc | 56 ++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 test/adapter/jsonrpc/test_is_response.cc create mode 100644 test/adapter/jsonrpc/test_response.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 76f6861..6e5476e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -310,6 +310,8 @@ add_executable(alltests test/adapter/jsonrpc/test_util.cc test/adapter/jsonrpc/test_is_request.cc test/adapter/jsonrpc/test_request.cc + test/adapter/jsonrpc/test_is_response.cc + test/adapter/jsonrpc/test_response.cc test/adapter/test_fuse_req.cc test/provider/test_url.cc test/provider/test_static_filesystem.cc diff --git a/test/adapter/jsonrpc/test_is_response.cc b/test/adapter/jsonrpc/test_is_response.cc new file mode 100644 index 0000000..6182cd0 --- /dev/null +++ b/test/adapter/jsonrpc/test_is_response.cc @@ -0,0 +1,94 @@ +#include +#include "webfuse/adapter/impl/jsonrpc/response.h" + +TEST(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)); + + ASSERT_TRUE(wf_impl_jsonrpc_is_response(message)); + + json_decref(message); +} + +TEST(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)); + + json_decref(message); +} + +TEST(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)); + + json_decref(message); +} + +TEST(jsonrpc_is_response, invalid_null) +{ + ASSERT_FALSE(wf_impl_jsonrpc_is_response(nullptr)); +} + +TEST(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)); + + ASSERT_FALSE(wf_impl_jsonrpc_is_response(message)); + + json_decref(message); +} + +TEST(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)); + + json_decref(message); +} + +TEST(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)); + + json_decref(message); +} + + +TEST(jsonrpc_is_response, invalid_missing_result_and_error) +{ + json_t * message = json_object(); + json_object_set_new(message, "id", json_integer(42)); + + ASSERT_FALSE(wf_impl_jsonrpc_is_response(message)); + + json_decref(message); +} + +TEST(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)); + + json_decref(message); +} diff --git a/test/adapter/jsonrpc/test_response.cc b/test/adapter/jsonrpc/test_response.cc new file mode 100644 index 0000000..3a63d0f --- /dev/null +++ b/test/adapter/jsonrpc/test_response.cc @@ -0,0 +1,56 @@ +#include +#include "webfuse/adapter/impl/jsonrpc/response.h" + +TEST(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)); + + struct wf_impl_jsonrpc_response response; + wf_impl_jsonrpc_response_init(&response, message); + + ASSERT_EQ(WF_GOOD, response.status); + ASSERT_TRUE(json_is_integer(response.result)); + ASSERT_EQ(47, json_integer_value(response.result)); + ASSERT_EQ(11, response.id); + + wf_impl_jsonrpc_response_cleanup(&response); + json_decref(message); +} + +TEST(json_response, init_error) +{ + json_t * message = json_object(); + json_t * err = json_object(); + json_object_set_new(err, "code", json_integer(WF_BAD_ACCESS_DENIED)); + json_object_set_new(err, "message", json_string("access denied")); + json_object_set_new(message, "error", err); + json_object_set_new(message, "id", json_integer(23)); + + struct wf_impl_jsonrpc_response response; + wf_impl_jsonrpc_response_init(&response, message); + + ASSERT_EQ(WF_BAD_ACCESS_DENIED, response.status); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(23, response.id); + + wf_impl_jsonrpc_response_cleanup(&response); + json_decref(message); +} + +TEST(json_response, init_format_error) +{ + json_t * message = json_object(); + json_object_set_new(message, "id", json_integer(12)); + + struct wf_impl_jsonrpc_response response; + wf_impl_jsonrpc_response_init(&response, message); + + ASSERT_EQ(WF_BAD_FORMAT, response.status); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(12, response.id); + + wf_impl_jsonrpc_response_cleanup(&response); + json_decref(message); +}