41 using namespace test::jtx;
42 Env env{*
this, asAdmin ? envconfig() : envconfig(no_admin)};
43 Account
const gw{
"gateway"};
44 auto const USD = gw[
"USD"];
45 env.fund(XRP(100000), gw);
47 int const max_limit = 256;
50 for (
auto i = 0; i < max_limit + 10; i++)
53 env.fund(XRP(1000), bob);
62 jvParams[jss::ledger_index] =
"current";
63 jvParams[jss::binary] =
false;
65 auto const jrr = env.rpc(
66 "json",
"ledger_data",
to_string(jvParams))[jss::result];
68 jrr[jss::ledger_current_index].isIntegral() &&
69 jrr[jss::ledger_current_index].asInt() > 0);
71 BEAST_EXPECT(checkArraySize(jrr[jss::state], max_limit));
75 for (
auto delta = -1; delta <= 1; delta++)
77 jvParams[jss::limit] = max_limit + delta;
78 auto const jrr = env.rpc(
79 "json",
"ledger_data",
to_string(jvParams))[jss::result];
80 BEAST_EXPECT(checkArraySize(
82 (delta > 0 && !asAdmin) ? max_limit : max_limit + delta));
89 using namespace test::jtx;
90 Env env{*
this, envconfig(no_admin)};
91 Account
const gw{
"gateway"};
92 auto const USD = gw[
"USD"];
93 env.fund(XRP(100000), gw);
95 int const num_accounts = 10;
97 for (
auto i = 0; i < num_accounts; i++)
100 env.fund(XRP(1000), bob);
106 jvParams[jss::ledger_index] =
"current";
107 jvParams[jss::binary] =
true;
109 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], num_accounts + 4));
120 using namespace test::jtx;
122 Account
const gw{
"gateway"};
123 auto const USD = gw[
"USD"];
124 Account
const bob{
"bob"};
126 env.fund(XRP(10000), gw, bob);
127 env.trust(USD(1000), bob);
132 jvParams[jss::limit] =
"0";
133 auto const jrr = env.rpc(
134 "json",
"ledger_data",
to_string(jvParams))[jss::result];
135 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
136 BEAST_EXPECT(jrr[jss::status] ==
"error");
138 jrr[jss::error_message] ==
139 "Invalid field 'limit', not integer.");
145 jvParams[jss::marker] =
"NOT_A_MARKER";
146 auto const jrr = env.rpc(
147 "json",
"ledger_data",
to_string(jvParams))[jss::result];
148 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
149 BEAST_EXPECT(jrr[jss::status] ==
"error");
151 jrr[jss::error_message] ==
152 "Invalid field 'marker', not valid.");
158 jvParams[jss::marker] = 1;
159 auto const jrr = env.rpc(
160 "json",
"ledger_data",
to_string(jvParams))[jss::result];
161 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
162 BEAST_EXPECT(jrr[jss::status] ==
"error");
164 jrr[jss::error_message] ==
165 "Invalid field 'marker', not valid.");
171 jvParams[jss::ledger_index] = 10u;
172 auto const jrr = env.rpc(
173 "json",
"ledger_data",
to_string(jvParams))[jss::result];
174 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
175 BEAST_EXPECT(jrr[jss::status] ==
"error");
176 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
183 using namespace test::jtx;
184 Env env{*
this, envconfig(no_admin)};
185 Account
const gw{
"gateway"};
186 auto const USD = gw[
"USD"];
187 env.fund(XRP(100000), gw);
189 int const num_accounts = 20;
191 for (
auto i = 0; i < num_accounts; i++)
194 env.fund(XRP(1000), bob);
200 jvParams[jss::ledger_index] =
"current";
201 jvParams[jss::binary] =
false;
203 env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
204 auto const total_count = jrr[jss::state].
size();
207 jvParams[jss::limit] = 5;
208 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
210 auto running_total = jrr[jss::state].size();
211 while (jrr.isMember(jss::marker))
213 jvParams[jss::marker] = jrr[jss::marker];
215 "json",
"ledger_data",
to_string(jvParams))[jss::result];
216 running_total += jrr[jss::state].
size();
218 BEAST_EXPECT(running_total == total_count);
224 using namespace test::jtx;
226 env.fund(XRP(100000),
"alice");
233 jvParams[jss::ledger_index] =
"closed";
235 "json",
"ledger_data",
to_string(jvParams))[jss::result];
236 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
238 jrr[jss::ledger][jss::ledger_hash] ==
244 jvParams[jss::ledger_index] =
"closed";
245 jvParams[jss::binary] =
true;
247 "json",
"ledger_data",
to_string(jvParams))[jss::result];
248 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
251 strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
252 if (BEAST_EXPECT(data))
257 BEAST_EXPECT(seq == 3);
264 jvParams[jss::binary] =
true;
266 "json",
"ledger_data",
to_string(jvParams))[jss::result];
267 BEAST_EXPECT(jrr.isMember(jss::ledger));
268 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
276 using namespace test::jtx;
280 {testable_amendments() - fixInnerObjTemplate2,
281 testable_amendments() | fixInnerObjTemplate2})
284 Env env{*
this, envconfig(validator,
""), features};
286 Account
const gw{
"gateway"};
287 auto const USD = gw[
"USD"];
288 env.fund(XRP(100000), gw);
292 jvParams[jss::ledger_index] =
"current";
293 jvParams[jss::type] = type;
295 "json",
"ledger_data",
to_string(jvParams))[jss::result];
299 for (
auto const& type :
308 jss::payment_channel,
309 jss::deposit_preauth})
312 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
315 int const num_accounts = 10;
317 for (
auto i = 0; i < num_accounts; i++)
320 env.fund(XRP(1000), bob);
322 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
323 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
326 for (
int i = 0; i <= 256; ++i)
330 if (!majorities.empty())
337 {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
338 env(ticket::create(env.master, 1));
342 jv[jss::TransactionType] = jss::EscrowCreate;
343 jv[jss::Account] = Account{
"bob5"}.human();
344 jv[jss::Destination] = Account{
"bob6"}.human();
346 jv[sfFinishAfter.fieldName] =
355 jv[jss::TransactionType] = jss::PaymentChannelCreate;
356 jv[jss::Account] = Account{
"bob6"}.human();
357 jv[jss::Destination] = Account{
"bob7"}.human();
360 jv[sfPublicKey.fieldName] =
362 jv[sfCancelAfter.fieldName] =
369 env(check::create(
"bob6",
"bob7", XRP(100)));
372 env(deposit::auth(Account{
"bob9"}, Account{
"bob4"}));
373 env(deposit::auth(Account{
"bob9"}, Account{
"bob8"}));
380 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
381 for (
auto const& j : jrr[jss::state])
382 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
387 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
388 for (
auto const& j : jrr[jss::state])
389 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
394 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
395 for (
auto const& j : jrr[jss::state])
396 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
401 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
402 for (
auto const& j : jrr[jss::state])
403 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
408 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
409 for (
auto const& j : jrr[jss::state])
410 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
415 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
416 for (
auto const& j : jrr[jss::state])
417 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
422 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
423 for (
auto const& j : jrr[jss::state])
424 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
429 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
430 for (
auto const& j : jrr[jss::state])
431 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
436 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
437 for (
auto const& j : jrr[jss::state])
438 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
443 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
444 for (
auto const& j : jrr[jss::state])
445 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
450 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
451 for (
auto const& j : jrr[jss::state])
452 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
456 auto const jrr =
makeRequest(jss::payment_channel);
457 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
458 for (
auto const& j : jrr[jss::state])
459 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
463 auto const jrr =
makeRequest(jss::deposit_preauth);
464 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
465 for (
auto const& j : jrr[jss::state])
466 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
471 jvParams[jss::ledger_index] =
"current";
472 jvParams[jss::type] =
"misspelling";
473 auto const jrr = env.rpc(
474 "json",
"ledger_data",
to_string(jvParams))[jss::result];
475 BEAST_EXPECT(jrr.isMember(
"error"));
476 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
477 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");