@@ -1064,14 +1064,13 @@ class Vault_test : public beast::unit_test::suite
10641064 {
10651065 using namespace test ::jtx;
10661066
1067- auto testCase = [this ](
1068- std::function<void (
1069- Env & env,
1070- Account const & issuer,
1071- Account const & owner,
1072- Account const & depositor,
1073- Asset const & asset,
1074- Vault& vault)> test) {
1067+ auto testCase = [this ](std::function<void (
1068+ Env & env,
1069+ Account const & issuer,
1070+ Account const & owner,
1071+ Account const & depositor,
1072+ Asset const & asset,
1073+ Vault& vault)> test) {
10751074 Env env{*this , testable_amendments () | featureSingleAssetVault};
10761075 Account issuer{" issuer" };
10771076 Account owner{" owner" };
@@ -1354,14 +1353,13 @@ class Vault_test : public beast::unit_test::suite
13541353 {
13551354 using namespace test ::jtx;
13561355
1357- auto testCase = [this ](
1358- std::function<void (
1359- Env & env,
1360- Account const & issuer,
1361- Account const & owner,
1362- Account const & depositor,
1363- Asset const & asset,
1364- Vault& vault)> test) {
1356+ auto testCase = [this ](std::function<void (
1357+ Env & env,
1358+ Account const & issuer,
1359+ Account const & owner,
1360+ Account const & depositor,
1361+ Asset const & asset,
1362+ Vault& vault)> test) {
13651363 Env env{*this , testable_amendments () | featureSingleAssetVault};
13661364 Account issuer{" issuer" };
13671365 Account owner{" owner" };
@@ -5357,6 +5355,63 @@ class Vault_test : public beast::unit_test::suite
53575355 }
53585356 }
53595357
5358+ void
5359+ testVaultDeleteData ()
5360+ {
5361+ using namespace test ::jtx;
5362+
5363+ Env env{*this };
5364+
5365+ Account const owner{" owner" };
5366+ env.fund (XRP (1'000'000 ), owner);
5367+ env.close ();
5368+
5369+ Vault vault{env};
5370+
5371+ auto const keylet = keylet::vault (owner.id (), 1 );
5372+ auto delTx = vault.del ({.owner = owner, .id = keylet.key });
5373+
5374+ // Test VaultDelete with fixLendingProtocolV1_1 disabled
5375+ // Transaction fails if the data field is provided
5376+ {
5377+ testcase (" VaultDelete data fixLendingProtocolV1_1 disabled" );
5378+ env.disableFeature (fixLendingProtocolV1_1);
5379+ delTx[sfMemoData] = strHex (std::string (maxDataPayloadLength, ' A' ));
5380+ env (delTx, ter (temDISABLED), THISLINE);
5381+ env.close ();
5382+ env.enableFeature (fixLendingProtocolV1_1);
5383+ }
5384+
5385+ // Transaction fails if the data field is too large
5386+ {
5387+ testcase (" VaultDelete data fixLendingProtocolV1_1 enabled data too large" );
5388+ delTx[sfMemoData] = strHex (std::string (maxDataPayloadLength + 1 , ' A' ));
5389+ env (delTx, ter (temMALFORMED), THISLINE);
5390+ env.close ();
5391+ }
5392+
5393+ // Transaction fails if the data field is set, but is empty
5394+ {
5395+ testcase (" VaultDelete data fixLendingProtocolV1_1 enabled data empty" );
5396+ delTx[sfMemoData] = strHex (std::string (0 , ' A' ));
5397+ env (delTx, ter (temMALFORMED), THISLINE);
5398+ env.close ();
5399+ }
5400+
5401+ {
5402+ testcase (" VaultDelete data fixLendingProtocolV1_1 enabled data valid" );
5403+ PrettyAsset const xrpAsset = xrpIssue ();
5404+ auto [tx, keylet] = vault.create ({.owner = owner, .asset = xrpAsset});
5405+ env (tx, ter (tesSUCCESS), THISLINE);
5406+ env.close ();
5407+ // Recreate the transaction as the vault keylet changed
5408+ auto delTx = vault.del ({.owner = owner, .id = keylet.key });
5409+ delTx[sfMemoData] = strHex (std::string (maxDataPayloadLength, ' A' ));
5410+ env (delTx, ter (tesSUCCESS), THISLINE);
5411+ env.close ();
5412+ }
5413+ }
5414+
53605415public:
53615416 void
53625417 run () override
@@ -5378,6 +5433,7 @@ class Vault_test : public beast::unit_test::suite
53785433 testVaultClawbackBurnShares ();
53795434 testVaultClawbackAssets ();
53805435 testAssetsMaximum ();
5436+ testVaultDeleteData ();
53815437 }
53825438};
53835439
0 commit comments