20 #include <ripple/app/rdb/backend/RelationalDBInterfaceSqlite.h>
21 #include <ripple/protocol/ErrorCodes.h>
22 #include <ripple/protocol/jss.h>
24 #include <test/jtx/Env.h>
25 #include <test/jtx/envconfig.h>
34 testcase(
"Test Range Request");
36 using namespace test::jtx;
39 const char* COMMAND = jss::tx.c_str();
40 const char* BINARY = jss::binary.c_str();
43 const char* EXCESSIVE =
47 auto const alice = Account(
"alice");
48 env.fund(XRP(1000), alice);
53 auto const startLegSeq = env.current()->info().seq;
54 for (
int i = 0; i < 750; ++i)
60 env.closed()->txRead(env.tx()->getTransactionID()).second);
62 auto const endLegSeq = env.closed()->info().seq;
65 for (
size_t i = 0; i < txns.
size(); ++i)
67 auto const& tx = txns[i];
68 auto const& meta = metas[i];
69 auto const result = env.rpc(
76 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
78 result[jss::result][jss::tx] ==
79 strHex(tx->getSerializer().getData()));
81 result[jss::result][jss::meta] ==
82 strHex(meta->getSerializer().getData()));
85 auto const tx = env.jt(noop(alice), seq(env.seq(alice))).stx;
86 for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
88 auto const result = env.rpc(
96 result[jss::result][jss::status] == jss::error &&
97 result[jss::result][jss::error] == NOT_FOUND);
100 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
102 BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
106 for (
auto&& tx : txns)
108 auto const result = env.rpc(
115 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
116 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
119 const auto deletedLedger = (startLegSeq + endLegSeq) / 2;
123 &env.app().getRelationalDBInterface())
124 ->deleteTransactionByLedgerSeq(deletedLedger);
127 for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
129 auto const result = env.rpc(
137 result[jss::result][jss::status] == jss::error &&
138 result[jss::result][jss::error] == NOT_FOUND);
139 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
145 auto const result = env.rpc(
152 result[jss::result][jss::status] == jss::error &&
153 result[jss::result][jss::error] == NOT_FOUND);
155 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
161 auto const result = env.rpc(
168 result[jss::result][jss::status] == jss::error &&
169 result[jss::result][jss::error] == NOT_FOUND);
171 BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
177 auto const result = env.rpc(
183 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
184 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
189 auto const result = env.rpc(
197 result[jss::result][jss::status] == jss::error &&
198 result[jss::result][jss::error] ==
INVALID);
200 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
205 auto const result = env.rpc(
213 result[jss::result][jss::status] == jss::error &&
214 result[jss::result][jss::error] ==
INVALID);
216 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
221 auto const result = env.rpc(
229 result[jss::result][jss::status] == jss::error &&
230 result[jss::result][jss::error] ==
INVALID);
232 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
237 auto const result = env.rpc(
244 result[jss::result][jss::status] == jss::error &&
245 result[jss::result][jss::error] ==
INVALID);
247 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
252 auto const result = env.rpc(
260 BEAST_EXPECT(result[jss::result][jss::status] == jss::error);
262 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
267 auto const result = env.rpc(
275 result[jss::result][jss::status] == jss::error &&
276 result[jss::result][jss::error] == EXCESSIVE);
278 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));