21#include <xrpl/beast/unit_test.h>
23#include <boost/algorithm/string/classification.hpp>
24#include <boost/algorithm/string/split.hpp>
43 bool printHeaders =
false)
50 "DistributedValidators_"
51 "completeTrustCompleteConnectFixedDelay";
52 std::fstream txLog(prefix +
"_tx.csv", std::ofstream::app),
53 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
56 log << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")"
60 BEAST_EXPECT(numPeers >= 1);
63 PeerGroup peers = sim.createGroup(numPeers);
69 peers.connect(peers, delay);
72 TxCollector txCollector;
73 LedgerCollector ledgerCollector;
74 auto colls = makeCollectors(txCollector, ledgerCollector);
75 sim.collectors.add(colls);
86 HeartbeatTimer heart(sim.scheduler);
89 auto peerSelector = makeSelector(
94 auto txSubmitter = makeSubmitter(
95 ConstantDistribution{
rate.inv()},
96 sim.scheduler.now() + quiet,
97 sim.scheduler.now() + simDuration - quiet,
104 sim.run(simDuration);
112 << duration_cast<milliseconds>(simDuration).count() <<
" ms";
113 log <<
" | Branches: " <<
std::setw(1) << sim.branches();
115 << (sim.synchronized() ?
"Y" :
"N");
118 txCollector.report(simDuration,
log,
true);
119 ledgerCollector.report(simDuration,
log,
false);
122 txCollector.csv(simDuration, txLog, tag, printHeaders);
123 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
132 bool printHeaders =
false)
139 "DistributedValidators__"
140 "completeTrustScaleFreeConnectFixedDelay";
141 std::fstream txLog(prefix +
"_tx.csv", std::ofstream::app),
142 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
145 log << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")"
149 int const numCNLs =
std::max(
int(1.00 * numPeers), 1);
150 int const minCNLSize =
std::max(
int(0.25 * numCNLs), 1);
151 int const maxCNLSize =
std::max(
int(0.50 * numCNLs), 1);
152 BEAST_EXPECT(numPeers >= 1);
153 BEAST_EXPECT(numCNLs >= 1);
155 1 <= minCNLSize && minCNLSize <= maxCNLSize &&
156 maxCNLSize <= numPeers);
159 PeerGroup peers = sim.createGroup(numPeers);
166 sample(peers.size(), PowerLawDistribution{1, 3}, sim.rng);
176 TxCollector txCollector;
177 LedgerCollector ledgerCollector;
178 auto colls = makeCollectors(txCollector, ledgerCollector);
179 sim.collectors.add(colls);
190 HeartbeatTimer heart(sim.scheduler);
193 auto peerSelector = makeSelector(
198 auto txSubmitter = makeSubmitter(
199 ConstantDistribution{
rate.inv()},
200 sim.scheduler.now() + quiet,
201 sim.scheduler.now() + simDuration - quiet,
208 sim.run(simDuration);
216 << duration_cast<milliseconds>(simDuration).count() <<
" ms";
217 log <<
" | Branches: " <<
std::setw(1) << sim.branches();
219 << (sim.synchronized() ?
"Y" :
"N");
222 txCollector.report(simDuration,
log,
true);
223 ledgerCollector.report(simDuration,
log,
false);
226 txCollector.csv(simDuration, txLog, tag, printHeaders);
227 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
239 int maxNumValidators = 0;
241 argStream >> maxNumValidators;
242 argStream >> delayCount;
246 log <<
"DistributedValidators: 1 to " << maxNumValidators <<
" Peers"
256 for (
int i = 2; i <= maxNumValidators; i++)
268 for (
int i = 2; i <= maxNumValidators; i++)
275BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(DistributedValidators, consensus,
ripple, 2);
log_os< char > log
Logging output stream.
std::string const & arg() const
Return the argument associated with the runner.
In progress simulations for diversifying and distributing validators.
void completeTrustCompleteConnectFixedDelay(std::size_t numPeers, std::chrono::milliseconds delay=std::chrono::milliseconds(200), bool printHeaders=false)
void run() override
Runs the suite.
void completeTrustScaleFreeConnectFixedDelay(std::size_t numPeers, std::chrono::milliseconds delay=std::chrono::milliseconds(200), bool printHeaders=false)
Json::Value rate(Account const &account, double multiplier)
Set a transfer rate.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Represents a transfer rate.