Auth module passes all tests

This commit is contained in:
Ethan Frey
2017-10-25 19:56:48 +02:00
parent d2ed8c8871
commit 8b8de70f53
3 changed files with 73 additions and 71 deletions
+67 -67
View File
@@ -1,77 +1,77 @@
package auth
// import (
// "fmt"
// "testing"
import (
"fmt"
"testing"
// crypto "github.com/tendermint/go-crypto"
// cmn "github.com/tendermint/tmlibs/common"
crypto "github.com/tendermint/go-crypto"
cmn "github.com/tendermint/tmlibs/common"
// sdk "github.com/cosmos/cosmos-sdk"
// "github.com/cosmos/cosmos-sdk/state"
// "github.com/cosmos/cosmos-sdk/util"
// )
sdk "github.com/cosmos/cosmos-sdk"
"github.com/cosmos/cosmos-sdk/state"
"github.com/cosmos/cosmos-sdk/util"
)
// func makeSignTx() sdk.Tx {
// key := crypto.GenPrivKeyEd25519().Wrap()
// payload := cmn.RandBytes(32)
// tx := NewSig(util.RawTx{payload})
// Sign(tx, key)
// return tx.Wrap()
// }
func makeSignTx() interface{} {
key := crypto.GenPrivKeyEd25519().Wrap()
payload := cmn.RandBytes(32)
tx := newSingle(payload)
Sign(tx, key)
return tx
}
// func makeMultiSignTx(cnt int) sdk.Tx {
// payload := cmn.RandBytes(32)
// tx := NewMulti(util.RawTx{payload})
// for i := 0; i < cnt; i++ {
// key := crypto.GenPrivKeyEd25519().Wrap()
// Sign(tx, key)
// }
// return tx.Wrap()
// }
func makeMultiSignTx(cnt int) interface{} {
payload := cmn.RandBytes(32)
tx := newMulti(payload)
for i := 0; i < cnt; i++ {
key := crypto.GenPrivKeyEd25519().Wrap()
Sign(tx, key)
}
return tx
}
// func makeHandler() sdk.Handler {
// return sdk.ChainDecorators(
// Signatures{},
// ).WithHandler(
// util.OKHandler{},
// )
// }
func makeHandler() sdk.Handler {
return sdk.ChainDecorators(
Signatures{},
).WithHandler(
util.OKHandler{},
)
}
// func BenchmarkCheckOneSig(b *testing.B) {
// tx := makeSignTx()
// h := makeHandler()
// store := state.NewMemKVStore()
// for i := 1; i <= b.N; i++ {
// ctx := util.MockContext("foo", 100)
// _, err := h.DeliverTx(ctx, store, tx)
// // never should error
// if err != nil {
// panic(err)
// }
// }
// }
func BenchmarkCheckOneSig(b *testing.B) {
tx := makeSignTx()
h := makeHandler()
store := state.NewMemKVStore()
for i := 1; i <= b.N; i++ {
ctx := util.MockContext("foo", 100)
_, 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) {
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 := util.MockContext("foo", 100)
// _, err := h.DeliverTx(ctx, store, tx)
// // never should error
// if err != nil {
// panic(err)
// }
// }
// }
func benchmarkCheckMultiSig(b *testing.B, cnt int) {
tx := makeMultiSignTx(cnt)
h := makeHandler()
store := state.NewMemKVStore()
for i := 1; i <= b.N; i++ {
ctx := util.MockContext("foo", 100)
_, err := h.DeliverTx(ctx, store, tx)
// never should error
if err != nil {
panic(err)
}
}
}
+2 -2
View File
@@ -67,14 +67,14 @@ func TestSignatureChecks(t *testing.T) {
if tc.useMultiSig {
mtx := newMulti(raw)
for _, k := range tc.keys {
err := Sign(mtx.SignBytes(), k, mtx.NamedSigs)
err := Sign(mtx, k)
assert.Nil(err, "%d: %+v", i, err)
}
tx = mtx
} else {
otx := newSingle(raw)
for _, k := range tc.keys {
err := Sign(otx.SignBytes(), k, otx.NamedSig)
err := Sign(otx, k)
assert.Nil(err, "%d: %+v", i, err)
}
tx = otx
+4 -2
View File
@@ -15,6 +15,7 @@ package auth
import (
crypto "github.com/tendermint/go-crypto"
"github.com/tendermint/go-crypto/keys"
"github.com/cosmos/cosmos-sdk/errors"
)
@@ -163,8 +164,9 @@ func (s *NamedSigs) Signers(signBytes []byte) (res []crypto.PubKey, err error) {
// Sign - sign the given data with private key and store
// the result in the credentil
func Sign(msg []byte, key crypto.PrivKey, cred Credential) error {
func Sign(signable keys.Signable, key crypto.PrivKey) error {
msg := signable.SignBytes()
pubkey := key.PubKey()
sig := key.Sign(msg)
return cred.Sign(pubkey, sig)
return signable.Sign(pubkey, sig)
}