20 #include <ripple/app/misc/NetworkOPs.h>
21 #include <ripple/beast/unit_test.h>
22 #include <ripple/core/ConfigSections.h>
23 #include <ripple/protocol/jss.h>
26 #include <boost/format.hpp>
32 namespace validator_data {
34 "nHBt9fsb4849WmZiCds4r5TXyBeQjqnH5kzPtqgMAQMgi39YZRPa";
37 "eyJ2YWxpZGF0aW9uX3NlY3JldF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT\n"
38 "QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYTlkYWY2IiwibWFuaWZl\n"
39 "c3QiOiJKQUFBQUFGeEllMUZ0d21pbXZHdEgyaUNjTUpxQzlnVkZLaWxHZncxL3ZDeE\n"
40 "hYWExwbGMyR25NaEFrRTFhZ3FYeEJ3RHdEYklENk9NU1l1TTBGREFscEFnTms4U0tG\n"
41 "bjdNTzJmZGtjd1JRSWhBT25ndTlzQUtxWFlvdUorbDJWMFcrc0FPa1ZCK1pSUzZQU2\n"
42 "hsSkFmVXNYZkFpQnNWSkdlc2FhZE9KYy9hQVpva1MxdnltR21WcmxIUEtXWDNZeXd1\n"
43 "NmluOEhBU1FLUHVnQkQ2N2tNYVJGR3ZtcEFUSGxHS0pkdkRGbFdQWXk1QXFEZWRGdj\n"
44 "VUSmEydzBpMjFlcTNNWXl3TFZKWm5GT3I3QzBrdzJBaVR6U0NqSXpkaXRROD0ifQ==\n";
53 auto p = std::make_unique<Config>();
54 boost::format toLoad(R
"rippleConfig(
72 p->loadFromString(boost::str(
83 testcase(
"server_info");
85 using namespace test::jtx;
89 auto const result = env.
rpc(
"server_info");
90 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
91 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
92 BEAST_EXPECT(result[jss::result].isMember(jss::info));
102 auto const& ports = result[jss::ports];
103 BEAST_EXPECT(ports.isArray() && ports.size() == 0);
108 auto const rpc_port =
109 (*config)[
"port_rpc"].get<
unsigned int>(
"port");
110 auto const grpc_port =
111 (*config)[SECTION_PORT_GRPC].get<
unsigned int>(
"port");
112 auto const ws_port = (*config)[
"port_ws"].get<
unsigned int>(
"port");
113 BEAST_EXPECT(grpc_port);
114 BEAST_EXPECT(rpc_port);
115 BEAST_EXPECT(ws_port);
117 Env env(*
this, std::move(config));
118 auto const result = env.
rpc(
"server_info");
119 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
120 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
121 BEAST_EXPECT(result[jss::result].isMember(jss::info));
123 result[jss::result][jss::info][jss::pubkey_validator] ==
126 auto const& ports = result[jss::result][jss::info][jss::ports];
127 BEAST_EXPECT(ports.isArray() && ports.size() == 3);
128 for (
auto const& port : ports)
130 auto const& proto = port[jss::protocol];
131 BEAST_EXPECT(proto.isArray());
132 auto const p = port[jss::port].asUInt();
133 BEAST_EXPECT(p == rpc_port || p == ws_port || p == grpc_port);
136 BEAST_EXPECT(proto.size() == 1);
137 BEAST_EXPECT(proto[0u].asString() ==
"grpc");
141 BEAST_EXPECT(proto.size() == 2);
142 BEAST_EXPECT(proto[0u].asString() ==
"http");
143 BEAST_EXPECT(proto[1u].asString() ==
"ws2");
147 BEAST_EXPECT(proto.size() == 1);
148 BEAST_EXPECT(proto[0u].asString() ==
"ws");
157 testcase(
"server_definitions");
159 using namespace test::jtx;
163 auto const result = env.
rpc(
"server_definitions");
164 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
165 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
166 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
167 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
169 result[jss::result].isMember(jss::TRANSACTION_RESULTS));
170 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
171 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
172 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
178 auto const firstField = result[jss::result][jss::FIELDS][0u];
179 BEAST_EXPECT(firstField[0u].asString() ==
"Generic");
181 firstField[1][jss::isSerialized].asBool() ==
false);
183 firstField[1][jss::isSigningField].asBool() ==
false);
184 BEAST_EXPECT(firstField[1][jss::isVLEncoded].asBool() ==
false);
185 BEAST_EXPECT(firstField[1][jss::nth].asUInt() == 0);
186 BEAST_EXPECT(firstField[1][jss::type].asString() ==
"Unknown");
190 result[jss::result][jss::LEDGER_ENTRY_TYPES][
"AccountRoot"]
193 result[jss::result][jss::TRANSACTION_RESULTS][
"tecDIR_FULL"]
196 result[jss::result][jss::TRANSACTION_TYPES][
"Payment"]
199 result[jss::result][jss::TYPES][
"AccountID"].asUInt() == 8);
205 auto const firstResult = env.
rpc(
"server_definitions");
206 auto const hash = firstResult[jss::result][jss::hash].
asString();
207 auto const hashParam =
211 env.
rpc(
"json",
"server_definitions", hashParam);
212 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
213 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
214 BEAST_EXPECT(!result[jss::result].isMember(jss::FIELDS));
216 !result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
218 !result[jss::result].isMember(jss::TRANSACTION_RESULTS));
219 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_TYPES));
220 BEAST_EXPECT(!result[jss::result].isMember(jss::TYPES));
221 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
228 "54296160385A27154BFA70A239DD8E8FD4CC2DB7BA32D970BA3A5B132CF749"
230 auto const hashParam =
234 env.
rpc(
"json",
"server_definitions", hashParam);
235 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
236 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
237 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
238 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
240 result[jss::result].isMember(jss::TRANSACTION_RESULTS));
241 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
242 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
243 BEAST_EXPECT(result[jss::result].isMember(jss::hash));