diff --git a/consensus/mempool_test.go b/consensus/mempool_test.go index 3314caad1..b3b98aa41 100644 --- a/consensus/mempool_test.go +++ b/consensus/mempool_test.go @@ -134,7 +134,7 @@ func TestRmBadTx(t *testing.T) { checkTxRespCh <- struct{}{} }) if err != nil { - t.Fatal("Error after CheckTx: %v", err) + t.Fatalf("Error after CheckTx: %v", err) } // check for the tx diff --git a/consensus/wal_test.go b/consensus/wal_test.go index 0235afab3..58b5b8c2a 100644 --- a/consensus/wal_test.go +++ b/consensus/wal_test.go @@ -2,10 +2,13 @@ package consensus import ( "bytes" + "crypto/rand" "path" + "sync" "testing" "time" + wire "github.com/tendermint/go-wire" "github.com/tendermint/tendermint/consensus/types" tmtypes "github.com/tendermint/tendermint/types" cmn "github.com/tendermint/tmlibs/common" @@ -60,3 +63,66 @@ func TestSearchForEndHeight(t *testing.T) { assert.Equal(t, rs.Height, h+1, cmn.Fmt("wrong height")) } + +var initOnce sync.Once + +func registerInterfacesOnce() { + initOnce.Do(func() { + var _ = wire.RegisterInterface( + struct{ WALMessage }{}, + wire.ConcreteType{[]byte{}, 0x10}, + ) + }) +} + +func nBytes(n int) []byte { + buf := make([]byte, n) + n, _ = rand.Read(buf) + return buf[:n] +} + +func benchmarkWalDecode(b *testing.B, n int) { + registerInterfacesOnce() + + buf := new(bytes.Buffer) + enc := NewWALEncoder(buf) + + data := nBytes(n) + enc.Encode(&TimedWALMessage{Msg: data, Time: time.Now().Round(time.Second)}) + + encoded := buf.Bytes() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + buf.Write(encoded) + dec := NewWALDecoder(buf) + if _, err := dec.Decode(); err != nil { + b.Fatal(err) + } + } + b.ReportAllocs() +} + +func BenchmarkWalDecode512B(b *testing.B) { + benchmarkWalDecode(b, 512) +} + +func BenchmarkWalDecode10KB(b *testing.B) { + benchmarkWalDecode(b, 10*1024) +} +func BenchmarkWalDecode100KB(b *testing.B) { + benchmarkWalDecode(b, 100*1024) +} +func BenchmarkWalDecode1MB(b *testing.B) { + benchmarkWalDecode(b, 1024*1024) +} +func BenchmarkWalDecode10MB(b *testing.B) { + benchmarkWalDecode(b, 10*1024*1024) +} +func BenchmarkWalDecode100MB(b *testing.B) { + benchmarkWalDecode(b, 100*1024*1024) +} +func BenchmarkWalDecode1GB(b *testing.B) { + benchmarkWalDecode(b, 1024*1024*1024) +}