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