21 using namespace test::jtx;
22 Env env{*
this, asAdmin ? envconfig() : envconfig(no_admin)};
23 Account
const gw{
"gateway"};
24 auto const USD = gw[
"USD"];
25 env.fund(XRP(100000), gw);
27 int const max_limit = 256;
30 for (
auto i = 0; i < max_limit + 10; i++)
33 env.fund(XRP(1000), bob);
42 jvParams[jss::ledger_index] =
"current";
43 jvParams[jss::binary] =
false;
45 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
46 BEAST_EXPECT(jrr[jss::ledger_current_index].isIntegral() && jrr[jss::ledger_current_index].asInt() > 0);
48 BEAST_EXPECT(checkArraySize(jrr[jss::state], max_limit));
52 for (
auto delta = -1; delta <= 1; delta++)
54 jvParams[jss::limit] = max_limit + delta;
55 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
56 BEAST_EXPECT(checkArraySize(jrr[jss::state], (delta > 0 && !asAdmin) ? max_limit : max_limit + delta));
63 using namespace test::jtx;
64 Env env{*
this, envconfig(no_admin)};
65 Account
const gw{
"gateway"};
66 auto const USD = gw[
"USD"];
67 env.fund(XRP(100000), gw);
69 int const num_accounts = 10;
71 for (
auto i = 0; i < num_accounts; i++)
74 env.fund(XRP(1000), bob);
80 jvParams[jss::ledger_index] =
"current";
81 jvParams[jss::binary] =
true;
82 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
83 BEAST_EXPECT(jrr[jss::ledger_current_index].isIntegral() && jrr[jss::ledger_current_index].asInt() > 0);
84 BEAST_EXPECT(!jrr.isMember(jss::marker));
85 BEAST_EXPECT(checkArraySize(jrr[jss::state], num_accounts + 4));
91 using namespace test::jtx;
93 Account
const gw{
"gateway"};
94 auto const USD = gw[
"USD"];
95 Account
const bob{
"bob"};
97 env.fund(XRP(10000), gw, bob);
98 env.trust(USD(1000), bob);
103 jvParams[jss::limit] =
"0";
104 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
105 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
106 BEAST_EXPECT(jrr[jss::status] ==
"error");
107 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'limit', not integer.");
113 jvParams[jss::marker] =
"NOT_A_MARKER";
114 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
115 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
116 BEAST_EXPECT(jrr[jss::status] ==
"error");
117 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
123 jvParams[jss::marker] = 1;
124 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
125 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
126 BEAST_EXPECT(jrr[jss::status] ==
"error");
127 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
133 jvParams[jss::ledger_index] = 10u;
134 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
135 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
136 BEAST_EXPECT(jrr[jss::status] ==
"error");
137 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
144 using namespace test::jtx;
145 Env env{*
this, envconfig(no_admin)};
146 Account
const gw{
"gateway"};
147 auto const USD = gw[
"USD"];
148 env.fund(XRP(100000), gw);
150 int const num_accounts = 20;
152 for (
auto i = 0; i < num_accounts; i++)
155 env.fund(XRP(1000), bob);
161 jvParams[jss::ledger_index] =
"current";
162 jvParams[jss::binary] =
false;
163 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
164 auto const total_count = jrr[jss::state].
size();
167 jvParams[jss::limit] = 5;
168 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
170 auto running_total = jrr[jss::state].size();
171 while (jrr.isMember(jss::marker))
173 jvParams[jss::marker] = jrr[jss::marker];
174 jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
175 running_total += jrr[jss::state].
size();
177 BEAST_EXPECT(running_total == total_count);
183 using namespace test::jtx;
185 env.fund(XRP(100000),
"alice");
192 jvParams[jss::ledger_index] =
"closed";
193 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
194 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
195 BEAST_EXPECT(jrr[jss::ledger][jss::ledger_hash] ==
to_string(env.closed()->header().hash));
200 jvParams[jss::ledger_index] =
"closed";
201 jvParams[jss::binary] =
true;
202 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
203 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
205 auto data =
strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
206 if (BEAST_EXPECT(data))
211 BEAST_EXPECT(seq == 3);
218 jvParams[jss::binary] =
true;
219 auto jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
220 BEAST_EXPECT(jrr.isMember(jss::ledger));
221 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
229 using namespace test::jtx;
233 {testable_amendments() - fixInnerObjTemplate2, testable_amendments() | fixInnerObjTemplate2})
236 Env env{*
this, envconfig(validator,
""), features};
238 Account
const gw{
"gateway"};
239 auto const USD = gw[
"USD"];
240 env.fund(XRP(100000), gw);
244 jvParams[jss::ledger_index] =
"current";
245 jvParams[jss::type] = type;
246 return env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
250 for (
auto const& type :
259 jss::payment_channel,
260 jss::deposit_preauth})
263 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
266 int const num_accounts = 10;
268 for (
auto i = 0; i < num_accounts; i++)
271 env.fund(XRP(1000), bob);
273 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
274 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
277 for (
int i = 0; i <= 256; ++i)
281 if (!majorities.empty())
285 env(signers(Account{
"bob0"}, 1, {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
286 env(ticket::create(env.master, 1));
290 jv[jss::TransactionType] = jss::EscrowCreate;
291 jv[jss::Account] = Account{
"bob5"}.human();
292 jv[jss::Destination] = Account{
"bob6"}.human();
300 jv[jss::TransactionType] = jss::PaymentChannelCreate;
301 jv[jss::Account] = Account{
"bob6"}.human();
302 jv[jss::Destination] = Account{
"bob7"}.human();
305 jv[sfPublicKey.fieldName] =
strHex(Account{
"bob6"}.pk().
slice());
310 env(check::create(
"bob6",
"bob7", XRP(100)));
313 env(deposit::auth(Account{
"bob9"}, Account{
"bob4"}));
314 env(deposit::auth(Account{
"bob9"}, Account{
"bob8"}));
321 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
322 for (
auto const& j : jrr[jss::state])
323 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
328 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
329 for (
auto const& j : jrr[jss::state])
330 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
335 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
336 for (
auto const& j : jrr[jss::state])
337 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
342 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
343 for (
auto const& j : jrr[jss::state])
344 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
349 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
350 for (
auto const& j : jrr[jss::state])
351 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
356 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
357 for (
auto const& j : jrr[jss::state])
358 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
363 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
364 for (
auto const& j : jrr[jss::state])
365 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
370 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
371 for (
auto const& j : jrr[jss::state])
372 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
377 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
378 for (
auto const& j : jrr[jss::state])
379 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
384 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
385 for (
auto const& j : jrr[jss::state])
386 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
391 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
392 for (
auto const& j : jrr[jss::state])
393 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
397 auto const jrr =
makeRequest(jss::payment_channel);
398 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
399 for (
auto const& j : jrr[jss::state])
400 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
404 auto const jrr =
makeRequest(jss::deposit_preauth);
405 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
406 for (
auto const& j : jrr[jss::state])
407 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
412 jvParams[jss::ledger_index] =
"current";
413 jvParams[jss::type] =
"misspelling";
414 auto const jrr = env.rpc(
"json",
"ledger_data",
to_string(jvParams))[jss::result];
415 BEAST_EXPECT(jrr.isMember(
"error"));
416 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
417 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");