* update operations to use baseapp * updates and cleanup operations * update operations * restructure sim ops params * rename sim /operations/msg.go to /operations.go * move GenTx to a helper pkg to avoid circle deps * rm msg.ValidateBasic * changelog * random fees; delete auth's DeductFees sim operation * add chain-id for sig verification * Update x/simulation/account.go Co-Authored-By: colin axner <colinaxner@berkeley.edu> * fix bank, gov and distr errors * fix staking and slashing errors; increase prob for send enabled * increase gas x10 * make format * fix some distr and staking edge cases * fix all edge cases * golang ci * rename acc vars; default no fees to 0stake * cleanup; check for exchange rate and skip invalid ops * fixes * check for max entries * add pubkey to genaccounts * fix gov bug * update staking sim ops * fix small redelegation error * fix small self delegation on unjail * rm inf loop on random val/accs * copy array * add ok boolean to RandomValidator return values * format * Update x/bank/simulation/operations.go Co-Authored-By: colin axner <colinaxner@berkeley.edu> * Update simapp/helpers/test_helpers.go Co-Authored-By: colin axner <colinaxner@berkeley.edu> * address @colin-axner comments * add genaccount pubkey validation * fix test * update operations and move RandomFees to x/simulation * update gov ops * address @alexanderbez comments * avoid modifications to config * reorder params * changelog * Update x/distribution/simulation/genesis.go Co-Authored-By: Alexander Bezobchuk <alexanderbez@users.noreply.github.com> * remove named return values * ensure all operations are simulated * golangci * add nolint * disable whitespace and funlen linter * disable godox * add TODO on unjail * update ops weights * remove dup * update godoc * x/slashing/simulation/operations.go linting * x/staking/simulation/operations.go linting * update operations format * x/bank/simulation/operations.go linting * x/distribution/simulation/operations.go linting * x/staking/simulation/operations.go linting * start changes: make bank simulate send multiple coins, code cleanup * fix nondeterminism bug * fix txsiglimit err * fix multisend bug * simplify simulation, cleanup opt privkey args * make slashing test invalid unjail msgs * Update simapp/state.go * golangCI changes
128 lines
3.4 KiB
Go
128 lines
3.4 KiB
Go
package simapp
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
dbm "github.com/tendermint/tm-db"
|
|
|
|
"github.com/cosmos/cosmos-sdk/simapp/helpers"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/simulation"
|
|
)
|
|
|
|
// Profile with:
|
|
// /usr/local/go/bin/go test -benchmem -run=^$ github.com/cosmos/cosmos-sdk/simapp -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out
|
|
func BenchmarkFullAppSimulation(b *testing.B) {
|
|
logger := log.NewNopLogger()
|
|
config := NewConfigFromFlags()
|
|
config.ChainID = helpers.SimAppChainID
|
|
|
|
var db dbm.DB
|
|
dir, _ := ioutil.TempDir("", "goleveldb-app-sim")
|
|
db, _ = sdk.NewLevelDB("Simulation", dir)
|
|
defer func() {
|
|
db.Close()
|
|
os.RemoveAll(dir)
|
|
}()
|
|
|
|
app := NewSimApp(logger, db, nil, true, FlagPeriodValue, interBlockCacheOpt())
|
|
|
|
// Run randomized simulation
|
|
// TODO: parameterize numbers, save for a later PR
|
|
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
b, os.Stdout, app.BaseApp, AppStateFn(app.Codec(), app.sm),
|
|
testAndRunTxs(app, config), app.ModuleAccountAddrs(), config,
|
|
)
|
|
|
|
// export state and params before the simulation error is checked
|
|
if config.ExportStatePath != "" {
|
|
if err := ExportStateToJSON(app, config.ExportStatePath); err != nil {
|
|
fmt.Println(err)
|
|
b.Fail()
|
|
}
|
|
}
|
|
|
|
if config.ExportParamsPath != "" {
|
|
if err := ExportParamsToJSON(simParams, config.ExportParamsPath); err != nil {
|
|
fmt.Println(err)
|
|
b.Fail()
|
|
}
|
|
}
|
|
|
|
if simErr != nil {
|
|
fmt.Println(simErr)
|
|
b.FailNow()
|
|
}
|
|
|
|
if config.Commit {
|
|
fmt.Println("\nGoLevelDB Stats")
|
|
fmt.Println(db.Stats()["leveldb.stats"])
|
|
fmt.Println("GoLevelDB cached block size", db.Stats()["leveldb.cachedblock"])
|
|
}
|
|
}
|
|
|
|
func BenchmarkInvariants(b *testing.B) {
|
|
logger := log.NewNopLogger()
|
|
|
|
config := NewConfigFromFlags()
|
|
config.AllInvariants = false
|
|
config.ChainID = helpers.SimAppChainID
|
|
|
|
dir, _ := ioutil.TempDir("", "goleveldb-app-invariant-bench")
|
|
db, _ := sdk.NewLevelDB("simulation", dir)
|
|
|
|
defer func() {
|
|
db.Close()
|
|
os.RemoveAll(dir)
|
|
}()
|
|
|
|
app := NewSimApp(logger, db, nil, true, FlagPeriodValue, interBlockCacheOpt())
|
|
|
|
// 2. Run parameterized simulation (w/o invariants)
|
|
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
b, ioutil.Discard, app.BaseApp, AppStateFn(app.Codec(), app.sm),
|
|
testAndRunTxs(app, config), app.ModuleAccountAddrs(), config,
|
|
)
|
|
|
|
// export state and params before the simulation error is checked
|
|
if config.ExportStatePath != "" {
|
|
if err := ExportStateToJSON(app, config.ExportStatePath); err != nil {
|
|
fmt.Println(err)
|
|
b.Fail()
|
|
}
|
|
}
|
|
|
|
if config.ExportParamsPath != "" {
|
|
if err := ExportParamsToJSON(simParams, config.ExportParamsPath); err != nil {
|
|
fmt.Println(err)
|
|
b.Fail()
|
|
}
|
|
}
|
|
|
|
if simErr != nil {
|
|
fmt.Println(simErr)
|
|
b.FailNow()
|
|
}
|
|
|
|
ctx := app.NewContext(true, abci.Header{Height: app.LastBlockHeight() + 1})
|
|
|
|
// 3. Benchmark each invariant separately
|
|
//
|
|
// NOTE: We use the crisis keeper as it has all the invariants registered with
|
|
// their respective metadata which makes it useful for testing/benchmarking.
|
|
for _, cr := range app.CrisisKeeper.Routes() {
|
|
cr := cr
|
|
b.Run(fmt.Sprintf("%s/%s", cr.ModuleName, cr.Route), func(b *testing.B) {
|
|
if res, stop := cr.Invar(ctx); stop {
|
|
fmt.Printf("broken invariant at block %d of %d\n%s", ctx.BlockHeight()-1, config.NumBlocks, res)
|
|
b.FailNow()
|
|
}
|
|
})
|
|
}
|
|
}
|