From c4b798e8edef86ffc669c07c8e28a6b0fe68a7d4 Mon Sep 17 00:00:00 2001 From: tequ Date: Wed, 24 Sep 2025 15:41:58 +0900 Subject: [PATCH] test Sponsor Reserve checks for TicketCreate --- src/test/app/Sponsor_test.cpp | 92 ++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 34 deletions(-) diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index e812bb1f09..5ee210bd5b 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -1273,52 +1273,76 @@ public: { testcase("Ticket"); using namespace test::jtx; - Env env{*this, testable_amendments()}; Account const alice("alice"); Account const sponsor("master"); Account const sponsor2("sponsor2"); - env.fund(XRP(1000000), alice, sponsor, sponsor2); - env.close(); + { + Env env{*this, testable_amendments()}; + env.fund(XRP(1000000), alice, sponsor, sponsor2); + env.close(); - // TicketCreate - std::uint32_t const ticketSeq{env.seq(alice) + 1}; - env(ticket::create(alice, 250), - sponsor::as(sponsor, tfSponsorReserve), - sponsor::sig(sponsor)); - env.close(); + // TicketCreate + std::uint32_t const ticketSeq{env.seq(alice) + 1}; + env(ticket::create(alice, 250), + sponsor::as(sponsor, tfSponsorReserve), + sponsor::sig(sponsor)); + env.close(); - BEAST_EXPECT(ownerCount(env, alice) == 250); - BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 250); - BEAST_EXPECT(sponsoringOwnerCount(env, alice) == 0); - BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 250); + BEAST_EXPECT(ownerCount(env, alice) == 250); + BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 250); + BEAST_EXPECT(sponsoringOwnerCount(env, alice) == 0); + BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 250); - auto const keylet = keylet::ticket(alice, ticketSeq); - BEAST_EXPECT( - env.le(keylet)->getAccountID(sfSponsorAccount) == sponsor.id()); + auto const keylet = keylet::ticket(alice, ticketSeq); + BEAST_EXPECT( + env.le(keylet)->getAccountID(sfSponsorAccount) == sponsor.id()); - // transfer sponsor - env(sponsor::transfer(alice, keylet.key), - sponsor::as(sponsor2, tfSponsorReserve), - sponsor::sig(sponsor2)); - env.close(); + // transfer sponsor + env(sponsor::transfer(alice, keylet.key), + sponsor::as(sponsor2, tfSponsorReserve), + sponsor::sig(sponsor2)); + env.close(); - BEAST_EXPECT(ownerCount(env, alice) == 250); - BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 250); - BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 249); - BEAST_EXPECT(sponsoringOwnerCount(env, sponsor2) == 1); + BEAST_EXPECT(ownerCount(env, alice) == 250); + BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 250); + BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 249); + BEAST_EXPECT(sponsoringOwnerCount(env, sponsor2) == 1); - BEAST_EXPECT( - env.le(keylet)->getAccountID(sfSponsorAccount) == sponsor2.id()); + BEAST_EXPECT( + env.le(keylet)->getAccountID(sfSponsorAccount) == + sponsor2.id()); - // use a Ticket - env(noop(alice), ticket::use(ticketSeq)); - env.close(); + // use a Ticket + env(noop(alice), ticket::use(ticketSeq)); + env.close(); - BEAST_EXPECT(ownerCount(env, alice) == 249); - BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 249); - BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 249); - BEAST_EXPECT(sponsoringOwnerCount(env, sponsor2) == 0); + BEAST_EXPECT(ownerCount(env, alice) == 249); + BEAST_EXPECT(sponsoredOwnerCount(env, alice) == 249); + BEAST_EXPECT(sponsoringOwnerCount(env, sponsor) == 249); + BEAST_EXPECT(sponsoringOwnerCount(env, sponsor2) == 0); + } + + { + // check INSUFFICIENT_RESERVE for TicketCreate + Env env{*this, testable_amendments()}; + env.fund(XRP(1000000), alice, sponsor, sponsor2); + env.close(); + + adjustAccountXRPBalance(env, sponsor, reserve(env, 1) - drops(1)); + env(ticket::create(alice, 1), + sponsor::as(sponsor, tfSponsorReserve), + sponsor::sig(sponsor), + ter(tecINSUFFICIENT_RESERVE)); + env.close(); + + adjustAccountXRPBalance(env, sponsor, reserve(env, 249)); + env(ticket::create(alice, 250), + sponsor::as(sponsor, tfSponsorReserve), + sponsor::sig(sponsor), + ter(tecINSUFFICIENT_RESERVE)); + env.close(); + } } void