Skip to content

Commit ee9edce

Browse files
tests: replace legacy changeset usage with new
Replace legacy changeset usage in the new changeset tests , spefiically the deploy mcms legacy changeset, now they use the new deploy changeset for mcms
1 parent e9a713b commit ee9edce

12 files changed

Lines changed: 234 additions & 150 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Package solanatest provides test utilities for Solana MCMS integration tests.
2+
package solanatest
3+
4+
import (
5+
"testing"
6+
7+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
8+
mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms"
9+
"github.com/stretchr/testify/require"
10+
11+
"github.com/smartcontractkit/cld-changesets/internal/semvers"
12+
"github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils"
13+
)
14+
15+
// PreloadDatastoreWithMCMSPrograms seeds a datastore with canonical MCMS program IDs
16+
// for the given chain selector. Use with the mcms/changesets/deploy changeset.
17+
func PreloadDatastoreWithMCMSPrograms(t *testing.T, selector uint64) datastore.DataStore {
18+
t.Helper()
19+
20+
v := semvers.V1_0_0
21+
ds := datastore.NewMemoryDataStore()
22+
for _, entry := range []struct {
23+
addr string
24+
ct datastore.ContractType
25+
}{
26+
{solutils.GetProgramID(solutils.ProgAccessController), datastore.ContractType(mcmscontracts.AccessControllerProgram)},
27+
{solutils.GetProgramID(solutils.ProgMCM), datastore.ContractType(mcmscontracts.ManyChainMultisigProgram)},
28+
{solutils.GetProgramID(solutils.ProgTimelock), datastore.ContractType(mcmscontracts.RBACTimelockProgram)},
29+
} {
30+
require.NoError(t, ds.Addresses().Add(datastore.AddressRef{
31+
ChainSelector: selector,
32+
Address: entry.addr,
33+
Type: entry.ct,
34+
Version: &v,
35+
}))
36+
}
37+
38+
return ds.Seal()
39+
}

mcms/changesets/set-config/changeset_test.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,14 @@ import (
2525

2626
"github.com/smartcontractkit/cld-changesets/datastore/refkey"
2727
"github.com/smartcontractkit/cld-changesets/internal/semvers"
28-
29-
// TODO: remove legacymcms import once remaining MCMS changesets are migrated out of legacy/mcms/changesets.
30-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
3128
evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm"
3229
solstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana"
3330
solchangesets "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/changesets"
3431
soltestutils "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/testutils"
32+
"github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
3533
setconfig "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config"
3634
_ "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config/all"
35+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/deploy"
3736
)
3837

3938
//nolint:paralleltest // global mcm.SetProgramID state and shared Solana CTF container setup
@@ -385,11 +384,15 @@ func TestChangeset_EVM_Qualifier(t *testing.T) {
385384
rmnmcmsConfig.Qualifier = &rmnmcmsQualifier
386385

387386
err := rt.Exec(
388-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
389-
selector: cllccipConfig,
387+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
388+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
389+
selector: cllccipConfig,
390+
},
390391
}),
391-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
392-
selector: rmnmcmsConfig,
392+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
393+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
394+
selector: rmnmcmsConfig,
395+
},
393396
}),
394397
)
395398
require.NoError(t, err)

mcms/changesets/set-config/helpers_test.go

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ import (
2121

2222
"github.com/smartcontractkit/cld-changesets/datastore/refkey"
2323
"github.com/smartcontractkit/cld-changesets/internal/semvers"
24+
"github.com/smartcontractkit/cld-changesets/internal/testutil/solanatest"
2425

25-
// TODO: remove legacymcms import once remaining MCMS changesets are migrated out of legacy/mcms/changesets.
26-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
2726
evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm"
2827
soltestutils "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/testutils"
28+
"github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
2929
setconfig "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config"
3030
_ "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config/all"
31+
transfertotimelock "github.com/smartcontractkit/cld-changesets/mcms/changesets/transfer-to-timelock"
32+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/deploy"
33+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/transfer-to-timelock"
34+
_ "github.com/smartcontractkit/cld-changesets/mcms/solana/deploy"
3135
)
3236

3337
func contractRef(chainSelector uint64, contractType cldf.ContractType, qualifier string) refkey.RefKey {
@@ -88,10 +92,9 @@ func deployEVMMCMSWithTimelock(t *testing.T, rt *runtime.Runtime, selectors ...u
8892
configByChain[selector] = cfg
8993
}
9094

91-
err := rt.Exec(
92-
// TODO: replace with new deploy changeset when available
93-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), configByChain),
94-
)
95+
err := rt.Exec(runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
96+
ConfigByChain: configByChain,
97+
}))
9598
require.NoError(t, err)
9699
}
97100

@@ -110,14 +113,22 @@ func transferEVMMCMSToTimelock(t *testing.T, rt *runtime.Runtime, selector uint6
110113
mcmsState, _ := evmMCMSChainState(t, rt, selector)
111114

112115
err := rt.Exec(
113-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.TransferToMCMSWithTimelockV2), legacymcms.TransferToMCMSWithTimelockConfig{
114-
ContractsByChain: map[uint64][]common.Address{
115-
selector: {
116-
mcmsState.ProposerMcm.Address(),
117-
mcmsState.BypasserMcm.Address(),
118-
mcmsState.CancellerMcm.Address(),
116+
runtime.ChangesetTask(transfertotimelock.Changeset{}, transfertotimelock.Input{
117+
Cfg: transfertotimelock.Config{
118+
ContractsByChain: map[uint64][]common.Address{
119+
selector: {
120+
mcmsState.ProposerMcm.Address(),
121+
mcmsState.BypasserMcm.Address(),
122+
mcmsState.CancellerMcm.Address(),
123+
},
119124
},
120125
},
126+
MCMS: &cldf.MCMSTimelockProposalInput{
127+
TimelockAction: mcmstypes.TimelockActionBypass,
128+
ValidUntil: uint32(time.Now().Add(2 * time.Hour).UTC().Unix()), //nolint:gosec // test timestamp
129+
TimelockDelay: mcmstypes.NewDuration(0),
130+
Description: "transfer MCM to timelock",
131+
},
121132
}),
122133
runtime.SignAndExecuteProposalsTask([]*ecdsa.PrivateKey{cldftesthelpers.TestXXXMCMSSigner}),
123134
)
@@ -136,31 +147,33 @@ func newEVMRuntimeWithDeployAndTransfer(t *testing.T, selector uint64) *runtime.
136147
func evmMCMSChainState(t *testing.T, rt *runtime.Runtime, selector uint64) (*evmstate.MCMSWithTimelockState, cldf_evm.Chain) {
137148
t.Helper()
138149

139-
chain := rt.Environment().BlockChains.EVMChains()[selector]
140-
addrs, err := rt.State().AddressBook.AddressesForChain(selector)
141-
require.NoError(t, err)
150+
env := rt.Environment()
151+
chain := env.BlockChains.EVMChains()[selector]
142152

143-
mcmsState, err := evmstate.MaybeLoadMCMSWithTimelockChainState(chain, addrs)
153+
states, err := evmstate.MaybeLoadMCMSWithTimelockState(env, []uint64{selector})
144154
require.NoError(t, err)
155+
require.NotNil(t, states[selector])
145156

146-
return mcmsState, chain
157+
return states[selector], chain
147158
}
148159

149160
func newSolanaRuntimeWithDeploy(t *testing.T, selector uint64) *runtime.Runtime {
150161
t.Helper()
151162

152-
programsPath, programIDs, ab := soltestutils.PreloadMCMS(t, selector)
163+
programsPath, programIDs := soltestutils.LoadMCMSPrograms(t, t.TempDir())
153164
rt, err := runtime.New(t.Context(), runtime.WithEnvOpts(
154165
environment.WithSolanaContainer(t, []uint64{selector}, programsPath, programIDs),
155-
environment.WithAddressBook(ab),
166+
environment.WithDatastore(solanatest.PreloadDatastoreWithMCMSPrograms(t, selector)),
156167
environment.WithLogger(logger.Test(t)),
157168
))
158169
require.NoError(t, err)
159170
require.Contains(t, rt.Environment().BlockChains.SolanaChains(), selector)
160171

161172
err = rt.Exec(
162-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
163-
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
173+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
174+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
175+
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
176+
},
164177
}),
165178
)
166179
require.NoError(t, err)

mcms/evm/firedrill/changeset_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ import (
1515
mcmstypes "github.com/smartcontractkit/mcms/types"
1616
"github.com/stretchr/testify/require"
1717

18-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
18+
"github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
1919
firedrill "github.com/smartcontractkit/cld-changesets/mcms/changesets/firedrill"
2020

21+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/deploy"
2122
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/firedrill"
2223
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/readers"
2324
)
@@ -66,8 +67,10 @@ func newEVMFireDrillRuntime(t *testing.T, selector uint64) *runtime.Runtime {
6667
require.NoError(t, err)
6768

6869
err = rt.Exec(
69-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
70-
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
70+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
71+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
72+
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
73+
},
7174
}),
7275
)
7376
require.NoError(t, err)

mcms/evm/set-config/operation_test.go

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
package evmsetconfig
1+
package evmsetconfig_test
22

33
import (
44
"crypto/ecdsa"
5-
"math/big"
65
"testing"
76

8-
"github.com/ethereum/go-ethereum/accounts/abi/bind"
97
"github.com/ethereum/go-ethereum/common"
108
"github.com/stretchr/testify/require"
119

@@ -18,45 +16,32 @@ import (
1816
"github.com/smartcontractkit/chainlink-deployments-framework/operations/optest"
1917
mcmsevm "github.com/smartcontractkit/mcms/sdk/evm"
2018
mcmstypes "github.com/smartcontractkit/mcms/types"
19+
20+
evmsetconfig "github.com/smartcontractkit/cld-changesets/mcms/evm/set-config"
2121
)
2222

2323
func TestOpEVMSetConfigMCM_missingDeployerKey(t *testing.T) {
2424
t.Parallel()
2525

2626
_, err := operations.ExecuteOperation(
2727
optest.NewBundle(t),
28-
OpEVMSetConfigMCM,
28+
evmsetconfig.OpEVMSetConfigMCM,
2929
cldf_evm.Chain{Selector: chainselectors.TEST_90000001.Selector},
30-
OpEVMSetConfigInput{
30+
evmsetconfig.OpEVMSetConfigInput{
3131
NoSend: false,
32-
Target: MCMSetConfigTarget{
33-
Address: common.Address{1},
32+
Target: evmsetconfig.MCMSetConfigTarget{
33+
Address: common.Address{1},
34+
ContractType: mcmscontracts.ProposerManyChainMultisig,
3435
},
3536
},
3637
)
3738
require.ErrorContains(t, err, "missing deployer key")
3839
}
3940

40-
func TestCloneTransactOptsWithGas(t *testing.T) {
41-
t.Parallel()
42-
43-
require.Nil(t, cloneTransactOptsWithGas(nil, 100, 200))
44-
45-
opts := &bind.TransactOpts{GasLimit: 1, GasPrice: big.NewInt(1)}
46-
got := cloneTransactOptsWithGas(opts, 0, 0)
47-
require.Equal(t, uint64(1), got.GasLimit)
48-
require.Equal(t, int64(1), got.GasPrice.Int64())
49-
require.NotSame(t, opts, got)
50-
51-
got = cloneTransactOptsWithGas(opts, 500_000, 30_000_000_000)
52-
require.Equal(t, uint64(500_000), got.GasLimit)
53-
require.Equal(t, uint64(30_000_000_000), got.GasPrice.Uint64())
54-
}
55-
5641
func TestOpEVMSetConfigInputGasOverridable(t *testing.T) {
5742
t.Parallel()
5843

59-
in := OpEVMSetConfigInput{GasLimit: 100, GasPrice: 200}
44+
in := evmsetconfig.OpEVMSetConfigInput{GasLimit: 100, GasPrice: 200}
6045
gotLimit, gotPrice := in.GasBoostValues()
6146
require.Equal(t, uint64(100), gotLimit)
6247
require.Equal(t, uint64(200), gotPrice)
@@ -96,10 +81,10 @@ func TestOpEVMSetConfigMCM(t *testing.T) {
9681

9782
report, err := operations.ExecuteOperation(
9883
rt.Environment().OperationsBundle,
99-
OpEVMSetConfigMCM,
84+
evmsetconfig.OpEVMSetConfigMCM,
10085
chain,
101-
OpEVMSetConfigInput{
102-
Target: MCMSetConfigTarget{
86+
evmsetconfig.OpEVMSetConfigInput{
87+
Target: evmsetconfig.MCMSetConfigTarget{
10388
Address: refs.Canceller,
10489
Config: cfg,
10590
ContractType: mcmscontracts.CancellerManyChainMultisig,
@@ -113,7 +98,7 @@ func TestOpEVMSetConfigMCM(t *testing.T) {
11398
require.Equal(t, !tt.noSend, report.Output.Confirmed)
11499

115100
if tt.noSend {
116-
batch, err := evmCallOutputsToBatch(selector, []EVMCallOutput{report.Output})
101+
batch, err := evmsetconfig.EVMCallOutputsToBatch(selector, []evmsetconfig.EVMCallOutput{report.Output})
117102
require.NoError(t, err)
118103
require.Len(t, batch.Transactions, 1)
119104
require.NoError(t, rt.Exec(

mcms/evm/set-config/register_test.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package evmsetconfig
1+
package evmsetconfig_test
22

33
import (
44
"fmt"
@@ -12,15 +12,22 @@ import (
1212
cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment"
1313

1414
setconfig "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config"
15+
evmsetconfig "github.com/smartcontractkit/cld-changesets/mcms/evm/set-config"
16+
17+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/set-config"
1518
)
1619

1720
func TestRegistration(t *testing.T) {
1821
t.Parallel()
1922

20-
reg := Registration()
23+
reg := evmsetconfig.Registration()
2124
require.Equal(t, chainselectors.FamilyEVM, reg.Family)
22-
require.Equal(t, seqSetConfig, reg.Sequence)
25+
require.NotNil(t, reg.Sequence)
2326
require.NotNil(t, reg.Verify)
27+
28+
registered, err := setconfig.Registry.SequenceForFamily(chainselectors.FamilyEVM)
29+
require.NoError(t, err)
30+
require.Equal(t, reg.Sequence, registered)
2431
}
2532

2633
func TestInitRegistersEVM(t *testing.T) {
@@ -36,7 +43,7 @@ func TestInitRegistersEVM(t *testing.T) {
3643
t.Helper()
3744
seq, err := setconfig.Registry.SequenceForFamily(chainselectors.FamilyEVM)
3845
require.NoError(t, err)
39-
require.Equal(t, seqSetConfig, seq)
46+
require.NotNil(t, seq)
4047
},
4148
},
4249
{
@@ -45,7 +52,7 @@ func TestInitRegistersEVM(t *testing.T) {
4552
t.Helper()
4653
got, err := setconfig.Registry.SequenceForChainSelector(chainselectors.TEST_90000001.Selector)
4754
require.NoError(t, err)
48-
require.Equal(t, seqSetConfig, got)
55+
require.NotNil(t, got)
4956
},
5057
},
5158
}
@@ -62,7 +69,7 @@ func TestVerifyEVMChains(t *testing.T) {
6269
t.Parallel()
6370

6471
selector := chainselectors.TEST_90000001.Selector
65-
reg := Registration()
72+
reg := evmsetconfig.Registration()
6673

6774
tests := []struct {
6875
name string

mcms/evm/set-config/sequence.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func runEVMSetConfig(
7676
return out, nil
7777
}
7878

79-
batch, err := evmCallOutputsToBatch(in.ChainSelector, outs)
79+
batch, err := EVMCallOutputsToBatch(in.ChainSelector, outs)
8080
if err != nil {
8181
return sequenceutils.OnChainOutput{}, err
8282
}
@@ -109,7 +109,8 @@ func setConfigTargets(e cldf.Environment, configs []setconfig.ContractSetConfig)
109109
return targets, nil
110110
}
111111

112-
func evmCallOutputsToBatch(chainSelector uint64, outs []EVMCallOutput) (mcmstypes.BatchOperation, error) {
112+
// EVMCallOutputsToBatch converts no-send set-config outputs into a single MCMS batch operation.
113+
func EVMCallOutputsToBatch(chainSelector uint64, outs []EVMCallOutput) (mcmstypes.BatchOperation, error) {
113114
result := mcmstypes.BatchOperation{
114115
ChainSelector: mcmstypes.ChainSelector(chainSelector),
115116
Transactions: []mcmstypes.Transaction{},

0 commit comments

Comments
 (0)