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);
704 testcase(
"Expire validations");
730 using namespace std::chrono_literals;
731 testcase(
"Flush validations");
740 Ledger ledgerAB = h[
"ab"];
743 for (
auto const& node : {a, b, c})
745 auto const val = node.validate(ledgerA);
747 expected.
emplace(node.nodeID(), val);
752 harness.
clock().advance(1s);
761 using namespace std::chrono_literals;
762 testcase(
"Preferred Ledger");
772 Ledger ledgerAC = h[
"ac"];
773 Ledger ledgerACD = h[
"acd"];
778 auto pref = [](
Ledger ledger) {
798 BEAST_EXPECT(ledgerB.
id() > ledgerA.
id());
807 harness.
clock().advance(5s);
810 for (
auto const& node : {a, b, c, d})
821 harness.
clock().advance(5s);
822 for (
auto const& node : {a, b, c, d})
825 for (
auto const& ledger : {ledgerA, ledgerB, ledgerACD})
833 using namespace std::chrono_literals;
834 testcase(
"Get preferred LCL");
854 ++peerCounts[ledgerB.
id()];
861 ++peerCounts[ledgerC.
id()];
863 BEAST_EXPECT(ledgerC.
id() > ledgerB.
id());
869 peerCounts[ledgerC.
id()] += 1000;
893 using namespace std::chrono_literals;
894 testcase(
"Acquire validated ledger");
922 harness.
add(b.
validate(ID{3}, Seq{2}, 0s, 0s,
true)));
928 Ledger ledgerAB = h[
"ab"];
933 harness.
clock().advance(5s);
950 harness.
clock().advance(5s);
951 Ledger ledgerABCDE = h[
"abcde"];
962 testcase(
"NumTrustedForLedger");
979 testcase(
"SeqEnforcer");
988 BEAST_EXPECT(enforcer(clock.now(), Seq{1}, p));
989 BEAST_EXPECT(enforcer(clock.now(), Seq{10}, p));
990 BEAST_EXPECT(!enforcer(clock.now(), Seq{5}, p));
991 BEAST_EXPECT(!enforcer(clock.now(), Seq{9}, p));
993 BEAST_EXPECT(!enforcer(clock.now(), Seq{1}, p));
995 BEAST_EXPECT(enforcer(clock.now(), Seq{1}, p));
1001 testcase(
"TrustChanged");
1004 auto checker = [
this](
1009 : trustedVals[0].ledgerID();
1014 trustedVals.size());
1015 if (trustedVals.empty())
1017 vals.
getPreferred(this->genesisLedger) == boost::none);
1020 vals.
getPreferred(this->genesisLedger)->second == testID);
1031 Ledger ledgerAB = h[
"ab"];
1037 checker(harness.
vals(), listed, trustedVals);
1039 trustedVals.clear();
1041 checker(harness.
vals(), listed, trustedVals);
1050 Ledger ledgerAB = h[
"ab"];
1056 checker(harness.
vals(), listed, trustedVals);
1058 trustedVals.push_back(v);
1060 checker(harness.
vals(), listed, trustedVals);
1074 auto& vals = harness.
vals();
1075 BEAST_EXPECT(vals.currentTrusted() == trustedVals);
1081 trustedVals.clear();
1085 BEAST_EXPECT(vals.currentTrusted() == trustedVals);
1086 BEAST_EXPECT(vals.getPreferred(
genesisLedger) == boost::none);