@@ -42,94 +42,89 @@ import (
4242
4343//nolint:paralleltest // global mcm.SetProgramID state; serialized via soltestutils.PreloadMCMS lock
4444func testRunSolanaSetConfig (t * testing.T ) {
45- tests := []struct {
46- name string
47- noSend bool
48- }{
49- {name : "direct send" , noSend : false },
50- {name : "MCMS proposal" , noSend : true },
51- }
45+ selector := chainselectors .TEST_22222222222222222222222222222222222222222222 .Selector
46+ rt := newSolanaSetConfigRuntime (t , selector )
47+ chain := rt .Environment ().BlockChains .SolanaChains ()[selector ]
48+ refs := solanaSetConfigRefs (t , rt .Environment (), selector )
49+ fundSolanaSignerPDAs (t , chain , refs )
50+
51+ proposerCfg := cldftesthelpers .SingleGroupMCMS (t )
52+ proposerCfg .Signers = append (proposerCfg .Signers , common .HexToAddress ("0x0000000000000000000000000000000000000101" ))
53+ proposerCfg .Quorum = 2
54+
55+ cancellerCfg := cldftesthelpers .SingleGroupMCMS (t )
56+ cancellerCfg .Signers = append (cancellerCfg .Signers , common .HexToAddress ("0x0000000000000000000000000000000000000202" ))
57+ cancellerCfg .Quorum = 2
58+
59+ t .Run ("direct send" , func (t * testing.T ) { //nolint:paralleltest // shared runtime state
60+ targets := []setconfig.ContractSetConfig {
61+ {
62+ Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .ProposerManyChainMultisig ), & semvers .V1_0_0 , "" ),
63+ Config : proposerCfg ,
64+ },
65+ {
66+ Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .CancellerManyChainMultisig ), & semvers .V1_0_0 , "" ),
67+ Config : cancellerCfg ,
68+ },
69+ }
5270
53- for _ , tt := range tests { //nolint:paralleltest // global mcm.SetProgramID state
54- t .Run (tt .name , func (t * testing.T ) {
55- selector := chainselectors .TEST_22222222222222222222222222222222222222222222 .Selector
56- rt := newSolanaSetConfigRuntime (t , selector )
57- chain := rt .Environment ().BlockChains .SolanaChains ()[selector ]
58- refs := solanaSetConfigRefs (t , rt .Environment (), selector )
59- fundSolanaSignerPDAs (t , chain , refs )
71+ out , err := runSolanaSetConfig (
72+ rt .Environment ().OperationsBundle ,
73+ setconfig.Deps {
74+ BlockChains : rt .Environment ().BlockChains ,
75+ DataStore : rt .Environment ().DataStore ,
76+ },
77+ setconfig.ChainInput {
78+ ChainSelector : selector ,
79+ Targets : targets ,
80+ },
81+ )
82+ require .NoError (t , err )
83+ require .Empty (t , out .BatchOps )
6084
61- if tt . noSend {
62- transferSolanaMCMSToTimelock (t , rt , selector )
63- fundSolanaSignerPDAs (t , chain , refs )
64- }
85+ inspector := mcmssolana . NewInspector ( chain . Client )
86+ assertSolanaConfigEquals (t , inspector , refs . Proposer , proposerCfg )
87+ assertSolanaConfigEquals (t , inspector , refs . Canceller , cancellerCfg )
88+ })
6589
66- proposerCfg := cldftesthelpers . SingleGroupMCMS ( t )
67- proposerCfg . Signers = append ( proposerCfg . Signers , common . HexToAddress ( "0x0000000000000000000000000000000000000101" ) )
68- proposerCfg . Quorum = 2
90+ t . Run ( "MCMS proposal" , func ( t * testing. T ) { //nolint:paralleltest // shared runtime state
91+ transferSolanaMCMSToTimelock ( t , rt , selector )
92+ fundSolanaSignerPDAs ( t , chain , refs )
6993
70- cancellerCfg := cldftesthelpers .SingleGroupMCMS (t )
71- cancellerCfg .Signers = append (cancellerCfg .Signers , common .HexToAddress ("0x0000000000000000000000000000000000000202" ))
72- cancellerCfg .Quorum = 2
94+ mcmsInput := & cldf.MCMSTimelockProposalInput {
95+ TimelockAction : mcmstypes .TimelockActionSchedule ,
96+ ValidUntil : uint32 (time .Now ().Add (2 * time .Hour ).UTC ().Unix ()), //nolint:gosec // test timestamp
97+ TimelockDelay : mcmstypes .NewDuration (time .Second ),
98+ }
99+ targets := []setconfig.ContractSetConfig {
100+ {
101+ Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .CancellerManyChainMultisig ), & semvers .V1_0_0 , "" ),
102+ Config : cancellerCfg ,
103+ },
104+ }
73105
74- targets := []setconfig.ContractSetConfig {
75- {
76- Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .ProposerManyChainMultisig ), & semvers .V1_0_0 , "" ),
77- Config : proposerCfg ,
78- },
79- {
80- Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .CancellerManyChainMultisig ), & semvers .V1_0_0 , "" ),
81- Config : cancellerCfg ,
82- },
83- }
84- var mcmsInput * cldf.MCMSTimelockProposalInput
85- if tt .noSend {
86- targets = []setconfig.ContractSetConfig {
87- {
88- Ref : refkey .New (selector , datastore .ContractType (mcmscontracts .CancellerManyChainMultisig ), & semvers .V1_0_0 , "" ),
89- Config : cancellerCfg ,
90- },
91- }
92- mcmsInput = & cldf.MCMSTimelockProposalInput {
93- TimelockAction : mcmstypes .TimelockActionSchedule ,
94- ValidUntil : uint32 (time .Now ().Add (2 * time .Hour ).UTC ().Unix ()), //nolint:gosec // test timestamp
95- TimelockDelay : mcmstypes .NewDuration (time .Second ),
96- }
97- }
98-
99- out , err := runSolanaSetConfig (
100- rt .Environment ().OperationsBundle ,
101- setconfig.Deps {
102- BlockChains : rt .Environment ().BlockChains ,
103- DataStore : rt .Environment ().DataStore ,
104- },
105- setconfig.ChainInput {
106- ChainSelector : selector ,
107- Targets : targets ,
108- MCMS : mcmsInput ,
109- },
110- )
111- require .NoError (t , err )
112-
113- if tt .noSend {
114- require .Len (t , out .BatchOps , 1 )
115- require .NotEmpty (t , out .BatchOps [0 ].Transactions )
116- require .NoError (t , rt .Exec (
117- newTimelockProposalTask (out .BatchOps , "solana set config sequence test" ),
118- runtime .SignAndExecuteProposalsTask ([]* ecdsa.PrivateKey {cldftesthelpers .TestXXXMCMSSigner }),
119- ))
120- } else {
121- require .Empty (t , out .BatchOps )
122- }
123-
124- inspector := mcmssolana .NewInspector (chain .Client )
125- if tt .noSend {
126- assertSolanaConfigEquals (t , inspector , refs .Canceller , cancellerCfg )
127- } else {
128- assertSolanaConfigEquals (t , inspector , refs .Proposer , proposerCfg )
129- assertSolanaConfigEquals (t , inspector , refs .Canceller , cancellerCfg )
130- }
131- })
132- }
106+ out , err := runSolanaSetConfig (
107+ rt .Environment ().OperationsBundle ,
108+ setconfig.Deps {
109+ BlockChains : rt .Environment ().BlockChains ,
110+ DataStore : rt .Environment ().DataStore ,
111+ },
112+ setconfig.ChainInput {
113+ ChainSelector : selector ,
114+ Targets : targets ,
115+ MCMS : mcmsInput ,
116+ },
117+ )
118+ require .NoError (t , err )
119+ require .Len (t , out .BatchOps , 1 )
120+ require .NotEmpty (t , out .BatchOps [0 ].Transactions )
121+ require .NoError (t , rt .Exec (
122+ newTimelockProposalTask (out .BatchOps , "solana set config sequence test" ),
123+ runtime .SignAndExecuteProposalsTask ([]* ecdsa.PrivateKey {cldftesthelpers .TestXXXMCMSSigner }),
124+ ))
125+
126+ assertSolanaConfigEquals (t , mcmssolana .NewInspector (chain .Client ), refs .Canceller , cancellerCfg )
127+ })
133128}
134129
135130func newSolanaSetConfigRuntime (t * testing.T , selector uint64 ) * runtime.Runtime {
0 commit comments