mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-20 10:35:50 +00:00
add tests
This commit is contained in:
@@ -202,7 +202,7 @@ getRemarksIssuer(T const& sleO)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
issuer = (highReserve ? highAcc : lowAcc);
|
issuer = (highReserve ? lowAcc : highAcc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,14 +22,13 @@
|
|||||||
#include <ripple/protocol/Indexes.h>
|
#include <ripple/protocol/Indexes.h>
|
||||||
#include <ripple/protocol/TxFlags.h>
|
#include <ripple/protocol/TxFlags.h>
|
||||||
#include <ripple/protocol/jss.h>
|
#include <ripple/protocol/jss.h>
|
||||||
#include <test/jtx.h>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <test/jtx.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace test {
|
namespace test {
|
||||||
struct SetRemarks_test : public beast::unit_test::suite
|
struct SetRemarks_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
|
|
||||||
// debugRemarks(env, keylet::account(alice).key);
|
// debugRemarks(env, keylet::account(alice).key);
|
||||||
void
|
void
|
||||||
debugRemarks(jtx::Env& env, uint256 const& id)
|
debugRemarks(jtx::Env& env, uint256 const& id)
|
||||||
@@ -37,7 +36,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
Json::Value params;
|
Json::Value params;
|
||||||
params[jss::index] = strHex(id);
|
params[jss::index] = strHex(id);
|
||||||
auto const info = env.rpc("json", "ledger_entry", to_string(params));
|
auto const info = env.rpc("json", "ledger_entry", to_string(params));
|
||||||
std::cout << "Remarks: " << info[jss::result][jss::node][sfRemarks.jsonName] << "\n";
|
std::cout << "INFO: " << info << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -48,17 +47,18 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{
|
{
|
||||||
using namespace jtx;
|
using namespace jtx;
|
||||||
auto const slep = view.read(keylet::unchecked(id));
|
auto const slep = view.read(keylet::unchecked(id));
|
||||||
if (slep->isFieldPresent(sfRemarks))
|
if (slep && slep->isFieldPresent(sfRemarks))
|
||||||
{
|
{
|
||||||
auto const& remarksObj = slep->getFieldArray(sfRemarks);
|
auto const& remarksObj = slep->getFieldArray(sfRemarks);
|
||||||
|
BEAST_EXPECT(remarksObj.size() == marks.size());
|
||||||
for (int i = 0; i < marks.size(); ++i)
|
for (int i = 0; i < marks.size(); ++i)
|
||||||
{
|
{
|
||||||
remarks::remark const expectedMark = marks[i];
|
remarks::remark const expectedMark = marks[i];
|
||||||
STObject const remark = remarksObj[i];
|
STObject const remark = remarksObj[i];
|
||||||
|
|
||||||
Blob name = remark.getFieldVL(sfRemarkName);
|
Blob name = remark.getFieldVL(sfRemarkName);
|
||||||
// BEAST_EXPECT(expectedMark.name == name);
|
// BEAST_EXPECT(expectedMark.name == name);
|
||||||
|
|
||||||
uint32_t flags = remark.isFieldPresent(sfFlags)
|
uint32_t flags = remark.isFieldPresent(sfFlags)
|
||||||
? remark.getFieldU32(sfFlags)
|
? remark.getFieldU32(sfFlags)
|
||||||
: 0;
|
: 0;
|
||||||
@@ -67,7 +67,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
std::optional<Blob> val;
|
std::optional<Blob> val;
|
||||||
if (remark.isFieldPresent(sfRemarkValue))
|
if (remark.isFieldPresent(sfRemarkValue))
|
||||||
val = remark.getFieldVL(sfRemarkValue);
|
val = remark.getFieldVL(sfRemarkValue);
|
||||||
// BEAST_EXPECT(expectedMark.value == val);
|
// BEAST_EXPECT(expectedMark.value == val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,6 +97,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
auto const txResult =
|
auto const txResult =
|
||||||
withRemarks ? ter(tesSUCCESS) : ter(temDISABLED);
|
withRemarks ? ter(tesSUCCESS) : ter(temDISABLED);
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
txResult);
|
txResult);
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -130,6 +131,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
txflags(tfClose),
|
txflags(tfClose),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -142,6 +144,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
marks.push_back({"CAFE", "DEADBEEF", 0});
|
marks.push_back({"CAFE", "DEADBEEF", 0});
|
||||||
}
|
}
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -154,6 +157,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
marks.push_back({"CAFE", "DEADBEEF", 0});
|
marks.push_back({"CAFE", "DEADBEEF", 0});
|
||||||
}
|
}
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -175,7 +179,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
ja[i][sfGenesisMint.jsonName][jss::Destination] = bob.human();
|
ja[i][sfGenesisMint.jsonName][jss::Destination] = bob.human();
|
||||||
}
|
}
|
||||||
jv[sfRemarks.jsonName] = ja;
|
jv[sfRemarks.jsonName] = ja;
|
||||||
env(jv, ter(temMALFORMED));
|
env(jv, fee(XRP(1)), ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
// temMALFORMED: SetRemarks: duplicate RemarkName entry.
|
// temMALFORMED: SetRemarks: duplicate RemarkName entry.
|
||||||
@@ -185,6 +189,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"CAFE", "DEADBEEF", 0},
|
{"CAFE", "DEADBEEF", 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -195,6 +200,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"", "DEADBEEF", 0},
|
{"", "DEADBEEF", 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -206,6 +212,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{name, "DEADBEEF", 0},
|
{name, "DEADBEEF", 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -215,6 +222,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"CAFE", "DEADBEEF", 2},
|
{"CAFE", "DEADBEEF", 2},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -225,6 +233,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"CAFE", std::nullopt, 1},
|
{"CAFE", std::nullopt, 1},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -235,6 +244,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"CAFE", "", 0},
|
{"CAFE", "", 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -246,6 +256,7 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{"CAFE", value, 0},
|
{"CAFE", value, 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
ter(temMALFORMED));
|
ter(temMALFORMED));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
@@ -280,27 +291,35 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
{
|
{
|
||||||
auto const carol = Account("carol");
|
auto const carol = Account("carol");
|
||||||
env.memoize(carol);
|
env.memoize(carol);
|
||||||
auto tx = remarks::setRemarks(carol, keylet::account(carol).key, marks);
|
auto tx =
|
||||||
|
remarks::setRemarks(carol, keylet::account(carol).key, marks);
|
||||||
tx[jss::Sequence] = 0;
|
tx[jss::Sequence] = 0;
|
||||||
env(tx, carol, ter(terNO_ACCOUNT));
|
env(tx, carol, fee(XRP(1)), ter(terNO_ACCOUNT));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// tecNO_TARGET - object doesnt exist
|
// tecNO_TARGET - object doesnt exist
|
||||||
{
|
{
|
||||||
env(remarks::setRemarks(alice, keylet::account(carol).key, marks), ter(tecNO_TARGET));
|
env(remarks::setRemarks(alice, keylet::account(carol).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tecNO_TARGET));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// tecNO_PERMISSION: !issuer
|
// tecNO_PERMISSION: !issuer
|
||||||
{
|
{
|
||||||
env(deposit::auth(bob, alice));
|
env(deposit::auth(bob, alice));
|
||||||
env(remarks::setRemarks(alice, keylet::depositPreauth(bob, alice).key, marks), ter(tecNO_PERMISSION));
|
env(remarks::setRemarks(
|
||||||
|
alice, keylet::depositPreauth(bob, alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tecNO_PERMISSION));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
// tecNO_PERMISSION: issuer != _account
|
// tecNO_PERMISSION: issuer != _account
|
||||||
{
|
{
|
||||||
env(remarks::setRemarks(alice, keylet::account(bob).key, marks), ter(tecNO_PERMISSION));
|
env(remarks::setRemarks(alice, keylet::account(bob).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tecNO_PERMISSION));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
// tecIMMUTABLE: SetRemarks: attempt to mutate an immutable remark.
|
// tecIMMUTABLE: SetRemarks: attempt to mutate an immutable remark.
|
||||||
@@ -309,19 +328,24 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
std::vector<remarks::remark> immutableMarks = {
|
std::vector<remarks::remark> immutableMarks = {
|
||||||
{"CAFF", "DEAD", tfImmutable},
|
{"CAFF", "DEAD", tfImmutable},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, immutableMarks), ter(tesSUCCESS));
|
env(remarks::setRemarks(
|
||||||
|
alice, keylet::account(alice).key, immutableMarks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tesSUCCESS));
|
||||||
env.close();
|
env.close();
|
||||||
|
|
||||||
// alice cannot update immutable remark
|
// alice cannot update immutable remark
|
||||||
std::vector<remarks::remark> badMarks = {
|
std::vector<remarks::remark> badMarks = {
|
||||||
{"CAFF", "DEADBEEF", 0},
|
{"CAFF", "DEADBEEF", 0},
|
||||||
};
|
};
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, badMarks), ter(tecIMMUTABLE));
|
env(remarks::setRemarks(
|
||||||
|
alice, keylet::account(alice).key, badMarks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tecIMMUTABLE));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
// tecCLAIM: SetRemarks: insane remarks accounting.
|
// tecCLAIM: SetRemarks: insane remarks accounting.
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
// tecTOO_MANY_REMARKS: SetRemarks: an object may have at most 32
|
// tecTOO_MANY_REMARKS: SetRemarks: an object may have at most 32
|
||||||
// remarks.
|
// remarks.
|
||||||
@@ -335,9 +359,13 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
_marks.push_back({ss.str(), "DEADBEEF", 0});
|
_marks.push_back({ss.str(), "DEADBEEF", 0});
|
||||||
hexValue++;
|
hexValue++;
|
||||||
}
|
}
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, _marks), ter(tesSUCCESS));
|
env(remarks::setRemarks(alice, keylet::account(alice).key, _marks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tesSUCCESS));
|
||||||
env.close();
|
env.close();
|
||||||
env(remarks::setRemarks(alice, keylet::account(alice).key, marks), ter(tecTOO_MANY_REMARKS));
|
env(remarks::setRemarks(alice, keylet::account(alice).key, marks),
|
||||||
|
fee(XRP(1)),
|
||||||
|
ter(tecTOO_MANY_REMARKS));
|
||||||
env.close();
|
env.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -360,12 +388,47 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
auto const bob = Account("bob");
|
auto const bob = Account("bob");
|
||||||
env.fund(XRP(1000), alice, bob);
|
env.fund(XRP(1000), alice, bob);
|
||||||
env.close();
|
env.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
// tecNO_PERMISSION
|
// tecNO_PERMISSION
|
||||||
// tecTOO_MANY_REMARKS
|
// tecTOO_MANY_REMARKS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
testDelete(FeatureBitset features)
|
||||||
|
{
|
||||||
|
testcase("delete");
|
||||||
|
using namespace jtx;
|
||||||
|
|
||||||
|
// setup env
|
||||||
|
Env env{*this, features};
|
||||||
|
auto const alice = Account("alice");
|
||||||
|
auto const bob = Account("bob");
|
||||||
|
env.fund(XRP(1000), alice, bob);
|
||||||
|
env.close();
|
||||||
|
|
||||||
|
auto const id = keylet::account(alice).key;
|
||||||
|
|
||||||
|
// Set Remarks
|
||||||
|
{
|
||||||
|
std::vector<remarks::remark> marks = {
|
||||||
|
{"CAFE", "DEADBEEF", 0},
|
||||||
|
};
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete Remarks
|
||||||
|
{
|
||||||
|
std::vector<remarks::remark> marks = {
|
||||||
|
{"CAFE", std::nullopt, 0},
|
||||||
|
};
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
testLedgerObjects(FeatureBitset features)
|
testLedgerObjects(FeatureBitset features)
|
||||||
{
|
{
|
||||||
@@ -374,45 +437,155 @@ struct SetRemarks_test : public beast::unit_test::suite
|
|||||||
|
|
||||||
// setup env
|
// setup env
|
||||||
Env env{*this, features};
|
Env env{*this, features};
|
||||||
|
// Env env{*this, envconfig(), features, nullptr,
|
||||||
|
// beast::severities::kTrace
|
||||||
|
// };
|
||||||
auto const alice = Account("alice");
|
auto const alice = Account("alice");
|
||||||
auto const bob = Account("bob");
|
auto const bob = Account("bob");
|
||||||
env.fund(XRP(1000), alice, bob);
|
auto const gw = Account("gw");
|
||||||
|
auto const USD = gw["USD"];
|
||||||
|
env.fund(XRP(10000), alice, bob, gw);
|
||||||
|
env.close();
|
||||||
|
env.trust(USD(10000), alice);
|
||||||
|
env.trust(USD(10000), bob);
|
||||||
|
env.close();
|
||||||
|
env(pay(gw, alice, USD(1000)));
|
||||||
|
env(pay(gw, bob, USD(1000)));
|
||||||
env.close();
|
env.close();
|
||||||
|
|
||||||
std::vector<remarks::remark> marks = {
|
std::vector<remarks::remark> marks = {
|
||||||
{"CAFE", "DEADBEEF", 0},
|
{"CAFE", "DEADBEEF", 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
// getRemarksIssuer: ltACCOUNT_ROOT
|
// ltACCOUNT_ROOT
|
||||||
{
|
{
|
||||||
auto const id = keylet::account(alice).key;
|
auto const id = keylet::account(alice).key;
|
||||||
env(remarks::setRemarks(alice, id, marks));
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltOFFER
|
||||||
|
{
|
||||||
|
auto const id = keylet::offer(alice, env.seq(alice)).key;
|
||||||
|
env(offer(alice, XRP(10), USD(10)), fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltESCROW
|
||||||
|
{
|
||||||
|
using namespace std::literals::chrono_literals;
|
||||||
|
auto const id = keylet::escrow(alice, env.seq(alice)).key;
|
||||||
|
env(escrow::create(alice, bob, XRP(10)),
|
||||||
|
escrow::finish_time(env.now() + 1s),
|
||||||
|
fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltTICKET
|
||||||
|
{
|
||||||
|
auto const id = keylet::ticket(alice, env.seq(alice) + 1).key;
|
||||||
|
env(ticket::create(alice, 10), fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltPAYCHAN
|
||||||
|
{
|
||||||
|
using namespace std::literals::chrono_literals;
|
||||||
|
auto const id = keylet::payChan(alice, bob, env.seq(alice)).key;
|
||||||
|
auto const pk = alice.pk();
|
||||||
|
auto const settleDelay = 100s;
|
||||||
|
env(paychan::create(alice, bob, XRP(10), settleDelay, pk),
|
||||||
|
fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltCHECK
|
||||||
|
{
|
||||||
|
auto const id = keylet::check(alice, env.seq(alice)).key;
|
||||||
|
env(check::create(alice, bob, XRP(10)), fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltDEPOSIT_PREAUTH
|
||||||
|
{
|
||||||
|
env(fset(bob, asfDepositAuth));
|
||||||
|
auto const id = keylet::depositPreauth(alice, bob).key;
|
||||||
|
env(deposit::auth(alice, bob), fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltURI_TOKEN
|
||||||
|
{
|
||||||
|
std::string const uri(256, 'A');
|
||||||
|
auto const id =
|
||||||
|
keylet::uritoken(alice, Blob(uri.begin(), uri.end())).key;
|
||||||
|
env(uritoken::mint(alice, uri), fee(XRP(1)));
|
||||||
|
env(remarks::setRemarks(alice, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltRIPPLE_STATE: bal < 0
|
||||||
|
{
|
||||||
|
auto const alice2 = Account("alice2");
|
||||||
|
env.fund(XRP(1000), alice2);
|
||||||
|
env.close();
|
||||||
|
env.trust(USD(10000), alice2);
|
||||||
|
auto const id = keylet::line(alice2, USD).key;
|
||||||
|
env(pay(gw, alice2, USD(1000)));
|
||||||
|
env(remarks::setRemarks(gw, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltRIPPLE_STATE: bal > 0
|
||||||
|
{
|
||||||
|
auto const carol0 = Account("carol0");
|
||||||
|
env.fund(XRP(1000), carol0);
|
||||||
|
env.close();
|
||||||
|
env.trust(USD(10000), carol0);
|
||||||
|
auto const id = keylet::line(carol0, USD).key;
|
||||||
|
env(pay(gw, carol0, USD(1000)));
|
||||||
|
env(remarks::setRemarks(gw, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltRIPPLE_STATE: highReserve
|
||||||
|
{
|
||||||
|
auto const dan1 = Account("dan1");
|
||||||
|
env.fund(XRP(1000), dan1);
|
||||||
|
env.close();
|
||||||
|
env.trust(USD(1000), dan1);
|
||||||
|
auto const id = keylet::line(dan1, USD).key;
|
||||||
|
env(remarks::setRemarks(gw, id, marks), fee(XRP(1)));
|
||||||
|
env.close();
|
||||||
|
validateRemarks(*env.current(), id, marks);
|
||||||
|
}
|
||||||
|
// ltRIPPLE_STATE: lowReserve
|
||||||
|
{
|
||||||
|
auto const bob0 = Account("bob0");
|
||||||
|
env.fund(XRP(1000), bob0);
|
||||||
|
env.close();
|
||||||
|
env.trust(USD(1000), bob0);
|
||||||
|
auto const id = keylet::line(bob0, USD).key;
|
||||||
|
env(remarks::setRemarks(gw, id, marks), fee(XRP(1)));
|
||||||
env.close();
|
env.close();
|
||||||
debugRemarks(env, id);
|
|
||||||
validateRemarks(*env.current(), id, marks);
|
validateRemarks(*env.current(), id, marks);
|
||||||
}
|
}
|
||||||
// getRemarksIssuer: ltOFFER
|
|
||||||
// getRemarksIssuer: ltESCROW
|
|
||||||
// getRemarksIssuer: ltTICKET
|
|
||||||
// getRemarksIssuer: ltPAYCHAN
|
|
||||||
// getRemarksIssuer: ltCHECK
|
|
||||||
// getRemarksIssuer: ltDEPOSIT_PREAUTH
|
|
||||||
// getRemarksIssuer: ltNFTOKEN_OFFER
|
|
||||||
// getRemarksIssuer: ltURI_TOKEN
|
|
||||||
// getRemarksIssuer: ltRIPPLE_STATE: bal < 0
|
|
||||||
// getRemarksIssuer: ltRIPPLE_STATE: bal > 0
|
|
||||||
// getRemarksIssuer: ltRIPPLE_STATE: !high & !low
|
|
||||||
// getRemarksIssuer: ltRIPPLE_STATE: high & low
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
testWithFeats(FeatureBitset features)
|
testWithFeats(FeatureBitset features)
|
||||||
{
|
{
|
||||||
// testEnabled(features);
|
testEnabled(features);
|
||||||
// testPreflightInvalid(features);
|
testPreflightInvalid(features);
|
||||||
// testPreclaimInvalid(features);
|
testPreclaimInvalid(features);
|
||||||
// testDoApplyInvalid(features);
|
testDoApplyInvalid(features);
|
||||||
// testDelete(features);
|
testDelete(features);
|
||||||
testLedgerObjects(features);
|
testLedgerObjects(features);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user