20 #include <ripple/basics/StringUtilities.h>
21 #include <ripple/protocol/Feature.h>
22 #include <ripple/protocol/jss.h>
47 using namespace test::jtx;
48 Env env {*
this, asAdmin ? envconfig() : envconfig(no_admin)};
49 Account
const gw {
"gateway"};
50 auto const USD = gw[
"USD"];
51 env.fund(XRP(100000), gw);
53 int const max_limit = 256;
55 for (
auto i = 0; i < max_limit + 10; i++)
58 env.fund(XRP(1000), bob);
65 jvParams[jss::ledger_index] =
"current";
66 jvParams[jss::binary] =
false;
68 auto const jrr = env.rpc(
71 boost::lexical_cast<std::string>(jvParams))[jss::result];
73 jrr[jss::ledger_current_index].isIntegral() &&
74 jrr[jss::ledger_current_index].asInt() > 0);
80 for (
auto delta = -1; delta <= 1; delta++)
82 jvParams[jss::limit] = max_limit + delta;
83 auto const jrr = env.rpc (
"json",
"ledger_data",
84 boost::lexical_cast<std::string>(jvParams)) [jss::result];
87 (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);
111 jvParams[jss::ledger_index] =
"current";
112 jvParams[jss::binary] =
true;
113 auto const jrr = env.rpc (
"json",
"ledger_data",
114 boost::lexical_cast<std::string>(jvParams)) [jss::result];
116 jrr[jss::ledger_current_index].isIntegral() &&
117 jrr[jss::ledger_current_index].asInt() > 0);
118 BEAST_EXPECT( ! jrr.isMember(jss::marker) );
119 BEAST_EXPECT(
checkArraySize(jrr[jss::state], num_accounts + 3) );
124 using namespace test::jtx;
126 Account
const gw {
"gateway" };
127 auto const USD = gw[
"USD"];
128 Account
const bob {
"bob" };
130 env.fund(XRP(10000), gw, bob);
131 env.trust(USD(1000), bob);
136 jvParams[jss::limit] =
"0";
137 auto const jrr = env.rpc (
"json",
"ledger_data",
138 boost::lexical_cast<std::string>(jvParams)) [jss::result];
139 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
140 BEAST_EXPECT(jrr[jss::status] ==
"error");
141 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'limit', not integer.");
147 jvParams[jss::marker] =
"NOT_A_MARKER";
148 auto const jrr = env.rpc (
"json",
"ledger_data",
149 boost::lexical_cast<std::string>(jvParams)) [jss::result];
150 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
151 BEAST_EXPECT(jrr[jss::status] ==
"error");
152 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
158 jvParams[jss::marker] = 1;
159 auto const jrr = env.rpc (
"json",
"ledger_data",
160 boost::lexical_cast<std::string>(jvParams)) [jss::result];
161 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
162 BEAST_EXPECT(jrr[jss::status] ==
"error");
163 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not valid.");
169 jvParams[jss::ledger_index] = 10u;
170 auto const jrr = env.rpc (
"json",
"ledger_data",
171 boost::lexical_cast<std::string>(jvParams)) [jss::result];
172 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
173 BEAST_EXPECT(jrr[jss::status] ==
"error");
174 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");
180 using namespace test::jtx;
181 Env env { *
this, envconfig(no_admin) };
182 Account
const gw {
"gateway" };
183 auto const USD = gw[
"USD"];
184 env.fund(XRP(100000), gw);
186 int const num_accounts = 20;
188 for (
auto i = 0; i < num_accounts; i++)
191 env.fund(XRP(1000), bob);
198 jvParams[jss::ledger_index] =
"current";
199 jvParams[jss::binary] =
false;
200 auto jrr = env.rpc (
"json",
"ledger_data",
201 boost::lexical_cast<std::string>(jvParams)) [jss::result];
202 auto const total_count = jrr[jss::state].
size();
205 jvParams[jss::limit] = 5;
206 jrr = env.rpc (
"json",
"ledger_data",
207 boost::lexical_cast<std::string>(jvParams)) [jss::result];
209 auto running_total = jrr[jss::state].size();
210 while ( jrr.isMember(jss::marker) )
212 jvParams[jss::marker] = jrr[jss::marker];
213 jrr = env.rpc (
"json",
"ledger_data",
214 boost::lexical_cast<std::string>(jvParams)) [jss::result];
215 running_total += jrr[jss::state].
size();
217 BEAST_EXPECT( running_total == total_count );
222 using namespace test::jtx;
224 env.fund(XRP(100000),
"alice");
231 jvParams[jss::ledger_index] =
"closed";
232 auto jrr = env.rpc(
"json",
"ledger_data",
233 boost::lexical_cast<std::string>(jvParams))[jss::result];
234 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
235 BEAST_EXPECT(jrr[jss::ledger][jss::ledger_hash] ==
241 jvParams[jss::ledger_index] =
"closed";
242 jvParams[jss::binary] =
true;
243 auto jrr = env.rpc(
"json",
"ledger_data",
244 boost::lexical_cast<std::string>(jvParams))[jss::result];
245 if (BEAST_EXPECT(jrr.isMember(jss::ledger)))
248 jrr[jss::ledger][jss::ledger_data].asString());
249 if (BEAST_EXPECT(data))
254 BEAST_EXPECT(seq == 3);
261 jvParams[jss::binary] =
true;
262 auto jrr = env.rpc(
"json",
"ledger_data",
263 boost::lexical_cast<std::string>(jvParams))[jss::result];
264 BEAST_EXPECT(jrr.isMember(jss::ledger));
265 BEAST_EXPECT(! jrr[jss::ledger].isMember(jss::ledger_data));
272 using namespace test::jtx;
275 envconfig(validator,
""),
278 Account
const gw {
"gateway" };
279 auto const USD = gw[
"USD"];
280 env.fund(XRP(100000), gw);
282 int const num_accounts = 10;
284 for (
auto i = 0; i < num_accounts; i++)
287 env.fund(XRP(1000), bob);
289 env(offer(Account{
"bob0"}, USD(100), XRP(100)));
290 env.trust(Account{
"bob2"}[
"USD"](100), Account{
"bob3"});
293 for (
int i = 0; i <= 256; ++i)
297 if (!majorities.empty())
300 env(signers(Account{
"bob0"}, 1,
301 {{Account{
"bob1"}, 1}, {Account{
"bob2"}, 1}}));
302 env(ticket::create(env.master));
306 jv[jss::TransactionType] = jss::EscrowCreate;
308 jv[jss::Account] = Account{
"bob5"}.human();
309 jv[jss::Destination] = Account{
"bob6"}.human();
319 jv[jss::TransactionType] = jss::PaymentChannelCreate;
321 jv[jss::Account] = Account{
"bob6"}.human ();
322 jv[jss::Destination] = Account{
"bob7"}.human ();
332 env (check::create (
"bob6",
"bob7", XRP (100)));
335 env (deposit::auth (Account {
"bob9"}, Account {
"bob4"}));
336 env (deposit::auth (Account {
"bob9"}, Account {
"bob8"}));
343 jvParams[jss::ledger_index] =
"current";
344 jvParams[jss::type] = t;
345 return env.rpc (
"json",
"ledger_data",
346 boost::lexical_cast<std::string>(jvParams)) [jss::result];
350 auto const jrr = makeRequest(jss::account);
352 for (
auto const& j : jrr[jss::state])
353 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::AccountRoot );
357 auto const jrr = makeRequest(jss::amendments);
359 for (
auto const& j : jrr[jss::state])
360 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::Amendments );
364 auto const jrr = makeRequest(jss::check);
366 for (
auto const& j : jrr[jss::state])
367 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::Check );
371 auto const jrr = makeRequest(jss::directory);
373 for (
auto const& j : jrr[jss::state])
374 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::DirectoryNode );
378 auto const jrr = makeRequest(jss::fee);
380 for (
auto const& j : jrr[jss::state])
381 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::FeeSettings );
385 auto const jrr = makeRequest(jss::hashes);
387 for (
auto const& j : jrr[jss::state])
388 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::LedgerHashes );
392 auto const jrr = makeRequest(jss::offer);
394 for (
auto const& j : jrr[jss::state])
395 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::Offer );
399 auto const jrr = makeRequest(jss::signer_list);
401 for (
auto const& j : jrr[jss::state])
402 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::SignerList );
406 auto const jrr = makeRequest(jss::state);
408 for (
auto const& j : jrr[jss::state])
409 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::RippleState );
413 auto const jrr = makeRequest(jss::ticket);
415 for (
auto const& j : jrr[jss::state])
416 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::Ticket );
420 auto const jrr = makeRequest(jss::escrow);
422 for (
auto const& j : jrr[jss::state])
423 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::Escrow );
427 auto const jrr = makeRequest(jss::payment_channel);
429 for (
auto const& j : jrr[jss::state])
430 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::PayChannel );
434 auto const jrr = makeRequest(jss::deposit_preauth);
436 for (
auto const& j : jrr[jss::state])
437 BEAST_EXPECT( j[
"LedgerEntryType"] == jss::DepositPreauth );
442 jvParams[jss::ledger_index] =
"current";
443 jvParams[jss::type] =
"misspelling";
444 auto const jrr = env.rpc (
"json",
"ledger_data",
445 boost::lexical_cast<std::string>(jvParams)) [jss::result];
446 BEAST_EXPECT( jrr.isMember(
"error") );
447 BEAST_EXPECT( jrr[
"error"] ==
"invalidParams" );
448 BEAST_EXPECT( jrr[
"error_message"] ==
"Invalid field 'type'." );