20 #include <ripple/basics/BasicConfig.h>
21 #include <ripple/overlay/Cluster.h>
22 #include <ripple/overlay/ClusterNode.h>
23 #include <ripple/protocol/SecretKey.h>
24 #include <test/jtx/TestSuite.h>
25 #include <test/unit_test/SuiteJournal.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)
103 auto found =
std::find(cluster.begin(), cluster.end(), n);
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)
123 auto found =
std::find(cluster.begin(), cluster.end(), n);
125 static_cast<bool>(c->member(n)) ==
126 (found != cluster.end()));
134 testcase(
"Updating");
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);
192 testcase(
"Config Load");
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));