2#include <test/jtx/Env.h>
3#include <test/jtx/envconfig.h>
5#include <xrpl/beast/unit_test/suite.h>
6#include <xrpl/json/json_value.h>
7#include <xrpl/protocol/ApiVersion.h>
8#include <xrpl/protocol/jss.h>
21 testcase(
"right api_version: explicitly specified or filled by parser");
26 auto isCorrectReply = [](
json::Value const& re) ->
bool {
27 if (re.isMember(jss::error))
29 return re.isMember(jss::version);
37 BEAST_EXPECT(isCorrectReply(jrr));
39 jrr = env.rpc(
"version")[jss::result];
40 BEAST_EXPECT(isCorrectReply(jrr));
46 testcase(
"wrong api_version: too low, too high, or wrong format");
51 auto badVersion = [](
json::Value const& re) ->
bool {
52 if (re.isMember(
"error_what"))
54 if (re[
"error_what"].isString())
56 return re[
"error_what"].asString().starts_with(jss::invalid_API_version.cStr());
66 BEAST_EXPECT(badVersion(re));
68 BEAST_EXPECT(env.app().config().betaRpcApi);
72 "{\"api_version\": " +
77 BEAST_EXPECT(badVersion(re));
79 re = env.rpc(
"json",
"version",
"{\"api_version\": \"a\"}");
80 BEAST_EXPECT(badVersion(re));
86 testcase(
"test getAPIVersionNumber function");
88 unsigned int const versionIfUnspecified =
119 jObject[jss::api_version] =
"a";
126 testcase(
"batch, all good request");
132 "\"jsonrpc\": \"2.0\", "
133 "\"ripplerpc\": \"2.0\", "
135 "\"method\": \"version\", "
138 "\"jsonrpc\": \"2.0\", "
139 "\"ripplerpc\": \"2.0\", "
141 "\"method\": \"version\", "
143 "\"api_version\": " +
145 auto re = env.rpc(
"json2",
'[' + withoutApiVerion +
", " + withApiVerion +
']');
147 if (!BEAST_EXPECT(re.isArray()))
149 if (!BEAST_EXPECT(re.size() == 2))
151 BEAST_EXPECT(re[0u].isMember(jss::result) && re[0u][jss::result].isMember(jss::version));
152 BEAST_EXPECT(re[1u].isMember(jss::result) && re[1u][jss::result].isMember(jss::version));
158 testcase(
"batch, with a bad request");
163 BEAST_EXPECT(env.app().config().betaRpcApi);
165 "\"jsonrpc\": \"2.0\", "
166 "\"ripplerpc\": \"2.0\", "
168 "\"method\": \"version\", "
170 auto const withWrongApiVerion =
172 "\"jsonrpc\": \"2.0\", "
173 "\"ripplerpc\": \"2.0\", "
175 "\"method\": \"version\", "
177 "\"api_version\": " +
181 auto re = env.rpc(
"json2",
'[' + withoutApiVerion +
", " + withWrongApiVerion +
']');
183 if (!BEAST_EXPECT(re.isArray()))
185 if (!BEAST_EXPECT(re.size() == 2))
187 BEAST_EXPECT(re[0u].isMember(jss::result) && re[0u][jss::result].isMember(jss::version));
188 BEAST_EXPECT(re[1u].isMember(jss::error));
216 testcase(
"test version RPC with api_version >= 2");
220 c->loadFromString(
"\n[beta_rpc_api]\n1\n");
223 if (!BEAST_EXPECT(env.app().config().betaRpcApi ==
true))
231 if (!BEAST_EXPECT(jrr.isMember(jss::version)))
233 if (!BEAST_EXPECT(jrr[jss::version].isMember(jss::first)) &&
234 jrr[jss::version].isMember(jss::last))
TestcaseT testcase
Memberspace for declaring test cases.
void loadFromString(std::string const &fileContents)
Load the config from the contents of the string.
void testGetAPIVersionNumber()
void testCorrectVersionNumber()
void run() override
Runs the suite.
void testWrongVersionNumber()
@ Array
array value (ordered list)
@ Object
object value (collection of name/value pairs).
static constexpr auto kApiInvalidVersion
static constexpr auto kApiMinimumSupportedVersion
static constexpr auto kApiVersionIfUnspecified
static constexpr auto kApiBetaVersion
unsigned int getAPIVersionNumber(json::Value const &jv, bool betaEnabled)
Retrieve the api version number from the json value.
static constexpr auto kApiMaximumSupportedVersion
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)