Skip to content

Commit f5c86f0

Browse files
committed
Continue updating LoanBroker tests
- It builds now
1 parent a8581c7 commit f5c86f0

File tree

3 files changed

+55
-34
lines changed

3 files changed

+55
-34
lines changed

include/xrpl/protocol/STLedgerEntry.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class STLedgerEntry final : public STObject, public CountedObject<STLedgerEntry>
5858
getText() const override;
5959

6060
Json::Value
61-
getJson(JsonOptions options) const override;
61+
getJson(JsonOptions options = JsonOptions::none) const override;
6262

6363
/** Returns the 'key' (or 'index') of this item.
6464
The key identifies this entry's position in

src/test/app/LoanBroker_test.cpp

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -100,32 +100,41 @@ class LoanBroker_test : public beast::unit_test::suite
100100
jtx::Account const& alice,
101101
jtx::Account const& evan,
102102
VaultInfo const& vault,
103-
std::function<void()> createBroker,
104-
std::function<void(SLE::const_ref broker)> checkBroker,
105-
std::function<void(SLE::const_ref broker)> changeBroker,
106-
std::function<void(SLE::const_ref broker)> checkChangedBroker)
103+
std::function<jtx::JTx(jtx::JTx const&)> modifyJTx,
104+
std::function<void(SLE::const_ref)> checkBroker,
105+
std::function<void(SLE::const_ref)> changeBroker,
106+
std::function<void(SLE::const_ref)> checkChangedBroker)
107107
{
108108
auto const keylet = keylet::loanbroker(alice.id(), env.seq(alice));
109+
testcase("Lifecycle: " + to_string(vault.asset));
109110

110111
using namespace jtx;
111112
using namespace loanBroker;
112113

113-
createBroker();
114+
{
115+
// Start with default values
116+
auto jtx = env.jt(set(alice, vault.vaultID), fee(increment));
117+
// Modify as desired
118+
if (modifyJTx)
119+
jtx = modifyJTx(jtx);
120+
// Successfully create a Loan Broker
121+
env(jtx);
122+
}
123+
114124
env.close();
115125
if (auto broker = env.le(keylet); BEAST_EXPECT(broker))
116126
{
127+
log << to_string(broker->getJson()) << std::endl;
117128
BEAST_EXPECT(broker->at(sfVaultID) == vault.vaultID);
118129
BEAST_EXPECT(broker->at(sfAccount) != alice.id());
119130
BEAST_EXPECT(broker->at(sfOwner) == alice.id());
120131
BEAST_EXPECT(broker->at(sfFlags) == 0);
121132
BEAST_EXPECT(broker->at(sfSequence) == env.seq(alice) - 1);
122133
BEAST_EXPECT(broker->at(sfOwnerCount) == 0);
123134
BEAST_EXPECT(broker->at(sfDebtTotal) == 0);
124-
BEAST_EXPECT(broker->at(sfDebtMaximum) == 0);
125135
BEAST_EXPECT(broker->at(sfCoverAvailable) == 0);
126-
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 0);
127-
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 0);
128-
checkBroker(broker);
136+
if (checkBroker)
137+
checkBroker(broker);
129138

130139
// Load the pseudo-account
131140
auto const pseudoKeylet = keylet::account(broker->at(sfAccount));
@@ -162,13 +171,28 @@ class LoanBroker_test : public beast::unit_test::suite
162171
env(set(alice, vault.vaultID), loanBrokerID(keylet.key));
163172

164173
// Make modifications to the broker
165-
changeBroker(broker);
174+
if (changeBroker)
175+
changeBroker(broker);
166176

167177
env.close();
168178
broker = env.le(keylet);
169179

170180
// Check the results of modifications
171-
checkChangedBroker(broker);
181+
if (checkChangedBroker)
182+
checkChangedBroker(broker);
183+
184+
// Verify that fields get removed when set to default values
185+
// Debt maximum: explicit 0
186+
// Data: explicit empty
187+
env(set(alice, vault.vaultID),
188+
loanBrokerID(broker->key()),
189+
debtMaximum(Number(0)),
190+
data(""));
191+
192+
// Check the updated fields
193+
broker = env.le(keylet);
194+
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
195+
BEAST_EXPECT(!broker->isFieldPresent(sfData));
172196

173197
/////////////////////////////////////
174198
// try to delete the wrong broker object
@@ -320,23 +344,25 @@ class LoanBroker_test : public beast::unit_test::suite
320344
fee(increment),
321345
ter(temINVALID));
322346

347+
std::string testData;
323348
lifecycle(
324349
env,
325350
alice,
326351
evan,
327352
vault,
328-
[&]() {
329-
// Successfully create a Loan Broker with all default
330-
// values.
331-
env(set(alice, vault.vaultID), fee(increment));
332-
},
353+
// No modifications
354+
{},
333355
[&](SLE::const_ref broker) {
334356
// Extra checks
335357
BEAST_EXPECT(!broker->isFieldPresent(sfManagementFeeRate));
336358
BEAST_EXPECT(!broker->isFieldPresent(sfCoverRateMinimum));
337359
BEAST_EXPECT(
338360
!broker->isFieldPresent(sfCoverRateLiquidation));
339361
BEAST_EXPECT(!broker->isFieldPresent(sfData));
362+
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
363+
BEAST_EXPECT(broker->at(sfDebtMaximum) == 0);
364+
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 0);
365+
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 0);
340366
},
341367
[&](SLE::const_ref broker) {
342368
// Modifications
@@ -375,19 +401,13 @@ class LoanBroker_test : public beast::unit_test::suite
375401
ter(temINVALID));
376402

377403
// fields that can be changed
378-
std::string const testData("Test Data 1234");
404+
testData = "Test Data 1234";
379405
// Bad data: too long
380406
env(set(alice, vault.vaultID),
381407
loanBrokerID(broker->key()),
382408
data(std::string(maxDataPayloadLength + 1, 'W')),
383409
ter(temINVALID));
384-
// Debt maximum: explicit 0
385-
env(set(alice, vault.vaultID),
386-
loanBrokerID(broker->key()),
387-
debtMaximum(Number(0)));
388-
// Check the updated fields
389-
broker = env.le(broker->key());
390-
BEAST_EXPECT(!broker->isFieldPresent(sfDebtMaximum));
410+
391411
// Bad debt maximum
392412
env(set(alice, vault.vaultID),
393413
loanBrokerID(broker->key()),
@@ -410,30 +430,30 @@ class LoanBroker_test : public beast::unit_test::suite
410430
alice,
411431
evan,
412432
vault,
413-
[&]() {
414-
std::string const testData2("spam spam spam spam");
433+
[&](jtx::JTx const& jv) {
434+
testData = "spam spam spam spam";
415435
// Finally, create another Loan Broker with none of the
416436
// values at default
417-
env(set(alice, vault.vaultID),
418-
data(testData2),
437+
return env.jt(
438+
jv,
439+
data(testData),
419440
managementFeeRate(123),
420441
debtMaximum(Number(9)),
421442
coverRateMinimum(100),
422-
coverRateLiquidation(200),
423-
fee(increment));
443+
coverRateLiquidation(200));
424444
},
425445
[&](SLE::const_ref broker) {
426446
// Extra checks
427447
BEAST_EXPECT(broker->at(sfManagementFeeRate) == 123);
428448
BEAST_EXPECT(broker->at(sfCoverRateMinimum) == 100);
429449
BEAST_EXPECT(broker->at(sfCoverRateLiquidation) == 200);
430450
BEAST_EXPECT(broker->at(sfDebtMaximum) == Number(9));
431-
BEAST_EXPECT(checkVL(broker->at(sfData), testData2));
451+
BEAST_EXPECT(checkVL(broker->at(sfData), testData));
432452
},
433453
[&](SLE::const_ref broker) {
434454
// Reset Data & Debt maximum to default values
435455
env(set(alice, vault.vaultID),
436-
loanBrokerID(keylet.key),
456+
loanBrokerID(broker->key()),
437457
data(""),
438458
debtMaximum(Number(0)));
439459
},

src/xrpld/app/tx/detail/LoanBrokerSet.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ NotTEC
6666
LoanBrokerSet::doPreflight(PreflightContext const& ctx)
6767
{
6868
auto const& tx = ctx.tx;
69-
if (!validDataLength(tx[~sfData], maxDataPayloadLength))
69+
if (auto const data = tx[~sfData]; data && !data->empty() &&
70+
!validDataLength(tx[~sfData], maxDataPayloadLength))
7071
return temINVALID;
7172
if (!validNumericRange(tx[~sfManagementFeeRate], maxFeeRate))
7273
return temINVALID;

0 commit comments

Comments
 (0)