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(
47 "json",
"ledger_data",
to_string(jvParams))[jss::result];
49 jrr[jss::ledger_current_index].isIntegral() &&
50 jrr[jss::ledger_current_index].asInt() > 0);
52 BEAST_EXPECT(checkArraySize(jrr[jss::state], max_limit));
56 for (
auto delta = -1; delta <= 1; delta++)
58 jvParams[jss::limit] = max_limit + delta;
59 auto const jrr = env.rpc(
60 "json",
"ledger_data",
to_string(jvParams))[jss::result];
61 BEAST_EXPECT(checkArraySize(
63 (delta > 0 && !asAdmin) ? max_limit : max_limit + delta));
70 using namespace test::jtx;
71 Env env{*
this, envconfig(no_admin)};
72 Account
const gw{
"gateway"};
73 auto const USD = gw[
"USD"];
74 env.fund(XRP(100000), gw);
76 int const num_accounts = 10;
78 for (
auto i = 0; i < num_accounts; i++)
81 env.fund(XRP(1000), bob);
87 jvParams[jss::ledger_index] =
"current";
88 jvParams[jss::binary] =
true;
90 env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
92 jrr[jss::ledger_current_index].isIntegral() &&
93 jrr[jss::ledger_current_index].asInt() > 0);
94 BEAST_EXPECT(!jrr.isMember(jss::marker));
95 BEAST_EXPECT(checkArraySize(jrr[jss::state], num_accounts + 4));
101 using namespace test::jtx;
103 Account
const gw{
"gateway"};
104 auto const USD = gw[
"USD"];
105 Account
const bob{
"bob"};
107 env.fund(XRP(10000), gw, bob);
108 env.trust(USD(1000), bob);
113 jvParams[jss::limit] =
"0";
114 auto const jrr = env.rpc(
115 "json",
"ledger_data",
to_string(jvParams))[jss::result];
116 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
117 BEAST_EXPECT(jrr[jss::status] ==
"error");
119 jrr[jss::error_message] ==
120 "Invalid field 'limit', not integer.");
126 jvParams[jss::marker] =
"NOT_A_MARKER";
127 auto const jrr = env.rpc(
128 "json",
"ledger_data",
to_string(jvParams))[jss::result];
129 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
130 BEAST_EXPECT(jrr[jss::status] ==
"error");
132 jrr[jss::error_message] ==
133 "Invalid field 'marker', not valid.");
139 jvParams[jss::marker] = 1;
140 auto const jrr = env.rpc(
141 "json",
"ledger_data",
to_string(jvParams))[jss::result];
142 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
143 BEAST_EXPECT(jrr[jss::status] ==
"error");
145 jrr[jss::error_message] ==
146 "Invalid field 'marker', not valid.");
152 jvParams[jss::ledger_index] = 10u;
153 auto const jrr = env.rpc(
154 "json",
"ledger_data",
to_string(jvParams))[jss::result];
155 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
156 BEAST_EXPECT(jrr[jss::status] ==
"error");
157 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
164 using namespace test::jtx;
165 Env env{*
this, envconfig(no_admin)};
166 Account
const gw{
"gateway"};
167 auto const USD = gw[
"USD"];
168 env.fund(XRP(100000), gw);
170 int const num_accounts = 20;
172 for (
auto i = 0; i < num_accounts; i++)
175 env.fund(XRP(1000), bob);
181 jvParams[jss::ledger_index] =
"current";
182 jvParams[jss::binary] =
false;
184 env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
185 auto const total_count = jrr[jss::state].
size();
188 jvParams[jss::limit] = 5;
189 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
191 auto running_total = jrr[jss::state].size();
192 while (jrr.isMember(jss::marker))
194 jvParams[jss::marker] = jrr[jss::marker];
196 "json",
"ledger_data",
to_string(jvParams))[jss::result];
197 running_total += jrr[jss::state].
size();
199 BEAST_EXPECT(running_total == total_count);
205 using namespace test::jtx;
207 env.fund(XRP(100000),
"alice");
214 jvParams[jss::ledger_index] =
"closed";
216 "json",
"ledger_data",
to_string(jvParams))[jss::result];
217 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
219 jrr[jss::ledger][jss::ledger_hash] ==
225 jvParams[jss::ledger_index] =
"closed";
226 jvParams[jss::binary] =
true;
228 "json",
"ledger_data",
to_string(jvParams))[jss::result];
229 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
232 strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
233 if (BEAST_EXPECT(data))
238 BEAST_EXPECT(seq == 3);
245 jvParams[jss::binary] =
true;
247 "json",
"ledger_data",
to_string(jvParams))[jss::result];
248 BEAST_EXPECT(jrr.isMember(jss::ledger));
249 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
257 using namespace test::jtx;
261 {testable_amendments() - fixInnerObjTemplate2,
262 testable_amendments() | fixInnerObjTemplate2})
265 Env env{*
this, envconfig(validator,
""), features};
267 Account
const gw{
"gateway"};
268 auto const USD = gw[
"USD"];
269 env.fund(XRP(100000), gw);
273 jvParams[jss::ledger_index] =
"current";
274 jvParams[jss::type] = type;
276 "json",
"ledger_data",
to_string(jvParams))[jss::result];
280 for (
auto const& type :
289 jss::payment_channel,
290 jss::deposit_preauth})
293 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
296 int const num_accounts = 10;
298 for (
auto i = 0; i < num_accounts; i++)
301 env.fund(XRP(1000), bob);
303 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
304 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
307 for (
int i = 0; i <= 256; ++i)
311 if (!majorities.empty())
318 {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
319 env(ticket::create(env.master, 1));
323 jv[jss::TransactionType] = jss::EscrowCreate;
324 jv[jss::Account] = Account{
"bob5"}.human();
325 jv[jss::Destination] = Account{
"bob6"}.human();
327 jv[sfFinishAfter.fieldName] =
336 jv[jss::TransactionType] = jss::PaymentChannelCreate;
337 jv[jss::Account] = Account{
"bob6"}.human();
338 jv[jss::Destination] = Account{
"bob7"}.human();
341 jv[sfPublicKey.fieldName] =
343 jv[sfCancelAfter.fieldName] =
350 env(check::create(
"bob6",
"bob7", XRP(100)));
353 env(deposit::auth(Account{
"bob9"}, Account{
"bob4"}));
354 env(deposit::auth(Account{
"bob9"}, Account{
"bob8"}));
361 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
362 for (
auto const& j : jrr[jss::state])
363 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
368 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
369 for (
auto const& j : jrr[jss::state])
370 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
375 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
376 for (
auto const& j : jrr[jss::state])
377 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
382 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
383 for (
auto const& j : jrr[jss::state])
384 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
389 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
390 for (
auto const& j : jrr[jss::state])
391 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
396 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
397 for (
auto const& j : jrr[jss::state])
398 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
403 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
404 for (
auto const& j : jrr[jss::state])
405 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
410 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
411 for (
auto const& j : jrr[jss::state])
412 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
417 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
418 for (
auto const& j : jrr[jss::state])
419 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
424 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
425 for (
auto const& j : jrr[jss::state])
426 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
431 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
432 for (
auto const& j : jrr[jss::state])
433 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
437 auto const jrr =
makeRequest(jss::payment_channel);
438 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
439 for (
auto const& j : jrr[jss::state])
440 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
444 auto const jrr =
makeRequest(jss::deposit_preauth);
445 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
446 for (
auto const& j : jrr[jss::state])
447 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
452 jvParams[jss::ledger_index] =
"current";
453 jvParams[jss::type] =
"misspelling";
454 auto const jrr = env.rpc(
455 "json",
"ledger_data",
to_string(jvParams))[jss::result];
456 BEAST_EXPECT(jrr.isMember(
"error"));
457 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
458 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");