xrpld
Loading...
Searching...
No Matches
AccountRootTests.cpp
1// Auto-generated unit tests for ledger entry AccountRoot
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/STLedgerEntry.h>
9#include <xrpl/protocol_autogen/ledger_entries/AccountRoot.h>
10#include <xrpl/protocol_autogen/ledger_entries/Ticket.h>
11
12#include <string>
13
14namespace xrpl::ledger_entries {
15
16// 1 & 4) Set fields via builder setters, build, then read them back via
17// wrapper getters. After build(), validate() should succeed for both the
18// builder's STObject and the wrapper's SLE.
19TEST(AccountRootTests, BuilderSettersRoundTrip)
20{
21 uint256 const index{1u};
22
23 auto const accountValue = canonical_ACCOUNT();
24 auto const sequenceValue = canonical_UINT32();
25 auto const balanceValue = canonical_AMOUNT();
26 auto const ownerCountValue = canonical_UINT32();
27 auto const previousTxnIDValue = canonical_UINT256();
28 auto const previousTxnLgrSeqValue = canonical_UINT32();
29 auto const accountTxnIDValue = canonical_UINT256();
30 auto const regularKeyValue = canonical_ACCOUNT();
31 auto const emailHashValue = canonical_UINT128();
32 auto const walletLocatorValue = canonical_UINT256();
33 auto const walletSizeValue = canonical_UINT32();
34 auto const messageKeyValue = canonical_VL();
35 auto const transferRateValue = canonical_UINT32();
36 auto const domainValue = canonical_VL();
37 auto const tickSizeValue = canonical_UINT8();
38 auto const ticketCountValue = canonical_UINT32();
39 auto const nFTokenMinterValue = canonical_ACCOUNT();
40 auto const mintedNFTokensValue = canonical_UINT32();
41 auto const burnedNFTokensValue = canonical_UINT32();
42 auto const firstNFTokenSequenceValue = canonical_UINT32();
43 auto const sponsoredOwnerCountValue = canonical_UINT32();
44 auto const sponsoringOwnerCountValue = canonical_UINT32();
45 auto const sponsoringAccountCountValue = canonical_UINT32();
46 auto const aMMIDValue = canonical_UINT256();
47 auto const vaultIDValue = canonical_UINT256();
48 auto const loanBrokerIDValue = canonical_UINT256();
49
50 AccountRootBuilder builder{
51 accountValue,
52 sequenceValue,
53 balanceValue,
54 ownerCountValue,
55 previousTxnIDValue,
56 previousTxnLgrSeqValue
57 };
58
59 builder.setAccountTxnID(accountTxnIDValue);
60 builder.setRegularKey(regularKeyValue);
61 builder.setEmailHash(emailHashValue);
62 builder.setWalletLocator(walletLocatorValue);
63 builder.setWalletSize(walletSizeValue);
64 builder.setMessageKey(messageKeyValue);
65 builder.setTransferRate(transferRateValue);
66 builder.setDomain(domainValue);
67 builder.setTickSize(tickSizeValue);
68 builder.setTicketCount(ticketCountValue);
69 builder.setNFTokenMinter(nFTokenMinterValue);
70 builder.setMintedNFTokens(mintedNFTokensValue);
71 builder.setBurnedNFTokens(burnedNFTokensValue);
72 builder.setFirstNFTokenSequence(firstNFTokenSequenceValue);
73 builder.setSponsoredOwnerCount(sponsoredOwnerCountValue);
74 builder.setSponsoringOwnerCount(sponsoringOwnerCountValue);
75 builder.setSponsoringAccountCount(sponsoringAccountCountValue);
76 builder.setAMMID(aMMIDValue);
77 builder.setVaultID(vaultIDValue);
78 builder.setLoanBrokerID(loanBrokerIDValue);
79
80 builder.setLedgerIndex(index);
81 builder.setFlags(0x1u);
82
83 EXPECT_TRUE(builder.validate());
84
85 auto const entry = builder.build(index);
86
87 EXPECT_TRUE(entry.validate());
88
89 {
90 auto const& expected = accountValue;
91 auto const actual = entry.getAccount();
92 expectEqualField(expected, actual, "sfAccount");
93 }
94
95 {
96 auto const& expected = sequenceValue;
97 auto const actual = entry.getSequence();
98 expectEqualField(expected, actual, "sfSequence");
99 }
100
101 {
102 auto const& expected = balanceValue;
103 auto const actual = entry.getBalance();
104 expectEqualField(expected, actual, "sfBalance");
105 }
106
107 {
108 auto const& expected = ownerCountValue;
109 auto const actual = entry.getOwnerCount();
110 expectEqualField(expected, actual, "sfOwnerCount");
111 }
112
113 {
114 auto const& expected = previousTxnIDValue;
115 auto const actual = entry.getPreviousTxnID();
116 expectEqualField(expected, actual, "sfPreviousTxnID");
117 }
118
119 {
120 auto const& expected = previousTxnLgrSeqValue;
121 auto const actual = entry.getPreviousTxnLgrSeq();
122 expectEqualField(expected, actual, "sfPreviousTxnLgrSeq");
123 }
124
125 {
126 auto const& expected = accountTxnIDValue;
127 auto const actualOpt = entry.getAccountTxnID();
128 ASSERT_TRUE(actualOpt.has_value());
129 expectEqualField(expected, *actualOpt, "sfAccountTxnID");
130 EXPECT_TRUE(entry.hasAccountTxnID());
131 }
132
133 {
134 auto const& expected = regularKeyValue;
135 auto const actualOpt = entry.getRegularKey();
136 ASSERT_TRUE(actualOpt.has_value());
137 expectEqualField(expected, *actualOpt, "sfRegularKey");
138 EXPECT_TRUE(entry.hasRegularKey());
139 }
140
141 {
142 auto const& expected = emailHashValue;
143 auto const actualOpt = entry.getEmailHash();
144 ASSERT_TRUE(actualOpt.has_value());
145 expectEqualField(expected, *actualOpt, "sfEmailHash");
146 EXPECT_TRUE(entry.hasEmailHash());
147 }
148
149 {
150 auto const& expected = walletLocatorValue;
151 auto const actualOpt = entry.getWalletLocator();
152 ASSERT_TRUE(actualOpt.has_value());
153 expectEqualField(expected, *actualOpt, "sfWalletLocator");
154 EXPECT_TRUE(entry.hasWalletLocator());
155 }
156
157 {
158 auto const& expected = walletSizeValue;
159 auto const actualOpt = entry.getWalletSize();
160 ASSERT_TRUE(actualOpt.has_value());
161 expectEqualField(expected, *actualOpt, "sfWalletSize");
162 EXPECT_TRUE(entry.hasWalletSize());
163 }
164
165 {
166 auto const& expected = messageKeyValue;
167 auto const actualOpt = entry.getMessageKey();
168 ASSERT_TRUE(actualOpt.has_value());
169 expectEqualField(expected, *actualOpt, "sfMessageKey");
170 EXPECT_TRUE(entry.hasMessageKey());
171 }
172
173 {
174 auto const& expected = transferRateValue;
175 auto const actualOpt = entry.getTransferRate();
176 ASSERT_TRUE(actualOpt.has_value());
177 expectEqualField(expected, *actualOpt, "sfTransferRate");
178 EXPECT_TRUE(entry.hasTransferRate());
179 }
180
181 {
182 auto const& expected = domainValue;
183 auto const actualOpt = entry.getDomain();
184 ASSERT_TRUE(actualOpt.has_value());
185 expectEqualField(expected, *actualOpt, "sfDomain");
186 EXPECT_TRUE(entry.hasDomain());
187 }
188
189 {
190 auto const& expected = tickSizeValue;
191 auto const actualOpt = entry.getTickSize();
192 ASSERT_TRUE(actualOpt.has_value());
193 expectEqualField(expected, *actualOpt, "sfTickSize");
194 EXPECT_TRUE(entry.hasTickSize());
195 }
196
197 {
198 auto const& expected = ticketCountValue;
199 auto const actualOpt = entry.getTicketCount();
200 ASSERT_TRUE(actualOpt.has_value());
201 expectEqualField(expected, *actualOpt, "sfTicketCount");
202 EXPECT_TRUE(entry.hasTicketCount());
203 }
204
205 {
206 auto const& expected = nFTokenMinterValue;
207 auto const actualOpt = entry.getNFTokenMinter();
208 ASSERT_TRUE(actualOpt.has_value());
209 expectEqualField(expected, *actualOpt, "sfNFTokenMinter");
210 EXPECT_TRUE(entry.hasNFTokenMinter());
211 }
212
213 {
214 auto const& expected = mintedNFTokensValue;
215 auto const actualOpt = entry.getMintedNFTokens();
216 ASSERT_TRUE(actualOpt.has_value());
217 expectEqualField(expected, *actualOpt, "sfMintedNFTokens");
218 EXPECT_TRUE(entry.hasMintedNFTokens());
219 }
220
221 {
222 auto const& expected = burnedNFTokensValue;
223 auto const actualOpt = entry.getBurnedNFTokens();
224 ASSERT_TRUE(actualOpt.has_value());
225 expectEqualField(expected, *actualOpt, "sfBurnedNFTokens");
226 EXPECT_TRUE(entry.hasBurnedNFTokens());
227 }
228
229 {
230 auto const& expected = firstNFTokenSequenceValue;
231 auto const actualOpt = entry.getFirstNFTokenSequence();
232 ASSERT_TRUE(actualOpt.has_value());
233 expectEqualField(expected, *actualOpt, "sfFirstNFTokenSequence");
234 EXPECT_TRUE(entry.hasFirstNFTokenSequence());
235 }
236
237 {
238 auto const& expected = sponsoredOwnerCountValue;
239 auto const actualOpt = entry.getSponsoredOwnerCount();
240 ASSERT_TRUE(actualOpt.has_value());
241 expectEqualField(expected, *actualOpt, "sfSponsoredOwnerCount");
242 EXPECT_TRUE(entry.hasSponsoredOwnerCount());
243 }
244
245 {
246 auto const& expected = sponsoringOwnerCountValue;
247 auto const actualOpt = entry.getSponsoringOwnerCount();
248 ASSERT_TRUE(actualOpt.has_value());
249 expectEqualField(expected, *actualOpt, "sfSponsoringOwnerCount");
250 EXPECT_TRUE(entry.hasSponsoringOwnerCount());
251 }
252
253 {
254 auto const& expected = sponsoringAccountCountValue;
255 auto const actualOpt = entry.getSponsoringAccountCount();
256 ASSERT_TRUE(actualOpt.has_value());
257 expectEqualField(expected, *actualOpt, "sfSponsoringAccountCount");
258 EXPECT_TRUE(entry.hasSponsoringAccountCount());
259 }
260
261 {
262 auto const& expected = aMMIDValue;
263 auto const actualOpt = entry.getAMMID();
264 ASSERT_TRUE(actualOpt.has_value());
265 expectEqualField(expected, *actualOpt, "sfAMMID");
266 EXPECT_TRUE(entry.hasAMMID());
267 }
268
269 {
270 auto const& expected = vaultIDValue;
271 auto const actualOpt = entry.getVaultID();
272 ASSERT_TRUE(actualOpt.has_value());
273 expectEqualField(expected, *actualOpt, "sfVaultID");
274 EXPECT_TRUE(entry.hasVaultID());
275 }
276
277 {
278 auto const& expected = loanBrokerIDValue;
279 auto const actualOpt = entry.getLoanBrokerID();
280 ASSERT_TRUE(actualOpt.has_value());
281 expectEqualField(expected, *actualOpt, "sfLoanBrokerID");
282 EXPECT_TRUE(entry.hasLoanBrokerID());
283 }
284
285 EXPECT_TRUE(entry.hasLedgerIndex());
286 auto const ledgerIndex = entry.getLedgerIndex();
287 ASSERT_TRUE(ledgerIndex.has_value());
288 EXPECT_EQ(*ledgerIndex, index);
289 EXPECT_EQ(entry.getKey(), index);
290}
291
292// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
293// from that SLE, build a new wrapper, and verify all fields (and validate()).
294TEST(AccountRootTests, BuilderFromSleRoundTrip)
295{
296 uint256 const index{2u};
297
298 auto const accountValue = canonical_ACCOUNT();
299 auto const sequenceValue = canonical_UINT32();
300 auto const balanceValue = canonical_AMOUNT();
301 auto const ownerCountValue = canonical_UINT32();
302 auto const previousTxnIDValue = canonical_UINT256();
303 auto const previousTxnLgrSeqValue = canonical_UINT32();
304 auto const accountTxnIDValue = canonical_UINT256();
305 auto const regularKeyValue = canonical_ACCOUNT();
306 auto const emailHashValue = canonical_UINT128();
307 auto const walletLocatorValue = canonical_UINT256();
308 auto const walletSizeValue = canonical_UINT32();
309 auto const messageKeyValue = canonical_VL();
310 auto const transferRateValue = canonical_UINT32();
311 auto const domainValue = canonical_VL();
312 auto const tickSizeValue = canonical_UINT8();
313 auto const ticketCountValue = canonical_UINT32();
314 auto const nFTokenMinterValue = canonical_ACCOUNT();
315 auto const mintedNFTokensValue = canonical_UINT32();
316 auto const burnedNFTokensValue = canonical_UINT32();
317 auto const firstNFTokenSequenceValue = canonical_UINT32();
318 auto const sponsoredOwnerCountValue = canonical_UINT32();
319 auto const sponsoringOwnerCountValue = canonical_UINT32();
320 auto const sponsoringAccountCountValue = canonical_UINT32();
321 auto const aMMIDValue = canonical_UINT256();
322 auto const vaultIDValue = canonical_UINT256();
323 auto const loanBrokerIDValue = canonical_UINT256();
324
326
327 sle->at(sfAccount) = accountValue;
328 sle->at(sfSequence) = sequenceValue;
329 sle->at(sfBalance) = balanceValue;
330 sle->at(sfOwnerCount) = ownerCountValue;
331 sle->at(sfPreviousTxnID) = previousTxnIDValue;
332 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
333 sle->at(sfAccountTxnID) = accountTxnIDValue;
334 sle->at(sfRegularKey) = regularKeyValue;
335 sle->at(sfEmailHash) = emailHashValue;
336 sle->at(sfWalletLocator) = walletLocatorValue;
337 sle->at(sfWalletSize) = walletSizeValue;
338 sle->at(sfMessageKey) = messageKeyValue;
339 sle->at(sfTransferRate) = transferRateValue;
340 sle->at(sfDomain) = domainValue;
341 sle->at(sfTickSize) = tickSizeValue;
342 sle->at(sfTicketCount) = ticketCountValue;
343 sle->at(sfNFTokenMinter) = nFTokenMinterValue;
344 sle->at(sfMintedNFTokens) = mintedNFTokensValue;
345 sle->at(sfBurnedNFTokens) = burnedNFTokensValue;
346 sle->at(sfFirstNFTokenSequence) = firstNFTokenSequenceValue;
347 sle->at(sfSponsoredOwnerCount) = sponsoredOwnerCountValue;
348 sle->at(sfSponsoringOwnerCount) = sponsoringOwnerCountValue;
349 sle->at(sfSponsoringAccountCount) = sponsoringAccountCountValue;
350 sle->at(sfAMMID) = aMMIDValue;
351 sle->at(sfVaultID) = vaultIDValue;
352 sle->at(sfLoanBrokerID) = loanBrokerIDValue;
353
354 AccountRootBuilder builderFromSle{sle};
355 EXPECT_TRUE(builderFromSle.validate());
356
357 auto const entryFromBuilder = builderFromSle.build(index);
358
359 AccountRoot entryFromSle{sle};
360 EXPECT_TRUE(entryFromBuilder.validate());
361 EXPECT_TRUE(entryFromSle.validate());
362
363 {
364 auto const& expected = accountValue;
365
366 auto const fromSle = entryFromSle.getAccount();
367 auto const fromBuilder = entryFromBuilder.getAccount();
368
369 expectEqualField(expected, fromSle, "sfAccount");
370 expectEqualField(expected, fromBuilder, "sfAccount");
371 }
372
373 {
374 auto const& expected = sequenceValue;
375
376 auto const fromSle = entryFromSle.getSequence();
377 auto const fromBuilder = entryFromBuilder.getSequence();
378
379 expectEqualField(expected, fromSle, "sfSequence");
380 expectEqualField(expected, fromBuilder, "sfSequence");
381 }
382
383 {
384 auto const& expected = balanceValue;
385
386 auto const fromSle = entryFromSle.getBalance();
387 auto const fromBuilder = entryFromBuilder.getBalance();
388
389 expectEqualField(expected, fromSle, "sfBalance");
390 expectEqualField(expected, fromBuilder, "sfBalance");
391 }
392
393 {
394 auto const& expected = ownerCountValue;
395
396 auto const fromSle = entryFromSle.getOwnerCount();
397 auto const fromBuilder = entryFromBuilder.getOwnerCount();
398
399 expectEqualField(expected, fromSle, "sfOwnerCount");
400 expectEqualField(expected, fromBuilder, "sfOwnerCount");
401 }
402
403 {
404 auto const& expected = previousTxnIDValue;
405
406 auto const fromSle = entryFromSle.getPreviousTxnID();
407 auto const fromBuilder = entryFromBuilder.getPreviousTxnID();
408
409 expectEqualField(expected, fromSle, "sfPreviousTxnID");
410 expectEqualField(expected, fromBuilder, "sfPreviousTxnID");
411 }
412
413 {
414 auto const& expected = previousTxnLgrSeqValue;
415
416 auto const fromSle = entryFromSle.getPreviousTxnLgrSeq();
417 auto const fromBuilder = entryFromBuilder.getPreviousTxnLgrSeq();
418
419 expectEqualField(expected, fromSle, "sfPreviousTxnLgrSeq");
420 expectEqualField(expected, fromBuilder, "sfPreviousTxnLgrSeq");
421 }
422
423 {
424 auto const& expected = accountTxnIDValue;
425
426 auto const fromSleOpt = entryFromSle.getAccountTxnID();
427 auto const fromBuilderOpt = entryFromBuilder.getAccountTxnID();
428
429 ASSERT_TRUE(fromSleOpt.has_value());
430 ASSERT_TRUE(fromBuilderOpt.has_value());
431
432 expectEqualField(expected, *fromSleOpt, "sfAccountTxnID");
433 expectEqualField(expected, *fromBuilderOpt, "sfAccountTxnID");
434 }
435
436 {
437 auto const& expected = regularKeyValue;
438
439 auto const fromSleOpt = entryFromSle.getRegularKey();
440 auto const fromBuilderOpt = entryFromBuilder.getRegularKey();
441
442 ASSERT_TRUE(fromSleOpt.has_value());
443 ASSERT_TRUE(fromBuilderOpt.has_value());
444
445 expectEqualField(expected, *fromSleOpt, "sfRegularKey");
446 expectEqualField(expected, *fromBuilderOpt, "sfRegularKey");
447 }
448
449 {
450 auto const& expected = emailHashValue;
451
452 auto const fromSleOpt = entryFromSle.getEmailHash();
453 auto const fromBuilderOpt = entryFromBuilder.getEmailHash();
454
455 ASSERT_TRUE(fromSleOpt.has_value());
456 ASSERT_TRUE(fromBuilderOpt.has_value());
457
458 expectEqualField(expected, *fromSleOpt, "sfEmailHash");
459 expectEqualField(expected, *fromBuilderOpt, "sfEmailHash");
460 }
461
462 {
463 auto const& expected = walletLocatorValue;
464
465 auto const fromSleOpt = entryFromSle.getWalletLocator();
466 auto const fromBuilderOpt = entryFromBuilder.getWalletLocator();
467
468 ASSERT_TRUE(fromSleOpt.has_value());
469 ASSERT_TRUE(fromBuilderOpt.has_value());
470
471 expectEqualField(expected, *fromSleOpt, "sfWalletLocator");
472 expectEqualField(expected, *fromBuilderOpt, "sfWalletLocator");
473 }
474
475 {
476 auto const& expected = walletSizeValue;
477
478 auto const fromSleOpt = entryFromSle.getWalletSize();
479 auto const fromBuilderOpt = entryFromBuilder.getWalletSize();
480
481 ASSERT_TRUE(fromSleOpt.has_value());
482 ASSERT_TRUE(fromBuilderOpt.has_value());
483
484 expectEqualField(expected, *fromSleOpt, "sfWalletSize");
485 expectEqualField(expected, *fromBuilderOpt, "sfWalletSize");
486 }
487
488 {
489 auto const& expected = messageKeyValue;
490
491 auto const fromSleOpt = entryFromSle.getMessageKey();
492 auto const fromBuilderOpt = entryFromBuilder.getMessageKey();
493
494 ASSERT_TRUE(fromSleOpt.has_value());
495 ASSERT_TRUE(fromBuilderOpt.has_value());
496
497 expectEqualField(expected, *fromSleOpt, "sfMessageKey");
498 expectEqualField(expected, *fromBuilderOpt, "sfMessageKey");
499 }
500
501 {
502 auto const& expected = transferRateValue;
503
504 auto const fromSleOpt = entryFromSle.getTransferRate();
505 auto const fromBuilderOpt = entryFromBuilder.getTransferRate();
506
507 ASSERT_TRUE(fromSleOpt.has_value());
508 ASSERT_TRUE(fromBuilderOpt.has_value());
509
510 expectEqualField(expected, *fromSleOpt, "sfTransferRate");
511 expectEqualField(expected, *fromBuilderOpt, "sfTransferRate");
512 }
513
514 {
515 auto const& expected = domainValue;
516
517 auto const fromSleOpt = entryFromSle.getDomain();
518 auto const fromBuilderOpt = entryFromBuilder.getDomain();
519
520 ASSERT_TRUE(fromSleOpt.has_value());
521 ASSERT_TRUE(fromBuilderOpt.has_value());
522
523 expectEqualField(expected, *fromSleOpt, "sfDomain");
524 expectEqualField(expected, *fromBuilderOpt, "sfDomain");
525 }
526
527 {
528 auto const& expected = tickSizeValue;
529
530 auto const fromSleOpt = entryFromSle.getTickSize();
531 auto const fromBuilderOpt = entryFromBuilder.getTickSize();
532
533 ASSERT_TRUE(fromSleOpt.has_value());
534 ASSERT_TRUE(fromBuilderOpt.has_value());
535
536 expectEqualField(expected, *fromSleOpt, "sfTickSize");
537 expectEqualField(expected, *fromBuilderOpt, "sfTickSize");
538 }
539
540 {
541 auto const& expected = ticketCountValue;
542
543 auto const fromSleOpt = entryFromSle.getTicketCount();
544 auto const fromBuilderOpt = entryFromBuilder.getTicketCount();
545
546 ASSERT_TRUE(fromSleOpt.has_value());
547 ASSERT_TRUE(fromBuilderOpt.has_value());
548
549 expectEqualField(expected, *fromSleOpt, "sfTicketCount");
550 expectEqualField(expected, *fromBuilderOpt, "sfTicketCount");
551 }
552
553 {
554 auto const& expected = nFTokenMinterValue;
555
556 auto const fromSleOpt = entryFromSle.getNFTokenMinter();
557 auto const fromBuilderOpt = entryFromBuilder.getNFTokenMinter();
558
559 ASSERT_TRUE(fromSleOpt.has_value());
560 ASSERT_TRUE(fromBuilderOpt.has_value());
561
562 expectEqualField(expected, *fromSleOpt, "sfNFTokenMinter");
563 expectEqualField(expected, *fromBuilderOpt, "sfNFTokenMinter");
564 }
565
566 {
567 auto const& expected = mintedNFTokensValue;
568
569 auto const fromSleOpt = entryFromSle.getMintedNFTokens();
570 auto const fromBuilderOpt = entryFromBuilder.getMintedNFTokens();
571
572 ASSERT_TRUE(fromSleOpt.has_value());
573 ASSERT_TRUE(fromBuilderOpt.has_value());
574
575 expectEqualField(expected, *fromSleOpt, "sfMintedNFTokens");
576 expectEqualField(expected, *fromBuilderOpt, "sfMintedNFTokens");
577 }
578
579 {
580 auto const& expected = burnedNFTokensValue;
581
582 auto const fromSleOpt = entryFromSle.getBurnedNFTokens();
583 auto const fromBuilderOpt = entryFromBuilder.getBurnedNFTokens();
584
585 ASSERT_TRUE(fromSleOpt.has_value());
586 ASSERT_TRUE(fromBuilderOpt.has_value());
587
588 expectEqualField(expected, *fromSleOpt, "sfBurnedNFTokens");
589 expectEqualField(expected, *fromBuilderOpt, "sfBurnedNFTokens");
590 }
591
592 {
593 auto const& expected = firstNFTokenSequenceValue;
594
595 auto const fromSleOpt = entryFromSle.getFirstNFTokenSequence();
596 auto const fromBuilderOpt = entryFromBuilder.getFirstNFTokenSequence();
597
598 ASSERT_TRUE(fromSleOpt.has_value());
599 ASSERT_TRUE(fromBuilderOpt.has_value());
600
601 expectEqualField(expected, *fromSleOpt, "sfFirstNFTokenSequence");
602 expectEqualField(expected, *fromBuilderOpt, "sfFirstNFTokenSequence");
603 }
604
605 {
606 auto const& expected = sponsoredOwnerCountValue;
607
608 auto const fromSleOpt = entryFromSle.getSponsoredOwnerCount();
609 auto const fromBuilderOpt = entryFromBuilder.getSponsoredOwnerCount();
610
611 ASSERT_TRUE(fromSleOpt.has_value());
612 ASSERT_TRUE(fromBuilderOpt.has_value());
613
614 expectEqualField(expected, *fromSleOpt, "sfSponsoredOwnerCount");
615 expectEqualField(expected, *fromBuilderOpt, "sfSponsoredOwnerCount");
616 }
617
618 {
619 auto const& expected = sponsoringOwnerCountValue;
620
621 auto const fromSleOpt = entryFromSle.getSponsoringOwnerCount();
622 auto const fromBuilderOpt = entryFromBuilder.getSponsoringOwnerCount();
623
624 ASSERT_TRUE(fromSleOpt.has_value());
625 ASSERT_TRUE(fromBuilderOpt.has_value());
626
627 expectEqualField(expected, *fromSleOpt, "sfSponsoringOwnerCount");
628 expectEqualField(expected, *fromBuilderOpt, "sfSponsoringOwnerCount");
629 }
630
631 {
632 auto const& expected = sponsoringAccountCountValue;
633
634 auto const fromSleOpt = entryFromSle.getSponsoringAccountCount();
635 auto const fromBuilderOpt = entryFromBuilder.getSponsoringAccountCount();
636
637 ASSERT_TRUE(fromSleOpt.has_value());
638 ASSERT_TRUE(fromBuilderOpt.has_value());
639
640 expectEqualField(expected, *fromSleOpt, "sfSponsoringAccountCount");
641 expectEqualField(expected, *fromBuilderOpt, "sfSponsoringAccountCount");
642 }
643
644 {
645 auto const& expected = aMMIDValue;
646
647 auto const fromSleOpt = entryFromSle.getAMMID();
648 auto const fromBuilderOpt = entryFromBuilder.getAMMID();
649
650 ASSERT_TRUE(fromSleOpt.has_value());
651 ASSERT_TRUE(fromBuilderOpt.has_value());
652
653 expectEqualField(expected, *fromSleOpt, "sfAMMID");
654 expectEqualField(expected, *fromBuilderOpt, "sfAMMID");
655 }
656
657 {
658 auto const& expected = vaultIDValue;
659
660 auto const fromSleOpt = entryFromSle.getVaultID();
661 auto const fromBuilderOpt = entryFromBuilder.getVaultID();
662
663 ASSERT_TRUE(fromSleOpt.has_value());
664 ASSERT_TRUE(fromBuilderOpt.has_value());
665
666 expectEqualField(expected, *fromSleOpt, "sfVaultID");
667 expectEqualField(expected, *fromBuilderOpt, "sfVaultID");
668 }
669
670 {
671 auto const& expected = loanBrokerIDValue;
672
673 auto const fromSleOpt = entryFromSle.getLoanBrokerID();
674 auto const fromBuilderOpt = entryFromBuilder.getLoanBrokerID();
675
676 ASSERT_TRUE(fromSleOpt.has_value());
677 ASSERT_TRUE(fromBuilderOpt.has_value());
678
679 expectEqualField(expected, *fromSleOpt, "sfLoanBrokerID");
680 expectEqualField(expected, *fromBuilderOpt, "sfLoanBrokerID");
681 }
682
683 EXPECT_EQ(entryFromSle.getKey(), index);
684 EXPECT_EQ(entryFromBuilder.getKey(), index);
685}
686
687// 3) Verify wrapper throws when constructed from wrong ledger entry type.
688TEST(AccountRootTests, WrapperThrowsOnWrongEntryType)
689{
690 uint256 const index{3u};
691
692 // Build a valid ledger entry of a different type
693 // Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
694 // Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
695 TicketBuilder wrongBuilder{
701 auto wrongEntry = wrongBuilder.build(index);
702
703 EXPECT_THROW(AccountRoot{wrongEntry.getSle()}, std::runtime_error);
704}
705
706// 4) Verify builder throws when constructed from wrong ledger entry type.
707TEST(AccountRootTests, BuilderThrowsOnWrongEntryType)
708{
709 uint256 const index{4u};
710
711 // Build a valid ledger entry of a different type
712 TicketBuilder wrongBuilder{
718 auto wrongEntry = wrongBuilder.build(index);
719
720 EXPECT_THROW(AccountRootBuilder{wrongEntry.getSle()}, std::runtime_error);
721}
722
723// 5) Build with only required fields and verify optional fields return nullopt.
724TEST(AccountRootTests, OptionalFieldsReturnNullopt)
725{
726 uint256 const index{3u};
727
728 auto const accountValue = canonical_ACCOUNT();
729 auto const sequenceValue = canonical_UINT32();
730 auto const balanceValue = canonical_AMOUNT();
731 auto const ownerCountValue = canonical_UINT32();
732 auto const previousTxnIDValue = canonical_UINT256();
733 auto const previousTxnLgrSeqValue = canonical_UINT32();
734
735 AccountRootBuilder builder{
736 accountValue,
737 sequenceValue,
738 balanceValue,
739 ownerCountValue,
740 previousTxnIDValue,
741 previousTxnLgrSeqValue
742 };
743
744 auto const entry = builder.build(index);
745
746 // Verify optional fields are not present
747 EXPECT_FALSE(entry.hasAccountTxnID());
748 EXPECT_FALSE(entry.getAccountTxnID().has_value());
749 EXPECT_FALSE(entry.hasRegularKey());
750 EXPECT_FALSE(entry.getRegularKey().has_value());
751 EXPECT_FALSE(entry.hasEmailHash());
752 EXPECT_FALSE(entry.getEmailHash().has_value());
753 EXPECT_FALSE(entry.hasWalletLocator());
754 EXPECT_FALSE(entry.getWalletLocator().has_value());
755 EXPECT_FALSE(entry.hasWalletSize());
756 EXPECT_FALSE(entry.getWalletSize().has_value());
757 EXPECT_FALSE(entry.hasMessageKey());
758 EXPECT_FALSE(entry.getMessageKey().has_value());
759 EXPECT_FALSE(entry.hasTransferRate());
760 EXPECT_FALSE(entry.getTransferRate().has_value());
761 EXPECT_FALSE(entry.hasDomain());
762 EXPECT_FALSE(entry.getDomain().has_value());
763 EXPECT_FALSE(entry.hasTickSize());
764 EXPECT_FALSE(entry.getTickSize().has_value());
765 EXPECT_FALSE(entry.hasTicketCount());
766 EXPECT_FALSE(entry.getTicketCount().has_value());
767 EXPECT_FALSE(entry.hasNFTokenMinter());
768 EXPECT_FALSE(entry.getNFTokenMinter().has_value());
769 EXPECT_FALSE(entry.hasMintedNFTokens());
770 EXPECT_FALSE(entry.getMintedNFTokens().has_value());
771 EXPECT_FALSE(entry.hasBurnedNFTokens());
772 EXPECT_FALSE(entry.getBurnedNFTokens().has_value());
773 EXPECT_FALSE(entry.hasFirstNFTokenSequence());
774 EXPECT_FALSE(entry.getFirstNFTokenSequence().has_value());
775 EXPECT_FALSE(entry.hasSponsoredOwnerCount());
776 EXPECT_FALSE(entry.getSponsoredOwnerCount().has_value());
777 EXPECT_FALSE(entry.hasSponsoringOwnerCount());
778 EXPECT_FALSE(entry.getSponsoringOwnerCount().has_value());
779 EXPECT_FALSE(entry.hasSponsoringAccountCount());
780 EXPECT_FALSE(entry.getSponsoringAccountCount().has_value());
781 EXPECT_FALSE(entry.hasAMMID());
782 EXPECT_FALSE(entry.getAMMID().has_value());
783 EXPECT_FALSE(entry.hasVaultID());
784 EXPECT_FALSE(entry.getVaultID().has_value());
785 EXPECT_FALSE(entry.hasLoanBrokerID());
786 EXPECT_FALSE(entry.getLoanBrokerID().has_value());
787}
788}
Builder for AccountRoot ledger entries.
AccountRootBuilder & setMintedNFTokens(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfMintedNFTokens (SoeDefault).
AccountRootBuilder & setAccountTxnID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfAccountTxnID (SoeOptional).
AccountRootBuilder & setSponsoringOwnerCount(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfSponsoringOwnerCount (SoeDefault).
AccountRootBuilder & setSponsoringAccountCount(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfSponsoringAccountCount (SoeDefault).
AccountRootBuilder & setNFTokenMinter(std::decay_t< typename SF_ACCOUNT::type::value_type > const &value)
Set sfNFTokenMinter (SoeOptional).
AccountRootBuilder & setMessageKey(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfMessageKey (SoeOptional).
AccountRootBuilder & setTickSize(std::decay_t< typename SF_UINT8::type::value_type > const &value)
Set sfTickSize (SoeOptional).
AccountRootBuilder & setBurnedNFTokens(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfBurnedNFTokens (SoeDefault).
AccountRootBuilder & setTransferRate(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfTransferRate (SoeOptional).
AccountRootBuilder & setFirstNFTokenSequence(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfFirstNFTokenSequence (SoeOptional).
AccountRootBuilder & setRegularKey(std::decay_t< typename SF_ACCOUNT::type::value_type > const &value)
Set sfRegularKey (SoeOptional).
AccountRootBuilder & setWalletSize(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfWalletSize (SoeOptional).
AccountRootBuilder & setSponsoredOwnerCount(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfSponsoredOwnerCount (SoeDefault).
AccountRootBuilder & setAMMID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfAMMID (SoeOptional).
AccountRoot build(uint256 const &index)
Build and return the completed AccountRoot wrapper.
AccountRootBuilder & setLoanBrokerID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfLoanBrokerID (SoeOptional).
AccountRootBuilder & setEmailHash(std::decay_t< typename SF_UINT128::type::value_type > const &value)
Set sfEmailHash (SoeOptional).
AccountRootBuilder & setTicketCount(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfTicketCount (SoeOptional).
AccountRootBuilder & setDomain(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfDomain (SoeOptional).
AccountRootBuilder & setVaultID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfVaultID (SoeOptional).
AccountRootBuilder & setWalletLocator(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfWalletLocator (SoeOptional).
Ledger Entry: AccountRoot.
Definition AccountRoot.h:28
SF_AMOUNT::type::value_type getBalance() const
Get sfBalance (SoeRequired).
Definition AccountRoot.h:76
protocol_autogen::Optional< SF_UINT32::type::value_type > getSponsoringOwnerCount() const
Get sfSponsoringOwnerCount (SoeDefault).
protocol_autogen::Optional< SF_ACCOUNT::type::value_type > getRegularKey() const
Get sfRegularKey (SoeOptional).
protocol_autogen::Optional< SF_ACCOUNT::type::value_type > getNFTokenMinter() const
Get sfNFTokenMinter (SoeOptional).
protocol_autogen::Optional< SF_UINT256::type::value_type > getAccountTxnID() const
Get sfAccountTxnID (SoeOptional).
SF_UINT32::type::value_type getSequence() const
Get sfSequence (SoeRequired).
Definition AccountRoot.h:65
protocol_autogen::Optional< SF_UINT32::type::value_type > getWalletSize() const
Get sfWalletSize (SoeOptional).
SF_UINT256::type::value_type getPreviousTxnID() const
Get sfPreviousTxnID (SoeRequired).
Definition AccountRoot.h:98
protocol_autogen::Optional< SF_UINT8::type::value_type > getTickSize() const
Get sfTickSize (SoeOptional).
protocol_autogen::Optional< SF_VL::type::value_type > getDomain() const
Get sfDomain (SoeOptional).
static constexpr LedgerEntryType entryType
Definition AccountRoot.h:30
protocol_autogen::Optional< SF_UINT256::type::value_type > getAMMID() const
Get sfAMMID (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getTicketCount() const
Get sfTicketCount (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getBurnedNFTokens() const
Get sfBurnedNFTokens (SoeDefault).
SF_ACCOUNT::type::value_type getAccount() const
Get sfAccount (SoeRequired).
Definition AccountRoot.h:54
SF_UINT32::type::value_type getPreviousTxnLgrSeq() const
Get sfPreviousTxnLgrSeq (SoeRequired).
protocol_autogen::Optional< SF_UINT32::type::value_type > getFirstNFTokenSequence() const
Get sfFirstNFTokenSequence (SoeOptional).
protocol_autogen::Optional< SF_UINT256::type::value_type > getLoanBrokerID() const
Get sfLoanBrokerID (SoeOptional).
protocol_autogen::Optional< SF_UINT256::type::value_type > getVaultID() const
Get sfVaultID (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getTransferRate() const
Get sfTransferRate (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getSponsoringAccountCount() const
Get sfSponsoringAccountCount (SoeDefault).
protocol_autogen::Optional< SF_UINT128::type::value_type > getEmailHash() const
Get sfEmailHash (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getSponsoredOwnerCount() const
Get sfSponsoredOwnerCount (SoeDefault).
SF_UINT32::type::value_type getOwnerCount() const
Get sfOwnerCount (SoeRequired).
Definition AccountRoot.h:87
protocol_autogen::Optional< SF_VL::type::value_type > getMessageKey() const
Get sfMessageKey (SoeOptional).
protocol_autogen::Optional< SF_UINT32::type::value_type > getMintedNFTokens() const
Get sfMintedNFTokens (SoeDefault).
protocol_autogen::Optional< SF_UINT256::type::value_type > getWalletLocator() const
Get sfWalletLocator (SoeOptional).
bool validate() const
Validate the ledger entry.
uint256 const & getKey() const
Get the key (index) of this ledger entry.
Derived & setLedgerIndex(uint256 const &value)
Set the ledger index.
Derived & setFlags(uint32_t value)
Set the flags.
bool validate() const
Validate the ledger entry.
Builder for Ticket ledger entries.
Definition Ticket.h:112
Ticket build(uint256 const &index)
Build and return the completed Ticket wrapper.
Definition Ticket.h:211
T make_shared(T... args)
TEST(AccountRootTests, BuilderSettersRoundTrip)
BaseUInt< 256 > uint256
Definition base_uint.h:580
void expectEqualField(T const &expected, T const &actual, char const *fieldName)