xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
protocol_autogen
transactions
VaultSetTests.cpp
1
// Auto-generated unit tests for transaction VaultSet
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/VaultSet.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
(TransactionsVaultSetTests, BuilderSettersRoundTrip)
21
{
22
// Generate a deterministic keypair for signing
23
auto
const
[publicKey, secretKey] =
24
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testVaultSet"
));
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
vaultIDValue =
canonical_UINT256
();
33
auto
const
assetsMaximumValue =
canonical_NUMBER
();
34
auto
const
domainIDValue =
canonical_UINT256
();
35
auto
const
dataValue =
canonical_VL
();
36
37
VaultSetBuilder
builder{
38
accountValue,
39
vaultIDValue,
40
sequenceValue,
41
feeValue
42
};
43
44
// Set optional fields
45
builder.
setAssetsMaximum
(assetsMaximumValue);
46
builder.
setDomainID
(domainIDValue);
47
builder.
setData
(dataValue);
48
49
auto
tx = builder.
build
(publicKey, secretKey);
50
51
std::string
reason;
52
EXPECT_TRUE(tx.validate(reason)) << reason;
53
54
// Verify signing was applied
55
EXPECT_FALSE(tx.getSigningPubKey().empty());
56
EXPECT_TRUE(tx.hasTxnSignature());
57
58
// Verify common fields
59
EXPECT_EQ(tx.getAccount(), accountValue);
60
EXPECT_EQ(tx.getSequence(), sequenceValue);
61
EXPECT_EQ(tx.getFee(), feeValue);
62
63
// Verify required fields
64
{
65
auto
const
& expected = vaultIDValue;
66
auto
const
actual = tx.getVaultID();
67
expectEqualField
(expected, actual,
"sfVaultID"
);
68
}
69
70
// Verify optional fields
71
{
72
auto
const
& expected = assetsMaximumValue;
73
auto
const
actualOpt = tx.getAssetsMaximum();
74
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfAssetsMaximum should be present"
;
75
expectEqualField
(expected, *actualOpt,
"sfAssetsMaximum"
);
76
EXPECT_TRUE(tx.hasAssetsMaximum());
77
}
78
79
{
80
auto
const
& expected = domainIDValue;
81
auto
const
actualOpt = tx.getDomainID();
82
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfDomainID should be present"
;
83
expectEqualField
(expected, *actualOpt,
"sfDomainID"
);
84
EXPECT_TRUE(tx.hasDomainID());
85
}
86
87
{
88
auto
const
& expected = dataValue;
89
auto
const
actualOpt = tx.getData();
90
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfData should be present"
;
91
expectEqualField
(expected, *actualOpt,
"sfData"
);
92
EXPECT_TRUE(tx.hasData());
93
}
94
95
}
96
97
// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
98
// and verify all fields match.
99
TEST
(TransactionsVaultSetTests, BuilderFromStTxRoundTrip)
100
{
101
// Generate a deterministic keypair for signing
102
auto
const
[publicKey, secretKey] =
103
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testVaultSetFromTx"
));
104
105
// Common transaction fields
106
auto
const
accountValue =
calcAccountID
(publicKey);
107
std::uint32_t
const
sequenceValue = 2;
108
auto
const
feeValue =
canonical_AMOUNT
();
109
110
// Transaction-specific field values
111
auto
const
vaultIDValue =
canonical_UINT256
();
112
auto
const
assetsMaximumValue =
canonical_NUMBER
();
113
auto
const
domainIDValue =
canonical_UINT256
();
114
auto
const
dataValue =
canonical_VL
();
115
116
// Build an initial transaction
117
VaultSetBuilder
initialBuilder{
118
accountValue,
119
vaultIDValue,
120
sequenceValue,
121
feeValue
122
};
123
124
initialBuilder.
setAssetsMaximum
(assetsMaximumValue);
125
initialBuilder.
setDomainID
(domainIDValue);
126
initialBuilder.
setData
(dataValue);
127
128
auto
initialTx = initialBuilder.
build
(publicKey, secretKey);
129
130
// Create builder from existing STTx
131
VaultSetBuilder
builderFromTx{initialTx.getSTTx()};
132
133
auto
rebuiltTx = builderFromTx.
build
(publicKey, secretKey);
134
135
std::string
reason;
136
EXPECT_TRUE(rebuiltTx.validate(reason)) << reason;
137
138
// Verify common fields
139
EXPECT_EQ(rebuiltTx.getAccount(), accountValue);
140
EXPECT_EQ(rebuiltTx.getSequence(), sequenceValue);
141
EXPECT_EQ(rebuiltTx.getFee(), feeValue);
142
143
// Verify required fields
144
{
145
auto
const
& expected = vaultIDValue;
146
auto
const
actual = rebuiltTx.getVaultID();
147
expectEqualField
(expected, actual,
"sfVaultID"
);
148
}
149
150
// Verify optional fields
151
{
152
auto
const
& expected = assetsMaximumValue;
153
auto
const
actualOpt = rebuiltTx.getAssetsMaximum();
154
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfAssetsMaximum should be present"
;
155
expectEqualField
(expected, *actualOpt,
"sfAssetsMaximum"
);
156
}
157
158
{
159
auto
const
& expected = domainIDValue;
160
auto
const
actualOpt = rebuiltTx.getDomainID();
161
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfDomainID should be present"
;
162
expectEqualField
(expected, *actualOpt,
"sfDomainID"
);
163
}
164
165
{
166
auto
const
& expected = dataValue;
167
auto
const
actualOpt = rebuiltTx.getData();
168
ASSERT_TRUE(actualOpt.has_value()) <<
"Optional field sfData should be present"
;
169
expectEqualField
(expected, *actualOpt,
"sfData"
);
170
}
171
172
}
173
174
// 3) Verify wrapper throws when constructed from wrong transaction type.
175
TEST
(TransactionsVaultSetTests, WrapperThrowsOnWrongTxType)
176
{
177
// Build a valid transaction of a different type
178
auto
const
[pk, sk] =
179
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongType"
));
180
auto
const
account =
calcAccountID
(pk);
181
182
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
183
auto
wrongTx = wrongBuilder.
build
(pk, sk);
184
185
EXPECT_THROW(
VaultSet
{wrongTx.getSTTx()},
std::runtime_error
);
186
}
187
188
// 4) Verify builder throws when constructed from wrong transaction type.
189
TEST
(TransactionsVaultSetTests, BuilderThrowsOnWrongTxType)
190
{
191
// Build a valid transaction of a different type
192
auto
const
[pk, sk] =
193
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testWrongTypeBuilder"
));
194
auto
const
account =
calcAccountID
(pk);
195
196
AccountSetBuilder
wrongBuilder{account, 1,
canonical_AMOUNT
()};
197
auto
wrongTx = wrongBuilder.
build
(pk, sk);
198
199
EXPECT_THROW(
VaultSetBuilder
{wrongTx.getSTTx()},
std::runtime_error
);
200
}
201
202
// 5) Build with only required fields and verify optional fields return nullopt.
203
TEST
(TransactionsVaultSetTests, OptionalFieldsReturnNullopt)
204
{
205
// Generate a deterministic keypair for signing
206
auto
const
[publicKey, secretKey] =
207
generateKeyPair
(
KeyType::Secp256k1
,
generateSeed
(
"testVaultSetNullopt"
));
208
209
// Common transaction fields
210
auto
const
accountValue =
calcAccountID
(publicKey);
211
std::uint32_t
const
sequenceValue = 3;
212
auto
const
feeValue =
canonical_AMOUNT
();
213
214
// Transaction-specific required field values
215
auto
const
vaultIDValue =
canonical_UINT256
();
216
217
VaultSetBuilder
builder{
218
accountValue,
219
vaultIDValue,
220
sequenceValue,
221
feeValue
222
};
223
224
// Do NOT set optional fields
225
226
auto
tx = builder.
build
(publicKey, secretKey);
227
228
// Verify optional fields are not present
229
EXPECT_FALSE(tx.hasAssetsMaximum());
230
EXPECT_FALSE(tx.getAssetsMaximum().has_value());
231
EXPECT_FALSE(tx.hasDomainID());
232
EXPECT_FALSE(tx.getDomainID().has_value());
233
EXPECT_FALSE(tx.hasData());
234
EXPECT_FALSE(tx.getData().has_value());
235
}
236
237
}
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::VaultSetBuilder
Builder for VaultSet transactions.
Definition
protocol_autogen/transactions/VaultSet.h:148
xrpl::transactions::VaultSetBuilder::setData
VaultSetBuilder & setData(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfData (SoeOptional).
Definition
protocol_autogen/transactions/VaultSet.h:222
xrpl::transactions::VaultSetBuilder::setAssetsMaximum
VaultSetBuilder & setAssetsMaximum(std::decay_t< typename SF_NUMBER::type::value_type > const &value)
Set sfAssetsMaximum (SoeOptional).
Definition
protocol_autogen/transactions/VaultSet.h:200
xrpl::transactions::VaultSetBuilder::setDomainID
VaultSetBuilder & setDomainID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfDomainID (SoeOptional).
Definition
protocol_autogen/transactions/VaultSet.h:211
xrpl::transactions::VaultSetBuilder::build
VaultSet build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the VaultSet wrapper.
Definition
protocol_autogen/transactions/VaultSet.h:235
xrpl::transactions::VaultSet
Transaction: VaultSet.
Definition
protocol_autogen/transactions/VaultSet.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_VL
BlobValue canonical_VL()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:139
xrpl::canonical_UINT256
UInt256Value canonical_UINT256()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:83
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::canonical_NUMBER
NumberValue canonical_NUMBER()
Definition
/libxrpl/protocol_autogen/TestHelpers.h:97
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