Add more tests for Proposal/Vote serialization

String() and Proposal valid after serializing.
To be safe, but mainly to increase test coverage for the PR
This commit is contained in:
Ethan Frey
2017-12-12 12:58:29 +01:00
parent 8576ad58bd
commit 5ffb5f01cc
2 changed files with 51 additions and 2 deletions

View File

@@ -3,6 +3,10 @@ package types
import (
"testing"
"time"
"github.com/stretchr/testify/require"
wire "github.com/tendermint/go-wire"
)
var testProposal *Proposal
@@ -31,6 +35,42 @@ func TestProposalSignable(t *testing.T) {
}
}
func TestProposalString(t *testing.T) {
str := testProposal.String()
expected := `Proposal{12345/23456 111:626C6F636B70 (-1,:0:000000000000) {<nil>} @ 2018-02-11T07:09:22.765Z}`
if str != expected {
t.Errorf("Got unexpected string for Proposal. Expected:\n%v\nGot:\n%v", expected, str)
}
}
func TestProposalVerifySignature(t *testing.T) {
privVal := GenPrivValidatorFS("")
pubKey := privVal.GetPubKey()
prop := NewProposal(4, 2, PartSetHeader{777, []byte("proper")}, 2, BlockID{})
signBytes := SignBytes("test_chain_id", prop)
// sign it
signature, err := privVal.Signer.Sign(signBytes)
require.NoError(t, err)
// verify the same proposal
valid := pubKey.VerifyBytes(SignBytes("test_chain_id", prop), signature)
require.True(t, valid)
// serialize, deserialize and verify again....
newProp := new(Proposal)
bs := wire.BinaryBytes(prop)
err = wire.ReadBinaryBytes(bs, &newProp)
require.NoError(t, err)
// verify the transmitted proposal
newSignBytes := SignBytes("test_chain_id", newProp)
require.Equal(t, string(signBytes), string(newSignBytes))
valid = pubKey.VerifyBytes(newSignBytes, signature)
require.True(t, valid)
}
func BenchmarkProposalWriteSignBytes(b *testing.B) {
for i := 0; i < b.N; i++ {
SignBytes("test_chain_id", testProposal)