1#include <test/csf/BasicNetwork.h> 
    2#include <test/csf/Scheduler.h> 
    4#include <xrpl/beast/unit_test.h> 
   31            using namespace std::chrono_literals;
 
   35                for (
auto const link : net.links(
this))
 
   36                    net.send(
this, link.target, [&, to = link.target] {
 
   37                        to->receive(net, 
this, 1);
 
 
   54                for (
auto const link : net.links(
this))
 
   55                    net.send(
this, link.target, [&, mm = m, to = link.target] {
 
   56                        to->receive(net, 
this, mm);
 
 
 
   65        using namespace std::chrono_literals;
 
   72        BEAST_EXPECT(!net.
connect(&pv[0], &pv[0]));
 
   73        BEAST_EXPECT(net.
connect(&pv[0], &pv[1], 1s));
 
   74        BEAST_EXPECT(net.
connect(&pv[1], &pv[2], 1s));
 
   75        BEAST_EXPECT(!net.
connect(&pv[0], &pv[1]));
 
   77            peer.start(scheduler, net);
 
   78        BEAST_EXPECT(scheduler.
step_for(0s));
 
   79        BEAST_EXPECT(scheduler.
step_for(1s));
 
   80        BEAST_EXPECT(scheduler.
step());
 
   81        BEAST_EXPECT(!scheduler.
step());
 
   82        BEAST_EXPECT(!scheduler.
step_for(1s));
 
   83        net.
send(&pv[0], &pv[1], [] {});
 
   84        net.
send(&pv[1], &pv[0], [] {});
 
   89            auto const links = net.
links(&pv[1]);
 
   92            BEAST_EXPECT(net.
disconnect(&pv[1], links[0].target));
 
 
  102        using namespace std::chrono_literals;
 
  105        BEAST_EXPECT(net.
connect(0, 1, 1s));
 
  106        BEAST_EXPECT(net.
connect(0, 2, 2s));
 
  109        net.
send(0, 1, [&]() { delivered.
insert(1); });
 
  110        net.
send(0, 2, [&]() { delivered.
insert(2); });
 
  112        scheduler.
in(1000ms, [&]() { BEAST_EXPECT(net.
disconnect(0, 2)); });
 
  113        scheduler.
in(1100ms, [&]() { BEAST_EXPECT(net.
connect(0, 2)); });
 
 
 
  130BEAST_DEFINE_TESTSUITE(BasicNetwork, csf, 
ripple);
 
void run() override
Runs the suite.
 
Peer to peer network simulator.
 
void send(Peer const &from, Peer const &to, Function &&f)
Send a message to a peer.
 
bool disconnect(Peer const &peer1, Peer const &peer2)
Break a link.
 
auto links(Peer const &from)
Return the range of active links.
 
bool connect(Peer const &from, Peer const &to, duration const &delay=std::chrono::seconds{0})
Connect two peers.
 
Simulated discrete-event scheduler.
 
bool step_for(std::chrono::duration< Period, Rep > const &amount)
Run the scheduler until time has elapsed.
 
bool step()
Run the scheduler until no events remain.
 
cancel_token in(duration const &delay, Function &&f)
Schedule an event after a specified duration passes.
 
T emplace_back(T... args)
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...
 
void start(csf::Scheduler &scheduler, Net &net)
 
Peer(Peer const &)=default
 
void receive(Net &net, Peer *from, int m)