From 08df59d35a5b80df89202ecf6f54cb6e7e81a043 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 14:56:44 +0000 Subject: [PATCH] feat: add params for ics27 simulation (backport #2160) (#2214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add params for ics27 simulation (#2160) * add param changes for ics27 simulation * account for unadded submodules * fix tests * Update modules/apps/27-interchain-accounts/module.go * add app simulation declaration (cherry picked from commit cd913b8fab4017e7dd7953904faba23aaba13837) # Conflicts: # modules/apps/27-interchain-accounts/module.go * fix conflicts Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- modules/apps/27-interchain-accounts/module.go | 11 +++- .../simulation/params.go | 41 ++++++++++++ .../simulation/params_test.go | 64 +++++++++++++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 modules/apps/27-interchain-accounts/simulation/params.go create mode 100644 modules/apps/27-interchain-accounts/simulation/params_test.go diff --git a/modules/apps/27-interchain-accounts/module.go b/modules/apps/27-interchain-accounts/module.go index e5b221f4d48..d534247c805 100644 --- a/modules/apps/27-interchain-accounts/module.go +++ b/modules/apps/27-interchain-accounts/module.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "math/rand" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -29,8 +30,9 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModuleSimulation = AppModule{} _ porttypes.IBCModule = host.IBCModule{} ) @@ -224,6 +226,11 @@ func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.Weig return nil } +// RandomizedParams creates randomized ibc-transfer param changes for the simulator. +func (am AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { + return simulation.ParamChanges(r, am.controllerKeeper, am.hostKeeper) +} + // RegisterStoreDecoder registers a decoder for interchain accounts module's types func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { sdr[types.StoreKey] = simulation.NewDecodeStore() diff --git a/modules/apps/27-interchain-accounts/simulation/params.go b/modules/apps/27-interchain-accounts/simulation/params.go new file mode 100644 index 00000000000..7edbbf749a2 --- /dev/null +++ b/modules/apps/27-interchain-accounts/simulation/params.go @@ -0,0 +1,41 @@ +package simulation + +import ( + "fmt" + "math/rand" + + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + gogotypes "github.com/gogo/protobuf/types" + + controllerkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/keeper" + controllertypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" + hostkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/keeper" + hosttypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/types" + "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types" +) + +// ParamChanges defines the parameters that can be modified by param change proposals +// on the simulation +func ParamChanges(r *rand.Rand, controllerKeeper *controllerkeeper.Keeper, hostKeeper *hostkeeper.Keeper) []simtypes.ParamChange { + var paramChanges []simtypes.ParamChange + if controllerKeeper != nil { + paramChanges = append(paramChanges, simulation.NewSimParamChange(controllertypes.SubModuleName, string(controllertypes.KeyControllerEnabled), + func(r *rand.Rand) string { + controllerEnabled := RandomEnabled(r) + return fmt.Sprintf("%s", types.ModuleCdc.MustMarshalJSON(&gogotypes.BoolValue{Value: controllerEnabled})) //nolint:gosimple + }, + )) + } + + if hostKeeper != nil { + paramChanges = append(paramChanges, simulation.NewSimParamChange(hosttypes.SubModuleName, string(hosttypes.KeyHostEnabled), + func(r *rand.Rand) string { + receiveEnabled := RandomEnabled(r) + return fmt.Sprintf("%s", types.ModuleCdc.MustMarshalJSON(&gogotypes.BoolValue{Value: receiveEnabled})) //nolint:gosimple + }, + )) + } + + return paramChanges +} diff --git a/modules/apps/27-interchain-accounts/simulation/params_test.go b/modules/apps/27-interchain-accounts/simulation/params_test.go new file mode 100644 index 00000000000..c9cc5e2a356 --- /dev/null +++ b/modules/apps/27-interchain-accounts/simulation/params_test.go @@ -0,0 +1,64 @@ +package simulation_test + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/stretchr/testify/require" + + controllertypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" + hosttypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/types" + "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/simulation" + "github.com/cosmos/ibc-go/v5/testing/simapp" +) + +func TestParamChanges(t *testing.T) { + app := simapp.Setup(false) + + s := rand.NewSource(1) + r := rand.New(s) + + expected := []struct { + composedKey string + key string + simValue string + subspace string + }{ + {fmt.Sprintf("%s/%s", controllertypes.SubModuleName, controllertypes.KeyControllerEnabled), string(controllertypes.KeyControllerEnabled), "false", controllertypes.SubModuleName}, + {fmt.Sprintf("%s/%s", hosttypes.SubModuleName, hosttypes.KeyHostEnabled), string(hosttypes.KeyHostEnabled), "true", hosttypes.SubModuleName}, + } + + paramChanges := simulation.ParamChanges(r, &app.ICAControllerKeeper, &app.ICAHostKeeper) + require.Len(t, paramChanges, 2) + + for i, p := range paramChanges { + require.Equal(t, expected[i].composedKey, p.ComposedKey()) + require.Equal(t, expected[i].key, p.Key()) + require.Equal(t, expected[i].simValue, p.SimValue()(r), p.Key()) + require.Equal(t, expected[i].subspace, p.Subspace()) + } + + paramChanges = simulation.ParamChanges(r, &app.ICAControllerKeeper, nil) + require.Len(t, paramChanges, 1) + + // the second call to paramChanges causing the controller enabled to be changed to true + expected[0].simValue = "true" + + for _, p := range paramChanges { + require.Equal(t, expected[0].composedKey, p.ComposedKey()) + require.Equal(t, expected[0].key, p.Key()) + require.Equal(t, expected[0].simValue, p.SimValue()(r), p.Key()) + require.Equal(t, expected[0].subspace, p.Subspace()) + } + + paramChanges = simulation.ParamChanges(r, nil, &app.ICAHostKeeper) + require.Len(t, paramChanges, 1) + + for _, p := range paramChanges { + require.Equal(t, expected[1].composedKey, p.ComposedKey()) + require.Equal(t, expected[1].key, p.Key()) + require.Equal(t, expected[1].simValue, p.SimValue()(r), p.Key()) + require.Equal(t, expected[1].subspace, p.Subspace()) + } +}