21#include <test/rpc/GRPCTestClientBase.h>
23#include <xrpl/beast/unit_test.h>
24#include <xrpl/protocol/jss.h>
36 tx[jss::tx][jss::Sequence].asInt() == sequence &&
37 tx[jss::tx][jss::ledger_index].asInt() == ledger);
51 jvc[jss::account] = account.human();
52 jvc[jss::ledger_index_min] = ledger_min;
53 jvc[jss::ledger_index_max] = ledger_max;
55 jvc[jss::limit] = limit;
57 jvc[jss::marker] = marker;
59 return env.
rpc(
"json",
"account_tx",
to_string(jvc))[jss::result];
65 testcase(
"Paging for Single Account");
66 using namespace test::jtx;
73 env.fund(XRP(10000), A1, A2, A3);
76 env.trust(A3[
"USD"](1000), A1);
77 env.trust(A2[
"USD"](1000), A1);
78 env.trust(A3[
"USD"](1000), A2);
81 for (
auto i = 0; i < 5; ++i)
83 env(pay(A2, A1, A2[
"USD"](2)));
84 env(pay(A3, A1, A3[
"USD"](2)));
85 env(offer(A1, XRP(11), A1[
"USD"](1)));
86 env(offer(A2, XRP(10), A2[
"USD"](1)));
87 env(offer(A3, XRP(9), A3[
"USD"](1)));
112 auto jrr =
next(env, A3, 2, 5, 2,
true);
113 auto txs = jrr[jss::transactions];
114 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
118 if (!BEAST_EXPECT(jrr[jss::marker]))
121 jrr =
next(env, A3, 2, 5, 2,
true, jrr[jss::marker]);
122 txs = jrr[jss::transactions];
123 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
127 if (!BEAST_EXPECT(jrr[jss::marker]))
130 jrr =
next(env, A3, 2, 5, 2,
true, jrr[jss::marker]);
131 txs = jrr[jss::transactions];
132 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
136 BEAST_EXPECT(!jrr[jss::marker]);
141 auto jrr =
next(env, A3, 3, 9, 1,
true);
142 auto txs = jrr[jss::transactions];
143 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 1))
146 if (!BEAST_EXPECT(jrr[jss::marker]))
149 jrr =
next(env, A3, 3, 9, 1,
true, jrr[jss::marker]);
150 txs = jrr[jss::transactions];
151 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 1))
154 if (!BEAST_EXPECT(jrr[jss::marker]))
157 jrr =
next(env, A3, 3, 9, 1,
true, jrr[jss::marker]);
158 txs = jrr[jss::transactions];
159 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 1))
162 if (!BEAST_EXPECT(jrr[jss::marker]))
166 jrr =
next(env, A3, 3, 9, 3,
true, jrr[jss::marker]);
167 txs = jrr[jss::transactions];
168 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
173 if (!BEAST_EXPECT(jrr[jss::marker]))
176 jrr =
next(env, A3, 3, 9, 3,
true, jrr[jss::marker]);
177 txs = jrr[jss::transactions];
178 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
183 if (!BEAST_EXPECT(jrr[jss::marker]))
186 jrr =
next(env, A3, 3, 9, 3,
true, jrr[jss::marker]);
187 txs = jrr[jss::transactions];
188 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
193 if (!BEAST_EXPECT(jrr[jss::marker]))
196 jrr =
next(env, A3, 3, 9, 3,
true, jrr[jss::marker]);
197 txs = jrr[jss::transactions];
198 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
202 BEAST_EXPECT(!jrr[jss::marker]);
207 auto jrr =
next(env, A3, 3, 9, 2,
false);
208 auto txs = jrr[jss::transactions];
209 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
213 if (!BEAST_EXPECT(jrr[jss::marker]))
216 jrr =
next(env, A3, 3, 9, 2,
false, jrr[jss::marker]);
217 txs = jrr[jss::transactions];
218 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 2))
222 if (!BEAST_EXPECT(jrr[jss::marker]))
226 jrr =
next(env, A3, 3, 9, 3,
false, jrr[jss::marker]);
227 txs = jrr[jss::transactions];
228 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
233 if (!BEAST_EXPECT(jrr[jss::marker]))
236 jrr =
next(env, A3, 3, 9, 3,
false, jrr[jss::marker]);
237 txs = jrr[jss::transactions];
238 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
243 if (!BEAST_EXPECT(jrr[jss::marker]))
246 jrr =
next(env, A3, 3, 9, 3,
false, jrr[jss::marker]);
247 txs = jrr[jss::transactions];
248 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 3))
253 if (!BEAST_EXPECT(jrr[jss::marker]))
256 jrr =
next(env, A3, 3, 9, 3,
false, jrr[jss::marker]);
257 txs = jrr[jss::transactions];
258 if (!BEAST_EXPECT(txs.isArray() && txs.size() == 1))
261 BEAST_EXPECT(!jrr[jss::marker]);
273BEAST_DEFINE_TESTSUITE(AccountTxPaging, app,
ripple);
testcase_t testcase
Memberspace for declaring test cases.
bool checkTransaction(Json::Value const &tx, int sequence, int ledger)
auto next(test::jtx::Env &env, test::jtx::Account const &account, int ledger_min, int ledger_max, int limit, bool forward, Json::Value const &marker=Json::nullValue)
void run() override
Runs the suite.
void testAccountTxPaging()
Immutable cryptographic account descriptor.
A transaction testing environment.
Json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string to_string(base_uint< Bits, Tag > const &a)