21 #include <test/jtx/Env.h>
22 #include <test/jtx/envconfig.h>
23 #include <ripple/protocol/jss.h>
24 #include <ripple/core/DatabaseCon.h>
25 #include <ripple/protocol/ErrorCodes.h>
35 testcase(
"Test Range Request");
37 using namespace test::jtx;
40 const char* COMMAND = jss::tx.c_str();
41 const char* BINARY = jss::binary.c_str();
47 auto const alice = Account(
"alice");
48 env.fund(XRP(1000), alice);
52 auto const startLegSeq = env.current()->info().seq;
53 for (
int i = 0; i < 750; ++i)
59 auto const endLegSeq = env.closed()->info().seq;
62 for (
auto&& tx : txns)
64 auto const result = env.rpc(
71 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
74 auto const tx = env.jt(noop(alice), seq(env.seq(alice))).stx;
75 for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
77 auto const result = env.rpc(
85 result[jss::result][jss::status] == jss::error &&
86 result[jss::result][jss::error] == NOT_FOUND);
89 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
91 BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
95 for (
auto&& tx : txns)
97 auto const result = env.rpc(
104 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
105 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
108 const auto deletedLedger = (startLegSeq + endLegSeq) / 2;
111 auto db = env.app().getTxnDB().checkoutDb();
112 *db <<
"DELETE FROM Transactions WHERE LedgerSeq == "
113 << deletedLedger <<
";";
116 for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
118 auto const result = env.rpc(
126 result[jss::result][jss::status] == jss::error &&
127 result[jss::result][jss::error] == NOT_FOUND);
128 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
134 auto const result = env.rpc(
141 result[jss::result][jss::status] == jss::error &&
142 result[jss::result][jss::error] == NOT_FOUND);
144 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
150 auto const result = env.rpc(
157 result[jss::result][jss::status] == jss::error &&
158 result[jss::result][jss::error] == NOT_FOUND);
160 BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
166 auto const result = env.rpc(
172 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
173 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
178 auto const result = env.rpc(
186 result[jss::result][jss::status] == jss::error &&
187 result[jss::result][jss::error] ==
INVALID);
189 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
194 auto const result = env.rpc(
202 result[jss::result][jss::status] == jss::error &&
203 result[jss::result][jss::error] ==
INVALID);
205 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
210 auto const result = env.rpc(
218 result[jss::result][jss::status] == jss::error &&
219 result[jss::result][jss::error] ==
INVALID);
221 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
226 auto const result = env.rpc(
233 result[jss::result][jss::status] == jss::error &&
234 result[jss::result][jss::error] ==
INVALID);
236 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
241 auto const result = env.rpc(
251 BEAST_EXPECT(result[jss::result][jss::status] == jss::error);
253 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
258 auto const result = env.rpc(
266 result[jss::result][jss::status] == jss::error &&
267 result[jss::result][jss::error] == EXCESSIVE);
269 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));