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