package app import ( "os" "testing" "github.com/spf13/viper" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client/flags" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" ) // Profile with: // `go test -benchmem -run=^$ ./app -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out` func BenchmarkFullAppSimulation(b *testing.B) { b.ReportAllocs() config := simcli.NewConfigFromFlags() config.ChainID = SimAppChainID db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "goleveldb-app-sim", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) if err != nil { b.Fatalf("simulation setup failed: %s", err.Error()) } if skip { b.Skip("skipping benchmark application simulation") } defer func() { require.NoError(b, db.Close()) require.NoError(b, os.RemoveAll(dir)) }() appOptions := viper.New() if FlagEnableStreamingValue { m := make(map[string]interface{}) m["streaming.abci.keys"] = []string{"*"} m["streaming.abci.plugin"] = "abci_v1" m["streaming.abci.stop-node-on-err"] = true for key, value := range m { appOptions.SetDefault(key, value) } } appOptions.SetDefault(flags.FlagHome, DefaultNodeHome) app := New(logger, db, nil, true, appOptions, interBlockCacheOpt(), baseapp.SetChainID(SimAppChainID)) // run randomized simulation _, simParams, simErr := simulation.SimulateFromSeed( b, os.Stdout, app.BaseApp, simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 simtestutil.BuildSimulationOperations(app, app.AppCodec(), config, app.TxConfig()), BlockedAddresses(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil { b.Fatal(err) } if simErr != nil { b.Fatal(simErr) } if config.Commit { simtestutil.PrintStats(db) } }