mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
@@ -60,17 +60,19 @@ using namespace util::config;
|
||||
|
||||
namespace http = boost::beast::http;
|
||||
|
||||
struct ng_RPCServerHandlerTest : util::prometheus::WithPrometheus, MockBackendTestStrict, SyncAsioContextTest {
|
||||
struct NgRpcServerHandlerTest : util::prometheus::WithPrometheus, MockBackendTestStrict, SyncAsioContextTest {
|
||||
ClioConfigDefinition config{ClioConfigDefinition{
|
||||
{"log_tag_style", ConfigValue{ConfigType::String}.defaultValue("uint")},
|
||||
{"api_version.min", ConfigValue{ConfigType::Integer}.defaultValue(1)},
|
||||
{"api_version.max", ConfigValue{ConfigType::Integer}.defaultValue(2)},
|
||||
{"api_version.default", ConfigValue{ConfigType::Integer}.defaultValue(1)}
|
||||
}};
|
||||
|
||||
protected:
|
||||
std::shared_ptr<testing::StrictMock<MockRPCEngine>> rpcEngine_ =
|
||||
std::make_shared<testing::StrictMock<MockRPCEngine>>();
|
||||
std::shared_ptr<StrictMock<MockETLService>> etl_ = std::make_shared<StrictMock<MockETLService>>();
|
||||
RPCServerHandler<MockRPCEngine, MockETLService> rpcServerHandler_{config, backend, rpcEngine_, etl_};
|
||||
RPCServerHandler<MockRPCEngine, MockETLService> rpcServerHandler_{config, backend_, rpcEngine_, etl_};
|
||||
|
||||
util::TagDecoratorFactory tagFactory_{config};
|
||||
StrictMockConnectionMetadata connectionMetadata_{"some ip", tagFactory_};
|
||||
@@ -82,7 +84,7 @@ struct ng_RPCServerHandlerTest : util::prometheus::WithPrometheus, MockBackendTe
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, PostToRpcEngineFailed)
|
||||
TEST_F(NgRpcServerHandlerTest, PostToRpcEngineFailed)
|
||||
{
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest("some message");
|
||||
@@ -95,7 +97,7 @@ TEST_F(ng_RPCServerHandlerTest, PostToRpcEngineFailed)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, CoroutineSleepsUntilRpcEngineFinishes)
|
||||
TEST_F(NgRpcServerHandlerTest, CoroutineSleepsUntilRpcEngineFinishes)
|
||||
{
|
||||
StrictMock<testing::MockFunction<void()>> rpcServerHandlerDone;
|
||||
StrictMock<testing::MockFunction<void()>> rpcEngineDone;
|
||||
@@ -107,7 +109,7 @@ TEST_F(ng_RPCServerHandlerTest, CoroutineSleepsUntilRpcEngineFinishes)
|
||||
|
||||
EXPECT_CALL(*rpcEngine_, post).WillOnce([&](auto&& fn, auto&&) {
|
||||
boost::asio::spawn(
|
||||
ctx,
|
||||
ctx_,
|
||||
[this, &rpcEngineDone, fn = std::forward<decltype(fn)>(fn)](boost::asio::yield_context yield) {
|
||||
EXPECT_CALL(*rpcEngine_, notifyBadSyntax);
|
||||
fn(yield);
|
||||
@@ -124,7 +126,7 @@ TEST_F(ng_RPCServerHandlerTest, CoroutineSleepsUntilRpcEngineFinishes)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, JsonParseFailed)
|
||||
TEST_F(NgRpcServerHandlerTest, JsonParseFailed)
|
||||
{
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest("not a json");
|
||||
@@ -139,7 +141,7 @@ TEST_F(ng_RPCServerHandlerTest, JsonParseFailed)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, GotNotJsonObject)
|
||||
TEST_F(NgRpcServerHandlerTest, GotNotJsonObject)
|
||||
{
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest("[]");
|
||||
@@ -153,7 +155,7 @@ TEST_F(ng_RPCServerHandlerTest, GotNotJsonObject)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_NoRangeFromBackend)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_NoRangeFromBackend)
|
||||
{
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest("{}");
|
||||
@@ -174,9 +176,9 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_NoRangeFromBackend)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_ContextCreationFailed)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_ContextCreationFailed)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest("{}");
|
||||
|
||||
@@ -194,16 +196,16 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_ContextCreationFailed)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_BuildResponseFailed)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_BuildResponseFailed)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
EXPECT_CALL(*rpcEngine_, post).WillOnce([&](auto&& fn, auto&&) {
|
||||
EXPECT_CALL(connectionMetadata_, wasUpgraded).WillRepeatedly(Return(not request.isHttp()));
|
||||
EXPECT_CALL(*rpcEngine_, buildResponse)
|
||||
.WillOnce(Return(rpc::Result{rpc::Status{rpc::ClioError::rpcUNKNOWN_OPTION}}));
|
||||
.WillOnce(Return(rpc::Result{rpc::Status{rpc::ClioError::RpcUnknownOption}}));
|
||||
EXPECT_CALL(*etl_, lastCloseAgeSeconds).WillOnce(Return(1));
|
||||
fn(yield);
|
||||
return true;
|
||||
@@ -217,13 +219,13 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_BuildResponseFailed)
|
||||
EXPECT_EQ(jsonResponse.at("result").at("error").as_string(), "unknownOption");
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_BuildResponseThrewAnException)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_BuildResponseThrewAnException)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
@@ -243,9 +245,9 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_BuildResponseThrewAnException)
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_Successful_HttpRequest)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
@@ -268,13 +270,13 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest)
|
||||
EXPECT_EQ(jsonResponse.at("result").at("status").as_string(), "success");
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1) << jsonResponse;
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_OutdatedWarning)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_OutdatedWarning)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
@@ -302,14 +304,14 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_OutdatedWarning)
|
||||
);
|
||||
|
||||
EXPECT_EQ(warningCodes.size(), 2);
|
||||
EXPECT_TRUE(warningCodes.contains(rpc::warnRPC_CLIO));
|
||||
EXPECT_TRUE(warningCodes.contains(rpc::warnRPC_OUTDATED));
|
||||
EXPECT_TRUE(warningCodes.contains(rpc::WarnRpcClio));
|
||||
EXPECT_TRUE(warningCodes.contains(rpc::WarnRpcOutdated));
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest_Forwarded)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_Successful_HttpRequest_Forwarded)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
@@ -335,13 +337,13 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest_Forwarded)
|
||||
EXPECT_EQ(jsonResponse.at("forwarded").as_bool(), true);
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1) << jsonResponse;
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest_HasError)
|
||||
TEST_F(NgRpcServerHandlerTest, HandleRequest_Successful_HttpRequest_HasError)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const request = makeHttpRequest(R"json({"method":"some_method"})json");
|
||||
|
||||
@@ -366,11 +368,11 @@ TEST_F(ng_RPCServerHandlerTest, HandleRequest_Successful_HttpRequest_HasError)
|
||||
EXPECT_EQ(jsonResponse.at("result").at("error").as_string(), "some error");
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1) << jsonResponse;
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
struct ng_RPCServerHandlerWsTest : ng_RPCServerHandlerTest {
|
||||
struct NgRpcServerHandlerWsTest : NgRpcServerHandlerTest {
|
||||
struct MockSubscriptionContext : web::SubscriptionContextInterface {
|
||||
using web::SubscriptionContextInterface::SubscriptionContextInterface;
|
||||
|
||||
@@ -381,13 +383,14 @@ struct ng_RPCServerHandlerWsTest : ng_RPCServerHandlerTest {
|
||||
};
|
||||
using StrictMockSubscriptionContext = testing::StrictMock<MockSubscriptionContext>;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<StrictMockSubscriptionContext> subscriptionContext_ =
|
||||
std::make_shared<StrictMockSubscriptionContext>(tagFactory_);
|
||||
};
|
||||
|
||||
TEST_F(ng_RPCServerHandlerWsTest, HandleRequest_Successful_WsRequest)
|
||||
TEST_F(NgRpcServerHandlerWsTest, HandleRequest_Successful_WsRequest)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
Request::HttpHeaders const headers;
|
||||
auto const request = Request(R"json({"method":"some_method", "id": 1234, "api_version": 1})json", headers);
|
||||
@@ -412,13 +415,13 @@ TEST_F(ng_RPCServerHandlerWsTest, HandleRequest_Successful_WsRequest)
|
||||
EXPECT_EQ(jsonResponse.at("api_version").as_int64(), 1);
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1) << jsonResponse;
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(ng_RPCServerHandlerWsTest, HandleRequest_Successful_WsRequest_HasError)
|
||||
TEST_F(NgRpcServerHandlerWsTest, HandleRequest_Successful_WsRequest_HasError)
|
||||
{
|
||||
backend->setRange(0, 1);
|
||||
backend_->setRange(0, 1);
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
Request::HttpHeaders const headers;
|
||||
auto const request = Request(R"json({"method":"some_method", "id": 1234, "api_version": 1})json", headers);
|
||||
@@ -445,6 +448,6 @@ TEST_F(ng_RPCServerHandlerWsTest, HandleRequest_Successful_WsRequest_HasError)
|
||||
EXPECT_EQ(jsonResponse.at("api_version").as_int64(), 1);
|
||||
|
||||
ASSERT_EQ(jsonResponse.at("warnings").as_array().size(), 1) << jsonResponse;
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::warnRPC_CLIO);
|
||||
EXPECT_EQ(jsonResponse.at("warnings").as_array().at(0).as_object().at("id").as_int64(), rpc::WarnRpcClio);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user