Skip to content

Commit 0750272

Browse files
Delegateless automation (#1012)
1 parent 723bfaf commit 0750272

File tree

79 files changed

+1471
-506
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1471
-506
lines changed

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/Ans4SvsIntegrationTest.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.TerminatedSub
77
import org.lfdecentralizedtrust.splice.util.{DisclosedContracts, TriggerTestUtil, WalletTestUtil}
88
import org.lfdecentralizedtrust.splice.validator.automation.ReconcileSequencerConnectionsTrigger
99
import org.lfdecentralizedtrust.splice.wallet.admin.api.client.commands.HttpWalletAppClient
10+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
11+
pauseAllDsoDelegateTriggers,
12+
resumeAllDsoDelegateTriggers,
13+
}
1014
import org.scalatest.Assertion
1115

1216
class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with TriggerTestUtil {
@@ -18,9 +22,6 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
1822
// TODO(#11927): incorporate this test into AnsIntegrationTest
1923
"ans" should {
2024
"terminated subscriptions are archived" in { implicit env =>
21-
val leaderTerminatedSubscriptionTrigger =
22-
sv1Backend.dsoDelegateBasedAutomation.trigger[TerminatedSubscriptionTrigger]
23-
2425
setTriggersWithin[Assertion](
2526
// Figure out how to make the `onboardUser` part of `onboardWalletUser` not time out
2627
// in the even of an untimely domain disconnect
@@ -72,7 +73,7 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
7273
)
7374

7475
clue("Pausing TerminatedSubscriptionTrigger") {
75-
leaderTerminatedSubscriptionTrigger.pause().futureValue
76+
pauseAllDsoDelegateTriggers[TerminatedSubscriptionTrigger]
7677
}
7778

7879
actAndCheck(
@@ -92,7 +93,7 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
9293
) should not be empty
9394
}
9495
clue("Resuming TerminatedSubscriptionTrigger") {
95-
leaderTerminatedSubscriptionTrigger.resume()
96+
resumeAllDsoDelegateTriggers[TerminatedSubscriptionTrigger]
9697
}
9798

9899
eventually() {

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/AnsIntegrationTest.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ import com.digitalasset.canton.console.CommandFailure
2828
import com.digitalasset.canton.logging.SuppressionRule
2929
import com.digitalasset.canton.topology.PartyId
3030
import org.scalatest.Assertion
31+
import org.scalatest.concurrent.PatienceConfiguration
3132
import org.slf4j.event.Level
3233

3334
import java.time.{Instant, OffsetDateTime, ZoneOffset}
3435
import java.time.temporal.ChronoUnit
36+
import scala.concurrent.duration.FiniteDuration
3537
import scala.jdk.CollectionConverters.*
3638

3739
class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with TriggerTestUtil {
@@ -60,8 +62,8 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
6062
)(config)
6163
)
6264

63-
def dsoDelegateExpiredAnsEntryTrigger(implicit env: SpliceTestConsoleEnvironment) =
64-
sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAnsEntryTrigger]
65+
def dsoDelegateExpiredAnsEntryTriggers(implicit env: SpliceTestConsoleEnvironment) =
66+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAnsEntryTrigger])
6567

6668
// created by the expiry test
6769
override protected lazy val sanityChecksIgnoredRootCreates: Seq[Identifier] = Seq(
@@ -87,7 +89,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
8789
bobRefs,
8890
).parTraverse { ref =>
8991
Future { requestAndPayForEntry(ref, testEntryName) }
90-
}.futureValue,
92+
}.futureValue(timeout = PatienceConfiguration.Timeout(FiniteDuration(40, "seconds"))),
9193
lines => {
9294
forAll(lines) { line =>
9395
line.message should (include(s"entry already exists and owned by") or include(
@@ -360,7 +362,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
360362

361363
setTriggersWithin[Assertion](
362364
triggersToPauseAtStart = Seq(aliceSubscriptionReadyForPaymentTrigger),
363-
triggersToResumeAtStart = Seq(dsoDelegateExpiredAnsEntryTrigger),
365+
triggersToResumeAtStart = dsoDelegateExpiredAnsEntryTriggers,
364366
) {
365367

366368
val ansRules = sv1ScanBackend.getAnsRules()
@@ -411,7 +413,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
411413
setTriggersWithin(
412414
Seq.empty,
413415
triggersToResumeAtStart =
414-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAnsSubscriptionTrigger]),
416+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAnsSubscriptionTrigger]),
415417
) {
416418
withClue("contracts removed with subscription trigger reenabled") {
417419
// Wait for subscription to be expired.

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
4141
aliceWalletClient.tap(100.0)
4242
bobWalletClient.tap(100.0)
4343

44-
actAndCheck(
44+
actAndCheck()(
4545
"Generate some reward coupons by executing a few direct transfers", {
4646
p2pTransfer(aliceWalletClient, bobWalletClient, bobParty, 10.0)
4747
p2pTransfer(aliceWalletClient, bobWalletClient, bobParty, 10.0)
@@ -57,7 +57,6 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
5757
) should have length 8 // 4 app rewards + 4 validator
5858
},
5959
)
60-
6160
actAndCheck(
6261
timeUntilSuccess = 30.seconds
6362
)(
@@ -76,7 +75,9 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
7675
.getClosedRounds()
7776
.filter(r => r.payload.round.number == round.payload.round.number) should be(empty)
7877
val (lastRound, _) = sv1ScanBackend.getRoundOfLatestData()
79-
sv1WalletClient.listSvRewardCoupons().filter(_.payload.round.number <= lastRound) should be(
78+
sv1WalletClient
79+
.listSvRewardCoupons()
80+
.filter(_.payload.round.number <= lastRound) should be(
8081
empty
8182
)
8283
},

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvMergeDuplicatedValidatorLicenseIntegrationTest.scala

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import org.lfdecentralizedtrust.splice.codegen.java.splice.validatorlicense.Vali
66
import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition
77
import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.MergeValidatorLicenseContractsTrigger
88
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil
9+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
10+
pauseAllDsoDelegateTriggers,
11+
resumeAllDsoDelegateTriggers,
12+
}
913
import org.slf4j.event.Level
1014

1115
import scala.jdk.CollectionConverters.*
@@ -42,7 +46,7 @@ class SvMergeDuplicatedValidatorLicenseIntegrationTest
4246
}
4347
setTriggersWithin(
4448
triggersToPauseAtStart =
45-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[MergeValidatorLicenseContractsTrigger]),
49+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[MergeValidatorLicenseContractsTrigger]),
4650
triggersToResumeAtStart = Seq.empty,
4751
) {
4852
actAndCheck(
@@ -61,20 +65,15 @@ class SvMergeDuplicatedValidatorLicenseIntegrationTest
6165
// The trigger can process both validator licenses in parallel so we might get multiple log messages.
6266
loggerFactory.assertLogsSeq(SuppressionRule.LevelAndAbove(Level.WARN))(
6367
{
64-
sv1Backend.dsoDelegateBasedAutomation
65-
.trigger[MergeValidatorLicenseContractsTrigger]
66-
.resume()
68+
resumeAllDsoDelegateTriggers[MergeValidatorLicenseContractsTrigger]
6769
clue("Trigger merges the duplicated validator licenses contracts") {
6870
eventually() {
6971
val newValidatorLicenses = getValidatorLicenses()
7072
newValidatorLicenses should have size 1
7173
}
7274
}
7375
// Pause to make sure we don't get more log messages.
74-
sv1Backend.dsoDelegateBasedAutomation
75-
.trigger[MergeValidatorLicenseContractsTrigger]
76-
.pause()
77-
.futureValue
76+
pauseAllDsoDelegateTriggers[MergeValidatorLicenseContractsTrigger]
7877
},
7978
forAll(_)(
8079
_.warningMessage should include(

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvMergeSvRewardStateIntegrationTest.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition
55
import org.lfdecentralizedtrust.splice.codegen.java.splice.dso.svstate.SvRewardState
66
import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.MergeSvRewardStateContractsTrigger
77
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil
8+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.resumeAllDsoDelegateTriggers
89

910
import scala.jdk.CollectionConverters.*
1011

@@ -38,7 +39,7 @@ class SvMergeSvRewardStateIntegrationTest extends SvIntegrationTestBase with Tri
3839
}
3940
setTriggersWithin(
4041
triggersToPauseAtStart =
41-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger]),
42+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger]),
4243
triggersToResumeAtStart = Seq.empty,
4344
) {
4445
actAndCheck(
@@ -56,7 +57,7 @@ class SvMergeSvRewardStateIntegrationTest extends SvIntegrationTestBase with Tri
5657
)
5758
loggerFactory.assertLogs(
5859
{
59-
sv1Backend.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger].resume()
60+
resumeAllDsoDelegateTriggers[MergeSvRewardStateContractsTrigger]
6061
clue("Trigger merges SvRewardState contracts") {
6162
eventually() {
6263
val newRewardStates = getRewardStates()

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvOffboardingIntegrationTest.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
package org.lfdecentralizedtrust.splice.integration.tests
55

6-
import cats.instances.future.*
7-
import cats.instances.seq.*
8-
import cats.syntax.foldable.*
96
import com.digitalasset.canton.config.RequireTypes.PositiveInt
107
import com.digitalasset.canton.topology.{MediatorId, SequencerId}
118
import com.digitalasset.canton.topology.admin.grpc.TopologyStoreId
@@ -35,6 +32,13 @@ import org.lfdecentralizedtrust.splice.sv.automation.singlesv.offboarding.{
3532
}
3633
import org.lfdecentralizedtrust.splice.util.{ProcessTestUtil, StandaloneCanton}
3734
import org.scalatest.time.{Minute, Span}
35+
import cats.syntax.foldable.*
36+
import cats.instances.future.*
37+
import cats.instances.seq.*
38+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
39+
pauseAllDsoDelegateTriggers,
40+
resumeAllDsoDelegateTriggers,
41+
}
3842

3943
import java.time.Instant
4044
import java.time.temporal.ChronoUnit
@@ -96,10 +100,8 @@ class SvOffboardingIntegrationTest
96100
)
97101
}
98102

99-
sv1Backend.dsoDelegateBasedAutomation
100-
.trigger[ExecuteConfirmedActionTrigger]
101-
.pause()
102-
.futureValue
103+
pauseAllDsoDelegateTriggers[ExecuteConfirmedActionTrigger]
104+
103105
val externalPartyAmuletRules = sv1ScanBackend.getExternalPartyAmuletRules()
104106
// Create TransferCommand to trigger creation of confirmations for creating the transfer command counter.
105107
// We don't want to test external parties in this test so we just create it directly from SV1.
@@ -240,7 +242,7 @@ class SvOffboardingIntegrationTest
240242
) shouldBe None
241243
actAndCheck(timeUntilSuccess = 60.seconds)(
242244
"Resume ExecuteConfirmedActionTrigger",
243-
sv1Backend.dsoDelegateBasedAutomation.trigger[ExecuteConfirmedActionTrigger].resume(),
245+
resumeAllDsoDelegateTriggers[ExecuteConfirmedActionTrigger],
244246
)(
245247
"TransferCommandCounter gets created",
246248
(_: Unit) =>

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvStateManagementIntegrationTest.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
326326
setTriggersWithin(
327327
// Pause so SV3 can be stopped before it gets offboarded
328328
triggersToPauseAtStart =
329-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger])
329+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger])
330330
) {
331331
// We need SV3's vote here for immediate offboarding
332332
Seq(sv2Backend, sv3Backend, sv4Backend).foreach { sv =>
@@ -612,7 +612,9 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
612612
}
613613
}
614614
clue("Pausing vote request expiration automation") {
615-
sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].pause().futureValue
615+
Seq(sv1Backend, sv2Backend).foreach(
616+
_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].pause().futureValue
617+
)
616618
}
617619
actAndCheck(
618620
"SV2 creates a vote request for removing SV1", {
@@ -640,7 +642,9 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
640642
},
641643
)
642644
clue("Resuming vote request expiration automation") {
643-
sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].resume()
645+
Seq(sv1Backend, sv2Backend).foreach(
646+
_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].resume()
647+
)
644648
}
645649
clue("Eventually the vote request expires and gets archived") {
646650
eventually() {

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletExpirationsIntegrationTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ class WalletExpirationsIntegrationTest
177177
setTriggersWithin(
178178
Seq.empty,
179179
triggersToResumeAtStart =
180-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
180+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
181181
) {
182182
clue("Check wallet after advancing to next 2 rounds") {
183183
eventually()(aliceWalletClient.list().amulets shouldBe empty)

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTimeBasedIntegrationTest.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ class WalletTimeBasedIntegrationTest
9898
},
9999
cancelAllSubscriptions(aliceWalletClient),
100100
) {
101-
val ansSubscriptionRenewalPaymentTrigger =
102-
sv1Backend.dsoDelegateBasedAutomation.trigger[AnsSubscriptionRenewalPaymentTrigger]
101+
val ansSubscriptionRenewalPaymentTriggers =
102+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[AnsSubscriptionRenewalPaymentTrigger])
103103
setTriggersWithin(
104-
triggersToPauseAtStart = Seq(ansSubscriptionRenewalPaymentTrigger),
104+
triggersToPauseAtStart = ansSubscriptionRenewalPaymentTriggers,
105105
triggersToResumeAtStart = Seq.empty,
106106
) {
107107
actAndCheck(
@@ -204,7 +204,7 @@ class WalletTimeBasedIntegrationTest
204204
setTriggersWithin(
205205
Seq.empty,
206206
triggersToResumeAtStart =
207-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
207+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
208208
) {
209209
clue("Check wallet after advancing to next 2 rounds") {
210210
eventually()(aliceWalletClient.list().lockedAmulets shouldBe empty)

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogTimeBasedIntegrationTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class WalletTxLogTimeBasedIntegrationTest
252252
setTriggersWithin(
253253
Seq.empty,
254254
triggersToResumeAtStart =
255-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
255+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
256256
) {
257257
actAndCheck(
258258
"Advance 4 ticks to expire the amulet",
@@ -309,7 +309,7 @@ class WalletTxLogTimeBasedIntegrationTest
309309
setTriggersWithin(
310310
Seq.empty,
311311
triggersToResumeAtStart =
312-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
312+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
313313
) {
314314
actAndCheck(
315315
"Advance 4 ticks to expire the locked amulet",

0 commit comments

Comments
 (0)