20 #include <ripple/app/consensus/RCLValidations.h>
21 #include <ripple/app/ledger/Ledger.h>
22 #include <ripple/basics/Log.h>
23 #include <ripple/basics/StringUtilities.h>
24 #include <ripple/basics/base_uint.h>
25 #include <ripple/beast/unit_test.h>
26 #include <ripple/ledger/View.h>
37 testcase(
"Change validation trusted status");
39 auto v = std::make_shared<STValidation>(
46 BEAST_EXPECT(v->isTrusted());
48 BEAST_EXPECT(!v->isTrusted());
51 BEAST_EXPECT(!rcv.trusted());
53 BEAST_EXPECT(rcv.trusted());
55 BEAST_EXPECT(!rcv.trusted());
61 testcase(
"RCLValidatedLedger ancestry");
69 Seq
const maxAncestors = 256;
79 auto prev = std::make_shared<Ledger const>(
83 env.
app().getNodeFamily());
85 for (
auto i = 0; i < (2 * maxAncestors + 1); ++i)
87 auto next = std::make_shared<Ledger>(
89 next->updateSkipList();
95 Seq
const diverge = history.
size() / 2;
99 using namespace std::chrono_literals;
101 prev = altHistory.
back();
102 bool forceHash =
true;
103 while (altHistory.
size() < history.
size())
105 auto next = std::make_shared<Ledger>(
108 next->updateSkipList();
112 next->setImmutable();
125 BEAST_EXPECT(a.seq() == Seq{0});
126 BEAST_EXPECT(a[Seq{0}] == ID{0});
127 BEAST_EXPECT(a.minSeq() == Seq{0});
134 BEAST_EXPECT(a.seq() == ledger->info().seq);
135 BEAST_EXPECT(a.minSeq() == a.seq() - maxAncestors);
137 for (Seq s = a.seq(); s > 0; s--)
140 BEAST_EXPECT(a[s] == history[s - 1]->info().hash);
142 BEAST_EXPECT(a[s] == ID{0});
152 for (
auto ledger : {history.
back(), history[maxAncestors - 1]})
162 for (Seq s = a.seq(); s > 0; s--)
167 BEAST_EXPECT(
mismatch(a, b) == b.seq() + 1);
168 BEAST_EXPECT(
mismatch(b, a) == b.seq() + 1);
172 BEAST_EXPECT(
mismatch(a, b) == Seq{1});
173 BEAST_EXPECT(
mismatch(b, a) == Seq{1});
180 for (Seq s = 1; s < history.
size(); ++s)
185 BEAST_EXPECT(a.seq() == b.seq());
188 BEAST_EXPECT(a[a.seq()] == b[b.seq()]);
189 BEAST_EXPECT(
mismatch(a, b) == a.seq() + 1);
190 BEAST_EXPECT(
mismatch(b, a) == a.seq() + 1);
194 BEAST_EXPECT(a[a.seq()] != b[b.seq()]);
195 BEAST_EXPECT(
mismatch(a, b) == diverge + 1);
196 BEAST_EXPECT(
mismatch(b, a) == diverge + 1);
204 for (Seq offset = diverge / 2; offset < 3 * diverge / 2; ++offset)
207 if (offset <= diverge)
209 BEAST_EXPECT(
mismatch(a, b) == b.seq() + 1);
213 BEAST_EXPECT(
mismatch(a, b) == diverge + 1);
222 testcase(
"RCLValidatedLedger LedgerTrie");
236 Seq
const maxAncestors = 256;
243 auto prev = std::make_shared<Ledger const>(
247 env.
app().getNodeFamily());
249 for (
auto i = 0; i < (maxAncestors + 10); ++i)
251 auto next = std::make_shared<Ledger>(
253 next->updateSkipList();
279 BEAST_EXPECT(trie.
remove(ledg_258, 3));