22 using namespace test::jtx;
23 Env env{*
this, asAdmin ? envconfig() : envconfig(no_admin)};
24 Account
const gw{
"gateway"};
25 auto const USD = gw[
"USD"];
26 env.fund(XRP(100000), gw);
28 int const max_limit = 256;
31 for (
auto i = 0; i < max_limit + 10; i++)
34 env.fund(XRP(1000), bob);
43 jvParams[jss::ledger_index] =
"current";
44 jvParams[jss::binary] =
false;
46 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
48 jrr[jss::ledger_current_index].isIntegral() &&
49 jrr[jss::ledger_current_index].asInt() > 0);
51 BEAST_EXPECT(checkArraySize(jrr[jss::state], max_limit));
55 for (
auto delta = -1; delta <= 1; delta++)
57 jvParams[jss::limit] = max_limit + delta;
58 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
59 BEAST_EXPECT(checkArraySize(
60 jrr[jss::state], (delta > 0 && !asAdmin) ? max_limit : max_limit + delta));
67 using namespace test::jtx;
68 Env env{*
this, envconfig(no_admin)};
69 Account
const gw{
"gateway"};
70 auto const USD = gw[
"USD"];
71 env.fund(XRP(100000), gw);
73 int const num_accounts = 10;
75 for (
auto i = 0; i < num_accounts; i++)
78 env.fund(XRP(1000), bob);
84 jvParams[jss::ledger_index] =
"current";
85 jvParams[jss::binary] =
true;
86 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
88 jrr[jss::ledger_current_index].isIntegral() &&
89 jrr[jss::ledger_current_index].asInt() > 0);
90 BEAST_EXPECT(!jrr.isMember(jss::marker));
91 BEAST_EXPECT(checkArraySize(jrr[jss::state], num_accounts + 4));
97 using namespace test::jtx;
99 Account
const gw{
"gateway"};
100 auto const USD = gw[
"USD"];
101 Account
const bob{
"bob"};
103 env.fund(XRP(10000), gw, bob);
104 env.trust(USD(1000), bob);
109 jvParams[jss::limit] =
"0";
110 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
111 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
112 BEAST_EXPECT(jrr[jss::status] ==
"error");
113 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'limit', not integer.");
119 jvParams[jss::marker] =
"NOT_A_MARKER";
120 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
121 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
122 BEAST_EXPECT(jrr[jss::status] ==
"error");
123 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
129 jvParams[jss::marker] = 1;
130 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
131 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
132 BEAST_EXPECT(jrr[jss::status] ==
"error");
133 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
139 jvParams[jss::ledger_index] = 10u;
140 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
141 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
142 BEAST_EXPECT(jrr[jss::status] ==
"error");
143 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
150 using namespace test::jtx;
151 Env env{*
this, envconfig(no_admin)};
152 Account
const gw{
"gateway"};
153 auto const USD = gw[
"USD"];
154 env.fund(XRP(100000), gw);
156 int const num_accounts = 20;
158 for (
auto i = 0; i < num_accounts; i++)
161 env.fund(XRP(1000), bob);
167 jvParams[jss::ledger_index] =
"current";
168 jvParams[jss::binary] =
false;
169 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
170 auto const total_count = jrr[jss::state].
size();
173 jvParams[jss::limit] = 5;
174 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
176 auto running_total = jrr[jss::state].size();
177 while (jrr.isMember(jss::marker))
179 jvParams[jss::marker] = jrr[jss::marker];
180 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
181 running_total += jrr[jss::state].
size();
183 BEAST_EXPECT(running_total == total_count);
189 using namespace test::jtx;
191 env.fund(XRP(100000),
"alice");
198 jvParams[jss::ledger_index] =
"closed";
199 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
200 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
203 jrr[jss::ledger][jss::ledger_hash] ==
to_string(env.closed()->header().hash));
209 jvParams[jss::ledger_index] =
"closed";
210 jvParams[jss::binary] =
true;
211 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
212 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
214 auto data =
strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
215 if (BEAST_EXPECT(data); data.has_value())
220 BEAST_EXPECT(seq == 3);
227 jvParams[jss::binary] =
true;
228 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
229 BEAST_EXPECT(jrr.isMember(jss::ledger));
230 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
238 using namespace test::jtx;
242 {testable_amendments() - fixInnerObjTemplate2,
243 testable_amendments() | fixInnerObjTemplate2})
246 Env env{*
this, envconfig(validator,
""), features};
248 Account
const gw{
"gateway"};
249 auto const USD = gw[
"USD"];
250 env.fund(XRP(100000), gw);
254 jvParams[jss::ledger_index] =
"current";
255 jvParams[jss::type] = type;
256 return env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
260 for (
auto const& type :
269 jss::payment_channel,
270 jss::deposit_preauth})
273 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
276 int const num_accounts = 10;
278 for (
auto i = 0; i < num_accounts; i++)
281 env.fund(XRP(1000), bob);
283 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
284 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
287 for (
int i = 0; i <= 256; ++i)
291 if (!majorities.empty())
295 env(signers(Account{
"bob0"}, 1, {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
296 env(ticket::create(env.master, 1));
300 jv[jss::TransactionType] = jss::EscrowCreate;
301 jv[jss::Account] = Account{
"bob5"}.human();
302 jv[jss::Destination] = Account{
"bob6"}.human();
304 jv[sfFinishAfter.fieldName] =
311 jv[jss::TransactionType] = jss::PaymentChannelCreate;
312 jv[jss::Account] = Account{
"bob6"}.human();
313 jv[jss::Destination] = Account{
"bob7"}.human();
316 jv[sfPublicKey.fieldName] =
strHex(Account{
"bob6"}.pk().
slice());
317 jv[sfCancelAfter.fieldName] =
322 env(check::create(
"bob6",
"bob7", XRP(100)));
325 env(deposit::auth(Account{
"bob9"}, Account{
"bob4"}));
326 env(deposit::auth(Account{
"bob9"}, Account{
"bob8"}));
333 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
334 for (
auto const& j : jrr[jss::state])
335 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
340 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
341 for (
auto const& j : jrr[jss::state])
342 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
347 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
348 for (
auto const& j : jrr[jss::state])
349 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
354 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
355 for (
auto const& j : jrr[jss::state])
356 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
361 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
362 for (
auto const& j : jrr[jss::state])
363 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
368 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
369 for (
auto const& j : jrr[jss::state])
370 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
375 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
376 for (
auto const& j : jrr[jss::state])
377 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
382 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
383 for (
auto const& j : jrr[jss::state])
384 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
389 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
390 for (
auto const& j : jrr[jss::state])
391 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
396 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
397 for (
auto const& j : jrr[jss::state])
398 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
403 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
404 for (
auto const& j : jrr[jss::state])
405 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
409 auto const jrr =
makeRequest(jss::payment_channel);
410 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
411 for (
auto const& j : jrr[jss::state])
412 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
416 auto const jrr =
makeRequest(jss::deposit_preauth);
417 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
418 for (
auto const& j : jrr[jss::state])
419 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
424 jvParams[jss::ledger_index] =
"current";
425 jvParams[jss::type] =
"misspelling";
426 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
427 BEAST_EXPECT(jrr.isMember(
"error"));
428 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
429 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");