xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
protocol_autogen
transactions
XChainClaimTests.cpp
1
// Auto-generated unit tests for transaction XChainClaim
2
3
4
#include <gtest/gtest.h>
5
6
#include <protocol_autogen/TestHelpers.h>
7
8
#include <xrpl/protocol/SecretKey.h>
9
#include <xrpl/protocol/Seed.h>
10
#include <xrpl/protocol/STTx.h>
11
#include <xrpl/protocol_autogen/transactions/XChainClaim.h>
12
#include <xrpl/protocol_autogen/transactions/AccountSet.h>
13
14
#include <
string
>
15
16
namespace
xrpl::transactions
{
17
18
// 1 & 4) Set fields via builder setters, build, then read them back via
19
// wrapper getters. After build(), validate() should succeed.
20
TEST
(TransactionsXChainClaimTests, BuilderSettersRoundTrip)
21
{
22
// Generate a deterministic keypair for signing
23
auto
const
[publicKey, secretKey] =
24
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testXChainClaim"
));
25
26
// Common transaction fields
27
auto
const
accountValue =
calcAccountID
(publicKey);
28
std::uint32_t
const
sequenceValue = 1;
29
auto
const
feeValue =
canonical_AMOUNT
();
30
31
// Transaction-specific field values
32
auto
const
xChainBridgeValue =
canonical_XCHAIN_BRIDGE
();
33
auto
const
xChainClaimIDValue =
canonical_UINT64
();
34
auto
const
destinationValue =
canonical_ACCOUNT
();
35
auto
const
destinationTagValue =
canonical_UINT32
();
36
auto
const
amountValue =
canonical_AMOUNT
();
37
38
XChainClaimBuilder
builder{
39
accountValue,
40
xChainBridgeValue,
41
xChainClaimIDValue,
42
destinationValue,
43
amountValue,
44
sequenceValue,
45
feeValue
46
};
47
48
// Set optional fields
49
builder.
setDestinationTag
(destinationTagValue);
50
51
auto
tx = builder.
build
(publicKey, secretKey);
52
53
std::string
reason;
54
EXPECT_TRUE(tx.validate(reason)) << reason;
55
56
// Verify signing was applied
57
EXPECT_FALSE(tx.getSigningPubKey().empty());
58
EXPECT_TRUE(tx.hasTxnSignature());
59
60
// Verify common fields
61
EXPECT_EQ(tx.getAccount(), accountValue);
62
EXPECT_EQ(tx.getSequence(), sequenceValue);
63
EXPECT_EQ(tx.getFee(), feeValue);
64
65
// Verify required fields
66
{
67
auto
const
& expected = xChainBridgeValue;
68
auto
const
actual = tx.getXChainBridge();
69
expectEqualField
(expected, actual,
"sfXChainBridge"
);
70
}
71
72
{
73
auto
const
& expected = xChainClaimIDValue;
74
auto
const
actual = tx.getXChainClaimID();
75
expectEqualField
(expected, actual,
"sfXChainClaimID"
);
76
}
77
78
{
79
auto
const
& expected = destinationValue;
80
auto
const
actual = tx.getDestination();
81
expectEqualField
(expected, actual,
"sfDestination"
);
82
}
83
84
{
85
auto
const
& expected = amountValue;
86
auto
const
actual = tx.getAmount();
87
expectEqualField
(expected, actual,
"sfAmount"
);
88
}
89
90
// Verify optional fields
91
{
92
auto
const
& expected = destinationTagValue;
93
auto
const
actualOpt = tx.getDestinationTag();
94
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfDestinationTag should be present"
;
95
expectEqualField
(expected, *actualOpt,
"sfDestinationTag"
);
96
EXPECT_TRUE(tx.hasDestinationTag());
97
}
98
99
}
100
101
// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
102
// and verify all fields match.
103
TEST
(TransactionsXChainClaimTests, BuilderFromStTxRoundTrip)
104
{
105
// Generate a deterministic keypair for signing
106
auto
const
[publicKey, secretKey] =
107
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testXChainClaimFromTx"
));
108
109
// Common transaction fields
110
auto
const
accountValue =
calcAccountID
(publicKey);
111
std::uint32_t
const
sequenceValue = 2;
112
auto
const
feeValue =
canonical_AMOUNT
();
113
114
// Transaction-specific field values
115
auto
const
xChainBridgeValue =
canonical_XCHAIN_BRIDGE
();
116
auto
const
xChainClaimIDValue =
canonical_UINT64
();
117
auto
const
destinationValue =
canonical_ACCOUNT
();
118
auto
const
destinationTagValue =
canonical_UINT32
();
119
auto
const
amountValue =
canonical_AMOUNT
();
120
121
// Build an initial transaction
122
XChainClaimBuilder
initialBuilder{
123
accountValue,
124
xChainBridgeValue,
125
xChainClaimIDValue,
126
destinationValue,
127
amountValue,
128
sequenceValue,
129
feeValue
130
};
131
132
initialBuilder.
setDestinationTag
(destinationTagValue);
133
134
auto
initialTx = initialBuilder.
build
(publicKey, secretKey);
135
136
// Create builder from existing STTx
137
XChainClaimBuilder
builderFromTx{initialTx.getSTTx()};
138
139
auto
rebuiltTx = builderFromTx.
build
(publicKey, secretKey);
140
141
std::string
reason;
142
EXPECT_TRUE(rebuiltTx.validate(reason)) << reason;
143
144
// Verify common fields
145
EXPECT_EQ(rebuiltTx.getAccount(), accountValue);
146
EXPECT_EQ(rebuiltTx.getSequence(), sequenceValue);
147
EXPECT_EQ(rebuiltTx.getFee(), feeValue);
148
149
// Verify required fields
150
{
151
auto
const
& expected = xChainBridgeValue;
152
auto
const
actual = rebuiltTx.getXChainBridge();
153
expectEqualField
(expected, actual,
"sfXChainBridge"
);
154
}
155
156
{
157
auto
const
& expected = xChainClaimIDValue;
158
auto
const
actual = rebuiltTx.getXChainClaimID();
159
expectEqualField
(expected, actual,
"sfXChainClaimID"
);
160
}
161
162
{
163
auto
const
& expected = destinationValue;
164
auto
const
actual = rebuiltTx.getDestination();
165
expectEqualField
(expected, actual,
"sfDestination"
);
166
}
167
168
{
169
auto
const
& expected = amountValue;
170
auto
const
actual = rebuiltTx.getAmount();
171
expectEqualField
(expected, actual,
"sfAmount"
);
172
}
173
174
// Verify optional fields
175
{
176
auto
const
& expected = destinationTagValue;
177
auto
const
actualOpt = rebuiltTx.getDestinationTag();
178
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfDestinationTag should be present"
;
179
expectEqualField
(expected, *actualOpt,
"sfDestinationTag"
);
180
}
181
182
}
183
184
// 3) Verify wrapper throws when constructed from wrong transaction type.
185
TEST
(TransactionsXChainClaimTests, WrapperThrowsOnWrongTxType)
186
{
187
// Build a valid transaction of a different type
188
auto
const
[pk, sk] =
189
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongType"
));
190
auto
const
account =
calcAccountID
(pk);
191
192
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
193
auto
wrongTx = wrongBuilder.
build
(pk, sk);
194
195
EXPECT_THROW(
XChainClaim
{wrongTx.getSTTx()},
std::runtime_error
);
196
}
197
198
// 4) Verify builder throws when constructed from wrong transaction type.
199
TEST
(TransactionsXChainClaimTests, BuilderThrowsOnWrongTxType)
200
{
201
// Build a valid transaction of a different type
202
auto
const
[pk, sk] =
203
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongTypeBuilder"
));
204
auto
const
account =
calcAccountID
(pk);
205
206
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
207
auto
wrongTx = wrongBuilder.
build
(pk, sk);
208
209
EXPECT_THROW(
XChainClaimBuilder
{wrongTx.getSTTx()},
std::runtime_error
);
210
}
211
212
// 5) Build with only required fields and verify optional fields return nullopt.
213
TEST
(TransactionsXChainClaimTests, OptionalFieldsReturnNullopt)
214
{
215
// Generate a deterministic keypair for signing
216
auto
const
[publicKey, secretKey] =
217
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testXChainClaimNullopt"
));
218
219
// Common transaction fields
220
auto
const
accountValue =
calcAccountID
(publicKey);
221
std::uint32_t
const
sequenceValue = 3;
222
auto
const
feeValue =
canonical_AMOUNT
();
223
224
// Transaction-specific required field values
225
auto
const
xChainBridgeValue =
canonical_XCHAIN_BRIDGE
();
226
auto
const
xChainClaimIDValue =
canonical_UINT64
();
227
auto
const
destinationValue =
canonical_ACCOUNT
();
228
auto
const
amountValue =
canonical_AMOUNT
();
229
230
XChainClaimBuilder
builder{
231
accountValue,
232
xChainBridgeValue,
233
xChainClaimIDValue,
234
destinationValue,
235
amountValue,
236
sequenceValue,
237
feeValue
238
};
239
240
// Do NOT set optional fields
241
242
auto
tx = builder.
build
(publicKey, secretKey);
243
244
// Verify optional fields are not present
245
EXPECT_FALSE(tx.hasDestinationTag());
246
EXPECT_FALSE(tx.getDestinationTag().has_value());
247
}
248
249
}
std::string
xrpl::transactions::AccountSetBuilder
Builder for AccountSet transactions.
Definition
protocol_autogen/transactions/AccountSet.h:319
xrpl::transactions::AccountSetBuilder::build
AccountSet build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the AccountSet wrapper.
Definition
protocol_autogen/transactions/AccountSet.h:470
xrpl::transactions::XChainClaimBuilder
Builder for XChainClaim transactions.
Definition
XChainClaim.h:129
xrpl::transactions::XChainClaimBuilder::setDestinationTag
XChainClaimBuilder & setDestinationTag(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfDestinationTag (SoeOptional).
Definition
XChainClaim.h:209
xrpl::transactions::XChainClaimBuilder::build
XChainClaim build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the XChainClaim wrapper.
Definition
XChainClaim.h:233
xrpl::transactions::XChainClaim
Transaction: XChainClaim.
Definition
XChainClaim.h:30
std::uint32_t
xrpl::transactions
Definition
TransactionBase.h:15
xrpl::transactions::TEST
TEST(TransactionsAccountDeleteTests, BuilderSettersRoundTrip)
Definition
AccountDeleteTests.cpp:20
xrpl::KeyType::Secp256k1
@ Secp256k1
Definition
KeyType.h:9
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::generateSeed
Seed generateSeed(std::string const &passPhrase)
Generate a seed deterministically.
Definition
Seed.cpp:58
xrpl::canonical_XCHAIN_BRIDGE
XChainBridgeValue canonical_XCHAIN_BRIDGE()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:147
xrpl::generateKeyPair
std::pair< PublicKey, SecretKey > generateKeyPair(KeyType type, Seed const &seed)
Generate a key pair deterministically.
Definition
SecretKey.cpp:338
xrpl::canonical_AMOUNT
AmountValue canonical_AMOUNT()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:104
xrpl::calcAccountID
AccountID calcAccountID(PublicKey const &pk)
Definition
AccountID.cpp:149
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