rippled
Loading...
Searching...
No Matches
PermissionedDomainTests.cpp
1// Auto-generated unit tests for ledger entry PermissionedDomain
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/PermissionedDomain.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(PermissionedDomainTests, BuilderSettersRoundTrip)
20{
21 uint256 const index{1u};
22
23 auto const ownerValue = canonical_ACCOUNT();
24 auto const sequenceValue = canonical_UINT32();
25 auto const acceptedCredentialsValue = canonical_ARRAY();
26 auto const ownerNodeValue = canonical_UINT64();
27 auto const previousTxnIDValue = canonical_UINT256();
28 auto const previousTxnLgrSeqValue = canonical_UINT32();
29
31 ownerValue,
32 sequenceValue,
33 acceptedCredentialsValue,
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 = ownerValue;
51 auto const actual = entry.getOwner();
52 expectEqualField(expected, actual, "sfOwner");
53 }
54
55 {
56 auto const& expected = sequenceValue;
57 auto const actual = entry.getSequence();
58 expectEqualField(expected, actual, "sfSequence");
59 }
60
61 {
62 auto const& expected = acceptedCredentialsValue;
63 auto const actual = entry.getAcceptedCredentials();
64 expectEqualField(expected, actual, "sfAcceptedCredentials");
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(PermissionedDomainTests, BuilderFromSleRoundTrip)
95{
96 uint256 const index{2u};
97
98 auto const ownerValue = canonical_ACCOUNT();
99 auto const sequenceValue = canonical_UINT32();
100 auto const acceptedCredentialsValue = 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(sfOwner) = ownerValue;
108 sle->at(sfSequence) = sequenceValue;
109 sle->setFieldArray(sfAcceptedCredentials, acceptedCredentialsValue);
110 sle->at(sfOwnerNode) = ownerNodeValue;
111 sle->at(sfPreviousTxnID) = previousTxnIDValue;
112 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
113
114 PermissionedDomainBuilder builderFromSle{sle};
115 EXPECT_TRUE(builderFromSle.validate());
116
117 auto const entryFromBuilder = builderFromSle.build(index);
118
119 PermissionedDomain entryFromSle{sle};
120 EXPECT_TRUE(entryFromBuilder.validate());
121 EXPECT_TRUE(entryFromSle.validate());
122
123 {
124 auto const& expected = ownerValue;
125
126 auto const fromSle = entryFromSle.getOwner();
127 auto const fromBuilder = entryFromBuilder.getOwner();
128
129 expectEqualField(expected, fromSle, "sfOwner");
130 expectEqualField(expected, fromBuilder, "sfOwner");
131 }
132
133 {
134 auto const& expected = sequenceValue;
135
136 auto const fromSle = entryFromSle.getSequence();
137 auto const fromBuilder = entryFromBuilder.getSequence();
138
139 expectEqualField(expected, fromSle, "sfSequence");
140 expectEqualField(expected, fromBuilder, "sfSequence");
141 }
142
143 {
144 auto const& expected = acceptedCredentialsValue;
145
146 auto const fromSle = entryFromSle.getAcceptedCredentials();
147 auto const fromBuilder = entryFromBuilder.getAcceptedCredentials();
148
149 expectEqualField(expected, fromSle, "sfAcceptedCredentials");
150 expectEqualField(expected, fromBuilder, "sfAcceptedCredentials");
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(PermissionedDomainTests, 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(PermissionedDomain{wrongEntry.getSle()}, std::runtime_error);
204}
205
206// 4) Verify builder throws when constructed from wrong ledger entry type.
207TEST(PermissionedDomainTests, 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(PermissionedDomainBuilder{wrongEntry.getSle()}, std::runtime_error);
221}
222
223}
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 PermissionedDomain ledger entries.
Ledger Entry: PermissionedDomain.
static constexpr LedgerEntryType entryType
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)