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