20 #include <ripple/app/rdb/backend/SQLiteDatabase.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 ->deleteTransactionByLedgerSeq(deletedLedger);
126 for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
128 auto const result = env.rpc(
136 result[jss::result][jss::status] == jss::error &&
137 result[jss::result][jss::error] == NOT_FOUND);
138 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
144 auto const result = env.rpc(
151 result[jss::result][jss::status] == jss::error &&
152 result[jss::result][jss::error] == NOT_FOUND);
154 BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
160 auto const result = env.rpc(
167 result[jss::result][jss::status] == jss::error &&
168 result[jss::result][jss::error] == NOT_FOUND);
170 BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
176 auto const result = env.rpc(
182 BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
183 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
188 auto const result = env.rpc(
196 result[jss::result][jss::status] == jss::error &&
197 result[jss::result][jss::error] ==
INVALID);
199 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
204 auto const result = env.rpc(
212 result[jss::result][jss::status] == jss::error &&
213 result[jss::result][jss::error] ==
INVALID);
215 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
220 auto const result = env.rpc(
228 result[jss::result][jss::status] == jss::error &&
229 result[jss::result][jss::error] ==
INVALID);
231 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
236 auto const result = env.rpc(
243 result[jss::result][jss::status] == jss::error &&
244 result[jss::result][jss::error] ==
INVALID);
246 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
251 auto const result = env.rpc(
259 BEAST_EXPECT(result[jss::result][jss::status] == jss::error);
261 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
266 auto const result = env.rpc(
274 result[jss::result][jss::status] == jss::error &&
275 result[jss::result][jss::error] == EXCESSIVE);
277 BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));