1#include <csf/PeerGroup.h>
3#include <csf/collectors.h>
5#include <csf/submitters.h>
7#include <gtest/gtest.h>
26[[nodiscard]] std::string
const&
29 static std::string
const kEMPTY;
34completeTrustCompleteConnectFixedDelay(
36 std::chrono::milliseconds delay = std::chrono::milliseconds(200),
37 bool printHeaders =
false)
40 using namespace std::chrono;
43 std::string
const prefix =
44 "DistributedValidators_"
45 "completeTrustCompleteConnectFixedDelay";
46 std::fstream txLog(prefix +
"_tx.csv", std::ofstream::app),
47 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
50 std::cout << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")" <<
std::endl;
53 EXPECT_TRUE(numPeers >= 1);
56 PeerGroup peers = sim.createGroup(numPeers);
62 peers.connect(peers, delay);
65 TxCollector txCollector;
66 LedgerCollector ledgerCollector;
68 sim.collectors.add(colls);
74 std::chrono::nanoseconds
const simDuration = 10
min;
75 std::chrono::nanoseconds
const quiet = 10s;
76 Rate
const rate{.count = 100, .duration = 1000ms};
79 HeartbeatTimer heart(sim.scheduler);
83 makeSelector(peers.begin(), peers.end(), std::vector<double>(numPeers, 1.), sim.rng);
85 ConstantDistribution{
rate.inv()},
86 sim.scheduler.now() + quiet,
87 sim.scheduler.now() + simDuration - quiet,
100 std::cout <<
"| Peers: " <<
std::setw(2) << peers.size();
103 std::cout <<
" | Branches: " <<
std::setw(1) << sim.branches();
104 std::cout <<
" | Synchronized: " <<
std::setw(1) << (sim.synchronized() ?
"Y" :
"N");
107 txCollector.report(simDuration, std::cout,
true);
108 ledgerCollector.report(simDuration, std::cout,
false);
111 txCollector.csv(simDuration, txLog, tag, printHeaders);
112 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
118completeTrustScaleFreeConnectFixedDelay(
119 std::size_t numPeers,
120 std::chrono::milliseconds delay = std::chrono::milliseconds(200),
121 bool printHeaders =
false)
124 using namespace std::chrono;
127 std::string
const prefix =
128 "DistributedValidators__"
129 "completeTrustScaleFreeConnectFixedDelay";
130 std::fstream txLog(prefix +
"_tx.csv", std::ofstream::app),
131 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
134 std::cout << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")" <<
std::endl;
137 int const numCNLs =
std::max(
int(1.00 * numPeers), 1);
138 int const minCNLSize =
std::max(
int(0.25 * numCNLs), 1);
139 int const maxCNLSize =
std::max(
int(0.50 * numCNLs), 1);
140 EXPECT_TRUE(numPeers >= 1);
141 EXPECT_TRUE(numCNLs >= 1);
142 EXPECT_TRUE(1 <= minCNLSize && minCNLSize <= maxCNLSize && maxCNLSize <= numPeers);
145 PeerGroup peers = sim.createGroup(numPeers);
151 std::vector<double>
const ranks =
sample(peers.size(), PowerLawDistribution{1, 3}, sim.rng);
156 std::uniform_int_distribution<>{minCNLSize, maxCNLSize},
161 TxCollector txCollector;
162 LedgerCollector ledgerCollector;
164 sim.collectors.add(colls);
170 std::chrono::nanoseconds
const simDuration = 10
min;
171 std::chrono::nanoseconds
const quiet = 10s;
172 Rate
const rate{.count = 100, .duration = 1000ms};
175 HeartbeatTimer heart(sim.scheduler);
179 makeSelector(peers.begin(), peers.end(), std::vector<double>(numPeers, 1.), sim.rng);
181 ConstantDistribution{
rate.inv()},
182 sim.scheduler.now() + quiet,
183 sim.scheduler.now() + simDuration - quiet,
190 sim.run(simDuration);
196 std::cout <<
"| Peers: " <<
std::setw(2) << peers.size();
199 std::cout <<
" | Branches: " <<
std::setw(1) << sim.branches();
200 std::cout <<
" | Synchronized: " <<
std::setw(1) << (sim.synchronized() ?
"Y" :
"N");
203 txCollector.report(simDuration, std::cout,
true);
204 ledgerCollector.report(simDuration, std::cout,
false);
207 txCollector.csv(simDuration, txLog, tag, printHeaders);
208 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
216TEST(DistributedValidatorsTest, DISABLED_distributed_validators)
222 int maxNumValidators = 0;
224 argStream >> maxNumValidators;
225 argStream >> delayCount;
229 std::cout <<
"DistributedValidators: 1 to " << maxNumValidators <<
" Peers" <<
std::endl;
235 completeTrustCompleteConnectFixedDelay(1, delay,
true);
236 for (
int i = 2; i <= maxNumValidators; i++)
238 completeTrustCompleteConnectFixedDelay(i, delay);
245 completeTrustScaleFreeConnectFixedDelay(1, delay,
true);
246 for (
int i = 2; i <= maxNumValidators; i++)
248 completeTrustScaleFreeConnectFixedDelay(i, delay);
T duration_cast(T... args)
Submitter< Distribution, Generator, Selector > makeSubmitter(Distribution dist, SimTime start, SimTime end, Selector &sel, Scheduler &s, Generator &g)
Selector< Iter, Generator > makeSelector(Iter first, Iter last, std::vector< double > const &w, Generator &g)
void randomRankedConnect(PeerGroup &peers, std::vector< double > const &ranks, int numGroups, RandomNumberDistribution sizeDist, Generator &g, SimDuration delay)
Generate random network groups based on peer rankings.
Collectors< Cs... > makeCollectors(Cs &... cs)
Create an instance of Collectors<Cs...>.
json::Value rate(Account const &account, double multiplier)
Set a transfer rate.