20 #include <ripple/basics/tagged_integer.h>
21 #include <ripple/beast/clock/manual_clock.h>
22 #include <ripple/beast/unit_test.h>
23 #include <ripple/consensus/Validations.h>
24 #include <test/csf/Validation.h>
48 c.now().time_since_epoch() + 86400s));
143 ledger.
id(), ledger.
seq(), signOffset, seenOffset,
true);
203 boost::optional<Ledger>
263 using namespace std::chrono_literals;
265 testcase(
"Add validation");
268 Ledger ledgerAB = h[
"ab"];
269 Ledger ledgerAZ = h[
"az"];
270 Ledger ledgerABC = h[
"abc"];
271 Ledger ledgerABCD = h[
"abcd"];
272 Ledger ledgerABCDE = h[
"abcde"];
287 harness.
clock().advance(1s);
303 harness.
clock().advance(1s);
312 harness.
clock().advance(1s);
322 harness.
clock().advance(2s);
323 auto const valABCDE = n.
validate(ledgerABCDE);
325 harness.
clock().advance(4s);
326 auto const valABCD = n.
validate(ledgerABCD);
379 for (
bool doFull : {
true,
false})
384 auto process = [&](
Ledger& lgr) {
391 harness.
clock().advance(1s);
392 BEAST_EXPECT(ledgerAB.
seq() < ledgerABC.
seq());
398 harness.
clock().advance(
408 testcase(
"Stale validation");
414 Ledger ledgerAB = h[
"ab"];
423 vals.getNodesAfter(ledgerA, ledgerA.
id());
425 for (Trigger trigger : triggers)
432 trigger(harness.
vals());
441 trigger(harness.
vals());
457 using namespace std::chrono_literals;
458 testcase(
"Get nodes after");
462 Ledger ledgerAB = h[
"ab"];
463 Ledger ledgerABC = h[
"abc"];
464 Ledger ledgerAD = h[
"ad"];
477 for (
Ledger const& ledger : {ledgerA, ledgerAB, ledgerABC, ledgerAD})
481 harness.
clock().advance(5s);
506 using namespace std::chrono_literals;
507 testcase(
"Current trusted validations");
512 Ledger ledgerAC = h[
"ac"];
527 harness.
clock().advance(3s);
529 for (
auto const& node : {a, b})
548 using namespace std::chrono_literals;
549 testcase(
"Current public keys");
553 Ledger ledgerAC = h[
"ac"];
559 for (
auto const& node : {a, b})
568 harness.
clock().advance(3s);
574 for (
auto const& node : {a, b})
592 using namespace std::chrono_literals;
593 testcase(
"By ledger functions");
619 auto sorted = [](
auto vec) {
624 for (
auto& it : trustedValidations)
626 auto const&
id = it.first;
627 auto const& expectedValidations = it.second;
631 expectedValidations.size());
634 sorted(expectedValidations));
638 for (
auto const& val : expectedValidations)
640 expectedFees.
push_back(val.loadFee().value_or(baseFee));
644 sorted(harness.
vals().
fees(
id, baseFee)) ==
645 sorted(expectedFees));
652 Ledger ledgerAC = h[
"ac"];
658 for (
auto const& node : {a, b, c})
660 auto const val = node.validate(ledgerA);
663 trustedValidations[val.ledgerID()].emplace_back(val);
667 auto const val = d.validate(ledgerB);
669 trustedValidations[val.ledgerID()].emplace_back(val);
676 harness.
clock().advance(5s);
678 for (
auto const& node : {a, b, c})
680 auto const val = node.validate(ledgerAC);
683 trustedValidations[val.ledgerID()].emplace_back(val);
702 testcase(
"Expire validations");
720 using namespace std::chrono_literals;
721 testcase(
"Flush validations");
730 Ledger ledgerAB = h[
"ab"];
733 for (
auto const& node : {a, b, c})
735 auto const val = node.validate(ledgerA);
737 expected.
emplace(node.nodeID(), val);
742 harness.
clock().advance(1s);
751 using namespace std::chrono_literals;
752 testcase(
"Preferred Ledger");
762 Ledger ledgerAC = h[
"ac"];
763 Ledger ledgerACD = h[
"acd"];
768 auto pref = [](
Ledger ledger) {
788 BEAST_EXPECT(ledgerB.
id() > ledgerA.
id());
797 harness.
clock().advance(5s);
800 for (
auto const& node : {a, b, c, d})
811 harness.
clock().advance(5s);
812 for (
auto const& node : {a, b, c, d})
815 for (
auto const& ledger : {ledgerA, ledgerB, ledgerACD})
823 using namespace std::chrono_literals;
824 testcase(
"Get preferred LCL");
844 ++peerCounts[ledgerB.
id()];
851 ++peerCounts[ledgerC.
id()];
853 BEAST_EXPECT(ledgerC.
id() > ledgerB.
id());
859 peerCounts[ledgerC.
id()] += 1000;
883 using namespace std::chrono_literals;
884 testcase(
"Acquire validated ledger");
912 harness.
add(b.
validate(ID{3}, Seq{2}, 0s, 0s,
true)));
918 Ledger ledgerAB = h[
"ab"];
923 harness.
clock().advance(5s);
940 harness.
clock().advance(5s);
941 Ledger ledgerABCDE = h[
"abcde"];
952 testcase(
"NumTrustedForLedger");
969 testcase(
"SeqEnforcer");
978 BEAST_EXPECT(enforcer(clock.now(), Seq{1}, p));
979 BEAST_EXPECT(enforcer(clock.now(), Seq{10}, p));
980 BEAST_EXPECT(!enforcer(clock.now(), Seq{5}, p));
981 BEAST_EXPECT(!enforcer(clock.now(), Seq{9}, p));
983 BEAST_EXPECT(!enforcer(clock.now(), Seq{1}, p));
985 BEAST_EXPECT(enforcer(clock.now(), Seq{1}, p));
991 testcase(
"TrustChanged");
994 auto checker = [
this](
999 : trustedVals[0].ledgerID();
1004 trustedVals.size());
1005 if (trustedVals.empty())
1007 vals.
getPreferred(this->genesisLedger) == boost::none);
1010 vals.
getPreferred(this->genesisLedger)->second == testID);
1021 Ledger ledgerAB = h[
"ab"];
1027 checker(harness.
vals(), listed, trustedVals);
1029 trustedVals.clear();
1031 checker(harness.
vals(), listed, trustedVals);
1040 Ledger ledgerAB = h[
"ab"];
1046 checker(harness.
vals(), listed, trustedVals);
1048 trustedVals.push_back(v);
1050 checker(harness.
vals(), listed, trustedVals);
1064 auto& vals = harness.
vals();
1065 BEAST_EXPECT(vals.currentTrusted() == trustedVals);
1071 trustedVals.clear();
1075 BEAST_EXPECT(vals.currentTrusted() == trustedVals);
1076 BEAST_EXPECT(vals.getPreferred(
genesisLedger) == boost::none);