xrpld
Loading...
Searching...
No Matches
ServerInfo_test.cpp
1
2#include <test/jtx/Env.h>
3#include <test/jtx/envconfig.h>
4
5#include <xrpld/core/Config.h>
6
7#include <xrpl/beast/unit_test/suite.h>
8#include <xrpl/config/Constants.h>
9#include <xrpl/protocol/jss.h>
10#include <xrpl/server/NetworkOPs.h>
11
12#include <boost/format/free_funcs.hpp>
13
14#include <memory>
15
16namespace xrpl::test {
17
18namespace validator_data {
19static auto const kPublicKey = "nHBt9fsb4849WmZiCds4r5TXyBeQjqnH5kzPtqgMAQMgi39YZRPa";
20
21static auto const kToken =
22 "eyJ2YWxpZGF0aW9uX3NlY3JldF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT\n"
23 "QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYTlkYWY2IiwibWFuaWZl\n"
24 "c3QiOiJKQUFBQUFGeEllMUZ0d21pbXZHdEgyaUNjTUpxQzlnVkZLaWxHZncxL3ZDeE\n"
25 "hYWExwbGMyR25NaEFrRTFhZ3FYeEJ3RHdEYklENk9NU1l1TTBGREFscEFnTms4U0tG\n"
26 "bjdNTzJmZGtjd1JRSWhBT25ndTlzQUtxWFlvdUorbDJWMFcrc0FPa1ZCK1pSUzZQU2\n"
27 "hsSkFmVXNYZkFpQnNWSkdlc2FhZE9KYy9hQVpva1MxdnltR21WcmxIUEtXWDNZeXd1\n"
28 "NmluOEhBU1FLUHVnQkQ2N2tNYVJGR3ZtcEFUSGxHS0pkdkRGbFdQWXk1QXFEZWRGdj\n"
29 "VUSmEydzBpMjFlcTNNWXl3TFZKWm5GT3I3QzBrdzJBaVR6U0NqSXpkaXRROD0ifQ==\n";
30} // namespace validator_data
31
33{
34public:
37 {
38 auto p = std::make_unique<Config>();
39 boost::format toLoad(R"xrpldConfig(
40[validator_token]
41%1%
42
43[validators]
44%2%
45
46[port_grpc]
47ip = 0.0.0.0
48port = 50051
50[port_admin]
51ip = 0.0.0.0
52port = 50052
53protocol = wss2
54admin = 127.0.0.1
55)xrpldConfig");
56
57 p->loadFromString(boost::str(toLoad % validator_data::kToken % validator_data::kPublicKey));
58
60
61 return p;
62 }
63
64 void
66 {
67 testcase("server_info");
68
69 using namespace test::jtx;
70
71 {
72 Env env(*this);
73 auto const serverinfo = env.rpc("server_info");
74 BEAST_EXPECT(serverinfo.isMember(jss::result));
75 auto const& result = serverinfo[jss::result];
76 BEAST_EXPECT(!result.isMember(jss::error));
77 BEAST_EXPECT(result[jss::status] == "success");
78 BEAST_EXPECT(result.isMember(jss::info));
79 auto const& info = result[jss::info];
80 BEAST_EXPECT(info.isMember(jss::build_version));
81 // Git info is not guaranteed to be present
82 if (info.isMember(jss::git))
83 {
84 auto const& git = info[jss::git];
85 BEAST_EXPECT(git.isMember(jss::hash) || git.isMember(jss::branch));
86 BEAST_EXPECT(
87 !git.isMember(jss::hash) ||
88 (git[jss::hash].isString() && git[jss::hash].asString().size() == 40));
89 BEAST_EXPECT(
90 !git.isMember(jss::branch) ||
91 (git[jss::branch].isString() && !git[jss::branch].asString().empty()));
92 }
93 }
94
95 {
96 Env env(*this);
97
98 // Call NetworkOPs directly and set the admin flag to false.
99 auto const result = env.app().getOPs().getServerInfo(true, false, false);
100 // Expect that the admin ports are not included in the result.
101 auto const& ports = result[jss::ports];
102 BEAST_EXPECT(ports.isArray() && ports.size() == 0);
103 // Expect that git info is absent
104 BEAST_EXPECT(!result.isMember(jss::git));
105 }
106
107 {
108 Env env(*this, makeValidatorConfig());
109 auto const& config = env.app().config();
110
111 auto const rpcPort = config[Sections::kPortRpc].get<unsigned int>(Keys::kPort);
112 auto const grpcPort = config[Sections::kPortGrpc].get<unsigned int>(Keys::kPort);
113 auto const wsPort = config[Sections::kPortWs].get<unsigned int>(Keys::kPort);
114 BEAST_EXPECT(grpcPort);
115 BEAST_EXPECT(rpcPort);
116 BEAST_EXPECT(wsPort);
117
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));
122 BEAST_EXPECT(
123 result[jss::result][jss::info][jss::pubkey_validator] ==
125
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)
129 {
130 auto const& proto = port[jss::protocol];
131 BEAST_EXPECT(proto.isArray());
132 auto const p = port[jss::port].asUInt();
133 BEAST_EXPECT(p == rpcPort || p == wsPort || p == grpcPort);
134 if (p == grpcPort)
135 {
136 BEAST_EXPECT(proto.size() == 1);
137 BEAST_EXPECT(proto[0u].asString() == "grpc");
138 }
139 if (p == rpcPort)
140 {
141 BEAST_EXPECT(proto.size() == 2);
142 BEAST_EXPECT(proto[0u].asString() == "http");
143 BEAST_EXPECT(proto[1u].asString() == "ws2");
144 }
145 if (p == wsPort)
146 {
147 BEAST_EXPECT(proto.size() == 1);
148 BEAST_EXPECT(proto[0u].asString() == "ws");
149 }
150 }
151 }
152 }
153
154 void
155 run() override
156 {
158 }
159};
160
161BEAST_DEFINE_TESTSUITE(ServerInfo, rpc, xrpl);
162
163} // namespace xrpl::test
A testsuite class.
Definition suite.h:50
TestcaseT testcase
Memberspace for declaring test cases.
Definition suite.h:149
void run() override
Runs the suite.
static std::unique_ptr< Config > makeValidatorConfig()
A transaction testing environment.
Definition Env.h:143
T make_unique(T... args)
Definition Git.h:5
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
void setupConfigForUnitTests(Config &config)
initializes a config object for use with jtx::Env
Definition envconfig.cpp:19
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
static constexpr auto kPort
Definition Constants.h:142
static constexpr auto kPortWs
Definition Constants.h:47
static constexpr auto kPortRpc
Definition Constants.h:46
static constexpr auto kPortGrpc
Definition Constants.h:44