Merge PR #4861: Simulation Fixes

This commit is contained in:
Alexander Bezobchuk
2019-08-07 12:54:13 -04:00
committed by GitHub
parent ddf0e6fe36
commit 42c54f8d0c
5 changed files with 43 additions and 29 deletions
+14 -12
View File
@@ -7,7 +7,6 @@ import (
"math/rand"
"os"
"os/signal"
"runtime/debug"
"syscall"
"testing"
"time"
@@ -126,14 +125,12 @@ func SimulateFromSeed(
if !testingMode {
b.ResetTimer()
} else {
// Recover logs in case of panic
// recover logs in case of panic
defer func() {
if r := recover(); r != nil {
fmt.Fprintf(w, "panic with err: %v\n", r)
stackTrace := string(debug.Stack())
fmt.Println(stackTrace)
_, _ = fmt.Fprintf(w, "simulation halted due to panic on block %d; %v\n", header.Height, r)
logWriter.PrintLogs()
err = fmt.Errorf("Simulation halted due to panic on block %d", header.Height)
panic(r)
}
}()
}
@@ -258,22 +255,27 @@ func createBlockSimulator(testingMode bool, tb testing.TB, t *testing.T, w io.Wr
operationQueue OperationQueue, timeOperationQueue []FutureOperation,
totalNumBlocks, avgBlockSize int, logWriter LogWriter, lean, onOperation, allInvariants bool) blockSimFn {
lastBlocksizeState := 0 // state for [4 * uniform distribution]
lastBlockSizeState := 0 // state for [4 * uniform distribution]
blocksize := 0
selectOp := ops.getSelectOpFn()
return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context,
accounts []Account, header abci.Header) (opCount int) {
return func(
r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []Account, header abci.Header,
) (opCount int) {
fmt.Fprintf(w, "\rSimulating... block %d/%d, operation %d/%d. ",
header.Height, totalNumBlocks, opCount, blocksize)
lastBlocksizeState, blocksize = getBlockSize(r, params, lastBlocksizeState, avgBlockSize)
_, _ = fmt.Fprintf(
w, "\rSimulating... block %d/%d, operation %d/%d.",
header.Height, totalNumBlocks, opCount, blocksize,
)
lastBlockSizeState, blocksize = getBlockSize(r, params, lastBlockSizeState, avgBlockSize)
type opAndR struct {
op Operation
rand *rand.Rand
}
opAndRz := make([]opAndR, 0, blocksize)
// Predetermine the blocksize slice so that we can do things like block
// out certain operations without changing the ops that follow.
for i := 0; i < blocksize; i++ {