20 #include <ripple/protocol/jss.h>
21 #include <ripple/rpc/impl/RPCHelpers.h>
31 testcase(
"right api_version: explicitly specified or filled by parser");
33 using namespace test::jtx;
36 auto isCorrectReply = [](
Json::Value const& re) ->
bool {
37 if (re.isMember(jss::error))
39 return re.isMember(jss::version);
45 "{\"api_version\": " +
48 BEAST_EXPECT(isCorrectReply(jrr));
50 jrr = env.rpc(
"version")[jss::result];
51 BEAST_EXPECT(isCorrectReply(jrr));
57 testcase(
"wrong api_version: too low, too high, or wrong format");
59 using namespace test::jtx;
62 auto badVersion = [](
Json::Value const& re) ->
bool {
63 if (re.isMember(
"error_what"))
64 if (re[
"error_what"].isString())
66 return re[
"error_what"].asString().find(
67 jss::invalid_API_version.c_str()) == 0;
75 "{\"api_version\": " +
77 BEAST_EXPECT(badVersion(re));
79 BEAST_EXPECT(env.app().config().BETA_RPC_API);
83 "{\"api_version\": " +
89 BEAST_EXPECT(badVersion(re));
91 re = env.rpc(
"json",
"version",
"{\"api_version\": \"a\"}");
92 BEAST_EXPECT(badVersion(re));
98 testcase(
"test getAPIVersionNumber function");
100 unsigned int versionIfUnspecified =
147 j_object[jss::api_version] =
"a";
156 testcase(
"batch, all good request");
158 using namespace test::jtx;
161 auto const without_api_verion =
std::string(
"{ ") +
162 "\"jsonrpc\": \"2.0\", "
163 "\"ripplerpc\": \"2.0\", "
165 "\"method\": \"version\", "
168 "\"jsonrpc\": \"2.0\", "
169 "\"ripplerpc\": \"2.0\", "
171 "\"method\": \"version\", "
173 "\"api_version\": " +
176 "json2",
'[' + without_api_verion +
", " + with_api_verion +
']');
178 if (!BEAST_EXPECT(re.isArray()))
180 if (!BEAST_EXPECT(re.size() == 2))
183 re[0u].isMember(jss::result) &&
184 re[0u][jss::result].isMember(jss::version));
186 re[1u].isMember(jss::result) &&
187 re[1u][jss::result].isMember(jss::version));
193 testcase(
"batch, with a bad request");
195 using namespace test::jtx;
198 BEAST_EXPECT(env.app().config().BETA_RPC_API);
199 auto const without_api_verion =
std::string(
"{ ") +
200 "\"jsonrpc\": \"2.0\", "
201 "\"ripplerpc\": \"2.0\", "
203 "\"method\": \"version\", "
205 auto const with_wrong_api_verion =
207 "\"jsonrpc\": \"2.0\", "
208 "\"ripplerpc\": \"2.0\", "
210 "\"method\": \"version\", "
212 "\"api_version\": " +
219 '[' + without_api_verion +
", " + with_wrong_api_verion +
']');
221 if (!BEAST_EXPECT(re.isArray()))
223 if (!BEAST_EXPECT(re.size() == 2))
226 re[0u].isMember(jss::result) &&
227 re[0u][jss::result].isMember(jss::version));
228 BEAST_EXPECT(re[1u].isMember(jss::error));
234 testcase(
"config test");
256 testcase(
"test version RPC with api_version >= 2");
258 using namespace test::jtx;
260 c->loadFromString(
"\n[beta_rpc_api]\n1\n");
263 if (!BEAST_EXPECT(env.app().config().BETA_RPC_API ==
true))
272 if (!BEAST_EXPECT(jrr.isMember(jss::version)))
274 if (!BEAST_EXPECT(jrr[jss::version].isMember(jss::first)) &&
275 jrr[jss::version].isMember(jss::last))