20 #include <ripple/basics/StringUtilities.h>
21 #include <ripple/protocol/jss.h>
23 #include <test/jtx/TestHelpers.h>
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(
68 boost::lexical_cast<std::string>(jvParams))[jss::result];
70 jrr[jss::ledger_current_index].isIntegral() &&
71 jrr[jss::ledger_current_index].asInt() > 0);
73 BEAST_EXPECT(checkArraySize(jrr[jss::state], max_limit));
77 for (
auto delta = -1; delta <= 1; delta++)
79 jvParams[jss::limit] = max_limit + delta;
80 auto const jrr = env.rpc(
83 boost::lexical_cast<std::string>(jvParams))[jss::result];
84 BEAST_EXPECT(checkArraySize(
86 (delta > 0 && !asAdmin) ? max_limit : max_limit + delta));
93 using namespace test::jtx;
94 Env env{*
this, envconfig(no_admin)};
95 Account
const gw{
"gateway"};
96 auto const USD = gw[
"USD"];
97 env.fund(XRP(100000), gw);
99 int const num_accounts = 10;
101 for (
auto i = 0; i < num_accounts; i++)
104 env.fund(XRP(1000), bob);
110 jvParams[jss::ledger_index] =
"current";
111 jvParams[jss::binary] =
true;
112 auto const jrr = env.rpc(
115 boost::lexical_cast<std::string>(jvParams))[jss::result];
117 jrr[jss::ledger_current_index].isIntegral() &&
118 jrr[jss::ledger_current_index].asInt() > 0);
119 BEAST_EXPECT(!jrr.isMember(jss::marker));
120 BEAST_EXPECT(checkArraySize(jrr[jss::state], num_accounts + 4));
126 using namespace test::jtx;
128 Account
const gw{
"gateway"};
129 auto const USD = gw[
"USD"];
130 Account
const bob{
"bob"};
132 env.fund(XRP(10000), gw, bob);
133 env.trust(USD(1000), bob);
138 jvParams[jss::limit] =
"0";
139 auto const jrr = env.rpc(
142 boost::lexical_cast<std::string>(jvParams))[jss::result];
143 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
144 BEAST_EXPECT(jrr[jss::status] ==
"error");
146 jrr[jss::error_message] ==
147 "Invalid field 'limit', not integer.");
153 jvParams[jss::marker] =
"NOT_A_MARKER";
154 auto const jrr = env.rpc(
157 boost::lexical_cast<std::string>(jvParams))[jss::result];
158 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
159 BEAST_EXPECT(jrr[jss::status] ==
"error");
161 jrr[jss::error_message] ==
162 "Invalid field 'marker', not valid.");
168 jvParams[jss::marker] = 1;
169 auto const jrr = env.rpc(
172 boost::lexical_cast<std::string>(jvParams))[jss::result];
173 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
174 BEAST_EXPECT(jrr[jss::status] ==
"error");
176 jrr[jss::error_message] ==
177 "Invalid field 'marker', not valid.");
183 jvParams[jss::ledger_index] = 10u;
184 auto const jrr = env.rpc(
187 boost::lexical_cast<std::string>(jvParams))[jss::result];
188 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
189 BEAST_EXPECT(jrr[jss::status] ==
"error");
190 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
197 using namespace test::jtx;
198 Env env{*
this, envconfig(no_admin)};
199 Account
const gw{
"gateway"};
200 auto const USD = gw[
"USD"];
201 env.fund(XRP(100000), gw);
203 int const num_accounts = 20;
205 for (
auto i = 0; i < num_accounts; i++)
208 env.fund(XRP(1000), bob);
214 jvParams[jss::ledger_index] =
"current";
215 jvParams[jss::binary] =
false;
219 boost::lexical_cast<std::string>(jvParams))[jss::result];
220 auto const total_count = jrr[jss::state].
size();
223 jvParams[jss::limit] = 5;
227 boost::lexical_cast<std::string>(jvParams))[jss::result];
229 auto running_total = jrr[jss::state].size();
230 while (jrr.isMember(jss::marker))
232 jvParams[jss::marker] = jrr[jss::marker];
236 boost::lexical_cast<std::string>(jvParams))[jss::result];
237 running_total += jrr[jss::state].
size();
239 BEAST_EXPECT(running_total == total_count);
245 using namespace test::jtx;
247 env.fund(XRP(100000),
"alice");
254 jvParams[jss::ledger_index] =
"closed";
258 boost::lexical_cast<std::string>(jvParams))[jss::result];
259 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
261 jrr[jss::ledger][jss::ledger_hash] ==
267 jvParams[jss::ledger_index] =
"closed";
268 jvParams[jss::binary] =
true;
272 boost::lexical_cast<std::string>(jvParams))[jss::result];
273 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
276 strUnHex(jrr[jss::ledger][jss::ledger_data].asString());
277 if (BEAST_EXPECT(data))
282 BEAST_EXPECT(seq == 3);
289 jvParams[jss::binary] =
true;
293 boost::lexical_cast<std::string>(jvParams))[jss::result];
294 BEAST_EXPECT(jrr.isMember(jss::ledger));
295 BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data));
303 using namespace test::jtx;
305 Env env{*
this, envconfig(validator,
"")};
307 Account
const gw{
"gateway"};
308 auto const USD = gw[
"USD"];
309 env.fund(XRP(100000), gw);
313 jvParams[jss::ledger_index] =
"current";
314 jvParams[jss::type] = type;
318 boost::lexical_cast<std::string>(jvParams))[jss::result];
322 for (
auto const& type :
331 jss::payment_channel,
332 jss::deposit_preauth})
335 BEAST_EXPECT(checkArraySize(jrr[jss::state], 0));
338 int const num_accounts = 10;
340 for (
auto i = 0; i < num_accounts; i++)
343 env.fund(XRP(1000), bob);
345 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
346 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
349 for (
int i = 0; i <= 256; ++i)
353 if (!majorities.empty())
357 Account{
"bob0"}, 1, {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
358 env(ticket::create(env.master, 1));
362 jv[jss::TransactionType] = jss::EscrowCreate;
364 jv[jss::Account] = Account{
"bob5"}.human();
365 jv[jss::Destination] = Account{
"bob6"}.human();
375 jv[jss::TransactionType] = jss::PaymentChannelCreate;
377 jv[jss::Account] = Account{
"bob6"}.human();
378 jv[jss::Destination] = Account{
"bob7"}.human();
388 env(check::create(
"bob6",
"bob7", XRP(100)));
391 env(deposit::auth(Account{
"bob9"}, Account{
"bob4"}));
392 env(deposit::auth(Account{
"bob9"}, Account{
"bob8"}));
399 BEAST_EXPECT(checkArraySize(jrr[jss::state], 12));
400 for (
auto const& j : jrr[jss::state])
401 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::AccountRoot);
406 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
407 for (
auto const& j : jrr[jss::state])
408 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Amendments);
413 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
414 for (
auto const& j : jrr[jss::state])
415 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Check);
420 BEAST_EXPECT(checkArraySize(jrr[jss::state], 9));
421 for (
auto const& j : jrr[jss::state])
422 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DirectoryNode);
427 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
428 for (
auto const& j : jrr[jss::state])
429 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::FeeSettings);
434 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
435 for (
auto const& j : jrr[jss::state])
436 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::LedgerHashes);
441 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
442 for (
auto const& j : jrr[jss::state])
443 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Offer);
448 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
449 for (
auto const& j : jrr[jss::state])
450 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::SignerList);
455 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
456 for (
auto const& j : jrr[jss::state])
457 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::RippleState);
462 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
463 for (
auto const& j : jrr[jss::state])
464 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Ticket);
469 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
470 for (
auto const& j : jrr[jss::state])
471 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::Escrow);
475 auto const jrr =
makeRequest(jss::payment_channel);
476 BEAST_EXPECT(checkArraySize(jrr[jss::state], 1));
477 for (
auto const& j : jrr[jss::state])
478 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::PayChannel);
482 auto const jrr =
makeRequest(jss::deposit_preauth);
483 BEAST_EXPECT(checkArraySize(jrr[jss::state], 2));
484 for (
auto const& j : jrr[jss::state])
485 BEAST_EXPECT(j[
"LedgerEntryType"] == jss::DepositPreauth);
490 jvParams[jss::ledger_index] =
"current";
491 jvParams[jss::type] =
"misspelling";
492 auto const jrr = env.rpc(
495 boost::lexical_cast<std::string>(jvParams))[jss::result];
496 BEAST_EXPECT(jrr.isMember(
"error"));
497 BEAST_EXPECT(jrr[
"error"] ==
"invalidParams");
498 BEAST_EXPECT(jrr[
"error_message"] ==
"Invalid field 'type'.");