3#include <xrpl/core/JobQueue.h>
17 auto const alice =
Account(
"alice");
20 auto const aliceSequence = env.
seq(alice);
22 auto const tx1 = env.
jt(
noop(alice),
seq(aliceSequence));
27 BEAST_EXPECT(env.
seq(alice) == aliceSequence + 1);
30 BEAST_EXPECT(env.
seq(alice) == aliceSequence + 2);
35 auto const result = env.
rpc(
"tx",
to_string(tx1.stx->getTransactionID()));
36 BEAST_EXPECT(result[
"result"][
"meta"][
"TransactionResult"] ==
"tesSUCCESS");
39 auto const result = env.
rpc(
"tx",
to_string(tx2.stx->getTransactionID()));
40 BEAST_EXPECT(result[
"result"][
"meta"][
"TransactionResult"] ==
"tesSUCCESS");
52 cfg->FORCE_MULTI_THREAD =
false;
56 auto const alice =
Account(
"alice");
59 auto const aliceSequence = env.
seq(alice);
61 auto const tx1 = env.
jt(
noop(alice),
seq(aliceSequence));
65 BEAST_EXPECT(env.
seq(alice) == aliceSequence);
68 BEAST_EXPECT(env.
seq(alice) == aliceSequence + 2);
73 auto const result = env.
rpc(
"tx",
to_string(tx1.stx->getTransactionID()));
74 BEAST_EXPECT(result[
"result"][
"meta"][
"TransactionResult"] ==
"tesSUCCESS");
77 auto const result = env.
rpc(
"tx",
to_string(tx2.stx->getTransactionID()));
78 BEAST_EXPECT(result[
"result"][
"meta"][
"TransactionResult"] ==
"tesSUCCESS");
87 testcase(
"Incorrect order multiple intermediaries");
90 cfg->FORCE_MULTI_THREAD =
true;
94 auto const alice =
Account(
"alice");
97 auto const aliceSequence = env.
seq(alice);
100 for (
auto i = 0; i < 5; ++i)
105 for (
auto i = 1; i < 5; ++i)
108 BEAST_EXPECT(env.
seq(alice) == aliceSequence);
113 BEAST_EXPECT(env.
seq(alice) == aliceSequence + 5);
117 for (
auto i = 0; i < 5; ++i)
119 auto const result = env.
rpc(
"tx",
to_string(tx[i].stx->getTransactionID()));
120 BEAST_EXPECT(result[
"result"][
"meta"][
"TransactionResult"] ==
"tesSUCCESS");
133BEAST_DEFINE_TESTSUITE(Transaction_ordering, app,
xrpl);
testcase_t testcase
Memberspace for declaring test cases.
void rendezvous()
Block until no jobs running.
virtual JobQueue & getJobQueue()=0
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)
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
JTx jt(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
Json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
Set the expected result code for a JTx The test will fail if the code doesn't match.
T emplace_back(T... args)
XRP_t const XRP
Converts to XRP Issue or STAmount.
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string to_string(base_uint< Bits, Tag > const &a)
void testIncorrectOrderMultipleIntermediaries()
void testIncorrectOrder()
void run() override
Runs the suite.
Set the sequence number on a JTx.