From 6bc2ec745f0ab5685e87b41903b304bbc9c5992c Mon Sep 17 00:00:00 2001 From: cyan317 <120398799+cindyyan317@users.noreply.github.com> Date: Fri, 5 May 2023 12:55:14 +0100 Subject: [PATCH] fix bugs (#625) Fixes #626 --- src/rpc/handlers/AccountChannels.cpp | 3 ++ src/rpc/handlers/AccountLines.cpp | 5 ++++ src/rpc/handlers/TransactionEntry.cpp | 1 + src/rpc/handlers/Tx.cpp | 29 +++++++++---------- src/rpc/handlers/Tx.h | 9 +++--- unittests/rpc/handlers/AccountLinesTest.cpp | 2 ++ .../rpc/handlers/TransactionEntryTest.cpp | 3 +- unittests/rpc/handlers/TxTest.cpp | 6 ++-- 8 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/rpc/handlers/AccountChannels.cpp b/src/rpc/handlers/AccountChannels.cpp index dfc6002d..f5789a93 100644 --- a/src/rpc/handlers/AccountChannels.cpp +++ b/src/rpc/handlers/AccountChannels.cpp @@ -90,6 +90,9 @@ AccountChannelsHandler::process(AccountChannelsHandler::Input input, Context con auto const next = ngTraverseOwnedNodes( *sharedPtrBackend_, *accountID, lgrInfo.seq, input.limit, input.marker, ctx.yield, addToResponse); + if (auto status = std::get_if(&next)) + return Error{*status}; + response.account = input.account; response.limit = input.limit; response.ledgerHash = ripple::strHex(lgrInfo.hash); diff --git a/src/rpc/handlers/AccountLines.cpp b/src/rpc/handlers/AccountLines.cpp index 4716224e..62739b31 100644 --- a/src/rpc/handlers/AccountLines.cpp +++ b/src/rpc/handlers/AccountLines.cpp @@ -132,6 +132,10 @@ AccountLinesHandler::process(AccountLinesHandler::Input input, Context const& ct auto const next = ngTraverseOwnedNodes( *sharedPtrBackend_, *accountID, lgrInfo.seq, input.limit, input.marker, ctx.yield, addToResponse); + + if (auto status = std::get_if(&next)) + return Error{*status}; + auto const nextMarker = std::get(next); response.account = input.account; @@ -183,6 +187,7 @@ void tag_invoke(boost::json::value_from_tag, boost::json::value& jv, AccountLinesHandler::Output const& output) { auto obj = boost::json::object{ + {JS(account), output.account}, {JS(ledger_hash), output.ledgerHash}, {JS(ledger_index), output.ledgerIndex}, {JS(validated), output.validated}, diff --git a/src/rpc/handlers/TransactionEntry.cpp b/src/rpc/handlers/TransactionEntry.cpp index 66f48958..85ef3fc3 100644 --- a/src/rpc/handlers/TransactionEntry.cpp +++ b/src/rpc/handlers/TransactionEntry.cpp @@ -60,6 +60,7 @@ void tag_invoke(boost::json::value_from_tag, boost::json::value& jv, TransactionEntryHandler::Output const& output) { jv = { + {JS(validated), output.validated}, {JS(metadata), output.metadata}, {JS(tx_json), output.tx}, {JS(ledger_index), output.ledgerIndex}, diff --git a/src/rpc/handlers/Tx.cpp b/src/rpc/handlers/Tx.cpp index 66f3e20e..4d660936 100644 --- a/src/rpc/handlers/Tx.cpp +++ b/src/rpc/handlers/Tx.cpp @@ -17,7 +17,6 @@ */ //============================================================================== -#include #include namespace RPC { @@ -84,17 +83,17 @@ tag_invoke(boost::json::value_from_tag, boost::json::value& jv, TxHandler::Outpu if (output.tx) { obj = *output.tx; - obj["meta"] = *output.meta; + obj[JS(meta)] = *output.meta; } else { - obj["meta"] = *output.metaStr; - obj["tx"] = *output.txStr; - obj["hash"] = output.hash; + obj[JS(meta)] = *output.metaStr; + obj[JS(tx)] = *output.txStr; + obj[JS(hash)] = output.hash; } - - obj["date"] = output.date; - obj["ledger_index"] = output.ledgerIndex; + obj[JS(validated)] = output.validated; + obj[JS(date)] = output.date; + obj[JS(ledger_index)] = output.ledgerIndex; jv = std::move(obj); } @@ -105,16 +104,16 @@ tag_invoke(boost::json::value_to_tag, boost::json::value const auto input = TxHandler::Input{}; auto const& jsonObject = jv.as_object(); - input.transaction = jv.at("transaction").as_string().c_str(); + input.transaction = jv.at(JS(transaction)).as_string().c_str(); - if (jsonObject.contains("binary")) - input.binary = jv.at("binary").as_bool(); + if (jsonObject.contains(JS(binary))) + input.binary = jv.at(JS(binary)).as_bool(); - if (jsonObject.contains("min_ledger")) - input.minLedger = jv.at("min_ledger").as_int64(); + if (jsonObject.contains(JS(min_ledger))) + input.minLedger = jv.at(JS(min_ledger)).as_int64(); - if (jsonObject.contains("max_ledger")) - input.maxLedger = jv.at("max_ledger").as_int64(); + if (jsonObject.contains(JS(max_ledger))) + input.maxLedger = jv.at(JS(max_ledger)).as_int64(); return input; } diff --git a/src/rpc/handlers/Tx.h b/src/rpc/handlers/Tx.h index 269c99c8..526fa176 100644 --- a/src/rpc/handlers/Tx.h +++ b/src/rpc/handlers/Tx.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -60,10 +61,10 @@ public: spec() const { static const RpcSpec rpcSpec = { - {"transaction", validation::Required{}, validation::Uint256HexStringValidator}, - {"binary", validation::Type{}}, - {"min_ledger", validation::Type{}}, - {"max_ledger", validation::Type{}}, + {JS(transaction), validation::Required{}, validation::Uint256HexStringValidator}, + {JS(binary), validation::Type{}}, + {JS(min_ledger), validation::Type{}}, + {JS(max_ledger), validation::Type{}}, }; return rpcSpec; diff --git a/unittests/rpc/handlers/AccountLinesTest.cpp b/unittests/rpc/handlers/AccountLinesTest.cpp index 51a70139..e023f446 100644 --- a/unittests/rpc/handlers/AccountLinesTest.cpp +++ b/unittests/rpc/handlers/AccountLinesTest.cpp @@ -429,6 +429,7 @@ TEST_F(RPCAccountLinesHandlerTest, DefaultParameterTest) ACCOUNT)); auto const correctOutput = R"({ + "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "ledger_hash": "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A652", "ledger_index": 30, "validated": true, @@ -624,6 +625,7 @@ TEST_F(RPCAccountLinesHandlerTest, EmptyChannel) TEST_F(RPCAccountLinesHandlerTest, OptionalResponseField) { constexpr static auto correctOutput = R"({ + "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "ledger_hash": "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A652", "ledger_index": 30, "validated": true, diff --git a/unittests/rpc/handlers/TransactionEntryTest.cpp b/unittests/rpc/handlers/TransactionEntryTest.cpp index b618c254..097a64f5 100644 --- a/unittests/rpc/handlers/TransactionEntryTest.cpp +++ b/unittests/rpc/handlers/TransactionEntryTest.cpp @@ -213,7 +213,8 @@ TEST_F(RPCTransactionEntryHandlerTest, NormalPath) "hash":"2E2FBAAFF767227FE4381C4BE9855986A6B9F96C62F6E443731AB36F7BBB8A08" }, "ledger_index":30, - "ledger_hash":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC322" + "ledger_hash":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC322", + "validated":true })"; auto const rawBackendPtr = static_cast(mockBackendPtr.get()); TransactionAndMetadata tx; diff --git a/unittests/rpc/handlers/TxTest.cpp b/unittests/rpc/handlers/TxTest.cpp index 06cb5477..b622324a 100644 --- a/unittests/rpc/handlers/TxTest.cpp +++ b/unittests/rpc/handlers/TxTest.cpp @@ -193,7 +193,8 @@ TEST_F(RPCTxTest, DefaultParameter) "TransactionResult":"tesSUCCESS" }, "date":123456, - "ledger_index":100 + "ledger_index":100, + "validated": true })"; auto const rawBackendPtr = static_cast(mockBackendPtr.get()); TransactionAndMetadata tx; @@ -225,7 +226,8 @@ TEST_F(RPCTxTest, ReturnBinary) "tx":"120007240000006464400000000000012C65D5071AFD498D00000158415500000000C1F76FF6ECB0BAC600000000D31252CF902EF8DD8451243869B38667CBD89DF368400000000000000273047465737481144B4E9C06F24296074F7BC48F92A97916C6DC5EA9", "hash":"05FB0EB4B899F056FA095537C5817163801F544BAFCEA39C995D76DB4D16F9DD", "date":123456, - "ledger_index":100 + "ledger_index":100, + "validated": true })"; auto const rawBackendPtr = static_cast(mockBackendPtr.get()); TransactionAndMetadata tx;