From c85ddf0652f9339c8148feb20c945c96880a40c8 Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Fri, 2 Aug 2024 16:46:24 -0400 Subject: [PATCH] [FOLD] add test cases to ensure the NFT page links are correct: * This is from suggestions I made on the review, so someone else will have to review these changes. --- src/test/app/FixNFTokenPageLinks_test.cpp | 49 +++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/test/app/FixNFTokenPageLinks_test.cpp b/src/test/app/FixNFTokenPageLinks_test.cpp index 36827efe6ce..fa6186792ba 100644 --- a/src/test/app/FixNFTokenPageLinks_test.cpp +++ b/src/test/app/FixNFTokenPageLinks_test.cpp @@ -552,7 +552,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // bob's last page should now be present and include a previous // link but no next link. { - auto bobLastNFTokenPage = env.le(keylet::nftpage_max(bob)); + auto const lastPageKeylet = keylet::nftpage_max(bob); + auto const bobLastNFTokenPage = env.le(lastPageKeylet); if (!BEAST_EXPECT(bobLastNFTokenPage)) return; @@ -561,6 +562,19 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite bobLastNFTokenPage->at(sfPreviousPageMin) != bobMiddleNFTokenPageIndex); BEAST_EXPECT(!bobLastNFTokenPage->isFieldPresent(sfNextPageMin)); + + auto const bobNewFirstNFTokenPage = env.le(keylet::nftpage( + keylet::nftpage_min(bob), + bobLastNFTokenPage->at(sfPreviousPageMin))); + if (!BEAST_EXPECT(bobNewFirstNFTokenPage)) + return; + + BEAST_EXPECT( + bobNewFirstNFTokenPage->isFieldPresent(sfNextPageMin) && + bobNewFirstNFTokenPage->at(sfNextPageMin) == + lastPageKeylet.key); + BEAST_EXPECT( + !bobNewFirstNFTokenPage->isFieldPresent(sfPreviousPageMin)); } // bob's middle page should be gone. @@ -601,8 +615,9 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite env(ledgerStateFix::nftPageLinks(carol, carol), fee(linkFixFee)); env.close(); - // carol's "middle" page is present and now has a NextPageMin field. { + // carol's "middle" page is present and now has a NextPageMin field. + auto const lastPageKeylet = keylet::nftpage_max(carol); auto carolMiddleNFTokenPage = env.le(keylet::nftpage( keylet::nftpage_min(carol), carolMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(carolMiddleNFTokenPage)) @@ -610,15 +625,33 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite BEAST_EXPECT( carolMiddleNFTokenPage->isFieldPresent(sfPreviousPageMin)); - BEAST_EXPECT(carolMiddleNFTokenPage->isFieldPresent(sfNextPageMin)); - } - // carol has a "last" page that includes a PreviousPageMin field. - { - auto carolLastNFTokenPage = env.le(keylet::nftpage_max(carol)); + BEAST_EXPECT( + carolMiddleNFTokenPage->isFieldPresent(sfNextPageMin) && + carolMiddleNFTokenPage->at(sfNextPageMin) == lastPageKeylet.key); + + // carol has a "last" page that includes a PreviousPageMin field. + auto carolLastNFTokenPage = env.le(lastPageKeylet); + if (!BEAST_EXPECT(carolLastNFTokenPage)) + return; BEAST_EXPECT( - carolLastNFTokenPage->isFieldPresent(sfPreviousPageMin)); + carolLastNFTokenPage->isFieldPresent(sfPreviousPageMin) && + carolLastNFTokenPage->at(sfPreviousPageMin) == + carolMiddleNFTokenPageIndex); BEAST_EXPECT(!carolLastNFTokenPage->isFieldPresent(sfNextPageMin)); + + // carol also has a "first" page that includes a NextPageMin field. + auto carolFirstNFTokenPage = env.le(keylet::nftpage( + keylet::nftpage_min(carol), + carolMiddleNFTokenPage->at(sfPreviousPageMin))); + if (!BEAST_EXPECT(carolFirstNFTokenPage)) + return; + + BEAST_EXPECT( + carolFirstNFTokenPage->isFieldPresent(sfNextPageMin) && + carolFirstNFTokenPage->at(sfNextPageMin) == + carolMiddleNFTokenPageIndex); + BEAST_EXPECT(!carolFirstNFTokenPage->isFieldPresent(sfPreviousPageMin)); } // With the link repair, the server knows that carol has 96 NFTs.