1#include <test/jtx/Account.h>
2#include <test/jtx/Env.h>
3#include <test/jtx/JTx.h>
4#include <test/jtx/amount.h>
5#include <test/jtx/pay.h>
7#include <xrpl/basics/strHex.h>
8#include <xrpl/beast/unit_test/suite.h>
9#include <xrpl/json/json_value.h>
10#include <xrpl/json/to_string.h>
11#include <xrpl/protocol/Seed.h>
12#include <xrpl/protocol/jss.h>
22 testcase(
"fail_hard parameter validation");
27 env.
fund(
XRP(10000), alice, bob);
31 auto testInvalidFailHard = [&](
auto const& param) {
35 auto const txBlob =
strHex(jt.
stx->getSerializer().slice());
38 params[jss::tx_blob] = txBlob;
39 params[jss::fail_hard] = param;
40 auto const jrr = env.
rpc(
"json",
"submit",
to_string(params))[jss::result];
41 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
42 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'fail_hard', not boolean.");
49 params[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
50 params[jss::fail_hard] = param;
51 auto const jrr = env.
rpc(
"json",
"submit",
to_string(params))[jss::result];
52 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
53 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'fail_hard', not boolean.");
58 testInvalidFailHard(
"true");
59 testInvalidFailHard(
"yes");
60 testInvalidFailHard(1);
61 testInvalidFailHard(0);
62 testInvalidFailHard(1.5);
69 auto const txBlob =
strHex(jt.
stx->getSerializer().slice());
72 params[jss::tx_blob] = txBlob;
73 params[jss::fail_hard] =
true;
74 auto const jrr = env.
rpc(
"json",
"submit",
to_string(params))[jss::result];
75 BEAST_EXPECT(!jrr.isMember(jss::error) || jrr[jss::error] !=
"invalidParams");
79 auto const txBlob =
strHex(jt.
stx->getSerializer().slice());
82 params[jss::tx_blob] = txBlob;
83 params[jss::fail_hard] =
false;
84 auto const jrr = env.
rpc(
"json",
"submit",
to_string(params))[jss::result];
85 BEAST_EXPECT(!jrr.isMember(jss::error) || jrr[jss::error] !=
"invalidParams");
TestcaseT testcase
Memberspace for declaring test cases.
void testFailHardValidation()
void run() override
Runs the suite.
Immutable cryptographic account descriptor.
A transaction testing environment.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
JTx jt(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
@ Array
array value (ordered list)
@ Object
object value (collection of name/value pairs).
json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
XrpT const XRP
Converts to XRP Issue or STAmount.
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string strHex(FwdIt begin, FwdIt end)
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
Seed generateSeed(std::string const &passPhrase)
Generate a seed deterministically.
std::string to_string(BaseUInt< Bits, Tag > const &a)
Execution context for applying a JSON transaction.
std::shared_ptr< STTx const > stx