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));
82 "{\"api_version\": " +
84 BEAST_EXPECT(badVersion(re));
86 re = env.rpc(
"json",
"version",
"{\"api_version\": \"a\"}");
87 BEAST_EXPECT(badVersion(re));
93 testcase(
"test getAPIVersionNumber function");
95 unsigned int versionIfUnspecified =
142 j_object[jss::api_version] =
"a";
151 testcase(
"batch, all good request");
153 using namespace test::jtx;
156 auto const without_api_verion =
std::string(
"{ ") +
157 "\"jsonrpc\": \"2.0\", "
158 "\"ripplerpc\": \"2.0\", "
160 "\"method\": \"version\", "
163 "\"jsonrpc\": \"2.0\", "
164 "\"ripplerpc\": \"2.0\", "
166 "\"method\": \"version\", "
168 "\"api_version\": " +
171 "json2",
'[' + without_api_verion +
", " + with_api_verion +
']');
173 if (!BEAST_EXPECT(re.isArray()))
175 if (!BEAST_EXPECT(re.size() == 2))
178 re[0u].isMember(jss::result) &&
179 re[0u][jss::result].isMember(jss::version));
181 re[1u].isMember(jss::result) &&
182 re[1u][jss::result].isMember(jss::version));
188 testcase(
"batch, with a bad request");
190 using namespace test::jtx;
193 auto const without_api_verion =
std::string(
"{ ") +
194 "\"jsonrpc\": \"2.0\", "
195 "\"ripplerpc\": \"2.0\", "
197 "\"method\": \"version\", "
199 auto const with_wrong_api_verion =
std::string(
"{ ") +
200 "\"jsonrpc\": \"2.0\", "
201 "\"ripplerpc\": \"2.0\", "
203 "\"method\": \"version\", "
205 "\"api_version\": " +
209 '[' + without_api_verion +
", " + with_wrong_api_verion +
']');
211 if (!BEAST_EXPECT(re.isArray()))
213 if (!BEAST_EXPECT(re.size() == 2))
216 re[0u].isMember(jss::result) &&
217 re[0u][jss::result].isMember(jss::version));
218 BEAST_EXPECT(re[1u].isMember(jss::error));
224 testcase(
"config test");
246 testcase(
"test version RPC with api_version >= 2");
248 using namespace test::jtx;
250 c->loadFromString(
"\n[beta_rpc_api]\n1\n");
253 if (!BEAST_EXPECT(env.app().config().BETA_RPC_API ==
true))
262 if (!BEAST_EXPECT(jrr.isMember(jss::version)))
264 if (!BEAST_EXPECT(jrr[jss::version].isMember(jss::first)) &&
265 jrr[jss::version].isMember(jss::last))