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