Merge PR #2930: Simulation spring cleaning
* Update PENDING.md * Add simple period for expensive invariants * Remove individual module simulations * Simulate a few more blocks * Add README explaining reason for shell scripts * Deduplicate scripts, log exact replication command on failure * Refactor invariants to take sdk.Context instead of baseapp.BaseApp * Reference all issues in PENDING.md entry * Remove no longer used simulation.RandSetup * Bug fixes * Address @rigelrozanski comments * Fix typo
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
distrsim "github.com/cosmos/cosmos-sdk/x/distribution/simulation"
|
||||
"github.com/cosmos/cosmos-sdk/x/mock/simulation"
|
||||
stakesim "github.com/cosmos/cosmos-sdk/x/stake/simulation"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
)
|
||||
|
||||
func (app *GaiaApp) runtimeInvariants() []simulation.Invariant {
|
||||
@@ -23,8 +24,9 @@ func (app *GaiaApp) runtimeInvariants() []simulation.Invariant {
|
||||
func (app *GaiaApp) assertRuntimeInvariants() {
|
||||
invariants := app.runtimeInvariants()
|
||||
start := time.Now()
|
||||
ctx := app.NewContext(false, abci.Header{Height: app.LastBlockHeight() + 1})
|
||||
for _, inv := range invariants {
|
||||
if err := inv(app.BaseApp); err != nil {
|
||||
if err := inv(ctx); err != nil {
|
||||
panic(fmt.Errorf("invariant broken: %s", err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ var (
|
||||
enabled bool
|
||||
verbose bool
|
||||
commit bool
|
||||
period int
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -49,6 +50,7 @@ func init() {
|
||||
flag.BoolVar(&enabled, "SimulationEnabled", false, "Enable the simulation")
|
||||
flag.BoolVar(&verbose, "SimulationVerbose", false, "Verbose log output")
|
||||
flag.BoolVar(&commit, "SimulationCommit", false, "Have the simulation commit")
|
||||
flag.IntVar(&period, "SimulationPeriod", 100, "Run slow invariants only once every period assertions")
|
||||
}
|
||||
|
||||
func appStateFn(r *rand.Rand, accs []simulation.Account) json.RawMessage {
|
||||
@@ -185,12 +187,12 @@ func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation {
|
||||
|
||||
func invariants(app *GaiaApp) []simulation.Invariant {
|
||||
return []simulation.Invariant{
|
||||
banksim.NonnegativeBalanceInvariant(app.accountKeeper),
|
||||
govsim.AllInvariants(),
|
||||
distrsim.AllInvariants(app.distrKeeper, app.stakeKeeper),
|
||||
stakesim.AllInvariants(app.bankKeeper, app.stakeKeeper,
|
||||
app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper),
|
||||
slashingsim.AllInvariants(),
|
||||
simulation.PeriodicInvariant(banksim.NonnegativeBalanceInvariant(app.accountKeeper), period, 0),
|
||||
simulation.PeriodicInvariant(govsim.AllInvariants(), period, 0),
|
||||
simulation.PeriodicInvariant(distrsim.AllInvariants(app.distrKeeper, app.stakeKeeper), period, 0),
|
||||
simulation.PeriodicInvariant(stakesim.AllInvariants(app.bankKeeper, app.stakeKeeper,
|
||||
app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper), period, 0),
|
||||
simulation.PeriodicInvariant(slashingsim.AllInvariants(), period, 0),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,7 +221,6 @@ func BenchmarkFullGaiaSimulation(b *testing.B) {
|
||||
_, err := simulation.SimulateFromSeed(
|
||||
b, app.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(app),
|
||||
[]simulation.RandSetup{},
|
||||
invariants(app), // these shouldn't get ran
|
||||
numBlocks,
|
||||
blockSize,
|
||||
@@ -262,7 +263,6 @@ func TestFullGaiaSimulation(t *testing.T) {
|
||||
_, err := simulation.SimulateFromSeed(
|
||||
t, app.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(app),
|
||||
[]simulation.RandSetup{},
|
||||
invariants(app),
|
||||
numBlocks,
|
||||
blockSize,
|
||||
@@ -304,7 +304,6 @@ func TestGaiaImportExport(t *testing.T) {
|
||||
_, err := simulation.SimulateFromSeed(
|
||||
t, app.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(app),
|
||||
[]simulation.RandSetup{},
|
||||
invariants(app),
|
||||
numBlocks,
|
||||
blockSize,
|
||||
@@ -401,7 +400,6 @@ func TestGaiaSimulationAfterImport(t *testing.T) {
|
||||
stopEarly, err := simulation.SimulateFromSeed(
|
||||
t, app.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(app),
|
||||
[]simulation.RandSetup{},
|
||||
invariants(app),
|
||||
numBlocks,
|
||||
blockSize,
|
||||
@@ -447,7 +445,6 @@ func TestGaiaSimulationAfterImport(t *testing.T) {
|
||||
_, err = simulation.SimulateFromSeed(
|
||||
t, newApp.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(newApp),
|
||||
[]simulation.RandSetup{},
|
||||
invariants(newApp),
|
||||
numBlocks,
|
||||
blockSize,
|
||||
@@ -479,13 +476,11 @@ func TestAppStateDeterminism(t *testing.T) {
|
||||
simulation.SimulateFromSeed(
|
||||
t, app.BaseApp, appStateFn, seed,
|
||||
testAndRunTxs(app),
|
||||
[]simulation.RandSetup{},
|
||||
[]simulation.Invariant{},
|
||||
50,
|
||||
100,
|
||||
true,
|
||||
)
|
||||
//app.Commit()
|
||||
appHash := app.LastCommitID().Hash
|
||||
appHashList[j] = appHash
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user