@@ -11,6 +11,7 @@ import (
1111 "github.com/stretchr/testify/require"
1212
1313 "github.com/smartcontractkit/cld-changesets/internal/semvers"
14+ "github.com/smartcontractkit/cld-changesets/internal/testutil/datastoretest"
1415)
1516
1617func TestLoadDeployedAddresses (t * testing.T ) {
@@ -21,13 +22,14 @@ func TestLoadDeployedAddresses(t *testing.T) {
2122 v090 := semver .MustParse ("0.9.0" )
2223
2324 bypasserV100 := common .HexToAddress ("0x00000000000000000000000000000000000000b1" )
24- bypasserLegacy := common .HexToAddress ("0x00000000000000000000000000000000000000b2" )
2525 bypasserOld := common .HexToAddress ("0x00000000000000000000000000000000000000b3" )
2626 proposerV100 := common .HexToAddress ("0x00000000000000000000000000000000000000c1" )
2727
2828 t .Run ("nil datastore" , func (t * testing.T ) {
2929 t .Parallel ()
30- require .Equal (t , deployedAddresses {}, loadDeployedAddresses (nil , selector , "" ))
30+ addrs , err := loadDeployedAddresses (nil , selector , "" )
31+ require .NoError (t , err )
32+ require .Equal (t , deployedAddresses {}, addrs )
3133 })
3234
3335 t .Run ("matches v1.0.0" , func (t * testing.T ) {
@@ -41,7 +43,8 @@ func TestLoadDeployedAddresses(t *testing.T) {
4143 Version : & v100 ,
4244 }))
4345
44- addrs := loadDeployedAddresses (ds .Seal (), selector , "" )
46+ addrs , err := loadDeployedAddresses (ds .Seal (), selector , "" )
47+ require .NoError (t , err )
4548 require .Equal (t , bypasserV100 , addrs .Bypasser )
4649 })
4750
@@ -56,63 +59,50 @@ func TestLoadDeployedAddresses(t *testing.T) {
5659 Version : v090 ,
5760 }))
5861
59- addrs := loadDeployedAddresses (ds .Seal (), selector , "" )
62+ addrs , err := loadDeployedAddresses (ds .Seal (), selector , "" )
63+ require .NoError (t , err )
6064 require .Equal (t , common.Address {}, addrs .Bypasser )
6165 })
6266
63- t .Run ("falls back to legacy nil version " , func (t * testing.T ) {
67+ t .Run ("respects qualifier " , func (t * testing.T ) {
6468 t .Parallel ()
6569
66- store := fakeAddressRefStore {refs : []cldfdatastore.AddressRef {{
70+ ds := cldfdatastore .NewMemoryDataStore ()
71+ require .NoError (t , ds .Addresses ().Add (cldfdatastore.AddressRef {
6772 ChainSelector : selector ,
68- Address : bypasserLegacy .Hex (),
69- Type : cldfdatastore .ContractType (mcmscontracts .BypasserManyChainMultisig ),
70- }}}
73+ Address : proposerV100 .Hex (),
74+ Type : cldfdatastore .ContractType (mcmscontracts .ProposerManyChainMultisig ),
75+ Version : & v100 ,
76+ Qualifier : "prod" ,
77+ }))
78+
79+ addrs , err := loadDeployedAddresses (ds .Seal (), selector , "" )
80+ require .NoError (t , err )
81+ require .Equal (t , common.Address {}, addrs .Proposer )
7182
72- got , ok := findDeployedAddress ( store , selector , mcmscontracts . BypasserManyChainMultisig , " " )
73- require .True (t , ok )
74- require .Equal (t , bypasserLegacy , got )
83+ addrs , err = loadDeployedAddresses ( ds . Seal () , selector , "prod " )
84+ require .NoError (t , err )
85+ require .Equal (t , proposerV100 , addrs . Proposer )
7586 })
7687
77- t .Run ("prefers v1.0.0 over legacy nil version " , func (t * testing.T ) {
88+ t .Run ("duplicate refs " , func (t * testing.T ) {
7889 t .Parallel ()
7990
80- store := fakeAddressRefStore { refs : []cldfdatastore.AddressRef {
91+ _ , err := loadDeployedAddresses ( datastoretest . NewDataStore ( []cldfdatastore.AddressRef {
8192 {
8293 ChainSelector : selector ,
83- Address : bypasserLegacy .Hex (),
94+ Address : bypasserV100 .Hex (),
8495 Type : cldfdatastore .ContractType (mcmscontracts .BypasserManyChainMultisig ),
96+ Version : & v100 ,
8597 },
8698 {
8799 ChainSelector : selector ,
88- Address : bypasserV100 .Hex (),
100+ Address : bypasserOld .Hex (),
89101 Type : cldfdatastore .ContractType (mcmscontracts .BypasserManyChainMultisig ),
90102 Version : & v100 ,
91103 },
92- }}
93-
94- got , ok := findDeployedAddress (store , selector , mcmscontracts .BypasserManyChainMultisig , "" )
95- require .True (t , ok )
96- require .Equal (t , bypasserV100 , got )
97- })
98-
99- t .Run ("respects qualifier" , func (t * testing.T ) {
100- t .Parallel ()
101-
102- ds := cldfdatastore .NewMemoryDataStore ()
103- require .NoError (t , ds .Addresses ().Add (cldfdatastore.AddressRef {
104- ChainSelector : selector ,
105- Address : proposerV100 .Hex (),
106- Type : cldfdatastore .ContractType (mcmscontracts .ProposerManyChainMultisig ),
107- Version : & v100 ,
108- Qualifier : "prod" ,
109- }))
110-
111- addrs := loadDeployedAddresses (ds .Seal (), selector , "" )
112- require .Equal (t , common.Address {}, addrs .Proposer )
113-
114- addrs = loadDeployedAddresses (ds .Seal (), selector , "prod" )
115- require .Equal (t , proposerV100 , addrs .Proposer )
104+ }), selector , "" )
105+ require .ErrorIs (t , err , cldfdatastore .ErrAddressRefQueryAmbiguous )
116106 })
117107}
118108
@@ -131,34 +121,8 @@ func TestFindDeployedAddress(t *testing.T) {
131121 Version : & v100 ,
132122 }))
133123
134- got , ok := findDeployedAddress (ds .Addresses (), selector , mcmscontracts .RBACTimelock , "" )
124+ got , ok , err := findDeployedAddress (ds .Addresses (), selector , mcmscontracts .RBACTimelock , "" )
125+ require .NoError (t , err )
135126 require .True (t , ok )
136127 require .Equal (t , addr , got )
137128}
138-
139- type fakeAddressRefStore struct {
140- refs []cldfdatastore.AddressRef
141- }
142-
143- func (f fakeAddressRefStore ) Fetch () ([]cldfdatastore.AddressRef , error ) {
144- return f .refs , nil
145- }
146-
147- func (f fakeAddressRefStore ) Get (key cldfdatastore.AddressRefKey ) (cldfdatastore.AddressRef , error ) {
148- for _ , ref := range f .refs {
149- if ref .Key ().Equals (key ) {
150- return ref , nil
151- }
152- }
153-
154- return cldfdatastore.AddressRef {}, cldfdatastore .ErrAddressRefNotFound
155- }
156-
157- func (f fakeAddressRefStore ) Filter (filters ... cldfdatastore.FilterFunc [cldfdatastore.AddressRefKey , cldfdatastore.AddressRef ]) []cldfdatastore.AddressRef {
158- refs := f .refs
159- for _ , filter := range filters {
160- refs = filter (refs )
161- }
162-
163- return refs
164- }
0 commit comments