20 #include <ripple/beast/unit_test.h>
22 #include <test/jtx/Env.h>
23 #include <ripple/beast/utility/temp_dir.h>
24 #include <ripple/protocol/jss.h>
25 #include <ripple/protocol/SField.h>
26 #include <boost/algorithm/string.hpp>
27 #include <boost/filesystem.hpp>
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];
83 BEAST_EXPECT(retval.
ledger[jss::ledger][jss::accountState].
size() == 101);
86 for(
auto const& it : retval.
ledger[jss::ledger][jss::accountState])
106 testcase (
"Load a saved ledger");
107 using namespace test::jtx;
113 auto jrb = env.rpc (
"ledger",
"current",
"full") [jss::result];
115 sd.
ledger[jss::ledger][jss::accountState].
size() ==
116 jrb[jss::ledger][jss::accountState].size());
122 testcase (
"Load ledger: Bad Files");
123 using namespace test::jtx;
124 using namespace boost::filesystem;
143 boost::system::error_code ec;
144 auto ledgerFileCorrupt =
145 boost::filesystem::path{sd.
dbPath} /
"ledgerdata_bad.json";
149 copy_option::overwrite_if_exists,
151 if(! BEAST_EXPECTS(!ec, ec.message()))
153 auto filesize = file_size(ledgerFileCorrupt, ec);
154 if(! BEAST_EXPECTS(!ec, ec.message()))
156 resize_file(ledgerFileCorrupt, filesize - 10, ec);
157 if(! BEAST_EXPECTS(!ec, ec.message()))
171 testcase (
"Load by hash");
172 using namespace test::jtx;
176 boost::erase_all(ledgerHash,
"\"");
180 auto jrb = env.rpc (
"ledger",
"current",
"full") [jss::result];
181 BEAST_EXPECT(jrb[jss::ledger][jss::accountState].size() == 97);
183 jrb[jss::ledger][jss::accountState].size() <=
184 sd.
ledger[jss::ledger][jss::accountState].
size());
190 testcase (
"Load by keyword");
191 using namespace test::jtx;
197 auto jrb = env.rpc (
"ledger",
"current",
"full") [jss::result];
199 sd.
ledger[jss::ledger][jss::accountState].
size() ==
200 jrb[jss::ledger][jss::accountState].size());
206 testcase (
"Load by index");
207 using namespace test::jtx;
213 auto jrb = env.rpc (
"ledger",
"current",
"full") [jss::result];
215 sd.
ledger[jss::ledger][jss::accountState].
size() ==
216 jrb[jss::ledger][jss::accountState].size());