rippled
Loading...
Searching...
No Matches
TicketTests.cpp
1// Auto-generated unit tests for ledger entry Ticket
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/Ticket.h>
10#include <xrpl/protocol_autogen/ledger_entries/Check.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(TicketTests, BuilderSettersRoundTrip)
20{
21 uint256 const index{1u};
22
23 auto const accountValue = canonical_ACCOUNT();
24 auto const ownerNodeValue = canonical_UINT64();
25 auto const ticketSequenceValue = canonical_UINT32();
26 auto const previousTxnIDValue = canonical_UINT256();
27 auto const previousTxnLgrSeqValue = canonical_UINT32();
28
29 TicketBuilder builder{
30 accountValue,
31 ownerNodeValue,
32 ticketSequenceValue,
33 previousTxnIDValue,
34 previousTxnLgrSeqValue
35 };
36
37
38 builder.setLedgerIndex(index);
39 builder.setFlags(0x1u);
40
41 EXPECT_TRUE(builder.validate());
42
43 auto const entry = builder.build(index);
44
45 EXPECT_TRUE(entry.validate());
46
47 {
48 auto const& expected = accountValue;
49 auto const actual = entry.getAccount();
50 expectEqualField(expected, actual, "sfAccount");
51 }
52
53 {
54 auto const& expected = ownerNodeValue;
55 auto const actual = entry.getOwnerNode();
56 expectEqualField(expected, actual, "sfOwnerNode");
57 }
58
59 {
60 auto const& expected = ticketSequenceValue;
61 auto const actual = entry.getTicketSequence();
62 expectEqualField(expected, actual, "sfTicketSequence");
63 }
64
65 {
66 auto const& expected = previousTxnIDValue;
67 auto const actual = entry.getPreviousTxnID();
68 expectEqualField(expected, actual, "sfPreviousTxnID");
69 }
70
71 {
72 auto const& expected = previousTxnLgrSeqValue;
73 auto const actual = entry.getPreviousTxnLgrSeq();
74 expectEqualField(expected, actual, "sfPreviousTxnLgrSeq");
75 }
76
77 EXPECT_TRUE(entry.hasLedgerIndex());
78 auto const ledgerIndex = entry.getLedgerIndex();
79 ASSERT_TRUE(ledgerIndex.has_value());
80 EXPECT_EQ(*ledgerIndex, index);
81 EXPECT_EQ(entry.getKey(), index);
82}
83
84// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
85// from that SLE, build a new wrapper, and verify all fields (and validate()).
86TEST(TicketTests, BuilderFromSleRoundTrip)
87{
88 uint256 const index{2u};
89
90 auto const accountValue = canonical_ACCOUNT();
91 auto const ownerNodeValue = canonical_UINT64();
92 auto const ticketSequenceValue = canonical_UINT32();
93 auto const previousTxnIDValue = canonical_UINT256();
94 auto const previousTxnLgrSeqValue = canonical_UINT32();
95
97
98 sle->at(sfAccount) = accountValue;
99 sle->at(sfOwnerNode) = ownerNodeValue;
100 sle->at(sfTicketSequence) = ticketSequenceValue;
101 sle->at(sfPreviousTxnID) = previousTxnIDValue;
102 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
103
104 TicketBuilder builderFromSle{sle};
105 EXPECT_TRUE(builderFromSle.validate());
106
107 auto const entryFromBuilder = builderFromSle.build(index);
108
109 Ticket entryFromSle{sle};
110 EXPECT_TRUE(entryFromBuilder.validate());
111 EXPECT_TRUE(entryFromSle.validate());
112
113 {
114 auto const& expected = accountValue;
115
116 auto const fromSle = entryFromSle.getAccount();
117 auto const fromBuilder = entryFromBuilder.getAccount();
118
119 expectEqualField(expected, fromSle, "sfAccount");
120 expectEqualField(expected, fromBuilder, "sfAccount");
121 }
122
123 {
124 auto const& expected = ownerNodeValue;
125
126 auto const fromSle = entryFromSle.getOwnerNode();
127 auto const fromBuilder = entryFromBuilder.getOwnerNode();
128
129 expectEqualField(expected, fromSle, "sfOwnerNode");
130 expectEqualField(expected, fromBuilder, "sfOwnerNode");
131 }
132
133 {
134 auto const& expected = ticketSequenceValue;
135
136 auto const fromSle = entryFromSle.getTicketSequence();
137 auto const fromBuilder = entryFromBuilder.getTicketSequence();
138
139 expectEqualField(expected, fromSle, "sfTicketSequence");
140 expectEqualField(expected, fromBuilder, "sfTicketSequence");
141 }
142
143 {
144 auto const& expected = previousTxnIDValue;
145
146 auto const fromSle = entryFromSle.getPreviousTxnID();
147 auto const fromBuilder = entryFromBuilder.getPreviousTxnID();
148
149 expectEqualField(expected, fromSle, "sfPreviousTxnID");
150 expectEqualField(expected, fromBuilder, "sfPreviousTxnID");
151 }
152
153 {
154 auto const& expected = previousTxnLgrSeqValue;
155
156 auto const fromSle = entryFromSle.getPreviousTxnLgrSeq();
157 auto const fromBuilder = entryFromBuilder.getPreviousTxnLgrSeq();
158
159 expectEqualField(expected, fromSle, "sfPreviousTxnLgrSeq");
160 expectEqualField(expected, fromBuilder, "sfPreviousTxnLgrSeq");
161 }
162
163 EXPECT_EQ(entryFromSle.getKey(), index);
164 EXPECT_EQ(entryFromBuilder.getKey(), index);
165}
166
167// 3) Verify wrapper throws when constructed from wrong ledger entry type.
168TEST(TicketTests, WrapperThrowsOnWrongEntryType)
169{
170 uint256 const index{3u};
171
172 // Build a valid ledger entry of a different type
173 // Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
174 // Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
175 CheckBuilder wrongBuilder{
184 auto wrongEntry = wrongBuilder.build(index);
185
186 EXPECT_THROW(Ticket{wrongEntry.getSle()}, std::runtime_error);
187}
188
189// 4) Verify builder throws when constructed from wrong ledger entry type.
190TEST(TicketTests, BuilderThrowsOnWrongEntryType)
191{
192 uint256 const index{4u};
193
194 // Build a valid ledger entry of a different type
195 CheckBuilder wrongBuilder{
204 auto wrongEntry = wrongBuilder.build(index);
205
206 EXPECT_THROW(TicketBuilder{wrongEntry.getSle()}, std::runtime_error);
207}
208
209}
Builder for Check ledger entries.
Definition Check.h:241
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
Ledger Entry: Ticket.
Definition Ticket.h:28
static constexpr LedgerEntryType entryType
Definition Ticket.h:30
T is_same_v
TEST(AccountRootTests, BuilderSettersRoundTrip)
void expectEqualField(T const &expected, T const &actual, char const *fieldName)