xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
protocol_autogen
ledger_entries
LedgerHashesTests.cpp
1
// Auto-generated unit tests for ledger entry LedgerHashes
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/LedgerHashes.h>
10
#include <xrpl/protocol_autogen/ledger_entries/Ticket.h>
11
12
#include <
string
>
13
14
namespace
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.
19
TEST
(LedgerHashesTests, BuilderSettersRoundTrip)
20
{
21
UInt256
const
index{1u};
22
23
auto
const
firstLedgerSequenceValue =
canonical_UINT32
();
24
auto
const
lastLedgerSequenceValue =
canonical_UINT32
();
25
auto
const
hashesValue =
canonical_VECTOR256
();
26
27
LedgerHashesBuilder
builder{
28
hashesValue
29
};
30
31
builder.
setFirstLedgerSequence
(firstLedgerSequenceValue);
32
builder.
setLastLedgerSequence
(lastLedgerSequenceValue);
33
34
builder.
setLedgerIndex
(index);
35
builder.
setFlags
(0x1u);
36
37
EXPECT_TRUE(builder.
validate
());
38
39
auto
const
entry = builder.
build
(index);
40
41
EXPECT_TRUE(entry.validate());
42
43
{
44
auto
const
& expected = hashesValue;
45
auto
const
actual = entry.getHashes();
46
expectEqualField
(expected, actual,
"sfHashes"
);
47
}
48
49
{
50
auto
const
& expected = firstLedgerSequenceValue;
51
auto
const
actualOpt = entry.getFirstLedgerSequence();
52
ASSERT_TRUE(actualOpt.has_value());
53
expectEqualField
(expected, *actualOpt,
"sfFirstLedgerSequence"
);
54
EXPECT_TRUE(entry.hasFirstLedgerSequence());
55
}
56
57
{
58
auto
const
& expected = lastLedgerSequenceValue;
59
auto
const
actualOpt = entry.getLastLedgerSequence();
60
ASSERT_TRUE(actualOpt.has_value());
61
expectEqualField
(expected, *actualOpt,
"sfLastLedgerSequence"
);
62
EXPECT_TRUE(entry.hasLastLedgerSequence());
63
}
64
65
EXPECT_TRUE(entry.hasLedgerIndex());
66
auto
const
ledgerIndex = entry.getLedgerIndex();
67
ASSERT_TRUE(ledgerIndex.has_value());
68
EXPECT_EQ(*ledgerIndex, index);
69
EXPECT_EQ(entry.getKey(), index);
70
}
71
72
// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
73
// from that SLE, build a new wrapper, and verify all fields (and validate()).
74
TEST
(LedgerHashesTests, BuilderFromSleRoundTrip)
75
{
76
UInt256
const
index{2u};
77
78
auto
const
firstLedgerSequenceValue =
canonical_UINT32
();
79
auto
const
lastLedgerSequenceValue =
canonical_UINT32
();
80
auto
const
hashesValue =
canonical_VECTOR256
();
81
82
auto
sle =
std::make_shared<SLE>
(
LedgerHashes::entryType
, index);
83
84
sle->at(sfFirstLedgerSequence) = firstLedgerSequenceValue;
85
sle->at(sfLastLedgerSequence) = lastLedgerSequenceValue;
86
sle->at(sfHashes) = hashesValue;
87
88
LedgerHashesBuilder
builderFromSle{sle};
89
EXPECT_TRUE(builderFromSle.
validate
());
90
91
auto
const
entryFromBuilder = builderFromSle.
build
(index);
92
93
LedgerHashes
entryFromSle{sle};
94
EXPECT_TRUE(entryFromBuilder.validate());
95
EXPECT_TRUE(entryFromSle.
validate
());
96
97
{
98
auto
const
& expected = hashesValue;
99
100
auto
const
fromSle = entryFromSle.
getHashes
();
101
auto
const
fromBuilder = entryFromBuilder.getHashes();
102
103
expectEqualField
(expected, fromSle,
"sfHashes"
);
104
expectEqualField
(expected, fromBuilder,
"sfHashes"
);
105
}
106
107
{
108
auto
const
& expected = firstLedgerSequenceValue;
109
110
auto
const
fromSleOpt = entryFromSle.
getFirstLedgerSequence
();
111
auto
const
fromBuilderOpt = entryFromBuilder.getFirstLedgerSequence();
112
113
ASSERT_TRUE(fromSleOpt.has_value());
114
ASSERT_TRUE(fromBuilderOpt.has_value());
115
116
expectEqualField
(expected, *fromSleOpt,
"sfFirstLedgerSequence"
);
117
expectEqualField
(expected, *fromBuilderOpt,
"sfFirstLedgerSequence"
);
118
}
119
120
{
121
auto
const
& expected = lastLedgerSequenceValue;
122
123
auto
const
fromSleOpt = entryFromSle.
getLastLedgerSequence
();
124
auto
const
fromBuilderOpt = entryFromBuilder.getLastLedgerSequence();
125
126
ASSERT_TRUE(fromSleOpt.has_value());
127
ASSERT_TRUE(fromBuilderOpt.has_value());
128
129
expectEqualField
(expected, *fromSleOpt,
"sfLastLedgerSequence"
);
130
expectEqualField
(expected, *fromBuilderOpt,
"sfLastLedgerSequence"
);
131
}
132
133
EXPECT_EQ(entryFromSle.
getKey
(), index);
134
EXPECT_EQ(entryFromBuilder.getKey(), index);
135
}
136
137
// 3) Verify wrapper throws when constructed from wrong ledger entry type.
138
TEST
(LedgerHashesTests, WrapperThrowsOnWrongEntryType)
139
{
140
UInt256
const
index{3u};
141
142
// Build a valid ledger entry of a different type
143
// Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
144
// Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
145
TicketBuilder
wrongBuilder{
146
canonical_ACCOUNT
(),
147
canonical_UINT64
(),
148
canonical_UINT32
(),
149
canonical_UINT256
(),
150
canonical_UINT32
()};
151
auto
wrongEntry = wrongBuilder.
build
(index);
152
153
EXPECT_THROW(
LedgerHashes
{wrongEntry.getSle()},
std::runtime_error
);
154
}
155
156
// 4) Verify builder throws when constructed from wrong ledger entry type.
157
TEST
(LedgerHashesTests, BuilderThrowsOnWrongEntryType)
158
{
159
UInt256
const
index{4u};
160
161
// Build a valid ledger entry of a different type
162
TicketBuilder
wrongBuilder{
163
canonical_ACCOUNT
(),
164
canonical_UINT64
(),
165
canonical_UINT32
(),
166
canonical_UINT256
(),
167
canonical_UINT32
()};
168
auto
wrongEntry = wrongBuilder.
build
(index);
169
170
EXPECT_THROW(
LedgerHashesBuilder
{wrongEntry.getSle()},
std::runtime_error
);
171
}
172
173
// 5) Build with only required fields and verify optional fields return nullopt.
174
TEST
(LedgerHashesTests, OptionalFieldsReturnNullopt)
175
{
176
UInt256
const
index{3u};
177
178
auto
const
hashesValue =
canonical_VECTOR256
();
179
180
LedgerHashesBuilder
builder{
181
hashesValue
182
};
183
184
auto
const
entry = builder.
build
(index);
185
186
// Verify optional fields are not present
187
EXPECT_FALSE(entry.hasFirstLedgerSequence());
188
EXPECT_FALSE(entry.getFirstLedgerSequence().has_value());
189
EXPECT_FALSE(entry.hasLastLedgerSequence());
190
EXPECT_FALSE(entry.getLastLedgerSequence().has_value());
191
}
192
}
xrpl::ledger_entries::LedgerEntryBase::getKey
UInt256 const & getKey() const
Get the key (index) of this ledger entry.
Definition
LedgerEntryBase.h:70
xrpl::ledger_entries::LedgerEntryBase::validate
bool validate() const
Validate the ledger entry.
Definition
LedgerEntryBase.h:40
xrpl::ledger_entries::LedgerEntryBuilderBase::setLedgerIndex
Derived & setLedgerIndex(UInt256 const &value)
Set the ledger index.
Definition
LedgerEntryBuilderBase.h:62
xrpl::ledger_entries::LedgerEntryBuilderBase::setFlags
Derived & setFlags(uint32_t value)
Set the flags.
Definition
LedgerEntryBuilderBase.h:74
xrpl::ledger_entries::LedgerEntryBuilderBase::validate
bool validate() const
Validate the ledger entry.
Definition
LedgerEntryBuilderBase.h:45
xrpl::ledger_entries::LedgerHashesBuilder
Builder for LedgerHashes ledger entries.
Definition
LedgerHashes.h:116
xrpl::ledger_entries::LedgerHashesBuilder::setLastLedgerSequence
LedgerHashesBuilder & setLastLedgerSequence(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfLastLedgerSequence (SoeOptional).
Definition
LedgerHashes.h:162
xrpl::ledger_entries::LedgerHashesBuilder::setFirstLedgerSequence
LedgerHashesBuilder & setFirstLedgerSequence(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Ledger entry-specific field setters.
Definition
LedgerHashes.h:151
xrpl::ledger_entries::LedgerHashesBuilder::build
LedgerHashes build(UInt256 const &index)
Build and return the completed LedgerHashes wrapper.
Definition
LedgerHashes.h:185
xrpl::ledger_entries::LedgerHashes
Ledger Entry: LedgerHashes.
Definition
LedgerHashes.h:28
xrpl::ledger_entries::LedgerHashes::getFirstLedgerSequence
protocol_autogen::Optional< SF_UINT32::type::value_type > getFirstLedgerSequence() const
Get sfFirstLedgerSequence (SoeOptional).
Definition
LedgerHashes.h:54
xrpl::ledger_entries::LedgerHashes::getHashes
SF_VECTOR256::type::value_type getHashes() const
Get sfHashes (SoeRequired).
Definition
LedgerHashes.h:102
xrpl::ledger_entries::LedgerHashes::getLastLedgerSequence
protocol_autogen::Optional< SF_UINT32::type::value_type > getLastLedgerSequence() const
Get sfLastLedgerSequence (SoeOptional).
Definition
LedgerHashes.h:78
xrpl::ledger_entries::LedgerHashes::entryType
static constexpr LedgerEntryType entryType
Definition
LedgerHashes.h:30
xrpl::ledger_entries::TicketBuilder
Builder for Ticket ledger entries.
Definition
Ticket.h:112
xrpl::ledger_entries::TicketBuilder::build
Ticket build(UInt256 const &index)
Build and return the completed Ticket wrapper.
Definition
Ticket.h:211
std::make_shared
T make_shared(T... args)
xrpl::ledger_entries
Definition
AccountRoot.h:14
xrpl::ledger_entries::TEST
TEST(AccountRootTests, BuilderSettersRoundTrip)
Definition
AccountRootTests.cpp:19
xrpl::canonical_UINT32
UInt32Value canonical_UINT32()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:48
xrpl::canonical_ACCOUNT
AccountValue canonical_ACCOUNT()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:111
xrpl::canonical_VECTOR256
Vector256Value canonical_VECTOR256()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:132
xrpl::canonical_UINT256
UInt256Value canonical_UINT256()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:83
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
xrpl::canonical_UINT64
UInt64Value canonical_UINT64()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:55
xrpl::expectEqualField
void expectEqualField(T const &expected, T const &actual, char const *fieldName)
Definition
/libxrpl/protocol_autogen/TestHelpers.h:178
std::runtime_error
string
Generated by
1.17.0