rippled
Loading...
Searching...
No Matches
DelegateTests.cpp
1// Auto-generated unit tests for ledger entry Delegate
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/STLedgerEntry.h>
9#include <xrpl/protocol_autogen/ledger_entries/Delegate.h>
10#include <xrpl/protocol_autogen/ledger_entries/Ticket.h>
11
12#include <string>
13
14namespace xrpl::ledger_entries {
15
16// 1 & 4) Set fields via builder setters, build, then read them back via
17// wrapper getters. After build(), validate() should succeed for both the
18// builder's STObject and the wrapper's SLE.
19TEST(DelegateTests, BuilderSettersRoundTrip)
20{
21 uint256 const index{1u};
22
23 auto const accountValue = canonical_ACCOUNT();
24 auto const authorizeValue = canonical_ACCOUNT();
25 auto const permissionsValue = canonical_ARRAY();
26 auto const ownerNodeValue = canonical_UINT64();
27 auto const previousTxnIDValue = canonical_UINT256();
28 auto const previousTxnLgrSeqValue = canonical_UINT32();
29
30 DelegateBuilder builder{
31 accountValue,
32 authorizeValue,
33 permissionsValue,
34 ownerNodeValue,
35 previousTxnIDValue,
36 previousTxnLgrSeqValue
37 };
38
39
40 builder.setLedgerIndex(index);
41 builder.setFlags(0x1u);
42
43 EXPECT_TRUE(builder.validate());
44
45 auto const entry = builder.build(index);
46
47 EXPECT_TRUE(entry.validate());
48
49 {
50 auto const& expected = accountValue;
51 auto const actual = entry.getAccount();
52 expectEqualField(expected, actual, "sfAccount");
53 }
54
55 {
56 auto const& expected = authorizeValue;
57 auto const actual = entry.getAuthorize();
58 expectEqualField(expected, actual, "sfAuthorize");
59 }
60
61 {
62 auto const& expected = permissionsValue;
63 auto const actual = entry.getPermissions();
64 expectEqualField(expected, actual, "sfPermissions");
65 }
66
67 {
68 auto const& expected = ownerNodeValue;
69 auto const actual = entry.getOwnerNode();
70 expectEqualField(expected, actual, "sfOwnerNode");
71 }
72
73 {
74 auto const& expected = previousTxnIDValue;
75 auto const actual = entry.getPreviousTxnID();
76 expectEqualField(expected, actual, "sfPreviousTxnID");
77 }
78
79 {
80 auto const& expected = previousTxnLgrSeqValue;
81 auto const actual = entry.getPreviousTxnLgrSeq();
82 expectEqualField(expected, actual, "sfPreviousTxnLgrSeq");
83 }
84
85 EXPECT_TRUE(entry.hasLedgerIndex());
86 auto const ledgerIndex = entry.getLedgerIndex();
87 ASSERT_TRUE(ledgerIndex.has_value());
88 EXPECT_EQ(*ledgerIndex, index);
89 EXPECT_EQ(entry.getKey(), index);
90}
91
92// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
93// from that SLE, build a new wrapper, and verify all fields (and validate()).
94TEST(DelegateTests, BuilderFromSleRoundTrip)
95{
96 uint256 const index{2u};
97
98 auto const accountValue = canonical_ACCOUNT();
99 auto const authorizeValue = canonical_ACCOUNT();
100 auto const permissionsValue = canonical_ARRAY();
101 auto const ownerNodeValue = canonical_UINT64();
102 auto const previousTxnIDValue = canonical_UINT256();
103 auto const previousTxnLgrSeqValue = canonical_UINT32();
104
106
107 sle->at(sfAccount) = accountValue;
108 sle->at(sfAuthorize) = authorizeValue;
109 sle->setFieldArray(sfPermissions, permissionsValue);
110 sle->at(sfOwnerNode) = ownerNodeValue;
111 sle->at(sfPreviousTxnID) = previousTxnIDValue;
112 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
113
114 DelegateBuilder builderFromSle{sle};
115 EXPECT_TRUE(builderFromSle.validate());
116
117 auto const entryFromBuilder = builderFromSle.build(index);
118
119 Delegate entryFromSle{sle};
120 EXPECT_TRUE(entryFromBuilder.validate());
121 EXPECT_TRUE(entryFromSle.validate());
122
123 {
124 auto const& expected = accountValue;
125
126 auto const fromSle = entryFromSle.getAccount();
127 auto const fromBuilder = entryFromBuilder.getAccount();
128
129 expectEqualField(expected, fromSle, "sfAccount");
130 expectEqualField(expected, fromBuilder, "sfAccount");
131 }
132
133 {
134 auto const& expected = authorizeValue;
135
136 auto const fromSle = entryFromSle.getAuthorize();
137 auto const fromBuilder = entryFromBuilder.getAuthorize();
138
139 expectEqualField(expected, fromSle, "sfAuthorize");
140 expectEqualField(expected, fromBuilder, "sfAuthorize");
141 }
142
143 {
144 auto const& expected = permissionsValue;
145
146 auto const fromSle = entryFromSle.getPermissions();
147 auto const fromBuilder = entryFromBuilder.getPermissions();
148
149 expectEqualField(expected, fromSle, "sfPermissions");
150 expectEqualField(expected, fromBuilder, "sfPermissions");
151 }
152
153 {
154 auto const& expected = ownerNodeValue;
155
156 auto const fromSle = entryFromSle.getOwnerNode();
157 auto const fromBuilder = entryFromBuilder.getOwnerNode();
158
159 expectEqualField(expected, fromSle, "sfOwnerNode");
160 expectEqualField(expected, fromBuilder, "sfOwnerNode");
161 }
162
163 {
164 auto const& expected = previousTxnIDValue;
165
166 auto const fromSle = entryFromSle.getPreviousTxnID();
167 auto const fromBuilder = entryFromBuilder.getPreviousTxnID();
168
169 expectEqualField(expected, fromSle, "sfPreviousTxnID");
170 expectEqualField(expected, fromBuilder, "sfPreviousTxnID");
171 }
172
173 {
174 auto const& expected = previousTxnLgrSeqValue;
175
176 auto const fromSle = entryFromSle.getPreviousTxnLgrSeq();
177 auto const fromBuilder = entryFromBuilder.getPreviousTxnLgrSeq();
178
179 expectEqualField(expected, fromSle, "sfPreviousTxnLgrSeq");
180 expectEqualField(expected, fromBuilder, "sfPreviousTxnLgrSeq");
181 }
182
183 EXPECT_EQ(entryFromSle.getKey(), index);
184 EXPECT_EQ(entryFromBuilder.getKey(), index);
185}
186
187// 3) Verify wrapper throws when constructed from wrong ledger entry type.
188TEST(DelegateTests, WrapperThrowsOnWrongEntryType)
189{
190 uint256 const index{3u};
191
192 // Build a valid ledger entry of a different type
193 // Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
194 // Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
195 TicketBuilder wrongBuilder{
201 auto wrongEntry = wrongBuilder.build(index);
202
203 EXPECT_THROW(Delegate{wrongEntry.getSle()}, std::runtime_error);
204}
205
206// 4) Verify builder throws when constructed from wrong ledger entry type.
207TEST(DelegateTests, BuilderThrowsOnWrongEntryType)
208{
209 uint256 const index{4u};
210
211 // Build a valid ledger entry of a different type
212 TicketBuilder wrongBuilder{
218 auto wrongEntry = wrongBuilder.build(index);
219
220 EXPECT_THROW(DelegateBuilder{wrongEntry.getSle()}, std::runtime_error);
221}
222
223}
Builder for Delegate ledger entries.
Definition Delegate.h:124
Ledger Entry: Delegate.
Definition Delegate.h:28
static constexpr LedgerEntryType entryType
Definition Delegate.h:30
std::shared_ptr< SLE const > getSle() const
Get the underlying SLE object.
Derived & setLedgerIndex(uint256 const &value)
Set the ledger index.
Derived & setFlags(uint32_t value)
Set the flags.
Builder for Ticket ledger entries.
Definition Ticket.h:112
T is_same_v
TEST(AccountRootTests, BuilderSettersRoundTrip)
void expectEqualField(T const &expected, T const &actual, char const *fieldName)