From 96722c19d803590d9f14044e67a407fa31cfdcb3 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 14 Jan 2025 00:03:41 +0100 Subject: [PATCH] refactor!: sync with latest simulation changes + make it extensible (#4463) * refactor: sync with latest simulation changes + make it extensible * cl * fix --- changelog.md | 1 + ignite/cmd/chain_simulate.go | 10 +++---- ignite/pkg/chaincmd/runner/simulate.go | 5 ++-- ignite/pkg/chaincmd/simulate.go | 26 ++++++++----------- ignite/services/chain/simulate.go | 25 +++++++++--------- .../cmd/commands.go.plush | 9 ------- 6 files changed, 31 insertions(+), 45 deletions(-) diff --git a/changelog.md b/changelog.md index 88bf9efc42..05f8801966 100644 --- a/changelog.md +++ b/changelog.md @@ -47,6 +47,7 @@ - [#4317](https://github.com/ignite/cli/pull/4317) Remove xchisel dependency - [#4361](https://github.com/ignite/cli/pull/4361) Remove unused `KeyPrefix` method - [#4384](https://github.com/ignite/cli/pull/4384) Compare genesis params into chain genesis tests +- [#4463](https://github.com/ignite/cli/pull/4463) Run `chain simulation` with any simulation test case ### Fixes diff --git a/ignite/cmd/chain_simulate.go b/ignite/cmd/chain_simulate.go index 253ffc79ed..af4e7d5f98 100644 --- a/ignite/cmd/chain_simulate.go +++ b/ignite/cmd/chain_simulate.go @@ -22,8 +22,8 @@ const ( flagSimappNumBlocks = "numBlocks" flagSimappBlockSize = "blockSize" flagSimappLean = "lean" - flagSimappPeriod = "period" flagSimappGenesisTime = "genesisTime" + flagSimName = "simName" ) // NewChainSimulate creates a new simulation command to run the blockchain simulation. @@ -31,7 +31,7 @@ func NewChainSimulate() *cobra.Command { c := &cobra.Command{ Use: "simulate", Short: "Run simulation testing for the blockchain", - Long: "Run simulation testing for the blockchain. It sends many randomized-input messages of each module to a simulated node and checks if invariants break", + Long: "Run simulation testing for the blockchain. It sends many randomized-input messages of each module to a simulated node.", Args: cobra.NoArgs, RunE: chainSimulationHandler, } @@ -41,8 +41,8 @@ func NewChainSimulate() *cobra.Command { func chainSimulationHandler(cmd *cobra.Command, _ []string) error { var ( - period, _ = cmd.Flags().GetUint(flagSimappPeriod) genesisTime, _ = cmd.Flags().GetInt64(flagSimappGenesisTime) + simName, _ = cmd.Flags().GetString(flagSimName) config = newConfigFromFlags(cmd) appPath = flagGetPath(cmd) ) @@ -62,7 +62,7 @@ func chainSimulationHandler(cmd *cobra.Command, _ []string) error { } return c.Simulate(cmd.Context(), - chain.SimappWithPeriod(period), + chain.SimappWithSimulationTestName(simName), chain.SimappWithGenesisTime(genesisTime), chain.SimappWithConfig(config), ) @@ -114,6 +114,6 @@ func simappFlags(c *cobra.Command) { c.Flags().Bool(flagSimappLean, false, "lean simulation log output") // simulation flags - c.Flags().Uint(flagSimappPeriod, 0, "run slow invariants only once every period assertions") + c.Flags().String(flagSimName, "TestFullAppSimulation", "name of the simulation to run") c.Flags().Int64(flagSimappGenesisTime, 0, "override genesis UNIX time instead of using a random UNIX time") } diff --git a/ignite/pkg/chaincmd/runner/simulate.go b/ignite/pkg/chaincmd/runner/simulate.go index f805f0df41..65e882f807 100644 --- a/ignite/pkg/chaincmd/runner/simulate.go +++ b/ignite/pkg/chaincmd/runner/simulate.go @@ -12,15 +12,15 @@ import ( // Simulation run the chain simulation. func (r Runner) Simulation( ctx context.Context, - appPath string, + appPath, simName string, enabled bool, config simulation.Config, - period uint, genesisTime int64, ) error { return r.run(ctx, runOptions{stdout: os.Stdout}, chaincmd.SimulationCommand( appPath, + simName, chaincmd.SimappWithGenesis(config.GenesisFile), chaincmd.SimappWithParams(config.ParamsFile), chaincmd.SimappWithExportParamsPath(config.ExportParamsPath), @@ -34,7 +34,6 @@ func (r Runner) Simulation( chaincmd.SimappWithLean(config.Lean), chaincmd.SimappWithCommit(config.Commit), chaincmd.SimappWithEnable(enabled), - chaincmd.SimappWithPeriod(period), chaincmd.SimappWithGenesisTime(genesisTime), )) } diff --git a/ignite/pkg/chaincmd/simulate.go b/ignite/pkg/chaincmd/simulate.go index 225c95aa93..a50f943f74 100644 --- a/ignite/pkg/chaincmd/simulate.go +++ b/ignite/pkg/chaincmd/simulate.go @@ -1,12 +1,12 @@ package chaincmd import ( + "fmt" "path/filepath" "strconv" "github.com/ignite/cli/v29/ignite/pkg/cmdrunner/step" "github.com/ignite/cli/v29/ignite/pkg/gocmd" - "github.com/ignite/cli/v29/ignite/pkg/safeconverter" ) const ( @@ -23,13 +23,11 @@ const ( optionSimappLean = "-Lean" optionSimappCommit = "-Commit" optionSimappEnabled = "-Enabled" - optionSimappPeriod = "-Period" optionSimappGenesisTime = "-GenesisTime" - commandGoTest = "test" - optionGoBenchmem = "-benchmem" - optionGoSimappRun = "-run=^TestFullAppSimulation$" - optionGoSimsTags = "-tags='sims'" + commandGoTest = "test" + optionGoBenchmem = "-benchmem" + optionGoSimsTags = "-tags='sims'" ) // SimappOption for the SimulateCommand. @@ -157,13 +155,6 @@ func SimappWithEnable(enable bool) SimappOption { } } -// SimappWithPeriod provides period option for the simapp command. -func SimappWithPeriod(period uint) SimappOption { - return func(command []string) []string { - return append(command, optionSimappPeriod, strconv.Itoa(safeconverter.ToInt[uint](period))) - } -} - // SimappWithGenesisTime provides genesisTime option for the simapp command. func SimappWithGenesisTime(genesisTime int64) SimappOption { return func(command []string) []string { @@ -172,11 +163,16 @@ func SimappWithGenesisTime(genesisTime int64) SimappOption { } // SimulationCommand returns the cli command for simapp tests. -func SimulationCommand(appPath string, options ...SimappOption) step.Option { +// simName must be a test defined within the application (defaults to TestFullAppSimulation). +func SimulationCommand(appPath string, simName string, options ...SimappOption) step.Option { + if simName == "" { + simName = "TestFullAppSimulation" + } + command := []string{ commandGoTest, optionGoBenchmem, - optionGoSimappRun, + fmt.Sprintf("-run=^%s$", simName), optionGoSimsTags, filepath.Join(appPath, "app"), } diff --git a/ignite/services/chain/simulate.go b/ignite/services/chain/simulate.go index 36863872e6..927c035ab3 100644 --- a/ignite/services/chain/simulate.go +++ b/ignite/services/chain/simulate.go @@ -7,10 +7,10 @@ import ( ) type simappOptions struct { - enabled bool - config simulation.Config - period uint - genesisTime int64 + simulationTestName string + enabled bool + config simulation.Config + genesisTime int64 } func newSimappOptions() simappOptions { @@ -19,7 +19,6 @@ func newSimappOptions() simappOptions { Commit: true, }, enabled: true, - period: 0, genesisTime: 0, } } @@ -27,13 +26,6 @@ func newSimappOptions() simappOptions { // SimappOption provides options for the simapp command. type SimappOption func(*simappOptions) -// SimappWithPeriod allows running slow invariants only once every period assertions. -func SimappWithPeriod(period uint) SimappOption { - return func(c *simappOptions) { - c.period = period - } -} - // SimappWithGenesisTime allows overriding genesis UNIX time instead of using a random UNIX time. func SimappWithGenesisTime(genesisTime int64) SimappOption { return func(c *simappOptions) { @@ -48,6 +40,13 @@ func SimappWithConfig(config simulation.Config) SimappOption { } } +// SimappWithSimulationTestName allows to set the simulation test name. +func SimappWithSimulationTestName(name string) SimappOption { + return func(c *simappOptions) { + c.simulationTestName = name + } +} + func (c *Chain) Simulate(ctx context.Context, options ...SimappOption) error { simappOptions := newSimappOptions() @@ -62,9 +61,9 @@ func (c *Chain) Simulate(ctx context.Context, options ...SimappOption) error { } return commands.Simulation(ctx, c.app.Path, + simappOptions.simulationTestName, simappOptions.enabled, simappOptions.config, - simappOptions.period, simappOptions.genesisTime, ) } diff --git a/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/commands.go.plush b/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/commands.go.plush index 5361937f59..87745316f7 100644 --- a/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/commands.go.plush +++ b/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/commands.go.plush @@ -137,15 +137,6 @@ func appExport( appOpts servertypes.AppOptions, modulesToExport []string, ) (servertypes.ExportedApp, error) { - viperAppOpts, ok := appOpts.(*viper.Viper) - if !ok { - return servertypes.ExportedApp{}, errors.New("appOpts is not viper.Viper") - } - - // overwrite the FlagInvCheckPeriod - viperAppOpts.Set(server.FlagInvCheckPeriod, 1) - appOpts = viperAppOpts - var bApp *app.App if height != -1 { bApp = app.New(logger, db, traceStore, false, appOpts)