Browse Source

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
pull/953/head
Ethan Frey 7 years ago
parent
commit
5ffb5f01cc
2 changed files with 51 additions and 2 deletions
  1. +40
    -0
      types/proposal_test.go
  2. +11
    -2
      types/vote_test.go

+ 40
- 0
types/proposal_test.go 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)


+ 11
- 2
types/vote_test.go View File

@ -5,6 +5,7 @@ import (
"time"
"github.com/stretchr/testify/require"
wire "github.com/tendermint/go-wire"
)
@ -18,7 +19,7 @@ func exampleVote() *Vote {
ValidatorAddress: []byte("addr"),
ValidatorIndex: 56789,
Height: 12345,
Round: 23456,
Round: 2,
Timestamp: stamp,
Type: byte(2),
BlockID: BlockID{
@ -36,13 +37,21 @@ func TestVoteSignable(t *testing.T) {
signBytes := SignBytes("test_chain_id", vote)
signStr := string(signBytes)
expected := `{"chain_id":"test_chain_id","vote":{"block_id":{"hash":"68617368","parts":{"hash":"70617274735F68617368","total":1000000}},"height":12345,"round":23456,"timestamp":"2017-12-25T03:00:01.234Z","type":2}}`
expected := `{"chain_id":"test_chain_id","vote":{"block_id":{"hash":"68617368","parts":{"hash":"70617274735F68617368","total":1000000}},"height":12345,"round":2,"timestamp":"2017-12-25T03:00:01.234Z","type":2}}`
if signStr != expected {
// NOTE: when this fails, you probably want to fix up consensus/replay_test too
t.Errorf("Got unexpected sign string for Vote. Expected:\n%v\nGot:\n%v", expected, signStr)
}
}
func TestVoteString(t *testing.T) {
str := exampleVote().String()
expected := `Vote{56789:616464720000 12345/02/2(Precommit) 686173680000 {<nil>} @ 2017-12-25T03:00:01.234Z}`
if str != expected {
t.Errorf("Got unexpected string for Proposal. Expected:\n%v\nGot:\n%v", expected, str)
}
}
func TestVoteVerifySignature(t *testing.T) {
privVal := GenPrivValidatorFS("")
pubKey := privVal.GetPubKey()


Loading…
Cancel
Save