chore: move precommit & preparecheckstate to core api (#15923)

This commit is contained in:
Marko
2023-05-02 07:17:00 +00:00
committed by GitHub
parent 665d1b4345
commit 678ee79264
15 changed files with 122 additions and 318 deletions
+2
View File
@@ -25,4 +25,6 @@ type CoreAppModule interface {
appmodule.HasGenesis
appmodule.HasBeginBlocker
appmodule.HasEndBlocker
appmodule.HasPrecommit
appmodule.HasPrepareCheckState
}
+14 -22
View File
@@ -206,20 +206,6 @@ type EndBlockAppModule interface {
AppModule
EndBlock(sdk.Context, abci.RequestEndBlock) []abci.ValidatorUpdate
}
// PrepareCheckStateAppModule is an extension interface that contains information about the AppModule
// and PrepareCheckState.
type PrepareCheckStateAppModule interface {
AppModule
PrepareCheckState(sdk.Context)
}
// PreommitAppModule is an extension interface that contains information about the AppModule and Precommit.
type PrecommitAppModule interface {
AppModule
Precommit(sdk.Context)
}
type HasABCIEndblock interface {
AppModule
EndBlock(context.Context) ([]abci.ValidatorUpdate, error)
@@ -375,7 +361,7 @@ func (m *Manager) SetOrderPrepareCheckStaters(moduleNames ...string) {
m.assertNoForgottenModules("SetOrderPrepareCheckStaters", moduleNames,
func(moduleName string) bool {
module := m.Modules[moduleName]
_, hasPrepareCheckState := module.(PrepareCheckStateAppModule)
_, hasPrepareCheckState := module.(appmodule.HasPrepareCheckState)
return !hasPrepareCheckState
})
m.OrderPrepareCheckStaters = moduleNames
@@ -386,7 +372,7 @@ func (m *Manager) SetOrderPrecommiters(moduleNames ...string) {
m.assertNoForgottenModules("SetOrderPrecommiters", moduleNames,
func(moduleName string) bool {
module := m.Modules[moduleName]
_, hasPrecommit := module.(PrecommitAppModule)
_, hasPrecommit := module.(appmodule.HasPrecommit)
return !hasPrecommit
})
m.OrderPrecommiters = moduleNames
@@ -764,25 +750,31 @@ func (m *Manager) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) (abci.Resp
}
// Precommit performs precommit functionality for all modules.
func (m *Manager) Precommit(ctx sdk.Context) {
func (m *Manager) Precommit(ctx sdk.Context) error {
for _, moduleName := range m.OrderPrecommiters {
module, ok := m.Modules[moduleName].(PrecommitAppModule)
module, ok := m.Modules[moduleName].(appmodule.HasPrecommit)
if !ok {
continue
}
module.Precommit(ctx)
if err := module.Precommit(ctx); err != nil {
return err
}
}
return nil
}
// PrepareCheckState performs functionality for preparing the check state for all modules.
func (m *Manager) PrepareCheckState(ctx sdk.Context) {
func (m *Manager) PrepareCheckState(ctx sdk.Context) error {
for _, moduleName := range m.OrderPrepareCheckStaters {
module, ok := m.Modules[moduleName].(PrepareCheckStateAppModule)
module, ok := m.Modules[moduleName].(appmodule.HasPrepareCheckState)
if !ok {
continue
}
module.PrepareCheckState(ctx)
if err := module.PrepareCheckState(ctx); err != nil {
return err
}
}
return nil
}
// GetVersionMap gets consensus version from all modules
+51 -55
View File
@@ -106,52 +106,36 @@ func TestAssertNoForgottenModules(t *testing.T) {
mockAppModule1 := mock.NewMockEndBlockAppModule(mockCtrl)
mockAppModule2 := mock.NewMockBeginBlockAppModule(mockCtrl)
mockAppModule3 := mock.NewMockCoreAppModule(mockCtrl)
mockAppModule4 := mock.NewMockPrecommitAppModule(mockCtrl)
mockAppModule5 := mock.NewMockPrepareCheckStateAppModule(mockCtrl)
mockAppModule1.EXPECT().Name().Times(2).Return("module1")
mockAppModule2.EXPECT().Name().Times(2).Return("module2")
mockAppModule4.EXPECT().Name().Times(2).Return("module4")
mockAppModule5.EXPECT().Name().Times(2).Return("module5")
mm := module.NewManager(
mockAppModule1,
mockAppModule2,
module.CoreAppModuleBasicAdaptor("module3", mockAppModule3),
mockAppModule4,
mockAppModule5,
)
require.NotNil(t, mm)
require.Equal(t, 5, len(mm.Modules))
require.Equal(t, 3, len(mm.Modules))
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderInitGenesis)
require.Equal(t, []string{"module1", "module2", "module3"}, mm.OrderInitGenesis)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderInitGenesis, missing: [module3]", func() {
mm.SetOrderInitGenesis("module2", "module1")
})
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderExportGenesis)
require.Equal(t, []string{"module1", "module2", "module3"}, mm.OrderExportGenesis)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderExportGenesis, missing: [module3]", func() {
mm.SetOrderExportGenesis("module2", "module1")
})
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderBeginBlockers)
require.Equal(t, []string{"module1", "module2", "module3"}, mm.OrderBeginBlockers)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderBeginBlockers, missing: [module2]", func() {
mm.SetOrderBeginBlockers("module1", "module3")
})
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderEndBlockers)
require.Equal(t, []string{"module1", "module2", "module3"}, mm.OrderEndBlockers)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderEndBlockers, missing: [module1]", func() {
mm.SetOrderEndBlockers("module2", "module3")
})
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderPrecommiters)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderPrecommiters, missing: [module4]", func() {
mm.SetOrderPrecommiters("module2", "module1")
})
require.Equal(t, []string{"module1", "module2", "module3", "module4", "module5"}, mm.OrderPrepareCheckStaters)
require.PanicsWithValue(t, "all modules must be defined when setting SetOrderPrepareCheckStaters, missing: [module5]", func() {
mm.SetOrderPrepareCheckStaters("module2", "module1")
})
}
func TestManagerOrderSetters(t *testing.T) {
@@ -381,40 +365,6 @@ func TestManager_EndBlock(t *testing.T) {
require.Error(t, err)
}
func TestManager_PrepareCheckState(t *testing.T) {
mockCtrl := gomock.NewController(t)
t.Cleanup(mockCtrl.Finish)
mockAppModule1 := mock.NewMockPrepareCheckStateAppModule(mockCtrl)
mockAppModule2 := mock.NewMockPrepareCheckStateAppModule(mockCtrl)
mockAppModule1.EXPECT().Name().Times(2).Return("module1")
mockAppModule2.EXPECT().Name().Times(2).Return("module2")
mm := module.NewManager(mockAppModule1, mockAppModule2)
require.NotNil(t, mm)
require.Equal(t, 2, len(mm.Modules))
mockAppModule1.EXPECT().PrepareCheckState(gomock.Any()).Times(1)
mockAppModule2.EXPECT().PrepareCheckState(gomock.Any()).Times(1)
mm.PrepareCheckState(sdk.Context{})
}
func TestManager_Precommit(t *testing.T) {
mockCtrl := gomock.NewController(t)
t.Cleanup(mockCtrl.Finish)
mockAppModule1 := mock.NewMockPrecommitAppModule(mockCtrl)
mockAppModule2 := mock.NewMockPrecommitAppModule(mockCtrl)
mockAppModule1.EXPECT().Name().Times(2).Return("module1")
mockAppModule2.EXPECT().Name().Times(2).Return("module2")
mm := module.NewManager(mockAppModule1, mockAppModule2)
require.NotNil(t, mm)
require.Equal(t, 2, len(mm.Modules))
mockAppModule1.EXPECT().Precommit(gomock.Any()).Times(1)
mockAppModule2.EXPECT().Precommit(gomock.Any()).Times(1)
mm.Precommit(sdk.Context{})
}
// Core API exclusive tests
func TestCoreAPIManager(t *testing.T) {
mockCtrl := gomock.NewController(t)
@@ -590,6 +540,52 @@ func TestCoreAPIManager_EndBlock(t *testing.T) {
require.EqualError(t, err, "some error")
}
func TestManager_PrepareCheckState(t *testing.T) {
mockCtrl := gomock.NewController(t)
t.Cleanup(mockCtrl.Finish)
mockAppModule1 := mock.NewMockCoreAppModule(mockCtrl)
mockAppModule2 := mock.NewMockCoreAppModule(mockCtrl)
mm := module.NewManagerFromMap(map[string]appmodule.AppModule{
"module1": mockAppModule1,
"module2": mockAppModule2,
})
require.NotNil(t, mm)
require.Equal(t, 2, len(mm.Modules))
mockAppModule1.EXPECT().PrepareCheckState(gomock.Any()).Times(1).Return(nil)
mockAppModule2.EXPECT().PrepareCheckState(gomock.Any()).Times(1).Return(nil)
err := mm.PrepareCheckState(sdk.Context{})
require.NoError(t, err)
mockAppModule1.EXPECT().PrepareCheckState(gomock.Any()).Times(1).Return(errors.New("some error"))
err = mm.PrepareCheckState(sdk.Context{})
require.EqualError(t, err, "some error")
}
func TestManager_Precommit(t *testing.T) {
mockCtrl := gomock.NewController(t)
t.Cleanup(mockCtrl.Finish)
mockAppModule1 := mock.NewMockCoreAppModule(mockCtrl)
mockAppModule2 := mock.NewMockCoreAppModule(mockCtrl)
mm := module.NewManagerFromMap(map[string]appmodule.AppModule{
"module1": mockAppModule1,
"module2": mockAppModule2,
})
require.NotNil(t, mm)
require.Equal(t, 2, len(mm.Modules))
mockAppModule1.EXPECT().Precommit(gomock.Any()).Times(1).Return(nil)
mockAppModule2.EXPECT().Precommit(gomock.Any()).Times(1).Return(nil)
err := mm.Precommit(sdk.Context{})
require.NoError(t, err)
mockAppModule1.EXPECT().Precommit(gomock.Any()).Times(1).Return(errors.New("some error"))
err = mm.Precommit(sdk.Context{})
require.EqualError(t, err, "some error")
}
// MockCoreAppModule allows us to test functions like DefaultGenesis
type MockCoreAppModule struct{}