代码拉取完成,页面将自动刷新
/*************************************************************************
* libjson-rpc-cpp
*************************************************************************
* @file test_client.cpp
* @date 28.09.2013
* @author Peter Spiess-Knafl <dev@spiessknafl.at>
* @license See attached LICENSE.txt
************************************************************************/
#include "checkexception.h"
#include "mockclientconnector.h"
#include <catch2/catch.hpp>
#include <jsonrpccpp/client.h>
#define TEST_MODULE "[client]"
using namespace jsonrpc;
using namespace std;
namespace testclient {
bool check_exception1(JsonRpcException const &ex) { return ex.GetCode() == Errors::ERROR_RPC_JSON_PARSE_ERROR; }
bool check_exception2(JsonRpcException const &ex) { return ex.GetCode() == Errors::ERROR_CLIENT_INVALID_RESPONSE; }
bool check_exception3(JsonRpcException const &ex) { return ex.GetCode() == Errors::ERROR_RPC_INVALID_REQUEST && ex.GetData().size() == 2; }
struct F {
MockClientConnector c;
Client client;
Json::Value params;
F() : client(c, JSONRPC_CLIENT_V2) {}
};
struct F1 {
MockClientConnector c;
Client client;
Json::Value params;
F1() : client(c, JSONRPC_CLIENT_V1) {}
};
} // namespace testclient
using namespace testclient;
TEST_CASE_METHOD(F, "test_client_id", TEST_MODULE) {
params.append(33);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": \"1\", \"result\": 23}");
Json::Value response = client.CallMethod("abcd", params);
CHECK(response.asInt() == 23);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": 1, \"result\": 24}");
response = client.CallMethod("abcd", params);
CHECK(response.asInt() == 24);
}
TEST_CASE_METHOD(F, "test_client_v2_method_success", TEST_MODULE) {
params.append(23);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": 1, \"result\": 23}");
Json::Value response = client.CallMethod("abcd", params);
Json::Value v = c.GetJsonRequest();
CHECK(v["method"].asString() == "abcd");
CHECK(v["params"][0].asInt() == 23);
CHECK(v["jsonrpc"].asString() == "2.0");
CHECK(v["id"].asInt() == 1);
}
TEST_CASE_METHOD(F, "test_client_v2_notification_success", TEST_MODULE) {
params.append(23);
client.CallNotification("abcd", params);
Json::Value v = c.GetJsonRequest();
CHECK(v["method"].asString() == "abcd");
CHECK(v["params"][0].asInt() == 23);
CHECK(v["jsonrpc"].asString() == "2.0");
CHECK(v.isMember("id") == false);
}
TEST_CASE_METHOD(F, "test_client_v2_errorresponse", TEST_MODULE) {
c.SetResponse("{\"jsonrpc\":\"2.0\", \"error\": {\"code\": -32600, "
"\"message\": \"Invalid Request\", \"data\": [1,2]}, \"id\": "
"null}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception3);
}
TEST_CASE_METHOD(F, "test_client_v2_invalidjson", TEST_MODULE) {
c.SetResponse("{\"method\":234");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception1);
}
TEST_CASE_METHOD(F, "test_client_v2_invalidresponse", TEST_MODULE) {
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": 1, \"resulto\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id2\": 1, \"result\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"jsonrpc\":\"1.0\", \"id\": 1, \"result\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1, \"result\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": 1, \"result\": 23, \"error\": {}}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"id\": 1, \"error\": {}}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"jsonrpc\":\"2.0\", \"result\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("[]");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("23");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
}
TEST_CASE_METHOD(F, "test_client_v2_batchcall_success", TEST_MODULE) {
BatchCall bc;
CHECK(bc.addCall("abc", Json::nullValue, false) == 1);
CHECK(bc.addCall("def", Json::nullValue, true) == -1);
CHECK(bc.addCall("abc", Json::nullValue, false) == 2);
c.SetResponse("[{\"jsonrpc\":\"2.0\", \"id\": 1, \"result\": "
"23},{\"jsonrpc\":\"2.0\", \"id\": 2, \"result\": 24}]");
BatchResponse response = client.CallProcedures(bc);
CHECK(response.hasErrors() == false);
CHECK(response.getResult(1).asInt() == 23);
CHECK(response.getResult(2).asInt() == 24);
CHECK(response.getResult(3).isNull() == true);
Json::Value request = c.GetJsonRequest();
CHECK(request.size() == 3);
CHECK(request[0]["method"].asString() == "abc");
CHECK(request[0]["id"].asInt() == 1);
CHECK(request[1]["method"].asString() == "def");
CHECK(request[1]["id"].isNull() == true);
CHECK(request[2]["id"].asInt() == 2);
bc.toString(false);
}
TEST_CASE_METHOD(F, "test_client_v2_batchcall_error", TEST_MODULE) {
BatchCall bc;
CHECK(bc.addCall("abc", Json::nullValue, false) == 1);
CHECK(bc.addCall("def", Json::nullValue, false) == 2);
CHECK(bc.addCall("abc", Json::nullValue, false) == 3);
c.SetResponse("[{\"jsonrpc\":\"2.0\", \"id\": 1, \"result\": "
"23},{\"jsonrpc\":\"2.0\", \"id\": 2, \"error\": {\"code\": "
"-32001, \"message\": \"error1\"}},{\"jsonrpc\":\"2.0\", "
"\"id\": null, \"error\": {\"code\": -32002, \"message\": "
"\"error2\"}}]");
BatchResponse response = client.CallProcedures(bc);
CHECK(response.hasErrors() == true);
CHECK(response.getResult(1).asInt() == 23);
CHECK(response.getResult(2).isNull() == true);
CHECK(response.getResult(3).isNull() == true);
CHECK(response.getErrorMessage(2) == "error1");
CHECK(response.getErrorMessage(3) == "");
c.SetResponse("{}");
CHECK_EXCEPTION_TYPE(client.CallProcedures(bc), JsonRpcException, check_exception2);
c.SetResponse("[1,2,3]");
CHECK_EXCEPTION_TYPE(client.CallProcedures(bc), JsonRpcException, check_exception2);
c.SetResponse("[[],[],[]]");
CHECK_EXCEPTION_TYPE(client.CallProcedures(bc), JsonRpcException, check_exception2);
}
TEST_CASE_METHOD(F1, "test_client_v1_method_success", TEST_MODULE) {
params.append(23);
c.SetResponse("{\"id\": 1, \"result\": 23, \"error\": null}");
Json::Value response = client.CallMethod("abcd", params);
Json::Value v = c.GetJsonRequest();
CHECK(v["method"].asString() == "abcd");
CHECK(v["params"][0].asInt() == 23);
CHECK(v.isMember("jsonrpc") == false);
CHECK(v["id"].asInt() == 1);
CHECK(response.asInt() == 23);
}
TEST_CASE_METHOD(F1, "test_client_v1_notification_success", TEST_MODULE) {
params.append(23);
client.CallNotification("abcd", params);
Json::Value v = c.GetJsonRequest();
CHECK(v["method"].asString() == "abcd");
CHECK(v["params"][0].asInt() == 23);
CHECK(v.isMember("id") == true);
CHECK(v["id"] == Json::nullValue);
}
TEST_CASE_METHOD(F1, "test_client_v1_errorresponse", TEST_MODULE) {
c.SetResponse("{\"result\": null, \"error\": {\"code\": -32600, \"message\": "
"\"Invalid Request\", \"data\": [1,2]}, \"id\": null}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception3);
c.SetResponse("{\"result\": null, \"error\": {\"code\": -32600, \"message\": "
"\"Invalid Request\", \"data\": [1,2]}, \"id\": null}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception3);
}
TEST_CASE_METHOD(F1, "test_client_v1_invalidresponse", TEST_MODULE) {
c.SetResponse("{\"id\": 1, \"resulto\": 23, \"error\": null}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1, \"result\": 23}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1, \"error\": null}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1, \"result\": 23, \"error\": {}}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{\"id\": 1, \"result\": null, \"error\": {}}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("{}");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("[]");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
c.SetResponse("23");
CHECK_EXCEPTION_TYPE(client.CallMethod("abcd", Json::nullValue), JsonRpcException, check_exception2);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。