20 #include <ripple/beast/unit_test.h>
21 #include <ripple/beast/utility/temp_dir.h>
22 #include <ripple/protocol/SField.h>
23 #include <ripple/protocol/jss.h>
25 #include <test/jtx/Env.h>
27 #include <boost/algorithm/string.hpp>
28 #include <boost/filesystem.hpp>
41 cfg->START_LEDGER = ledger;
43 assert(!dbPath.
empty());
44 cfg->legacy(
"database_path", dbPath);
60 using namespace test::jtx;
68 for (
auto i = 0; i < 20; ++i)
71 env.fund(XRP(10000), acct);
75 env.trust(acct[
"USD"](1000), prev);
76 env(pay(acct, prev, acct[
"USD"](5)));
78 env(offer(acct, XRP(100), acct[
"USD"](1)));
80 prev = std::move(acct);
83 retval.
ledger = env.rpc(
"ledger",
"current",
"full")[jss::result];
85 retval.
ledger[jss::ledger][jss::accountState].
size() == 102);
88 for (
auto const& it : retval.
ledger[jss::ledger][jss::accountState])
108 testcase(
"Load a saved ledger");
109 using namespace test::jtx;
118 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
120 sd.
ledger[jss::ledger][jss::accountState].
size() ==
121 jrb[jss::ledger][jss::accountState].size());
127 testcase(
"Load ledger: Bad Files");
128 using namespace test::jtx;
129 using namespace boost::filesystem;
151 boost::system::error_code ec;
152 auto ledgerFileCorrupt =
153 boost::filesystem::path{sd.
dbPath} /
"ledgerdata_bad.json";
157 copy_option::overwrite_if_exists,
159 if (!BEAST_EXPECTS(!ec, ec.message()))
161 auto filesize = file_size(ledgerFileCorrupt, ec);
162 if (!BEAST_EXPECTS(!ec, ec.message()))
164 resize_file(ledgerFileCorrupt, filesize - 10, ec);
165 if (!BEAST_EXPECTS(!ec, ec.message()))
174 ledgerFileCorrupt.
string(),
184 testcase(
"Load by hash");
185 using namespace test::jtx;
189 boost::erase_all(ledgerHash,
"\"");
195 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
196 BEAST_EXPECT(jrb[jss::ledger][jss::accountState].size() == 98);
198 jrb[jss::ledger][jss::accountState].size() <=
199 sd.
ledger[jss::ledger][jss::accountState].
size());
205 testcase(
"Load by keyword");
206 using namespace test::jtx;
214 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
216 sd.
ledger[jss::ledger][jss::accountState].
size() ==
217 jrb[jss::ledger][jss::accountState].size());
223 testcase(
"Load by index");
224 using namespace test::jtx;
232 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
234 sd.
ledger[jss::ledger][jss::accountState].
size() ==
235 jrb[jss::ledger][jss::accountState].size());