20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/jss.h>
24 #include <ripple/resource/Charge.h>
25 #include <ripple/resource/Fees.h>
26 #include <ripple/rpc/GRPCHandlers.h>
27 #include <test/jtx/WSClient.h>
28 #include <test/rpc/GRPCTestClientBase.h>
43 auto const info = env.
rpc(
"json",
"account_info",
"{ }");
45 info[jss::result][jss::error_message] ==
46 "Missing field 'account'.");
50 auto const info = env.
rpc(
54 "\"n94JNrQYkDrpt62bbSR7nVEhdyAvcJXRAsjEkFYyqRkh9SUTYEqV\"}");
56 info[jss::result][jss::error_message] ==
"Disallowed seed.");
61 auto const info = env.
rpc(
64 std::string(
"{ ") +
"\"account\": \"" + bogie.human() +
"\"}");
66 info[jss::result][jss::error_message] ==
"Account not found.");
79 auto const withoutSigners =
80 std::string(
"{ ") +
"\"account\": \"" + alice.human() +
"\"}";
82 auto const withSigners =
std::string(
"{ ") +
"\"account\": \"" +
83 alice.human() +
"\", " +
"\"signer_lists\": true }";
88 auto const info = env.
rpc(
"json",
"account_info", withoutSigners);
90 info.isMember(jss::result) &&
91 info[jss::result].isMember(jss::account_data));
92 BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
97 auto const info = env.
rpc(
"json",
"account_info", withSigners);
99 info.isMember(jss::result) &&
100 info[jss::result].isMember(jss::account_data));
101 auto const& data = info[jss::result][jss::account_data];
102 BEAST_EXPECT(data.isMember(jss::signer_lists));
103 auto const& signerLists = data[jss::signer_lists];
104 BEAST_EXPECT(signerLists.isArray());
105 BEAST_EXPECT(signerLists.size() == 0);
111 Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
115 auto const info = env.rpc(
"json",
"account_info", withoutSigners);
117 info.isMember(jss::result) &&
118 info[jss::result].isMember(jss::account_data));
119 BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
124 auto const info = env.rpc(
"json",
"account_info", withSigners);
126 info.isMember(jss::result) &&
127 info[jss::result].isMember(jss::account_data));
128 auto const& data = info[jss::result][jss::account_data];
129 BEAST_EXPECT(data.isMember(jss::signer_lists));
130 auto const& signerLists = data[jss::signer_lists];
131 BEAST_EXPECT(signerLists.isArray());
132 BEAST_EXPECT(signerLists.size() == 1);
133 auto const& signers = signerLists[0u];
134 BEAST_EXPECT(signers.isObject());
137 BEAST_EXPECT(signerEntries.size() == 1);
167 auto const info = env.rpc(
"json",
"account_info", withSigners);
169 info.isMember(jss::result) &&
170 info[jss::result].isMember(jss::account_data));
171 auto const& data = info[jss::result][jss::account_data];
172 BEAST_EXPECT(data.isMember(jss::signer_lists));
173 auto const& signerLists = data[jss::signer_lists];
174 BEAST_EXPECT(signerLists.isArray());
175 BEAST_EXPECT(signerLists.size() == 1);
176 auto const& signers = signerLists[0u];
177 BEAST_EXPECT(signers.isObject());
180 BEAST_EXPECT(signerEntries.size() == 8);
181 for (
unsigned i = 0u; i < 8; ++i)
184 BEAST_EXPECT(entry.size() == 2);
197 c->loadFromString(
"\n[beta_rpc_api]\n1\n");
201 env.fund(
XRP(1000), alice);
204 "\"api_version\": 2, \"account\": \"" + alice.human() +
"\"}";
207 "\"api_version\": 2, \"account\": \"" + alice.human() +
"\", " +
208 "\"signer_lists\": true }";
213 auto const info = env.rpc(
"json",
"account_info", withoutSigners);
214 BEAST_EXPECT(info.isMember(jss::result));
215 BEAST_EXPECT(!info[jss::result].isMember(jss::signer_lists));
219 auto const info = env.rpc(
"json",
"account_info", withSigners);
220 BEAST_EXPECT(info.isMember(jss::result));
221 auto const& data = info[jss::result];
222 BEAST_EXPECT(data.isMember(jss::signer_lists));
223 auto const& signerLists = data[jss::signer_lists];
224 BEAST_EXPECT(signerLists.isArray());
225 BEAST_EXPECT(signerLists.size() == 0);
231 Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
235 auto const info = env.rpc(
"json",
"account_info", withoutSigners);
236 BEAST_EXPECT(info.isMember(jss::result));
237 BEAST_EXPECT(!info[jss::result].isMember(jss::signer_lists));
241 auto const info = env.rpc(
"json",
"account_info", withSigners);
242 BEAST_EXPECT(info.isMember(jss::result));
243 auto const& data = info[jss::result];
244 BEAST_EXPECT(data.isMember(jss::signer_lists));
245 auto const& signerLists = data[jss::signer_lists];
246 BEAST_EXPECT(signerLists.isArray());
247 BEAST_EXPECT(signerLists.size() == 1);
248 auto const& signers = signerLists[0u];
249 BEAST_EXPECT(signers.isObject());
252 BEAST_EXPECT(signerEntries.size() == 1);
282 auto const info = env.rpc(
"json",
"account_info", withSigners);
283 BEAST_EXPECT(info.isMember(jss::result));
284 auto const& data = info[jss::result];
285 BEAST_EXPECT(data.isMember(jss::signer_lists));
286 auto const& signerLists = data[jss::signer_lists];
287 BEAST_EXPECT(signerLists.isArray());
288 BEAST_EXPECT(signerLists.size() == 1);
289 auto const& signers = signerLists[0u];
290 BEAST_EXPECT(signers.isObject());
293 BEAST_EXPECT(signerEntries.size() == 8);
294 for (
unsigned i = 0u; i < 8; ++i)
297 BEAST_EXPECT(entry.size() == 2);
314 "\"jsonrpc\": \"2.0\", "
315 "\"ripplerpc\": \"2.0\", "
317 "\"method\": \"account_info\", "
320 alice.human() +
"\"}}";
323 "\"jsonrpc\": \"2.0\", "
324 "\"ripplerpc\": \"2.0\", "
326 "\"method\": \"account_info\", "
329 alice.human() +
"\", " +
"\"signer_lists\": true }}";
333 auto const info = env.
rpc(
"json2", withoutSigners);
335 info.isMember(jss::result) &&
336 info[jss::result].isMember(jss::account_data));
337 BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
340 info.isMember(jss::jsonrpc) && info[jss::jsonrpc] ==
"2.0");
342 info.isMember(jss::ripplerpc) && info[jss::ripplerpc] ==
"2.0");
343 BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
347 auto const info = env.
rpc(
"json2", withSigners);
349 info.isMember(jss::result) &&
350 info[jss::result].isMember(jss::account_data));
351 auto const& data = info[jss::result][jss::account_data];
352 BEAST_EXPECT(data.isMember(jss::signer_lists));
353 auto const& signerLists = data[jss::signer_lists];
354 BEAST_EXPECT(signerLists.isArray());
355 BEAST_EXPECT(signerLists.size() == 0);
357 info.isMember(jss::jsonrpc) && info[jss::jsonrpc] ==
"2.0");
359 info.isMember(jss::ripplerpc) && info[jss::ripplerpc] ==
"2.0");
360 BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
364 auto const info = env.
rpc(
365 "json2",
'[' + withoutSigners +
", " + withSigners +
']');
367 info[0u].isMember(jss::result) &&
368 info[0u][jss::result].isMember(jss::account_data));
369 BEAST_EXPECT(!info[0u][jss::result][jss::account_data].isMember(
372 info[0u].isMember(jss::jsonrpc) &&
373 info[0u][jss::jsonrpc] ==
"2.0");
375 info[0u].isMember(jss::ripplerpc) &&
376 info[0u][jss::ripplerpc] ==
"2.0");
377 BEAST_EXPECT(info[0u].isMember(jss::id) && info[0u][jss::id] == 5);
380 info[1u].isMember(jss::result) &&
381 info[1u][jss::result].isMember(jss::account_data));
382 auto const& data = info[1u][jss::result][jss::account_data];
383 BEAST_EXPECT(data.isMember(jss::signer_lists));
384 auto const& signerLists = data[jss::signer_lists];
385 BEAST_EXPECT(signerLists.isArray());
386 BEAST_EXPECT(signerLists.size() == 0);
388 info[1u].isMember(jss::jsonrpc) &&
389 info[1u][jss::jsonrpc] ==
"2.0");
391 info[1u].isMember(jss::ripplerpc) &&
392 info[1u][jss::ripplerpc] ==
"2.0");
393 BEAST_EXPECT(info[1u].isMember(jss::id) && info[1u][jss::id] == 6);
399 Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
403 auto const info = env.rpc(
"json2", withoutSigners);
405 info.isMember(jss::result) &&
406 info[jss::result].isMember(jss::account_data));
407 BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
410 info.isMember(jss::jsonrpc) && info[jss::jsonrpc] ==
"2.0");
412 info.isMember(jss::ripplerpc) && info[jss::ripplerpc] ==
"2.0");
413 BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
417 auto const info = env.rpc(
"json2", withSigners);
419 info.isMember(jss::result) &&
420 info[jss::result].isMember(jss::account_data));
421 auto const& data = info[jss::result][jss::account_data];
422 BEAST_EXPECT(data.isMember(jss::signer_lists));
423 auto const& signerLists = data[jss::signer_lists];
424 BEAST_EXPECT(signerLists.isArray());
425 BEAST_EXPECT(signerLists.size() == 1);
426 auto const& signers = signerLists[0u];
427 BEAST_EXPECT(signers.isObject());
430 BEAST_EXPECT(signerEntries.size() == 1);
434 info.isMember(jss::jsonrpc) && info[jss::jsonrpc] ==
"2.0");
436 info.isMember(jss::ripplerpc) && info[jss::ripplerpc] ==
"2.0");
437 BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
465 auto const info = env.rpc(
"json2", withSigners);
467 info.isMember(jss::result) &&
468 info[jss::result].isMember(jss::account_data));
469 auto const& data = info[jss::result][jss::account_data];
470 BEAST_EXPECT(data.isMember(jss::signer_lists));
471 auto const& signerLists = data[jss::signer_lists];
472 BEAST_EXPECT(signerLists.isArray());
473 BEAST_EXPECT(signerLists.size() == 1);
474 auto const& signers = signerLists[0u];
475 BEAST_EXPECT(signers.isObject());
478 BEAST_EXPECT(signerEntries.size() == 8);
479 for (
unsigned i = 0u; i < 8; ++i)
482 BEAST_EXPECT(entry.size() == 2);
487 info.isMember(jss::jsonrpc) && info[jss::jsonrpc] ==
"2.0");
489 info.isMember(jss::ripplerpc) && info[jss::ripplerpc] ==
"2.0");
490 BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);