mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	@@ -86,8 +86,9 @@ AccountLinesHandler::addLine(
 | 
			
		||||
    bool const lineNoRipplePeer = (flags & (not viewLowest ? ripple::lsfLowNoRipple : ripple::lsfHighNoRipple)) != 0u;
 | 
			
		||||
    bool const lineFreeze = (flags & (viewLowest ? ripple::lsfLowFreeze : ripple::lsfHighFreeze)) != 0u;
 | 
			
		||||
    bool const lineFreezePeer = (flags & (not viewLowest ? ripple::lsfLowFreeze : ripple::lsfHighFreeze)) != 0u;
 | 
			
		||||
    bool const lineDeepFreeze = (flags & (viewLowest ? ripple::lsfLowDeepFreeze : ripple::lsfHighFreeze)) != 0u;
 | 
			
		||||
    bool const lineDeepFreezePeer = (flags & (not viewLowest ? ripple::lsfLowDeepFreeze : ripple::lsfHighFreeze)) != 0u;
 | 
			
		||||
    bool const lineDeepFreeze = (flags & (viewLowest ? ripple::lsfLowDeepFreeze : ripple::lsfHighDeepFreeze)) != 0u;
 | 
			
		||||
    bool const lineDeepFreezePeer =
 | 
			
		||||
        (flags & (not viewLowest ? ripple::lsfLowDeepFreeze : ripple::lsfHighDeepFreeze)) != 0u;
 | 
			
		||||
 | 
			
		||||
    ripple::STAmount const& saBalance = balance;
 | 
			
		||||
    ripple::STAmount const& saLimit = lineLimit;
 | 
			
		||||
 
 | 
			
		||||
@@ -581,7 +581,7 @@ TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExists_BlobDoesNotExist)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExistsBlobExists_AccountWithCorrectFlag)
 | 
			
		||||
TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExists_AccountWithCorrectFlag)
 | 
			
		||||
{
 | 
			
		||||
    auto const account = getAccountIdWithString(kACCOUNT);
 | 
			
		||||
    auto const issuerKey = ripple::keylet::account(account);
 | 
			
		||||
@@ -600,12 +600,12 @@ TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExistsBlobExists_AccountWithCorrectFl
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExistsBlobExists_AccountFlagDoesNotExist)
 | 
			
		||||
TEST_F(RPCHelpersTest, FetchAndCheckAnyFlagExists_TrustLineIsFrozenAndCheckFreezeFlag)
 | 
			
		||||
{
 | 
			
		||||
    auto const account = getAccountIdWithString(kACCOUNT);
 | 
			
		||||
    auto const issuerKey = ripple::keylet::account(account);
 | 
			
		||||
 | 
			
		||||
    // create account with highDeepFreeze Flag
 | 
			
		||||
    // create account with lowDeepFreeze Flag
 | 
			
		||||
    auto const accountObject = createAccountRootObject(kACCOUNT, ripple::lsfLowDeepFreeze, 1, 10, 2, kTXN_ID, 3);
 | 
			
		||||
 | 
			
		||||
    ON_CALL(*backend_, doFetchLedgerObject(issuerKey.key, kLEDGER_SEQ_OBJECT, _))
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@
 | 
			
		||||
 | 
			
		||||
#include "data/Types.hpp"
 | 
			
		||||
#include "rpc/Errors.hpp"
 | 
			
		||||
#include "rpc/RPCHelpers.hpp"
 | 
			
		||||
#include "rpc/common/AnyHandler.hpp"
 | 
			
		||||
#include "rpc/common/Types.hpp"
 | 
			
		||||
#include "rpc/handlers/AccountLines.hpp"
 | 
			
		||||
@@ -716,7 +717,7 @@ TEST_F(RPCAccountLinesHandlerTest, EmptyChannel)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(RPCAccountLinesHandlerTest, OptionalResponseField)
 | 
			
		||||
TEST_F(RPCAccountLinesHandlerTest, OptionalResponseFieldWithDeepFreeze)
 | 
			
		||||
{
 | 
			
		||||
    static constexpr auto kCORRECT_OUTPUT = R"({
 | 
			
		||||
        "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
 | 
			
		||||
@@ -806,6 +807,86 @@ TEST_F(RPCAccountLinesHandlerTest, OptionalResponseField)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(RPCAccountLinesHandlerTest, FrozenTrustLineResponse)
 | 
			
		||||
{
 | 
			
		||||
    static constexpr auto kCORRECT_OUTPUT = R"({
 | 
			
		||||
        "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
 | 
			
		||||
        "ledger_hash": "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A652",
 | 
			
		||||
        "ledger_index": 30,
 | 
			
		||||
        "validated": true,
 | 
			
		||||
        "limit": 200,
 | 
			
		||||
        "lines": [
 | 
			
		||||
            {
 | 
			
		||||
                "account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
 | 
			
		||||
                "balance": "10",
 | 
			
		||||
                "currency": "USD",
 | 
			
		||||
                "limit": "100",
 | 
			
		||||
                "limit_peer": "200",
 | 
			
		||||
                "quality_in": 0,
 | 
			
		||||
                "quality_out": 0,
 | 
			
		||||
                "peer_authorized": true,
 | 
			
		||||
                "freeze_peer": true
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
 | 
			
		||||
                "balance": "20",
 | 
			
		||||
                "currency": "USD",
 | 
			
		||||
                "limit": "200",
 | 
			
		||||
                "limit_peer": "400",
 | 
			
		||||
                "quality_in": 0,
 | 
			
		||||
                "quality_out": 0,
 | 
			
		||||
                "authorized": true,
 | 
			
		||||
                "freeze": true
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    })";
 | 
			
		||||
 | 
			
		||||
    auto ledgerHeader = createLedgerHeader(kLEDGER_HASH, 30);
 | 
			
		||||
    EXPECT_CALL(*backend_, fetchLedgerBySequence).WillOnce(Return(ledgerHeader));
 | 
			
		||||
 | 
			
		||||
    // fetch account object return something
 | 
			
		||||
    auto account = getAccountIdWithString(kACCOUNT);
 | 
			
		||||
    auto accountKk = ripple::keylet::account(account).key;
 | 
			
		||||
    auto owneDirKk = ripple::keylet::ownerDir(account).key;
 | 
			
		||||
    auto fake = Blob{'f', 'a', 'k', 'e'};
 | 
			
		||||
 | 
			
		||||
    // return a non empty account
 | 
			
		||||
    ON_CALL(*backend_, doFetchLedgerObject(accountKk, testing::_, testing::_)).WillByDefault(Return(fake));
 | 
			
		||||
 | 
			
		||||
    // return owner index
 | 
			
		||||
    ripple::STObject const ownerDir =
 | 
			
		||||
        createOwnerDirLedgerObject({ripple::uint256{kINDEX1}, ripple::uint256{kINDEX2}}, kINDEX1);
 | 
			
		||||
 | 
			
		||||
    ON_CALL(*backend_, doFetchLedgerObject(owneDirKk, testing::_, testing::_))
 | 
			
		||||
        .WillByDefault(Return(ownerDir.getSerializer().peekData()));
 | 
			
		||||
 | 
			
		||||
    // return few trust lines
 | 
			
		||||
    std::vector<Blob> bbs;
 | 
			
		||||
    auto line1 = createRippleStateLedgerObject("USD", kACCOUNT2, 10, kACCOUNT, 100, kACCOUNT2, 200, kTXN_ID, 0);
 | 
			
		||||
    line1.setFlag(ripple::lsfHighAuth);
 | 
			
		||||
    line1.setFlag(ripple::lsfHighFreeze);
 | 
			
		||||
    bbs.push_back(line1.getSerializer().peekData());
 | 
			
		||||
 | 
			
		||||
    auto line2 = createRippleStateLedgerObject("USD", kACCOUNT2, 20, kACCOUNT, 200, kACCOUNT2, 400, kTXN_ID, 0);
 | 
			
		||||
    line2.setFlag(ripple::lsfLowAuth);
 | 
			
		||||
    line2.setFlag(ripple::lsfLowFreeze);
 | 
			
		||||
    bbs.push_back(line2.getSerializer().peekData());
 | 
			
		||||
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObjects).WillOnce(Return(bbs));
 | 
			
		||||
    auto const input = json::parse(fmt::format(
 | 
			
		||||
        R"({{ 
 | 
			
		||||
            "account": "{}"
 | 
			
		||||
        }})",
 | 
			
		||||
        kACCOUNT
 | 
			
		||||
    ));
 | 
			
		||||
    runSpawn([&, this](auto yield) {
 | 
			
		||||
        auto handler = AnyHandler{AccountLinesHandler{this->backend_}};
 | 
			
		||||
        auto const output = handler.process(input, Context{yield});
 | 
			
		||||
        ASSERT_TRUE(output);
 | 
			
		||||
        EXPECT_EQ(json::parse(kCORRECT_OUTPUT), *output.result);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// normal case : test marker output correct
 | 
			
		||||
TEST_F(RPCAccountLinesHandlerTest, MarkerOutput)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user