1#ifndef XRPL_TEST_JTX_TESTHELPERS_H_INCLUDED 
    2#define XRPL_TEST_JTX_TESTHELPERS_H_INCLUDED 
    4#include <test/jtx/Env.h> 
    6#include <xrpld/app/misc/TxQ.h> 
    8#include <xrpl/basics/base_uint.h> 
    9#include <xrpl/beast/unit_test/suite.h> 
   10#include <xrpl/json/json_value.h> 
   11#include <xrpl/protocol/AccountID.h> 
   12#include <xrpl/protocol/Quality.h> 
   13#include <xrpl/protocol/STNumber.h> 
   14#include <xrpl/protocol/TxFlags.h> 
   15#include <xrpl/protocol/Units.h> 
   16#include <xrpl/protocol/jss.h> 
   20#if (defined(__clang_major__) && __clang_major__ < 15) 
   21#include <experimental/source_location> 
   24#include <source_location> 
   39    class StoredValue = 
typename SField::type::value_type,
 
   40    class OutputValue = StoredValue>
 
   44    using SV = StoredValue;
 
   45    using OV = OutputValue;
 
 
   69template <
class SField, 
class StoredValue>
 
   73    using SV = StoredValue;
 
 
   94    : 
public JTxField<SF_UINT32, NetClock::time_point, NetClock::rep>
 
 
  183template <
class SField, 
class UnitTag, 
class ValueType>
 
  185    : 
public JTxField<SField, unit::ValueUnit<UnitTag, ValueType>, ValueType>
 
  189    using OV = ValueType;
 
 
  207template <
class JTxField>
 
  267    class ValueType = 
typename SField::type::value_type>
 
  271template <
class SField, 
class StoredValue = 
typename SField::type::value_type>
 
  282template <
typename Input>
 
  285    requires requires(Input& v) {
 
 
  312template <
typename... 
IOU>
 
  318    for (
auto const& line : jrr[jss::lines])
 
  320        for (
auto const& iou : {ious...})
 
  322            if (line[jss::currency].asString() == 
to_string(iou.currency))
 
  325                v[jss::currency] = line[jss::currency];
 
  326                v[jss::balance] = line[jss::balance];
 
  327                v[jss::limit] = line[jss::limit];
 
  328                v[jss::account] = line[jss::account];
 
  329                res[jss::lines].
append(v);
 
 
  361    return strHex(expected) == 
strHex(sle->getFieldVL(field));
 
 
  379template <
class T, 
class... Args>
 
  384    if constexpr (
sizeof...(args) > 0)
 
 
  388template <
class... Args>
 
  393    if constexpr (
sizeof...(args) > 0)
 
 
  404template <
class... Args>
 
  413template <
class... Args>
 
  422    for (
auto const& p : st2)
 
 
  443    bool defaultLimits = 
false);
 
  445template <
typename... Amts>
 
  473    Account 
const& acct_a,
 
  474    Account 
const& acct_b,
 
  511        account.id(), to.
id(), amount, settleDelay, pk, cancelAfter, dstTag);
 
 
  539    return channel(account.id(), dst.
id(), seqProxyValue);
 
 
  585    jv[sfAccount.jsonName] = 
to_string(account);
 
  587    jv[sfDestination.jsonName] = 
to_string(dest);
 
  588    jv[sfTransactionType.jsonName] = jss::CheckCreate;
 
 
  599    return create(account.id(), dest.
id(), sendMax);
 
 
  607template <
class Suite>
 
  620    int line = location.line();
 
  621    char const* file = location.file_name();
 
  622    FeeLevel64 const expectedMin{expectedMinFeeLevel};
 
  623    FeeLevel64 const expectedMed{expectedMedFeeLevel};
 
  625    using namespace std::string_literals;
 
  636    metrics.txCount == expectedCount
 
  644    metrics.txQMaxSize == expectedMaxCount
 
  647              "txQMaxSize: "s + 
std::to_string(metrics.txQMaxSize.value_or(0)) +
 
  652    metrics.txInLedger == expectedInLedger
 
  660    metrics.txPerLedger == expectedPerLedger
 
  668    metrics.minProcessingFeeLevel == expectedMin
 
  671              "minProcessingFeeLevel: "s +
 
  677    metrics.medFeeLevel == expectedMed
 
  685    auto const expectedCurFeeLevel = expectedInLedger > expectedPerLedger
 
  686        ? expectedMed * expectedInLedger * expectedInLedger /
 
  687            (expectedPerLedger * expectedPerLedger)
 
  688        : metrics.referenceFeeLevel;
 
  690    metrics.openLedgerFeeLevel == expectedCurFeeLevel
 
  693              "openLedgerFeeLevel: "s +
 
 
Value & append(Value const &value)
Append value to array at the end.
 
bool isNull() const
isNull() tests to see if this field is null.
 
A currency issued by an account.
 
std::chrono::time_point< NetClock > time_point
 
Json::StaticString const jsonName
 
Json::Value getJson(JsonOptions=JsonOptions::none) const override
 
std::vector< STPath >::const_iterator end() const
 
void push_back(STPath const &e)
 
std::vector< STPath >::const_iterator begin() const
 
std::vector< STPath >::size_type size() const
 
int addRaw(Blob const &vector)
 
std::string getString() const
 
An immutable linear range of bytes.
 
Metrics getMetrics(OpenView const &view) const
Returns fee metrics in reference fee level units.
 
static constexpr FeeLevel64 baseLevel
Fee level for single-signed reference transaction.
 
Immutable cryptographic account descriptor.
 
AccountID id() const
Returns the Account ID.
 
A transaction testing environment.
 
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
 
Converts to IOU Issue or STAmount.
 
constexpr value_type fee() const
Returns the number of drops.
 
constexpr value_type value() const
Returns the underlying value.
 
Json::Value create(A const &account, A const &dest, STAmount const &sendMax)
Create a check.
 
bool channelExists(ReadView const &view, uint256 const &chan)
 
Json::Value fund(AccountID const &account, uint256 const &channel, STAmount const &amount, std::optional< NetClock::time_point > const &expiration)
 
Json::Value create(AccountID const &account, AccountID const &to, STAmount const &amount, NetClock::duration const &settleDelay, PublicKey const &pk, std::optional< NetClock::time_point > const &cancelAfter, std::optional< std::uint32_t > const &dstTag)
 
uint256 channel(AccountID const &account, AccountID const &dst, std::uint32_t seqProxyValue)
 
Json::Value claim(AccountID const &account, uint256 const &channel, std::optional< STAmount > const &balance, std::optional< STAmount > const &amount, std::optional< Slice > const &signature, std::optional< PublicKey > const &pk)
 
STAmount channelBalance(ReadView const &view, uint256 const &chan)
 
static constexpr FeeLevel64 minEscalationFeeLevel
 
bool checkArraySize(Json::Value const &val, unsigned int size)
 
std::uint32_t ownerCount(Env const &env, Account const &account)
 
Json::Value ledgerEntryRoot(Env &env, Account const &acct)
 
auto make_vector(Input const &input)
 
auto const data
General field definitions, or fields used in multiple transaction namespaces.
 
bool expectOffers(Env &env, AccountID const &account, std::uint16_t size, std::vector< Amounts > const &toMatch)
 
PrettyAmount xrpMinusFee(Env const &env, std::int64_t xrpAmount)
 
bool equal(STAmount const &sa1, STAmount const &sa2)
 
bool checkVL(Slice const &result, std::string const &expected)
 
Json::Value getAccountLines(Env &env, AccountID const &acctId)
 
bool same(STPathSet const &st1, Args const &... args)
 
Json::Value ledgerEntryState(Env &env, Account const &acct_a, Account const &acct_b, std::string const ¤cy)
 
void stpath_append_one(STPath &st, Account const &account)
 
void stpath_append(STPath &st, T const &t, Args const &... args)
 
void n_offers(Env &env, std::size_t n, Account const &account, STAmount const &in, STAmount const &out)
 
Json::Value accountBalance(Env &env, Account const &acct)
 
STPathElement IPE(Issue const &iss)
 
void checkMetrics(Suite &test, jtx::Env &env, std::size_t expectedCount, std::optional< std::size_t > expectedMaxCount, std::size_t expectedInLedger, std::size_t expectedPerLedger, std::uint64_t expectedMinFeeLevel=baseFeeLevel.fee(), std::uint64_t expectedMedFeeLevel=minEscalationFeeLevel.fee(), source_location const location=source_location::current())
 
static constexpr FeeLevel64 baseFeeLevel
 
bool expectHolding(Env &env, AccountID const &account, STAmount const &value, bool defaultLimits)
 
void stpathset_append(STPathSet &st, STPath const &p, Args const &... args)
 
STPathElement cpe(Currency const &c)
 
bool expectLedgerEntryRoot(Env &env, Account const &acct, STAmount const &expectedValue)
 
STPathElement allpe(AccountID const &a, Issue const &iss)
 
XRPAmount txfee(Env const &env, std::uint16_t n)
 
STPath stpath(Args const &... args)
 
Json::Value getAccountOffers(Env &env, AccountID const &acct, bool current)
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
 
TypedField< STBlob > SF_VL
 
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
 
TypedField< STBitString< 256 > > SF_UINT256
 
TypedField< STInteger< std::uint32_t > > SF_UINT32
 
TypedField< STAccount > SF_ACCOUNT
 
@ current
This was a new validation and was added.
 
std::string strHex(FwdIt begin, FwdIt end)
 
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
 
std::string to_string(base_uint< Bits, Tag > const &a)
 
FeeLevel64 referenceFeeLevel
Reference transaction fee level.
 
A field with a type known at compile time.
 
JF operator()(SV const &cond) const
 
JTxFieldWrapper(SF const &sfield)
 
JF operator()(std::array< std::uint8_t, N > const &c) const
 
JF operator()(Slice const &cond) const
 
JTxFieldWrapper(SF const &sfield)
 
JF operator()(SV const &value) const
 
JTxField(SF const &sfield, SV const &value)
 
void operator()(Env &, JTx &jt) const
 
Generic helper class for helper clases that set a field on a JTx.
 
virtual OV value() const =0
 
JTxField(SF const &sfield, SV const &value)
 
virtual ~JTxField()=default
 
virtual void operator()(Env &, JTx &jt) const
 
Execution context for applying a JSON transaction.
 
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...
 
OV value() const override
 
accountIDField(SF const &sfield, SV const &value)
 
blobField(SF const &sfield, Slice const &cond)
 
blobField(SF const &sfield, std::array< std::uint8_t, N > const &c)
 
OV value() const override
 
timePointField(SF const &sfield, SV const &value)
 
OV value() const override
 
uint256Field(SF const &sfield, SV const &value)
 
unit::ValueUnit< UnitTag, ValueType > SV
 
OV value() const override
 
T time_since_epoch(T... args)