20#include <test/jtx/TestSuite.h>
21#include <test/unit_test/SuiteJournal.h>
22#include <xrpld/overlay/Cluster.h>
23#include <xrpl/basics/BasicConfig.h>
24#include <xrpl/protocol/SecretKey.h>
41 auto cluster = std::make_unique<Cluster>(
journal_);
43 for (
auto const& n : nodes)
44 cluster->update(n,
"Test");
61 while (network.
size() != 128)
65 testcase(
"Membership: Empty cluster");
69 for (
auto const& n : network)
70 BEAST_EXPECT(!c->member(n));
74 testcase(
"Membership: Non-empty cluster and none present");
77 while (cluster.
size() != 32)
82 for (
auto const& n : network)
83 BEAST_EXPECT(!c->member(n));
87 testcase(
"Membership: Non-empty cluster and some present");
92 while (cluster.
size() != 32)
97 for (
auto const& n : cluster)
98 BEAST_EXPECT(c->member(n));
100 for (
auto const& n : network)
104 static_cast<bool>(c->member(n)) ==
105 (found != cluster.
end()));
110 testcase(
"Membership: Non-empty cluster and all present");
117 for (
auto const& n : cluster)
118 BEAST_EXPECT(c->member(n));
120 for (
auto const& n : network)
124 static_cast<bool>(c->member(n)) ==
125 (found != cluster.
end()));
143 BEAST_EXPECT(c->update(node,
"", load, tick));
145 auto member = c->member(node);
146 BEAST_EXPECT(
static_cast<bool>(member));
147 BEAST_EXPECT(member->empty());
151 BEAST_EXPECT(!c->update(node, name, load, tick));
153 auto member = c->member(node);
154 BEAST_EXPECT(
static_cast<bool>(member));
155 BEAST_EXPECT(member->empty());
158 using namespace std::chrono_literals;
162 BEAST_EXPECT(c->update(node, name, load, tick));
164 auto member = c->member(node);
165 BEAST_EXPECT(
static_cast<bool>(member));
166 BEAST_EXPECT(member->compare(name) == 0);
171 BEAST_EXPECT(c->update(node,
"", load, tick));
173 auto member = c->member(node);
174 BEAST_EXPECT(
static_cast<bool>(member));
175 BEAST_EXPECT(member->compare(name) == 0);
180 BEAST_EXPECT(c->update(node,
"test", load, tick));
182 auto member = c->member(node);
183 BEAST_EXPECT(
static_cast<bool>(member));
184 BEAST_EXPECT(member->compare(
"test") == 0);
193 auto c = std::make_unique<Cluster>(
journal_);
198 while (network.
size() != 8)
201 auto format = [](
PublicKey const& publicKey,
202 char const* comment =
nullptr) {
214 BEAST_EXPECT(c->load(s1));
215 BEAST_EXPECT(c->size() == 0);
218 s1.
append(format(network[0]));
219 s1.
append(format(network[1],
" "));
220 s1.
append(format(network[2],
" Comment"));
221 s1.
append(format(network[3],
" Multi Word Comment"));
222 s1.
append(format(network[4],
" Leading Whitespace"));
223 s1.
append(format(network[5],
" Trailing Whitespace "));
224 s1.
append(format(network[6],
" Leading & Trailing Whitespace "));
226 network[7],
" Leading, Trailing & Internal Whitespace "));
228 BEAST_EXPECT(c->load(s1));
230 for (
auto const& n : network)
231 BEAST_EXPECT(c->member(n));
235 s2.
append(
"NotAPublicKey");
236 BEAST_EXPECT(!c->load(s2));
239 s3.
append(format(network[0],
"!"));
240 BEAST_EXPECT(!c->load(s3));
243 s4.
append(format(network[0],
"! Comment"));
244 BEAST_EXPECT(!c->load(s4));
252 s5.
append(format(node1,
"XXX"));
254 BEAST_EXPECT(!c->load(s5));
255 BEAST_EXPECT(!c->member(node1));
256 BEAST_EXPECT(!c->member(node2));
268BEAST_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.