diff --git a/src/rpc/handlers/AccountLines.h b/src/rpc/handlers/AccountLines.h index 7e29ddd6..ac25201e 100644 --- a/src/rpc/handlers/AccountLines.h +++ b/src/rpc/handlers/AccountLines.h @@ -90,8 +90,11 @@ public: spec([[maybe_unused]] uint32_t apiVersion) const { static auto const rpcSpec = RpcSpec{ - {JS(account), validation::Required{}, validation::AccountValidator}, - {JS(peer), validation::Type{}, validation::AccountValidator}, + {JS(account), + validation::Required{}, + validation::WithCustomError{validation::AccountValidator, Status(RippledError::rpcACT_MALFORMED)}}, + {JS(peer), + validation::WithCustomError{validation::AccountValidator, Status(RippledError::rpcACT_MALFORMED)}}, {JS(ignore_default), validation::Type{}}, {JS(ledger_hash), validation::Uint256HexStringValidator}, {JS(limit), validation::Type{}, validation::Between{10, 400}}, diff --git a/unittests/rpc/handlers/AccountLinesTest.cpp b/unittests/rpc/handlers/AccountLinesTest.cpp index 630f6317..e4ce7ced 100644 --- a/unittests/rpc/handlers/AccountLinesTest.cpp +++ b/unittests/rpc/handlers/AccountLinesTest.cpp @@ -206,7 +206,7 @@ TEST_F(RPCAccountLinesHandlerTest, AccountInvalidFormat) ASSERT_FALSE(output); auto const err = RPC::makeError(output.error()); EXPECT_EQ(err.at("error").as_string(), "actMalformed"); - EXPECT_EQ(err.at("error_message").as_string(), "accountMalformed"); + EXPECT_EQ(err.at("error_message").as_string(), "Account malformed."); }); } @@ -223,8 +223,43 @@ TEST_F(RPCAccountLinesHandlerTest, AccountNotString) ASSERT_FALSE(output); auto const err = RPC::makeError(output.error()); - EXPECT_EQ(err.at("error").as_string(), "invalidParams"); - EXPECT_EQ(err.at("error_message").as_string(), "accountNotString"); + EXPECT_EQ(err.at("error").as_string(), "actMalformed"); + EXPECT_EQ(err.at("error_message").as_string(), "Account malformed."); + }); +} + +TEST_F(RPCAccountLinesHandlerTest, PeerInvalidFormat) +{ + runSpawn([this](auto& yield) { + auto const handler = AnyHandler{AccountLinesHandler{mockBackendPtr}}; + auto const input = json::parse( + R"({ + "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "peer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jp" + })"); + auto const output = handler.process(input, Context{std::ref(yield)}); + ASSERT_FALSE(output); + auto const err = RPC::makeError(output.error()); + EXPECT_EQ(err.at("error").as_string(), "actMalformed"); + EXPECT_EQ(err.at("error_message").as_string(), "Account malformed."); + }); +} + +TEST_F(RPCAccountLinesHandlerTest, PeerNotString) +{ + runSpawn([this](auto& yield) { + auto const handler = AnyHandler{AccountLinesHandler{mockBackendPtr}}; + auto const input = json::parse( + R"({ + "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "peer": 12 + })"); + auto const output = handler.process(input, Context{std::ref(yield)}); + ASSERT_FALSE(output); + + auto const err = RPC::makeError(output.error()); + EXPECT_EQ(err.at("error").as_string(), "actMalformed"); + EXPECT_EQ(err.at("error_message").as_string(), "Account malformed."); }); }