diff --git a/lib/wf/jsonrpc/src/wf/jsonrpc/impl/response.c b/lib/wf/jsonrpc/src/wf/jsonrpc/impl/response.c index 07171fb..f9fe180 100644 --- a/lib/wf/jsonrpc/src/wf/jsonrpc/impl/response.c +++ b/lib/wf/jsonrpc/src/wf/jsonrpc/impl/response.c @@ -25,7 +25,7 @@ wf_jsonrpc_impl_response_init( result->error = NULL; json_t * id_holder = json_object_get(response, "id"); - if ((NULL == id_holder) || (!json_is_integer(id_holder))) + if (!json_is_integer(id_holder)) { result->error = wf_jsonrpc_impl_error(WF_JSONRPC_BAD_FORMAT, "invalid format: missing id"); return; diff --git a/lib/wf/jsonrpc/test/wf/jsonrpc/test_response.cc b/lib/wf/jsonrpc/test/wf/jsonrpc/test_response.cc index e8515aa..b71d7f3 100644 --- a/lib/wf/jsonrpc/test/wf/jsonrpc/test_response.cc +++ b/lib/wf/jsonrpc/test/wf/jsonrpc/test_response.cc @@ -41,7 +41,7 @@ TEST(wf_json_response, init_error) json_decref(message); } -TEST(wf_json_response, init_format_error) +TEST(wf_json_response, init_fail_missing_result_and_error) { json_t * message = json_object(); json_object_set_new(message, "id", json_integer(12)); @@ -56,3 +56,92 @@ TEST(wf_json_response, init_format_error) wf_jsonrpc_impl_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)); + + struct wf_jsonrpc_response response; + wf_jsonrpc_impl_response_init(&response, message); + + ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(-1, response.id); + + wf_jsonrpc_impl_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")); + + struct wf_jsonrpc_response response; + wf_jsonrpc_impl_response_init(&response, message); + + ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(-1, response.id); + + wf_jsonrpc_impl_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)); + + struct wf_jsonrpc_response response; + wf_jsonrpc_impl_response_init(&response, message); + + ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(23, response.id); + + wf_jsonrpc_impl_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)); + + struct wf_jsonrpc_response response; + wf_jsonrpc_impl_response_init(&response, message); + + ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(23, response.id); + + wf_jsonrpc_impl_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)); + + struct wf_jsonrpc_response response; + wf_jsonrpc_impl_response_init(&response, message); + + ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code"))); + ASSERT_EQ(nullptr, response.result); + ASSERT_EQ(23, response.id); + + wf_jsonrpc_impl_response_cleanup(&response); + json_decref(message); +}