From 0f79609d7f2e64f52710864a16dcdee073e596a5 Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Thu, 31 Oct 2024 12:59:57 -0400 Subject: [PATCH] Add unit tests related to: Use error codes throughout fast Base58 implementation Improve error handling in some RPC commands --- include/xrpl/protocol/detail/b58_utils.h | 3 ++- src/test/protocol/types_test.cpp | 5 ++++ src/test/rpc/AccountObjects_test.cpp | 29 ++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/include/xrpl/protocol/detail/b58_utils.h b/include/xrpl/protocol/detail/b58_utils.h index b060fc7e166..ae2ee31b68a 100644 --- a/include/xrpl/protocol/detail/b58_utils.h +++ b/include/xrpl/protocol/detail/b58_utils.h @@ -169,8 +169,9 @@ inplace_bigint_div_rem(std::span numerator, std::uint64_t divisor) [[nodiscard]] inline std::array b58_10_to_b58_be(std::uint64_t input) { - constexpr std::uint64_t B_58_10 = 430804206899405824; // 58^10; + static constexpr std::uint64_t B_58_10 = 430804206899405824; // 58^10; assert(input < B_58_10); + (void)B_58_10; constexpr std::size_t resultSize = 10; std::array result{}; int i = 0; diff --git a/src/test/protocol/types_test.cpp b/src/test/protocol/types_test.cpp index ac4314df640..a58670b184d 100644 --- a/src/test/protocol/types_test.cpp +++ b/src/test/protocol/types_test.cpp @@ -30,6 +30,11 @@ struct types_test : public beast::unit_test::suite auto const s = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; if (BEAST_EXPECT(parseBase58(s))) BEAST_EXPECT(toBase58(*parseBase58(s)) == s); + { + auto const s = + "âabcd1rNxp4h8apvRis6mJf9Sh8C6iRxfrDWNâabcdAVâ\xc2\x80\xc2\x8f"; + BEAST_EXPECT(!parseBase58(s)); + } } void diff --git a/src/test/rpc/AccountObjects_test.cpp b/src/test/rpc/AccountObjects_test.cpp index 7326fff0c76..9bd8858920a 100644 --- a/src/test/rpc/AccountObjects_test.cpp +++ b/src/test/rpc/AccountObjects_test.cpp @@ -1220,6 +1220,35 @@ class AccountObjects_test : public beast::unit_test::suite } } + void + testAccountNFTs() + { + testcase("account_nfts"); + + using namespace jtx; + Env env(*this); + + // test validation + { + auto testInvalidAccountParam = [&](auto const& param) { + Json::Value params; + params[jss::account] = param; + auto jrr = env.rpc( + "json", "account_nfts", to_string(params))[jss::result]; + BEAST_EXPECT(jrr[jss::error] == "invalidParams"); + BEAST_EXPECT( + jrr[jss::error_message] == "Invalid field 'account'."); + }; + + testInvalidAccountParam(1); + testInvalidAccountParam(1.1); + testInvalidAccountParam(true); + testInvalidAccountParam(Json::Value(Json::nullValue)); + testInvalidAccountParam(Json::Value(Json::objectValue)); + testInvalidAccountParam(Json::Value(Json::arrayValue)); + } + } + void testAccountObjectMarker() {