xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
protocol_autogen
transactions
EscrowFinishTests.cpp
1
// Auto-generated unit tests for transaction EscrowFinish
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/EscrowFinish.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
(TransactionsEscrowFinishTests, BuilderSettersRoundTrip)
21
{
22
// Generate a deterministic keypair for signing
23
auto
const
[publicKey, secretKey] =
24
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testEscrowFinish"
));
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
ownerValue =
canonical_ACCOUNT
();
33
auto
const
offerSequenceValue =
canonical_UINT32
();
34
auto
const
fulfillmentValue =
canonical_VL
();
35
auto
const
conditionValue =
canonical_VL
();
36
auto
const
credentialIDsValue =
canonical_VECTOR256
();
37
auto
const
gasValue =
canonical_UINT32
();
38
39
EscrowFinishBuilder
builder{
40
accountValue,
41
ownerValue,
42
offerSequenceValue,
43
sequenceValue,
44
feeValue
45
};
46
47
// Set optional fields
48
builder.
setFulfillment
(fulfillmentValue);
49
builder.
setCondition
(conditionValue);
50
builder.
setCredentialIDs
(credentialIDsValue);
51
builder.
setGas
(gasValue);
52
53
auto
tx = builder.
build
(publicKey, secretKey);
54
55
std::string
reason;
56
EXPECT_TRUE(tx.validate(reason)) << reason;
57
58
// Verify signing was applied
59
EXPECT_FALSE(tx.getSigningPubKey().empty());
60
EXPECT_TRUE(tx.hasTxnSignature());
61
62
// Verify common fields
63
EXPECT_EQ(tx.getAccount(), accountValue);
64
EXPECT_EQ(tx.getSequence(), sequenceValue);
65
EXPECT_EQ(tx.getFee(), feeValue);
66
67
// Verify required fields
68
{
69
auto
const
& expected = ownerValue;
70
auto
const
actual = tx.getOwner();
71
expectEqualField
(expected, actual,
"sfOwner"
);
72
}
73
74
{
75
auto
const
& expected = offerSequenceValue;
76
auto
const
actual = tx.getOfferSequence();
77
expectEqualField
(expected, actual,
"sfOfferSequence"
);
78
}
79
80
// Verify optional fields
81
{
82
auto
const
& expected = fulfillmentValue;
83
auto
const
actualOpt = tx.getFulfillment();
84
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfFulfillment should be present"
;
85
expectEqualField
(expected, *actualOpt,
"sfFulfillment"
);
86
EXPECT_TRUE(tx.hasFulfillment());
87
}
88
89
{
90
auto
const
& expected = conditionValue;
91
auto
const
actualOpt = tx.getCondition();
92
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfCondition should be present"
;
93
expectEqualField
(expected, *actualOpt,
"sfCondition"
);
94
EXPECT_TRUE(tx.hasCondition());
95
}
96
97
{
98
auto
const
& expected = credentialIDsValue;
99
auto
const
actualOpt = tx.getCredentialIDs();
100
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfCredentialIDs should be present"
;
101
expectEqualField
(expected, *actualOpt,
"sfCredentialIDs"
);
102
EXPECT_TRUE(tx.hasCredentialIDs());
103
}
104
105
{
106
auto
const
& expected = gasValue;
107
auto
const
actualOpt = tx.getGas();
108
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfGas should be present"
;
109
expectEqualField
(expected, *actualOpt,
"sfGas"
);
110
EXPECT_TRUE(tx.hasGas());
111
}
112
113
}
114
115
// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
116
// and verify all fields match.
117
TEST
(TransactionsEscrowFinishTests, BuilderFromStTxRoundTrip)
118
{
119
// Generate a deterministic keypair for signing
120
auto
const
[publicKey, secretKey] =
121
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testEscrowFinishFromTx"
));
122
123
// Common transaction fields
124
auto
const
accountValue =
calcAccountID
(publicKey);
125
std::uint32_t
const
sequenceValue = 2;
126
auto
const
feeValue =
canonical_AMOUNT
();
127
128
// Transaction-specific field values
129
auto
const
ownerValue =
canonical_ACCOUNT
();
130
auto
const
offerSequenceValue =
canonical_UINT32
();
131
auto
const
fulfillmentValue =
canonical_VL
();
132
auto
const
conditionValue =
canonical_VL
();
133
auto
const
credentialIDsValue =
canonical_VECTOR256
();
134
auto
const
gasValue =
canonical_UINT32
();
135
136
// Build an initial transaction
137
EscrowFinishBuilder
initialBuilder{
138
accountValue,
139
ownerValue,
140
offerSequenceValue,
141
sequenceValue,
142
feeValue
143
};
144
145
initialBuilder.
setFulfillment
(fulfillmentValue);
146
initialBuilder.
setCondition
(conditionValue);
147
initialBuilder.
setCredentialIDs
(credentialIDsValue);
148
initialBuilder.
setGas
(gasValue);
149
150
auto
initialTx = initialBuilder.
build
(publicKey, secretKey);
151
152
// Create builder from existing STTx
153
EscrowFinishBuilder
builderFromTx{initialTx.getSTTx()};
154
155
auto
rebuiltTx = builderFromTx.
build
(publicKey, secretKey);
156
157
std::string
reason;
158
EXPECT_TRUE(rebuiltTx.validate(reason)) << reason;
159
160
// Verify common fields
161
EXPECT_EQ(rebuiltTx.getAccount(), accountValue);
162
EXPECT_EQ(rebuiltTx.getSequence(), sequenceValue);
163
EXPECT_EQ(rebuiltTx.getFee(), feeValue);
164
165
// Verify required fields
166
{
167
auto
const
& expected = ownerValue;
168
auto
const
actual = rebuiltTx.getOwner();
169
expectEqualField
(expected, actual,
"sfOwner"
);
170
}
171
172
{
173
auto
const
& expected = offerSequenceValue;
174
auto
const
actual = rebuiltTx.getOfferSequence();
175
expectEqualField
(expected, actual,
"sfOfferSequence"
);
176
}
177
178
// Verify optional fields
179
{
180
auto
const
& expected = fulfillmentValue;
181
auto
const
actualOpt = rebuiltTx.getFulfillment();
182
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfFulfillment should be present"
;
183
expectEqualField
(expected, *actualOpt,
"sfFulfillment"
);
184
}
185
186
{
187
auto
const
& expected = conditionValue;
188
auto
const
actualOpt = rebuiltTx.getCondition();
189
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfCondition should be present"
;
190
expectEqualField
(expected, *actualOpt,
"sfCondition"
);
191
}
192
193
{
194
auto
const
& expected = credentialIDsValue;
195
auto
const
actualOpt = rebuiltTx.getCredentialIDs();
196
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfCredentialIDs should be present"
;
197
expectEqualField
(expected, *actualOpt,
"sfCredentialIDs"
);
198
}
199
200
{
201
auto
const
& expected = gasValue;
202
auto
const
actualOpt = rebuiltTx.getGas();
203
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfGas should be present"
;
204
expectEqualField
(expected, *actualOpt,
"sfGas"
);
205
}
206
207
}
208
209
// 3) Verify wrapper throws when constructed from wrong transaction type.
210
TEST
(TransactionsEscrowFinishTests, WrapperThrowsOnWrongTxType)
211
{
212
// Build a valid transaction of a different type
213
auto
const
[pk, sk] =
214
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongType"
));
215
auto
const
account =
calcAccountID
(pk);
216
217
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
218
auto
wrongTx = wrongBuilder.
build
(pk, sk);
219
220
EXPECT_THROW(
EscrowFinish
{wrongTx.getSTTx()},
std::runtime_error
);
221
}
222
223
// 4) Verify builder throws when constructed from wrong transaction type.
224
TEST
(TransactionsEscrowFinishTests, BuilderThrowsOnWrongTxType)
225
{
226
// Build a valid transaction of a different type
227
auto
const
[pk, sk] =
228
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongTypeBuilder"
));
229
auto
const
account =
calcAccountID
(pk);
230
231
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
232
auto
wrongTx = wrongBuilder.
build
(pk, sk);
233
234
EXPECT_THROW(
EscrowFinishBuilder
{wrongTx.getSTTx()},
std::runtime_error
);
235
}
236
237
// 5) Build with only required fields and verify optional fields return nullopt.
238
TEST
(TransactionsEscrowFinishTests, OptionalFieldsReturnNullopt)
239
{
240
// Generate a deterministic keypair for signing
241
auto
const
[publicKey, secretKey] =
242
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testEscrowFinishNullopt"
));
243
244
// Common transaction fields
245
auto
const
accountValue =
calcAccountID
(publicKey);
246
std::uint32_t
const
sequenceValue = 3;
247
auto
const
feeValue =
canonical_AMOUNT
();
248
249
// Transaction-specific required field values
250
auto
const
ownerValue =
canonical_ACCOUNT
();
251
auto
const
offerSequenceValue =
canonical_UINT32
();
252
253
EscrowFinishBuilder
builder{
254
accountValue,
255
ownerValue,
256
offerSequenceValue,
257
sequenceValue,
258
feeValue
259
};
260
261
// Do NOT set optional fields
262
263
auto
tx = builder.
build
(publicKey, secretKey);
264
265
// Verify optional fields are not present
266
EXPECT_FALSE(tx.hasFulfillment());
267
EXPECT_FALSE(tx.getFulfillment().has_value());
268
EXPECT_FALSE(tx.hasCondition());
269
EXPECT_FALSE(tx.getCondition().has_value());
270
EXPECT_FALSE(tx.hasCredentialIDs());
271
EXPECT_FALSE(tx.getCredentialIDs().has_value());
272
EXPECT_FALSE(tx.hasGas());
273
EXPECT_FALSE(tx.getGas().has_value());
274
}
275
276
}
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::EscrowFinishBuilder
Builder for EscrowFinish transactions.
Definition
protocol_autogen/transactions/EscrowFinish.h:185
xrpl::transactions::EscrowFinishBuilder::setGas
EscrowFinishBuilder & setGas(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfGas (SoeOptional).
Definition
protocol_autogen/transactions/EscrowFinish.h:283
xrpl::transactions::EscrowFinishBuilder::build
EscrowFinish build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the EscrowFinish wrapper.
Definition
protocol_autogen/transactions/EscrowFinish.h:296
xrpl::transactions::EscrowFinishBuilder::setFulfillment
EscrowFinishBuilder & setFulfillment(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfFulfillment (SoeOptional).
Definition
protocol_autogen/transactions/EscrowFinish.h:250
xrpl::transactions::EscrowFinishBuilder::setCondition
EscrowFinishBuilder & setCondition(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfCondition (SoeOptional).
Definition
protocol_autogen/transactions/EscrowFinish.h:261
xrpl::transactions::EscrowFinishBuilder::setCredentialIDs
EscrowFinishBuilder & setCredentialIDs(std::decay_t< typename SF_VECTOR256::type::value_type > const &value)
Set sfCredentialIDs (SoeOptional).
Definition
protocol_autogen/transactions/EscrowFinish.h:272
xrpl::transactions::EscrowFinish
Transaction: EscrowFinish.
Definition
protocol_autogen/transactions/EscrowFinish.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::canonical_VL
BlobValue canonical_VL()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:139
xrpl::canonical_VECTOR256
Vector256Value canonical_VECTOR256()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:132
xrpl::generateSeed
Seed generateSeed(std::string const &passPhrase)
Generate a seed deterministically.
Definition
Seed.cpp:58
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::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