mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 19:15:54 +00:00
Continue updating LoanBroker tests
- It builds now
This commit is contained in:
@@ -58,7 +58,7 @@ public:
|
|||||||
getText() const override;
|
getText() const override;
|
||||||
|
|
||||||
Json::Value
|
Json::Value
|
||||||
getJson(JsonOptions options) const override;
|
getJson(JsonOptions options = JsonOptions::none) const override;
|
||||||
|
|
||||||
/** Returns the 'key' (or 'index') of this item.
|
/** Returns the 'key' (or 'index') of this item.
|
||||||
The key identifies this entry's position in
|
The key identifies this entry's position in
|
||||||
|
|||||||
@@ -100,20 +100,31 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
jtx::Account const& alice,
|
jtx::Account const& alice,
|
||||||
jtx::Account const& evan,
|
jtx::Account const& evan,
|
||||||
VaultInfo const& vault,
|
VaultInfo const& vault,
|
||||||
std::function<void()> createBroker,
|
std::function<jtx::JTx(jtx::JTx const&)> modifyJTx,
|
||||||
std::function<void(SLE::const_ref broker)> checkBroker,
|
std::function<void(SLE::const_ref)> checkBroker,
|
||||||
std::function<void(SLE::const_ref broker)> changeBroker,
|
std::function<void(SLE::const_ref)> changeBroker,
|
||||||
std::function<void(SLE::const_ref broker)> checkChangedBroker)
|
std::function<void(SLE::const_ref)> checkChangedBroker)
|
||||||
{
|
{
|
||||||
auto const keylet = keylet::loanbroker(alice.id(), env.seq(alice));
|
auto const keylet = keylet::loanbroker(alice.id(), env.seq(alice));
|
||||||
|
testcase("Lifecycle: " + to_string(vault.asset));
|
||||||
|
|
||||||
using namespace jtx;
|
using namespace jtx;
|
||||||
using namespace loanBroker;
|
using namespace loanBroker;
|
||||||
|
|
||||||
createBroker();
|
{
|
||||||
|
// Start with default values
|
||||||
|
auto jtx = env.jt(set(alice, vault.vaultID), fee(increment));
|
||||||
|
// Modify as desired
|
||||||
|
if (modifyJTx)
|
||||||
|
jtx = modifyJTx(jtx);
|
||||||
|
// Successfully create a Loan Broker
|
||||||
|
env(jtx);
|
||||||
|
}
|
||||||
|
|
||||||
env.close();
|
env.close();
|
||||||
if (auto broker = env.le(keylet); BEAST_EXPECT(broker))
|
if (auto broker = env.le(keylet); BEAST_EXPECT(broker))
|
||||||
{
|
{
|
||||||
|
log << to_string(broker->getJson()) << std::endl;
|
||||||
BEAST_EXPECT(broker->at(sfVaultID) == vault.vaultID);
|
BEAST_EXPECT(broker->at(sfVaultID) == vault.vaultID);
|
||||||
BEAST_EXPECT(broker->at(sfAccount) != alice.id());
|
BEAST_EXPECT(broker->at(sfAccount) != alice.id());
|
||||||
BEAST_EXPECT(broker->at(sfOwner) == alice.id());
|
BEAST_EXPECT(broker->at(sfOwner) == alice.id());
|
||||||
@@ -121,11 +132,9 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT(broker->at(sfSequence) == env.seq(alice) - 1);
|
BEAST_EXPECT(broker->at(sfSequence) == env.seq(alice) - 1);
|
||||||
BEAST_EXPECT(broker->at(sfOwnerCount) == 0);
|
BEAST_EXPECT(broker->at(sfOwnerCount) == 0);
|
||||||
BEAST_EXPECT(broker->at(sfDebtTotal) == 0);
|
BEAST_EXPECT(broker->at(sfDebtTotal) == 0);
|
||||||
BEAST_EXPECT(broker->at(sfDebtMaximum) == 0);
|
|
||||||
BEAST_EXPECT(broker->at(sfCoverAvailable) == 0);
|
BEAST_EXPECT(broker->at(sfCoverAvailable) == 0);
|
||||||
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 0);
|
if (checkBroker)
|
||||||
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 0);
|
checkBroker(broker);
|
||||||
checkBroker(broker);
|
|
||||||
|
|
||||||
// Load the pseudo-account
|
// Load the pseudo-account
|
||||||
auto const pseudoKeylet = keylet::account(broker->at(sfAccount));
|
auto const pseudoKeylet = keylet::account(broker->at(sfAccount));
|
||||||
@@ -162,13 +171,28 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
env(set(alice, vault.vaultID), loanBrokerID(keylet.key));
|
env(set(alice, vault.vaultID), loanBrokerID(keylet.key));
|
||||||
|
|
||||||
// Make modifications to the broker
|
// Make modifications to the broker
|
||||||
changeBroker(broker);
|
if (changeBroker)
|
||||||
|
changeBroker(broker);
|
||||||
|
|
||||||
env.close();
|
env.close();
|
||||||
broker = env.le(keylet);
|
broker = env.le(keylet);
|
||||||
|
|
||||||
// Check the results of modifications
|
// Check the results of modifications
|
||||||
checkChangedBroker(broker);
|
if (checkChangedBroker)
|
||||||
|
checkChangedBroker(broker);
|
||||||
|
|
||||||
|
// Verify that fields get removed when set to default values
|
||||||
|
// Debt maximum: explicit 0
|
||||||
|
// Data: explicit empty
|
||||||
|
env(set(alice, vault.vaultID),
|
||||||
|
loanBrokerID(broker->key()),
|
||||||
|
debtMaximum(Number(0)),
|
||||||
|
data(""));
|
||||||
|
|
||||||
|
// Check the updated fields
|
||||||
|
broker = env.le(keylet);
|
||||||
|
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
|
||||||
|
BEAST_EXPECT(!broker->isFieldPresent(sfData));
|
||||||
|
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// try to delete the wrong broker object
|
// try to delete the wrong broker object
|
||||||
@@ -320,16 +344,14 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
fee(increment),
|
fee(increment),
|
||||||
ter(temINVALID));
|
ter(temINVALID));
|
||||||
|
|
||||||
|
std::string testData;
|
||||||
lifecycle(
|
lifecycle(
|
||||||
env,
|
env,
|
||||||
alice,
|
alice,
|
||||||
evan,
|
evan,
|
||||||
vault,
|
vault,
|
||||||
[&]() {
|
// No modifications
|
||||||
// Successfully create a Loan Broker with all default
|
{},
|
||||||
// values.
|
|
||||||
env(set(alice, vault.vaultID), fee(increment));
|
|
||||||
},
|
|
||||||
[&](SLE::const_ref broker) {
|
[&](SLE::const_ref broker) {
|
||||||
// Extra checks
|
// Extra checks
|
||||||
BEAST_EXPECT(!broker->isFieldPresent(sfManagementFeeRate));
|
BEAST_EXPECT(!broker->isFieldPresent(sfManagementFeeRate));
|
||||||
@@ -337,6 +359,10 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
!broker->isFieldPresent(sfCoverRateLiquidation));
|
!broker->isFieldPresent(sfCoverRateLiquidation));
|
||||||
BEAST_EXPECT(!broker->isFieldPresent(sfData));
|
BEAST_EXPECT(!broker->isFieldPresent(sfData));
|
||||||
|
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
|
||||||
|
BEAST_EXPECT(broker->at(sfDebtMaximum) == 0);
|
||||||
|
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 0);
|
||||||
|
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 0);
|
||||||
},
|
},
|
||||||
[&](SLE::const_ref broker) {
|
[&](SLE::const_ref broker) {
|
||||||
// Modifications
|
// Modifications
|
||||||
@@ -375,19 +401,13 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
ter(temINVALID));
|
ter(temINVALID));
|
||||||
|
|
||||||
// fields that can be changed
|
// fields that can be changed
|
||||||
std::string const testData("Test Data 1234");
|
testData = "Test Data 1234";
|
||||||
// Bad data: too long
|
// Bad data: too long
|
||||||
env(set(alice, vault.vaultID),
|
env(set(alice, vault.vaultID),
|
||||||
loanBrokerID(broker->key()),
|
loanBrokerID(broker->key()),
|
||||||
data(std::string(maxDataPayloadLength + 1, 'W')),
|
data(std::string(maxDataPayloadLength + 1, 'W')),
|
||||||
ter(temINVALID));
|
ter(temINVALID));
|
||||||
// Debt maximum: explicit 0
|
|
||||||
env(set(alice, vault.vaultID),
|
|
||||||
loanBrokerID(broker->key()),
|
|
||||||
debtMaximum(Number(0)));
|
|
||||||
// Check the updated fields
|
|
||||||
broker = env.le(broker->key());
|
|
||||||
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
|
|
||||||
// Bad debt maximum
|
// Bad debt maximum
|
||||||
env(set(alice, vault.vaultID),
|
env(set(alice, vault.vaultID),
|
||||||
loanBrokerID(broker->key()),
|
loanBrokerID(broker->key()),
|
||||||
@@ -410,17 +430,17 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
alice,
|
alice,
|
||||||
evan,
|
evan,
|
||||||
vault,
|
vault,
|
||||||
[&]() {
|
[&](jtx::JTx const& jv) {
|
||||||
std::string const testData2("spam spam spam spam");
|
testData = "spam spam spam spam";
|
||||||
// Finally, create another Loan Broker with none of the
|
// Finally, create another Loan Broker with none of the
|
||||||
// values at default
|
// values at default
|
||||||
env(set(alice, vault.vaultID),
|
return env.jt(
|
||||||
data(testData2),
|
jv,
|
||||||
|
data(testData),
|
||||||
managementFeeRate(123),
|
managementFeeRate(123),
|
||||||
debtMaximum(Number(9)),
|
debtMaximum(Number(9)),
|
||||||
coverRateMinimum(100),
|
coverRateMinimum(100),
|
||||||
coverRateLiquidation(200),
|
coverRateLiquidation(200));
|
||||||
fee(increment));
|
|
||||||
},
|
},
|
||||||
[&](SLE::const_ref broker) {
|
[&](SLE::const_ref broker) {
|
||||||
// Extra checks
|
// Extra checks
|
||||||
@@ -428,12 +448,12 @@ class LoanBroker_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 100);
|
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 100);
|
||||||
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 200);
|
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 200);
|
||||||
BEAST_EXPECT(broker->at(sfDebtMaximum) == Number(9));
|
BEAST_EXPECT(broker->at(sfDebtMaximum) == Number(9));
|
||||||
BEAST_EXPECT(checkVL(broker->at(sfData), testData2));
|
BEAST_EXPECT(checkVL(broker->at(sfData), testData));
|
||||||
},
|
},
|
||||||
[&](SLE::const_ref broker) {
|
[&](SLE::const_ref broker) {
|
||||||
// Reset Data & Debt maximum to default values
|
// Reset Data & Debt maximum to default values
|
||||||
env(set(alice, vault.vaultID),
|
env(set(alice, vault.vaultID),
|
||||||
loanBrokerID(keylet.key),
|
loanBrokerID(broker->key()),
|
||||||
data(""),
|
data(""),
|
||||||
debtMaximum(Number(0)));
|
debtMaximum(Number(0)));
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ NotTEC
|
|||||||
LoanBrokerSet::doPreflight(PreflightContext const& ctx)
|
LoanBrokerSet::doPreflight(PreflightContext const& ctx)
|
||||||
{
|
{
|
||||||
auto const& tx = ctx.tx;
|
auto const& tx = ctx.tx;
|
||||||
if (!validDataLength(tx[~sfData], maxDataPayloadLength))
|
if (auto const data = tx[~sfData]; data && !data->empty() &&
|
||||||
|
!validDataLength(tx[~sfData], maxDataPayloadLength))
|
||||||
return temINVALID;
|
return temINVALID;
|
||||||
if (!validNumericRange(tx[~sfManagementFeeRate], maxFeeRate))
|
if (!validNumericRange(tx[~sfManagementFeeRate], maxFeeRate))
|
||||||
return temINVALID;
|
return temINVALID;
|
||||||
|
|||||||
Reference in New Issue
Block a user