46 Env env{*
this, asAdmin ? envconfig() : envconfig(noAdmin)};
48 auto const usd = gw[
"USD"];
49 env.fund(XRP(100000), gw);
51 int const maxLimit = 256;
54 for (
auto i = 0; i < maxLimit + 10; i++)
57 env.fund(XRP(1000), bob);
66 jvParams[jss::ledger_index] =
"current";
67 jvParams[jss::binary] =
false;
69 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
71 jrr[jss::ledger_current_index].isIntegral() &&
72 jrr[jss::ledger_current_index].asInt() > 0);
74 BEAST_EXPECT(checkArraySize(jrr[jss::state], maxLimit));
78 for (
auto delta = -1; delta <= 1; delta++)
80 jvParams[jss::limit] = maxLimit + delta;
81 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
82 BEAST_EXPECT(checkArraySize(
83 jrr[jss::state], (delta > 0 && !asAdmin) ? maxLimit : maxLimit + delta));
91 Env env{*
this, envconfig(noAdmin)};
93 auto const usd = gw[
"USD"];
94 env.fund(XRP(100000), gw);
96 int const numAccounts = 10;
98 for (
auto i = 0; i < numAccounts; i++)
101 env.fund(XRP(1000), bob);
107 jvParams[jss::ledger_index] =
"current";
108 jvParams[jss::binary] =
true;
109 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
111 jrr[jss::ledger_current_index].isIntegral() &&
112 jrr[jss::ledger_current_index].asInt() > 0);
113 BEAST_EXPECT(!jrr.isMember(jss::marker));
114 BEAST_EXPECT(checkArraySize(jrr[jss::state], numAccounts + 4));
123 auto const usd = gw[
"USD"];
126 env.fund(XRP(10000), gw, bob);
127 env.trust(usd(1000), bob);
132 jvParams[jss::limit] =
"0";
133 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
134 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
135 BEAST_EXPECT(jrr[jss::status] ==
"error");
136 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'limit', not integer.");
142 jvParams[jss::marker] =
"NOT_A_MARKER";
143 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
144 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
145 BEAST_EXPECT(jrr[jss::status] ==
"error");
146 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
152 jvParams[jss::marker] = 1;
153 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
154 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
155 BEAST_EXPECT(jrr[jss::status] ==
"error");
156 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
162 jvParams[jss::ledger_index] = 10u;
163 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
164 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
165 BEAST_EXPECT(jrr[jss::status] ==
"error");
166 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
172 jvParams[jss::binary] =
"true";
173 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
174 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
175 BEAST_EXPECT(jrr[jss::status] ==
"error");
176 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'binary', not boolean.");
184 Env env{*
this, envconfig(noAdmin)};
186 auto const usd = gw[
"USD"];
187 env.fund(XRP(100000), gw);
189 int const numAccounts = 20;
191 for (
auto i = 0; i < numAccounts; i++)
194 env.fund(XRP(1000), bob);
200 jvParams[jss::ledger_index] =
"current";
201 jvParams[jss::binary] =
false;
202 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
203 auto const totalCount = jrr[jss::state].
size();
206 jvParams[jss::limit] = 5;
207 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
209 auto runningTotal = jrr[jss::state].size();
210 while (jrr.isMember(jss::marker))
212 jvParams[jss::marker] = jrr[jss::marker];
213 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
214 runningTotal += jrr[jss::state].
size();
216 BEAST_EXPECT(runningTotal == totalCount);
224 env.fund(XRP(100000),
"alice");
231 jvParams[jss::ledger_index] =
"closed";
232 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
233 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
236 jrr[jss::ledger][jss::ledger_hash] ==
to_string(env.closed()->header().hash));
242 jvParams[jss::ledger_index] =
"closed";
243 jvParams[jss::binary] =
true;
244 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
245 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
247 auto data =
strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
248 if (BEAST_EXPECT(data); data.has_value())
253 BEAST_EXPECT(seq == 3);
260 jvParams[jss::binary] =
true;
261 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
262 BEAST_EXPECT(jrr.isMember(jss::ledger));
263 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
275 {testableAmendments() - fixInnerObjTemplate2,
276 testableAmendments() | fixInnerObjTemplate2})
279 Env env{*
this, envconfig(validator,
""), features};
282 auto const usd = gw[
"USD"];
283 env.fund(XRP(100000), gw);
287 jvParams[jss::ledger_index] =
"current";
288 jvParams[jss::type] = type;
289 return env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
293 for (
auto const& type :
302 jss::payment_channel,
303 jss::deposit_preauth})
306 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
309 int const numAccounts = 10;
311 for (
auto i = 0; i < numAccounts; i++)
314 env.fund(XRP(1000), bob);
316 env(offer(
Account{
"bob0"}, usd(100), XRP(100)));
320 for (
int i = 0; i <= 256; ++i)
324 if (!majorities.empty())
329 env(ticket::create(env.master, 1));
333 jv[jss::TransactionType] = jss::EscrowCreate;
334 jv[jss::Account] =
Account{
"bob5"}.human();
335 jv[jss::Destination] =
Account{
"bob6"}.human();
337 jv[sfFinishAfter.fieldName] =
344 jv[jss::TransactionType] = jss::PaymentChannelCreate;
345 jv[jss::Account] =
Account{
"bob6"}.human();
346 jv[jss::Destination] =
Account{
"bob7"}.human();
350 jv[sfCancelAfter.fieldName] =
355 env(check::create(
"bob6",
"bob7", XRP(100)));
366 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
367 for (
auto const& j : jrr[jss::state])
368 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
373 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
374 for (
auto const& j : jrr[jss::state])
375 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
380 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
381 for (
auto const& j : jrr[jss::state])
382 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
387 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
388 for (
auto const& j : jrr[jss::state])
389 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
394 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
395 for (
auto const& j : jrr[jss::state])
396 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
401 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
402 for (
auto const& j : jrr[jss::state])
403 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
408 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
409 for (
auto const& j : jrr[jss::state])
410 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
415 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
416 for (
auto const& j : jrr[jss::state])
417 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
422 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
423 for (
auto const& j : jrr[jss::state])
424 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
429 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
430 for (
auto const& j : jrr[jss::state])
431 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
436 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
437 for (
auto const& j : jrr[jss::state])
438 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
442 auto const jrr =
makeRequest(jss::payment_channel);
443 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
444 for (
auto const& j : jrr[jss::state])
445 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
449 auto const jrr =
makeRequest(jss::deposit_preauth);
450 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
451 for (
auto const& j : jrr[jss::state])
452 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
457 jvParams[jss::ledger_index] =
"current";
458 jvParams[jss::type] =
"misspelling";
459 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
460 BEAST_EXPECT(jrr.isMember(
"error"));
461 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
462 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");