mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-23 15:20:54 +00:00
feat: Add a new closed ended vault to extend SAV (#7921)
Co-authored-by: Vito Tumas <5780819+Tapanito@users.noreply.github.com>
This commit is contained in:
@@ -36,6 +36,9 @@ TEST(VaultTests, BuilderSettersRoundTrip)
|
||||
auto const withdrawalPolicyValue = canonical_UINT8();
|
||||
auto const scaleValue = canonical_UINT8();
|
||||
auto const lEVersionValue = canonical_UINT8();
|
||||
auto const vaultKindValue = canonical_UINT8();
|
||||
auto const subscriptionDateValue = canonical_UINT32();
|
||||
auto const redemptionDateValue = canonical_UINT32();
|
||||
|
||||
VaultBuilder builder{
|
||||
previousTxnIDValue,
|
||||
@@ -56,6 +59,9 @@ TEST(VaultTests, BuilderSettersRoundTrip)
|
||||
builder.setLossUnrealized(lossUnrealizedValue);
|
||||
builder.setScale(scaleValue);
|
||||
builder.setLEVersion(lEVersionValue);
|
||||
builder.setVaultKind(vaultKindValue);
|
||||
builder.setSubscriptionDate(subscriptionDateValue);
|
||||
builder.setRedemptionDate(redemptionDateValue);
|
||||
|
||||
builder.setLedgerIndex(index);
|
||||
builder.setFlags(0x1u);
|
||||
@@ -176,6 +182,30 @@ TEST(VaultTests, BuilderSettersRoundTrip)
|
||||
EXPECT_TRUE(entry.hasLEVersion());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = vaultKindValue;
|
||||
auto const actualOpt = entry.getVaultKind();
|
||||
ASSERT_TRUE(actualOpt.has_value());
|
||||
expectEqualField(expected, *actualOpt, "sfVaultKind");
|
||||
EXPECT_TRUE(entry.hasVaultKind());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = subscriptionDateValue;
|
||||
auto const actualOpt = entry.getSubscriptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value());
|
||||
expectEqualField(expected, *actualOpt, "sfSubscriptionDate");
|
||||
EXPECT_TRUE(entry.hasSubscriptionDate());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = redemptionDateValue;
|
||||
auto const actualOpt = entry.getRedemptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value());
|
||||
expectEqualField(expected, *actualOpt, "sfRedemptionDate");
|
||||
EXPECT_TRUE(entry.hasRedemptionDate());
|
||||
}
|
||||
|
||||
EXPECT_TRUE(entry.hasLedgerIndex());
|
||||
auto const ledgerIndex = entry.getLedgerIndex();
|
||||
ASSERT_TRUE(ledgerIndex.has_value());
|
||||
@@ -205,6 +235,9 @@ TEST(VaultTests, BuilderFromSleRoundTrip)
|
||||
auto const withdrawalPolicyValue = canonical_UINT8();
|
||||
auto const scaleValue = canonical_UINT8();
|
||||
auto const lEVersionValue = canonical_UINT8();
|
||||
auto const vaultKindValue = canonical_UINT8();
|
||||
auto const subscriptionDateValue = canonical_UINT32();
|
||||
auto const redemptionDateValue = canonical_UINT32();
|
||||
|
||||
auto sle = std::make_shared<SLE>(Vault::entryType, index);
|
||||
|
||||
@@ -224,6 +257,9 @@ TEST(VaultTests, BuilderFromSleRoundTrip)
|
||||
sle->at(sfWithdrawalPolicy) = withdrawalPolicyValue;
|
||||
sle->at(sfScale) = scaleValue;
|
||||
sle->at(sfLEVersion) = lEVersionValue;
|
||||
sle->at(sfVaultKind) = vaultKindValue;
|
||||
sle->at(sfSubscriptionDate) = subscriptionDateValue;
|
||||
sle->at(sfRedemptionDate) = redemptionDateValue;
|
||||
|
||||
VaultBuilder builderFromSle{sle};
|
||||
EXPECT_TRUE(builderFromSle.validate());
|
||||
@@ -415,6 +451,45 @@ TEST(VaultTests, BuilderFromSleRoundTrip)
|
||||
expectEqualField(expected, *fromBuilderOpt, "sfLEVersion");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = vaultKindValue;
|
||||
|
||||
auto const fromSleOpt = entryFromSle.getVaultKind();
|
||||
auto const fromBuilderOpt = entryFromBuilder.getVaultKind();
|
||||
|
||||
ASSERT_TRUE(fromSleOpt.has_value());
|
||||
ASSERT_TRUE(fromBuilderOpt.has_value());
|
||||
|
||||
expectEqualField(expected, *fromSleOpt, "sfVaultKind");
|
||||
expectEqualField(expected, *fromBuilderOpt, "sfVaultKind");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = subscriptionDateValue;
|
||||
|
||||
auto const fromSleOpt = entryFromSle.getSubscriptionDate();
|
||||
auto const fromBuilderOpt = entryFromBuilder.getSubscriptionDate();
|
||||
|
||||
ASSERT_TRUE(fromSleOpt.has_value());
|
||||
ASSERT_TRUE(fromBuilderOpt.has_value());
|
||||
|
||||
expectEqualField(expected, *fromSleOpt, "sfSubscriptionDate");
|
||||
expectEqualField(expected, *fromBuilderOpt, "sfSubscriptionDate");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = redemptionDateValue;
|
||||
|
||||
auto const fromSleOpt = entryFromSle.getRedemptionDate();
|
||||
auto const fromBuilderOpt = entryFromBuilder.getRedemptionDate();
|
||||
|
||||
ASSERT_TRUE(fromSleOpt.has_value());
|
||||
ASSERT_TRUE(fromBuilderOpt.has_value());
|
||||
|
||||
expectEqualField(expected, *fromSleOpt, "sfRedemptionDate");
|
||||
expectEqualField(expected, *fromBuilderOpt, "sfRedemptionDate");
|
||||
}
|
||||
|
||||
EXPECT_EQ(entryFromSle.getKey(), index);
|
||||
EXPECT_EQ(entryFromBuilder.getKey(), index);
|
||||
}
|
||||
@@ -499,5 +574,11 @@ TEST(VaultTests, OptionalFieldsReturnNullopt)
|
||||
EXPECT_FALSE(entry.getScale().has_value());
|
||||
EXPECT_FALSE(entry.hasLEVersion());
|
||||
EXPECT_FALSE(entry.getLEVersion().has_value());
|
||||
EXPECT_FALSE(entry.hasVaultKind());
|
||||
EXPECT_FALSE(entry.getVaultKind().has_value());
|
||||
EXPECT_FALSE(entry.hasSubscriptionDate());
|
||||
EXPECT_FALSE(entry.getSubscriptionDate().has_value());
|
||||
EXPECT_FALSE(entry.hasRedemptionDate());
|
||||
EXPECT_FALSE(entry.getRedemptionDate().has_value());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,9 @@ TEST(TransactionsVaultCreateTests, BuilderSettersRoundTrip)
|
||||
auto const withdrawalPolicyValue = canonical_UINT8();
|
||||
auto const dataValue = canonical_VL();
|
||||
auto const scaleValue = canonical_UINT8();
|
||||
auto const vaultKindValue = canonical_UINT8();
|
||||
auto const subscriptionDateValue = canonical_UINT32();
|
||||
auto const redemptionDateValue = canonical_UINT32();
|
||||
|
||||
VaultCreateBuilder builder{
|
||||
accountValue,
|
||||
@@ -51,6 +54,9 @@ TEST(TransactionsVaultCreateTests, BuilderSettersRoundTrip)
|
||||
builder.setWithdrawalPolicy(withdrawalPolicyValue);
|
||||
builder.setData(dataValue);
|
||||
builder.setScale(scaleValue);
|
||||
builder.setVaultKind(vaultKindValue);
|
||||
builder.setSubscriptionDate(subscriptionDateValue);
|
||||
builder.setRedemptionDate(redemptionDateValue);
|
||||
|
||||
auto tx = builder.build(publicKey, secretKey);
|
||||
|
||||
@@ -122,6 +128,30 @@ TEST(TransactionsVaultCreateTests, BuilderSettersRoundTrip)
|
||||
EXPECT_TRUE(tx.hasScale());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = vaultKindValue;
|
||||
auto const actualOpt = tx.getVaultKind();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfVaultKind should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfVaultKind");
|
||||
EXPECT_TRUE(tx.hasVaultKind());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = subscriptionDateValue;
|
||||
auto const actualOpt = tx.getSubscriptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfSubscriptionDate should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfSubscriptionDate");
|
||||
EXPECT_TRUE(tx.hasSubscriptionDate());
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = redemptionDateValue;
|
||||
auto const actualOpt = tx.getRedemptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfRedemptionDate should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfRedemptionDate");
|
||||
EXPECT_TRUE(tx.hasRedemptionDate());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
|
||||
@@ -145,6 +175,9 @@ TEST(TransactionsVaultCreateTests, BuilderFromStTxRoundTrip)
|
||||
auto const withdrawalPolicyValue = canonical_UINT8();
|
||||
auto const dataValue = canonical_VL();
|
||||
auto const scaleValue = canonical_UINT8();
|
||||
auto const vaultKindValue = canonical_UINT8();
|
||||
auto const subscriptionDateValue = canonical_UINT32();
|
||||
auto const redemptionDateValue = canonical_UINT32();
|
||||
|
||||
// Build an initial transaction
|
||||
VaultCreateBuilder initialBuilder{
|
||||
@@ -160,6 +193,9 @@ TEST(TransactionsVaultCreateTests, BuilderFromStTxRoundTrip)
|
||||
initialBuilder.setWithdrawalPolicy(withdrawalPolicyValue);
|
||||
initialBuilder.setData(dataValue);
|
||||
initialBuilder.setScale(scaleValue);
|
||||
initialBuilder.setVaultKind(vaultKindValue);
|
||||
initialBuilder.setSubscriptionDate(subscriptionDateValue);
|
||||
initialBuilder.setRedemptionDate(redemptionDateValue);
|
||||
|
||||
auto initialTx = initialBuilder.build(publicKey, secretKey);
|
||||
|
||||
@@ -226,6 +262,27 @@ TEST(TransactionsVaultCreateTests, BuilderFromStTxRoundTrip)
|
||||
expectEqualField(expected, *actualOpt, "sfScale");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = vaultKindValue;
|
||||
auto const actualOpt = rebuiltTx.getVaultKind();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfVaultKind should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfVaultKind");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = subscriptionDateValue;
|
||||
auto const actualOpt = rebuiltTx.getSubscriptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfSubscriptionDate should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfSubscriptionDate");
|
||||
}
|
||||
|
||||
{
|
||||
auto const& expected = redemptionDateValue;
|
||||
auto const actualOpt = rebuiltTx.getRedemptionDate();
|
||||
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfRedemptionDate should be present";
|
||||
expectEqualField(expected, *actualOpt, "sfRedemptionDate");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 3) Verify wrapper throws when constructed from wrong transaction type.
|
||||
@@ -295,6 +352,12 @@ TEST(TransactionsVaultCreateTests, OptionalFieldsReturnNullopt)
|
||||
EXPECT_FALSE(tx.getData().has_value());
|
||||
EXPECT_FALSE(tx.hasScale());
|
||||
EXPECT_FALSE(tx.getScale().has_value());
|
||||
EXPECT_FALSE(tx.hasVaultKind());
|
||||
EXPECT_FALSE(tx.getVaultKind().has_value());
|
||||
EXPECT_FALSE(tx.hasSubscriptionDate());
|
||||
EXPECT_FALSE(tx.getSubscriptionDate().has_value());
|
||||
EXPECT_FALSE(tx.hasRedemptionDate());
|
||||
EXPECT_FALSE(tx.getRedemptionDate().has_value());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user