Added simple benchmark for signature checks

This commit is contained in:
Ethan Frey
2017-07-06 16:51:40 +02:00
parent b757467f7b
commit 28b5350cb6
2 changed files with 78 additions and 1 deletions
+4 -1
View File
@@ -16,6 +16,9 @@ dist:
@bash publish/dist.sh
@bash publish/publish.sh
benchmark:
@go test -bench=. ./modules/...
test: test_unit test_cli test_tutorial
test_unit:
@@ -65,4 +68,4 @@ clean:
fresh: clean get_vendor_deps install
@if [[ `git status -s` ]]; then echo; echo "Warning: uncommited changes"; git status -s; fi
.PHONY: all build install test test_cli test_unit get_vendor_deps build-docker clean fresh
.PHONY: all build install test test_cli test_unit get_vendor_deps build-docker clean fresh benchmark
+74
View File
@@ -0,0 +1,74 @@
package auth
import (
"fmt"
"testing"
crypto "github.com/tendermint/go-crypto"
cmn "github.com/tendermint/tmlibs/common"
"github.com/tendermint/tmlibs/log"
"github.com/tendermint/basecoin"
"github.com/tendermint/basecoin/stack"
"github.com/tendermint/basecoin/state"
)
func makeSignTx() basecoin.Tx {
key := crypto.GenPrivKeyEd25519().Wrap()
payload := cmn.RandBytes(32)
tx := NewSig(stack.NewRawTx(payload))
Sign(tx, key)
return tx.Wrap()
}
func makeMultiSignTx(cnt int) basecoin.Tx {
payload := cmn.RandBytes(32)
tx := NewMulti(stack.NewRawTx(payload))
for i := 0; i < cnt; i++ {
key := crypto.GenPrivKeyEd25519().Wrap()
Sign(tx, key)
}
return tx.Wrap()
}
func makeHandler() basecoin.Handler {
return stack.New(Signatures{}).Use(stack.OKHandler{})
}
func BenchmarkCheckOneSig(b *testing.B) {
tx := makeSignTx()
h := makeHandler()
store := state.NewMemKVStore()
for i := 1; i <= b.N; i++ {
ctx := stack.NewContext("foo", log.NewNopLogger())
_, err := h.DeliverTx(ctx, store, tx)
// never should error
if err != nil {
panic(err)
}
}
}
func BenchmarkCheckMultiSig(b *testing.B) {
sigs := []int{1, 3, 8, 20}
for _, cnt := range sigs {
label := fmt.Sprintf("%dsigs", cnt)
b.Run(label, func(sub *testing.B) {
benchmarkCheckMultiSig(sub, cnt)
})
}
}
func benchmarkCheckMultiSig(b *testing.B, cnt int) {
tx := makeMultiSignTx(cnt)
h := makeHandler()
store := state.NewMemKVStore()
for i := 1; i <= b.N; i++ {
ctx := stack.NewContext("foo", log.NewNopLogger())
_, err := h.DeliverTx(ctx, store, tx)
// never should error
if err != nil {
panic(err)
}
}
}