20#include <test/jtx/TestSuite.h>
21#include <test/unit_test/SuiteJournal.h>
23#include <xrpld/overlay/Cluster.h>
25#include <xrpl/basics/BasicConfig.h>
26#include <xrpl/protocol/SecretKey.h>
43 auto cluster = std::make_unique<Cluster>(
journal_);
45 for (
auto const& n : nodes)
46 cluster->update(n,
"Test");
63 while (network.
size() != 128)
67 testcase(
"Membership: Empty cluster");
71 for (
auto const& n : network)
72 BEAST_EXPECT(!c->member(n));
76 testcase(
"Membership: Non-empty cluster and none present");
79 while (cluster.
size() != 32)
84 for (
auto const& n : network)
85 BEAST_EXPECT(!c->member(n));
89 testcase(
"Membership: Non-empty cluster and some present");
94 while (cluster.
size() != 32)
99 for (
auto const& n : cluster)
100 BEAST_EXPECT(c->member(n));
102 for (
auto const& n : network)
106 static_cast<bool>(c->member(n)) ==
107 (found != cluster.
end()));
112 testcase(
"Membership: Non-empty cluster and all present");
119 for (
auto const& n : cluster)
120 BEAST_EXPECT(c->member(n));
122 for (
auto const& n : network)
126 static_cast<bool>(c->member(n)) ==
127 (found != cluster.
end()));
145 BEAST_EXPECT(c->update(node,
"", load, tick));
147 auto member = c->member(node);
148 BEAST_EXPECT(
static_cast<bool>(member));
149 BEAST_EXPECT(member->empty());
153 BEAST_EXPECT(!c->update(node, name, load, tick));
155 auto member = c->member(node);
156 BEAST_EXPECT(
static_cast<bool>(member));
157 BEAST_EXPECT(member->empty());
160 using namespace std::chrono_literals;
164 BEAST_EXPECT(c->update(node, name, load, tick));
166 auto member = c->member(node);
167 BEAST_EXPECT(
static_cast<bool>(member));
168 BEAST_EXPECT(member->compare(name) == 0);
173 BEAST_EXPECT(c->update(node,
"", load, tick));
175 auto member = c->member(node);
176 BEAST_EXPECT(
static_cast<bool>(member));
177 BEAST_EXPECT(member->compare(name) == 0);
182 BEAST_EXPECT(c->update(node,
"test", load, tick));
184 auto member = c->member(node);
185 BEAST_EXPECT(
static_cast<bool>(member));
186 BEAST_EXPECT(member->compare(
"test") == 0);
195 auto c = std::make_unique<Cluster>(
journal_);
200 while (network.
size() != 8)
203 auto format = [](
PublicKey const& publicKey,
204 char const* comment =
nullptr) {
216 BEAST_EXPECT(c->load(s1));
217 BEAST_EXPECT(c->size() == 0);
220 s1.
append(format(network[0]));
221 s1.
append(format(network[1],
" "));
222 s1.
append(format(network[2],
" Comment"));
223 s1.
append(format(network[3],
" Multi Word Comment"));
224 s1.
append(format(network[4],
" Leading Whitespace"));
225 s1.
append(format(network[5],
" Trailing Whitespace "));
226 s1.
append(format(network[6],
" Leading & Trailing Whitespace "));
228 network[7],
" Leading, Trailing & Internal Whitespace "));
230 BEAST_EXPECT(c->load(s1));
232 for (
auto const& n : network)
233 BEAST_EXPECT(c->member(n));
237 s2.
append(
"NotAPublicKey");
238 BEAST_EXPECT(!c->load(s2));
241 s3.
append(format(network[0],
"!"));
242 BEAST_EXPECT(!c->load(s3));
245 s4.
append(format(network[0],
"! Comment"));
246 BEAST_EXPECT(!c->load(s4));
254 s5.
append(format(node1,
"XXX"));
256 BEAST_EXPECT(!c->load(s5));
257 BEAST_EXPECT(!c->member(node1));
258 BEAST_EXPECT(!c->member(node2));
270BEAST_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.