Skip to content

Commit

Permalink
Add DeliverMax to transaction_entry tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Bronek committed Oct 9, 2023
1 parent d8cc240 commit 8a6fa0d
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/test/rpc/JSONRPC_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,7 @@ static constexpr TxnTestData txnTestArray[] = {
"Missing field 'tx_json.Destination'.",
"Missing field 'tx_json.Destination'."}}},

{"Missing 'Destination' in sign_for.",
{"Missing 'Destination' in sign_for, use DeliverMax",
__LINE__,
R"({
"command": "doesnt_matter",
Expand Down
123 changes: 110 additions & 13 deletions src/test/rpc/TransactionEntry_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
*/
//==============================================================================

#include <ripple/json/json_reader.h>
#include <ripple/json/json_value.h>
#include <ripple/protocol/jss.h>
#include <test/jtx.h>
#include <test/jtx/Env.h>
Expand Down Expand Up @@ -150,7 +152,7 @@ class TransactionEntry_test : public beast::unit_test::suite
auto check_tx = [this, &env](
int index,
std::string const txhash,
std::string const type = "") {
std::string const expected_json = "") {
// first request using ledger_index to lookup
Json::Value const resIndex{[&env, index, &txhash]() {
Json::Value params{Json::objectValue};
Expand All @@ -164,13 +166,32 @@ class TransactionEntry_test : public beast::unit_test::suite
return;

BEAST_EXPECT(resIndex[jss::tx_json][jss::hash] == txhash);
if (!type.empty())
if (!expected_json.empty())
{
BEAST_EXPECTS(
resIndex[jss::tx_json][jss::TransactionType] == type,
txhash + " is " +
resIndex[jss::tx_json][jss::TransactionType]
.asString());
Json::Value expected;
Json::Reader().parse(expected_json, expected);
if (RPC::contains_error(expected))
Throw<std::runtime_error>(
"Internal JSONRPC_test error. Bad test JSON.");

for (auto memberIt = expected.begin();
memberIt != expected.end();
memberIt++)
{
auto const name = memberIt.memberName();
BEAST_EXPECT(resIndex[jss::tx_json].isMember(name));
auto const received = resIndex[jss::tx_json][name];
std::ostringstream ssReceived;
ssReceived << received;
std::ostringstream ssExpected;
ssExpected << *memberIt;
BEAST_EXPECTS(
received == *memberIt,
txhash + " contains \n\"" + name + "\": " //
+ ssReceived.str() //
+ "but expected " //
+ ssExpected.str());
}
}

// second request using ledger_hash to lookup and verify
Expand Down Expand Up @@ -216,8 +237,30 @@ class TransactionEntry_test : public beast::unit_test::suite

// these are actually AccountSet txs because fund does two txs and
// env.tx only reports the last one
check_tx(env.closed()->seq(), fund_1_tx);
check_tx(env.closed()->seq(), fund_2_tx);
check_tx(env.closed()->seq(), fund_1_tx, R"(
{
"Account" : "r4nmQNH4Fhjfh6cHDbvVSsBv7KySbj4cBf",
"Fee" : "10",
"Sequence" : 3,
"SetFlag" : 8,
"SigningPubKey" : "0324CAAFA2212D2AEAB9D42D481535614AED486293E1FB1380FF070C3DD7FB4264",
"TransactionType" : "AccountSet",
"TxnSignature" : "3044022007B35E3B99460534FF6BC3A66FBBA03591C355CC38E38588968E87CCD01BE229022071A443026DE45041B55ABB1CC76812A87EA701E475BBB7E165513B4B242D3474",
"hash" : "F4E9DF90D829A9E8B423FF68C34413E240D8D8BB0EFD080DF08114ED398E2506"
}
)");
check_tx(env.closed()->seq(), fund_2_tx, R"(
{
"Account" : "rGpeQzUWFu4fMhJHZ1Via5aqFC3A5twZUD",
"Fee" : "10",
"Sequence" : 3,
"SetFlag" : 8,
"SigningPubKey" : "03CFF28E067A2CCE6CC5A598C0B845CBD3F30A7863BE9C0DD55F4960EFABCCF4D0",
"TransactionType" : "AccountSet",
"TxnSignature" : "3045022100C8857FC0759A2AC0D2F320684691A66EAD252EAED9EF88C79791BC58BFCC9D860220421722286487DD0ED6BBA626CE6FCBDD14289F7F4726870C3465A4054C2702D7",
"hash" : "6853CD8226A05068C951CB1F54889FF4E40C5B440DC1C5BA38F114C4E0B1E705"
}
)");

env.trust(A2["USD"](1000), A1);
// the trust tx is actually a payment since the trust method
Expand All @@ -231,16 +274,70 @@ class TransactionEntry_test : public beast::unit_test::suite
boost::lexical_cast<std::string>(env.tx()->getTransactionID());
env.close();

check_tx(env.closed()->seq(), trust_tx);
check_tx(env.closed()->seq(), pay_tx, jss::Payment.c_str());
check_tx(env.closed()->seq(), trust_tx, R"(
{
"Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"DeliverMax" : "10",
"Destination" : "r4nmQNH4Fhjfh6cHDbvVSsBv7KySbj4cBf",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 3,
"SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType" : "Payment",
"TxnSignature" : "3044022033D9EBF7F02950AF2F6B13C07AEE641C8FEBDD540A338FCB9027A965A4AED35B02206E4E227DCC226A3456C0FEF953449D21645A24EB63CA0BB7C5B62470147FD1D1",
"hash" : "C992D97D88FF444A1AB0C06B27557EC54B7F7DA28254778E60238BEA88E0C101"
}
)");

check_tx(
env.closed()->seq(),
pay_tx,
R"(
{
"Account" : "rGpeQzUWFu4fMhJHZ1Via5aqFC3A5twZUD",
"DeliverMax" :
{
"currency" : "USD",
"issuer" : "rGpeQzUWFu4fMhJHZ1Via5aqFC3A5twZUD",
"value" : "5"
},
"Destination" : "r4nmQNH4Fhjfh6cHDbvVSsBv7KySbj4cBf",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 4,
"SigningPubKey" : "03CFF28E067A2CCE6CC5A598C0B845CBD3F30A7863BE9C0DD55F4960EFABCCF4D0",
"TransactionType" : "Payment",
"TxnSignature" : "30450221008A722B7F16EDB2348886E88ED4EC682AE9973CC1EE0FF37C93BB2CEC821D3EDF022059E464472031BA5E0D88A93E944B6A8B8DB3E1D5E5D1399A805F615789DB0BED",
"hash" : "988046D484ACE9F5F6A8C792D89C6EA2DB307B5DDA9864AEBA88E6782ABD0865"
}
)");

env(offer(A2, XRP(100), A2["USD"](1)));
auto offer_tx =
boost::lexical_cast<std::string>(env.tx()->getTransactionID());

env.close();

check_tx(env.closed()->seq(), offer_tx, jss::OfferCreate.c_str());
check_tx(
env.closed()->seq(),
offer_tx,
R"(
{
"Account" : "rGpeQzUWFu4fMhJHZ1Via5aqFC3A5twZUD",
"Fee" : "10",
"Sequence" : 5,
"SigningPubKey" : "03CFF28E067A2CCE6CC5A598C0B845CBD3F30A7863BE9C0DD55F4960EFABCCF4D0",
"TakerGets" :
{
"currency" : "USD",
"issuer" : "rGpeQzUWFu4fMhJHZ1Via5aqFC3A5twZUD",
"value" : "1"
},
"TakerPays" : "100000000",
"TransactionType" : "OfferCreate",
"TxnSignature" : "304502210093FC93ACB77B4E3DE3315441BD010096734859080C1797AB735EB47EBD541BD102205020BB1A7C3B4141279EE4C287C13671E2450EA78914EFD0C6DB2A18344CD4F2",
"hash" : "5FCC1A27A7664F82A0CC4BE5766FBBB7C560D52B93AA7B550CD33B27AEC7EFFB"
}
)");
}

public:
Expand Down

0 comments on commit 8a6fa0d

Please sign in to comment.