20 #include <ripple/app/misc/NetworkOPs.h>
21 #include <ripple/beast/unit_test.h>
22 #include <ripple/protocol/jss.h>
25 #include <boost/format.hpp>
31 namespace validator_data {
33 "nHBt9fsb4849WmZiCds4r5TXyBeQjqnH5kzPtqgMAQMgi39YZRPa";
36 "eyJ2YWxpZGF0aW9uX3NlY3JldF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT\n"
37 "QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYTlkYWY2IiwibWFuaWZl\n"
38 "c3QiOiJKQUFBQUFGeEllMUZ0d21pbXZHdEgyaUNjTUpxQzlnVkZLaWxHZncxL3ZDeE\n"
39 "hYWExwbGMyR25NaEFrRTFhZ3FYeEJ3RHdEYklENk9NU1l1TTBGREFscEFnTms4U0tG\n"
40 "bjdNTzJmZGtjd1JRSWhBT25ndTlzQUtxWFlvdUorbDJWMFcrc0FPa1ZCK1pSUzZQU2\n"
41 "hsSkFmVXNYZkFpQnNWSkdlc2FhZE9KYy9hQVpva1MxdnltR21WcmxIUEtXWDNZeXd1\n"
42 "NmluOEhBU1FLUHVnQkQ2N2tNYVJGR3ZtcEFUSGxHS0pkdkRGbFdQWXk1QXFEZWRGdj\n"
43 "VUSmEydzBpMjFlcTNNWXl3TFZKWm5GT3I3QzBrdzJBaVR6U0NqSXpkaXRROD0ifQ==\n";
52 auto p = std::make_unique<Config>();
53 boost::format toLoad(R
"rippleConfig(
71 p->loadFromString(boost::str(
82 testcase(
"server_info");
84 using namespace test::jtx;
88 auto const result = env.
rpc(
"server_info");
89 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
90 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
91 BEAST_EXPECT(result[jss::result].isMember(jss::info));
101 auto const& ports = result[jss::ports];
102 BEAST_EXPECT(ports.isArray() && ports.size() == 0);
107 auto const rpc_port =
108 (*config)[
"port_rpc"].get<
unsigned int>(
"port");
109 auto const grpc_port =
110 (*config)[
"port_grpc"].get<
unsigned int>(
"port");
111 auto const ws_port = (*config)[
"port_ws"].get<
unsigned int>(
"port");
112 BEAST_EXPECT(grpc_port);
113 BEAST_EXPECT(rpc_port);
114 BEAST_EXPECT(ws_port);
116 Env env(*
this, std::move(config));
117 auto const result = env.
rpc(
"server_info");
118 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
119 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
120 BEAST_EXPECT(result[jss::result].isMember(jss::info));
122 result[jss::result][jss::info][jss::pubkey_validator] ==
125 auto const& ports = result[jss::result][jss::info][jss::ports];
126 BEAST_EXPECT(ports.isArray() && ports.size() == 3);
127 for (
auto const& port : ports)
129 auto const& proto = port[jss::protocol];
130 BEAST_EXPECT(proto.isArray());
131 auto const p = port[jss::port].asUInt();
132 BEAST_EXPECT(p == rpc_port || p == ws_port || p == grpc_port);
135 BEAST_EXPECT(proto.size() == 1);
136 BEAST_EXPECT(proto[0u].asString() ==
"grpc");
140 BEAST_EXPECT(proto.size() == 2);
141 BEAST_EXPECT(proto[0u].asString() ==
"http");
142 BEAST_EXPECT(proto[1u].asString() ==
"ws2");
146 BEAST_EXPECT(proto.size() == 1);
147 BEAST_EXPECT(proto[0u].asString() ==
"ws");
156 testcase(
"server_definitions");
158 using namespace test::jtx;
162 auto const result = env.
rpc(
"server_definitions");
163 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
164 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
165 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
166 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
168 result[jss::result].isMember(jss::TRANSACTION_RESULTS));
169 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
170 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
171 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
177 auto const firstField = result[jss::result][jss::FIELDS][0u];
178 BEAST_EXPECT(firstField[0u].asString() ==
"Generic");
180 firstField[1][jss::isSerialized].asBool() ==
false);
182 firstField[1][jss::isSigningField].asBool() ==
false);
183 BEAST_EXPECT(firstField[1][jss::isVLEncoded].asBool() ==
false);
184 BEAST_EXPECT(firstField[1][jss::nth].asUInt() == 0);
185 BEAST_EXPECT(firstField[1][jss::type].asString() ==
"Unknown");
189 result[jss::result][jss::LEDGER_ENTRY_TYPES][
"AccountRoot"]
192 result[jss::result][jss::TRANSACTION_RESULTS][
"tecDIR_FULL"]
195 result[jss::result][jss::TRANSACTION_TYPES][
"Payment"]
198 result[jss::result][jss::TYPES][
"AccountID"].asUInt() == 8);
204 auto const firstResult = env.
rpc(
"server_definitions");
205 auto const hash = firstResult[jss::result][jss::hash].
asString();
206 auto const hashParam =
210 env.
rpc(
"json",
"server_definitions", hashParam);
211 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
212 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
213 BEAST_EXPECT(!result[jss::result].isMember(jss::FIELDS));
215 !result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
217 !result[jss::result].isMember(jss::TRANSACTION_RESULTS));
218 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_TYPES));
219 BEAST_EXPECT(!result[jss::result].isMember(jss::TYPES));
220 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
227 "54296160385A27154BFA70A239DD8E8FD4CC2DB7BA32D970BA3A5B132CF749"
229 auto const hashParam =
233 env.
rpc(
"json",
"server_definitions", hashParam);
234 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
235 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
236 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
237 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
239 result[jss::result].isMember(jss::TRANSACTION_RESULTS));
240 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
241 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
242 BEAST_EXPECT(result[jss::result].isMember(jss::hash));