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>
24 #include <boost/algorithm/string.hpp>
25 #include <boost/filesystem.hpp>
28 #include <test/jtx/Env.h>
40 cfg->START_LEDGER = ledger;
42 assert(!dbPath.
empty());
43 cfg->legacy(
"database_path", dbPath);
59 using namespace test::jtx;
67 for (
auto i = 0; i < 20; ++i)
70 env.fund(XRP(10000), acct);
74 env.trust(acct[
"USD"](1000), prev);
75 env(pay(acct, prev, acct[
"USD"](5)));
77 env(offer(acct, XRP(100), acct[
"USD"](1)));
79 prev = std::move(acct);
82 retval.
ledger = env.rpc(
"ledger",
"current",
"full")[jss::result];
84 retval.
ledger[jss::ledger][jss::accountState].
size() == 101);
87 for (
auto const& it : retval.
ledger[jss::ledger][jss::accountState])
107 testcase(
"Load a saved ledger");
108 using namespace test::jtx;
115 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
117 sd.
ledger[jss::ledger][jss::accountState].
size() ==
118 jrb[jss::ledger][jss::accountState].size());
124 testcase(
"Load ledger: Bad Files");
125 using namespace test::jtx;
126 using namespace boost::filesystem;
147 boost::system::error_code ec;
148 auto ledgerFileCorrupt =
149 boost::filesystem::path{sd.
dbPath} /
"ledgerdata_bad.json";
153 copy_option::overwrite_if_exists,
155 if (!BEAST_EXPECTS(!ec, ec.message()))
157 auto filesize = file_size(ledgerFileCorrupt, ec);
158 if (!BEAST_EXPECTS(!ec, ec.message()))
160 resize_file(ledgerFileCorrupt, filesize - 10, ec);
161 if (!BEAST_EXPECTS(!ec, ec.message()))
170 ledgerFileCorrupt.
string(),
178 testcase(
"Load by hash");
179 using namespace test::jtx;
183 boost::erase_all(ledgerHash,
"\"");
187 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
188 BEAST_EXPECT(jrb[jss::ledger][jss::accountState].size() == 97);
190 jrb[jss::ledger][jss::accountState].size() <=
191 sd.
ledger[jss::ledger][jss::accountState].
size());
197 testcase(
"Load by keyword");
198 using namespace test::jtx;
203 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
205 sd.
ledger[jss::ledger][jss::accountState].
size() ==
206 jrb[jss::ledger][jss::accountState].size());
212 testcase(
"Load by index");
213 using namespace test::jtx;
217 auto jrb = env.rpc(
"ledger",
"current",
"full")[jss::result];
219 sd.
ledger[jss::ledger][jss::accountState].
size() ==
220 jrb[jss::ledger][jss::accountState].size());