@@ -4990,6 +4990,97 @@ class Vault_test : public beast::unit_test::suite
49904990 }
49914991 }
49924992
4993+ void
4994+ testVaultSetVaultDepositFlagValidation ()
4995+ {
4996+ using namespace test ::jtx;
4997+
4998+ auto const all = testable_amendments ();
4999+
5000+ {
5001+ testcase (" VaultSet VaultDepositBlock fixLendingProtocolV1_1 disabled" );
5002+ Env env{*this , all - fixLendingProtocolV1_1};
5003+
5004+ Account owner{" owner" };
5005+ env.fund (XRP (1'000'000 ), owner);
5006+ env.close ();
5007+
5008+ PrettyAsset asset = xrpIssue ();
5009+ Vault vault{env};
5010+
5011+ auto const [tx, keylet] = vault.create ({.owner = owner, .asset = asset, .flags = tfVaultPrivate});
5012+ env (tx, ter (tesSUCCESS), THISLINE);
5013+ env.close ();
5014+
5015+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositBlock}),
5016+ ter (temDISABLED),
5017+ THISLINE);
5018+ env.close ();
5019+ }
5020+
5021+ {
5022+ std::string const prefix = " VaultSet(VaultDepositBlock): " ;
5023+ Env env{*this , all | fixLendingProtocolV1_1};
5024+
5025+ Account owner{" owner" };
5026+ env.fund (XRP (1'000'000 ), owner);
5027+ env.close ();
5028+
5029+ PrettyAsset asset = xrpIssue ();
5030+ Vault vault{env};
5031+
5032+ auto const [tx, keylet] = vault.create ({.owner = owner, .asset = asset, .flags = tfVaultPrivate});
5033+ env (tx, ter (tesSUCCESS), THISLINE);
5034+ env.close ();
5035+
5036+ {
5037+ testcase (prefix + " invalid flags" );
5038+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositBlock | tfVaultDepositUnblock}),
5039+ ter (temMALFORMED),
5040+ THISLINE);
5041+ env.close ();
5042+ }
5043+
5044+ {
5045+ testcase (prefix + " unblock already unblocked vault" );
5046+ // Cannot unblock an already unblocked vault
5047+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositUnblock}),
5048+ ter (tecNO_PERMISSION),
5049+ THISLINE);
5050+ }
5051+
5052+ {
5053+ testcase (prefix + " set and clear vault flag" );
5054+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositBlock}),
5055+ ter (tesSUCCESS),
5056+ THISLINE);
5057+
5058+ auto sleVault = env.le (keylet);
5059+ if (!BEAST_EXPECT (sleVault))
5060+ return ;
5061+
5062+ if (!BEAST_EXPECT (sleVault->isFlag (lsfVaultDepositBlocked)))
5063+ return ;
5064+
5065+ // Cannot block an already blocked vault
5066+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositBlock}),
5067+ ter (tecNO_PERMISSION),
5068+ THISLINE);
5069+
5070+ // Cannot unblock an already unblocked vault
5071+ env (vault.set ({.owner = owner, .id = keylet.key , .flags = tfVaultDepositUnblock}),
5072+ ter (tesSUCCESS),
5073+ THISLINE);
5074+
5075+ sleVault = env.le (keylet);
5076+ if (!BEAST_EXPECT (sleVault))
5077+ return ;
5078+
5079+ BEAST_EXPECT (!sleVault->isFlag (lsfVaultDepositBlocked));
5080+ }
5081+ }
5082+ }
5083+
49935084public:
49945085 void
49955086 run () override
@@ -5011,6 +5102,7 @@ class Vault_test : public beast::unit_test::suite
50115102 testVaultClawbackBurnShares ();
50125103 testVaultClawbackAssets ();
50135104 testAssetsMaximum ();
5105+ testVaultSetVaultDepositFlagValidation ();
50145106 }
50155107};
50165108
0 commit comments