diff --git a/mocks/pkg/reader/rmn_home.go b/mocks/pkg/reader/rmn_home.go index 2abbf61ea..e5177b8fa 100644 --- a/mocks/pkg/reader/rmn_home.go +++ b/mocks/pkg/reader/rmn_home.go @@ -70,6 +70,65 @@ func (_c *MockRMNHome_Close_Call) RunAndReturn(run func() error) *MockRMNHome_Cl return _c } +// GetAllConfigDigests provides a mock function with given fields: +func (_m *MockRMNHome) GetAllConfigDigests() (ccipocr3.Bytes32, ccipocr3.Bytes32) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetAllConfigDigests") + } + + var r0 ccipocr3.Bytes32 + var r1 ccipocr3.Bytes32 + if rf, ok := ret.Get(0).(func() (ccipocr3.Bytes32, ccipocr3.Bytes32)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() ccipocr3.Bytes32); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(ccipocr3.Bytes32) + } + } + + if rf, ok := ret.Get(1).(func() ccipocr3.Bytes32); ok { + r1 = rf() + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(ccipocr3.Bytes32) + } + } + + return r0, r1 +} + +// MockRMNHome_GetAllConfigDigests_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAllConfigDigests' +type MockRMNHome_GetAllConfigDigests_Call struct { + *mock.Call +} + +// GetAllConfigDigests is a helper method to define mock.On call +func (_e *MockRMNHome_Expecter) GetAllConfigDigests() *MockRMNHome_GetAllConfigDigests_Call { + return &MockRMNHome_GetAllConfigDigests_Call{Call: _e.mock.On("GetAllConfigDigests")} +} + +func (_c *MockRMNHome_GetAllConfigDigests_Call) Run(run func()) *MockRMNHome_GetAllConfigDigests_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockRMNHome_GetAllConfigDigests_Call) Return(activeConfigDigest ccipocr3.Bytes32, candidateConfigDigest ccipocr3.Bytes32) *MockRMNHome_GetAllConfigDigests_Call { + _c.Call.Return(activeConfigDigest, candidateConfigDigest) + return _c +} + +func (_c *MockRMNHome_GetAllConfigDigests_Call) RunAndReturn(run func() (ccipocr3.Bytes32, ccipocr3.Bytes32)) *MockRMNHome_GetAllConfigDigests_Call { + _c.Call.Return(run) + return _c +} + // GetMinObservers provides a mock function with given fields: configDigest func (_m *MockRMNHome) GetMinObservers(configDigest ccipocr3.Bytes32) (map[ccipocr3.ChainSelector]int, error) { ret := _m.Called(configDigest) diff --git a/pkg/reader/rmn_home.go b/pkg/reader/rmn_home.go index 535c27278..65456452b 100644 --- a/pkg/reader/rmn_home.go +++ b/pkg/reader/rmn_home.go @@ -41,12 +41,14 @@ type RMNHome interface { GetMinObservers(configDigest cciptypes.Bytes32) (map[cciptypes.ChainSelector]int, error) // GetOffChainConfig gets the offchain config for the given configDigest GetOffChainConfig(configDigest cciptypes.Bytes32) (cciptypes.Bytes, error) + // GetAllConfigDigests gets the active and candidate RMNHomeConfigs + GetAllConfigDigests() (activeConfigDigest cciptypes.Bytes32, candidateConfigDigest cciptypes.Bytes32) services.Service } type rmnHomeState struct { - primaryConfigDigest cciptypes.Bytes32 - secondaryConfigDigest cciptypes.Bytes32 + activeConfigDigest cciptypes.Bytes32 + candidateConfigDigest cciptypes.Bytes32 rmnHomeConfig map[cciptypes.Bytes32]rmntypes.HomeConfig } @@ -161,15 +163,15 @@ func (r *rmnHomePoller) fetchAndSetRmnHomeConfigs(ctx context.Context) error { } func (r *rmnHomePoller) setRMNHomeState( - primaryConfigDigest cciptypes.Bytes32, - secondaryConfigDigest cciptypes.Bytes32, + activeConfigDigest cciptypes.Bytes32, + candidateConfigDigest cciptypes.Bytes32, rmnHomeConfig map[cciptypes.Bytes32]rmntypes.HomeConfig) { r.mutex.Lock() defer r.mutex.Unlock() s := &r.rmnHomeState - s.primaryConfigDigest = primaryConfigDigest - s.secondaryConfigDigest = secondaryConfigDigest + s.activeConfigDigest = activeConfigDigest + s.candidateConfigDigest = candidateConfigDigest s.rmnHomeConfig = rmnHomeConfig } @@ -211,6 +213,14 @@ func (r *rmnHomePoller) GetOffChainConfig(configDigest cciptypes.Bytes32) (ccipt return cfg.OffchainConfig, nil } +func (r *rmnHomePoller) GetAllConfigDigests() ( + activeConfigDigest cciptypes.Bytes32, + candidateConfigDigest cciptypes.Bytes32) { + r.mutex.RLock() + defer r.mutex.RUnlock() + return r.rmnHomeState.activeConfigDigest, r.rmnHomeState.candidateConfigDigest +} + func (r *rmnHomePoller) Close() error { return r.sync.StopOnce(r.Name(), func() error { defer r.wg.Wait() diff --git a/pkg/reader/rmn_home_test.go b/pkg/reader/rmn_home_test.go index 86af769d1..8a1adb4f3 100644 --- a/pkg/reader/rmn_home_test.go +++ b/pkg/reader/rmn_home_test.go @@ -262,6 +262,11 @@ func Test_RMNHomePollingWorking(t *testing.T) { require.True(t, exists) require.Equal(t, i+1, minObs) } + + activeConfigDigest, candidateConfigDigest := configPoller.GetAllConfigDigests() + require.Equal(t, primaryConfig.ConfigDigest, activeConfigDigest) + require.Equal(t, secondaryConfig.ConfigDigest, candidateConfigDigest) + } }) }