20#include <test/jtx/TestSuite.h>
21#include <test/unit_test/SuiteJournal.h>
22#include <xrpld/overlay/Cluster.h>
23#include <xrpld/overlay/ClusterNode.h>
24#include <xrpl/basics/BasicConfig.h>
25#include <xrpl/protocol/SecretKey.h>
42 auto cluster = std::make_unique<Cluster>(
journal_);
44 for (
auto const& n : nodes)
45 cluster->update(n,
"Test");
62 while (network.
size() != 128)
66 testcase(
"Membership: Empty cluster");
70 for (
auto const& n : network)
71 BEAST_EXPECT(!c->member(n));
75 testcase(
"Membership: Non-empty cluster and none present");
78 while (cluster.
size() != 32)
83 for (
auto const& n : network)
84 BEAST_EXPECT(!c->member(n));
88 testcase(
"Membership: Non-empty cluster and some present");
93 while (cluster.
size() != 32)
98 for (
auto const& n : cluster)
99 BEAST_EXPECT(c->member(n));
101 for (
auto const& n : network)
105 static_cast<bool>(c->member(n)) ==
106 (found != cluster.
end()));
111 testcase(
"Membership: Non-empty cluster and all present");
118 for (
auto const& n : cluster)
119 BEAST_EXPECT(c->member(n));
121 for (
auto const& n : network)
125 static_cast<bool>(c->member(n)) ==
126 (found != cluster.
end()));
144 BEAST_EXPECT(c->update(node,
"", load, tick));
146 auto member = c->member(node);
147 BEAST_EXPECT(
static_cast<bool>(member));
148 BEAST_EXPECT(member->empty());
152 BEAST_EXPECT(!c->update(node, name, load, tick));
154 auto member = c->member(node);
155 BEAST_EXPECT(
static_cast<bool>(member));
156 BEAST_EXPECT(member->empty());
159 using namespace std::chrono_literals;
163 BEAST_EXPECT(c->update(node, name, load, tick));
165 auto member = c->member(node);
166 BEAST_EXPECT(
static_cast<bool>(member));
167 BEAST_EXPECT(member->compare(name) == 0);
172 BEAST_EXPECT(c->update(node,
"", load, tick));
174 auto member = c->member(node);
175 BEAST_EXPECT(
static_cast<bool>(member));
176 BEAST_EXPECT(member->compare(name) == 0);
181 BEAST_EXPECT(c->update(node,
"test", load, tick));
183 auto member = c->member(node);
184 BEAST_EXPECT(
static_cast<bool>(member));
185 BEAST_EXPECT(member->compare(
"test") == 0);
194 auto c = std::make_unique<Cluster>(
journal_);
199 while (network.
size() != 8)
202 auto format = [](
PublicKey const& publicKey,
203 char const* comment =
nullptr) {
215 BEAST_EXPECT(c->load(s1));
216 BEAST_EXPECT(c->size() == 0);
219 s1.
append(format(network[0]));
220 s1.
append(format(network[1],
" "));
221 s1.
append(format(network[2],
" Comment"));
222 s1.
append(format(network[3],
" Multi Word Comment"));
223 s1.
append(format(network[4],
" Leading Whitespace"));
224 s1.
append(format(network[5],
" Trailing Whitespace "));
225 s1.
append(format(network[6],
" Leading & Trailing Whitespace "));
227 network[7],
" Leading, Trailing & Internal Whitespace "));
229 BEAST_EXPECT(c->load(s1));
231 for (
auto const& n : network)
232 BEAST_EXPECT(c->member(n));
236 s2.
append(
"NotAPublicKey");
237 BEAST_EXPECT(!c->load(s2));
240 s3.
append(format(network[0],
"!"));
241 BEAST_EXPECT(!c->load(s3));
244 s4.
append(format(network[0],
"! Comment"));
245 BEAST_EXPECT(!c->load(s4));
253 s5.
append(format(node1,
"XXX"));
255 BEAST_EXPECT(!c->load(s5));
256 BEAST_EXPECT(!c->member(node1));
257 BEAST_EXPECT(!c->member(node2));
269BEAST_DEFINE_TESTSUITE(cluster, overlay,
ripple);
testcase_t testcase
Memberspace for declaring test cases.
Holds a collection of configuration values.
void append(std::vector< std::string > const &lines)
Append a set of lines to this section.
void run() override
Runs the suite.
test::SuiteJournal journal_
std::unique_ptr< Cluster > create(std::vector< PublicKey > const &nodes)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
PublicKey derivePublicKey(KeyType type, SecretKey const &sk)
Derive the public key from a secret key.
SecretKey randomSecretKey()
Create a secret key using secure random numbers.