- package types
-
- import (
- "context"
- "math"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
-
- "github.com/tendermint/tendermint/crypto"
- "github.com/tendermint/tendermint/version"
- )
-
- func TestLightBlockValidateBasic(t *testing.T) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- header := MakeRandHeader()
- commit := randCommit(ctx, t, time.Now())
- vals, _ := randValidatorPrivValSet(ctx, t, 5, 1)
-
- header.Height = commit.Height
- header.LastBlockID = commit.BlockID
- header.ValidatorsHash = vals.Hash()
- header.Version.Block = version.BlockProtocol
- vals2, _ := randValidatorPrivValSet(ctx, t, 3, 1)
-
- vals3 := vals.Copy()
- vals3.Proposer = &Validator{}
- commit.BlockID.Hash = header.Hash()
-
- sh := &SignedHeader{
- Header: &header,
- Commit: commit,
- }
-
- testCases := []struct {
- name string
- sh *SignedHeader
- vals *ValidatorSet
- expectErr bool
- }{
- {"valid light block", sh, vals, false},
- {"hashes don't match", sh, vals2, true},
- {"invalid validator set", sh, vals3, true},
- {"invalid signed header", &SignedHeader{Header: &header, Commit: randCommit(ctx, t, time.Now())}, vals, true},
- }
-
- for _, tc := range testCases {
- lightBlock := LightBlock{
- SignedHeader: tc.sh,
- ValidatorSet: tc.vals,
- }
- err := lightBlock.ValidateBasic(header.ChainID)
- if tc.expectErr {
- assert.Error(t, err, tc.name)
- } else {
- assert.NoError(t, err, tc.name)
- }
- }
-
- }
-
- func TestLightBlockProtobuf(t *testing.T) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
- header := MakeRandHeader()
- commit := randCommit(ctx, t, time.Now())
- vals, _ := randValidatorPrivValSet(ctx, t, 5, 1)
-
- header.Height = commit.Height
- header.LastBlockID = commit.BlockID
- header.Version.Block = version.BlockProtocol
- header.ValidatorsHash = vals.Hash()
- vals3 := vals.Copy()
- vals3.Proposer = &Validator{}
- commit.BlockID.Hash = header.Hash()
-
- sh := &SignedHeader{
- Header: &header,
- Commit: commit,
- }
-
- testCases := []struct {
- name string
- sh *SignedHeader
- vals *ValidatorSet
- toProtoErr bool
- toBlockErr bool
- }{
- {"valid light block", sh, vals, false, false},
- {"empty signed header", &SignedHeader{}, vals, false, false},
- {"empty validator set", sh, &ValidatorSet{}, false, true},
- {"empty light block", &SignedHeader{}, &ValidatorSet{}, false, true},
- }
-
- for _, tc := range testCases {
- lightBlock := &LightBlock{
- SignedHeader: tc.sh,
- ValidatorSet: tc.vals,
- }
- lbp, err := lightBlock.ToProto()
- if tc.toProtoErr {
- assert.Error(t, err, tc.name)
- } else {
- assert.NoError(t, err, tc.name)
- }
-
- lb, err := LightBlockFromProto(lbp)
- if tc.toBlockErr {
- assert.Error(t, err, tc.name)
- } else {
- assert.NoError(t, err, tc.name)
- assert.Equal(t, lightBlock, lb)
- }
- }
-
- }
-
- func TestSignedHeaderValidateBasic(t *testing.T) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- commit := randCommit(ctx, t, time.Now())
-
- chainID := "𠜎"
- timestamp := time.Date(math.MaxInt64, 0, 0, 0, 0, 0, math.MaxInt64, time.UTC)
- h := Header{
- Version: version.Consensus{Block: version.BlockProtocol, App: math.MaxInt64},
- ChainID: chainID,
- Height: commit.Height,
- Time: timestamp,
- LastBlockID: commit.BlockID,
- LastCommitHash: commit.Hash(),
- DataHash: commit.Hash(),
- ValidatorsHash: commit.Hash(),
- NextValidatorsHash: commit.Hash(),
- ConsensusHash: commit.Hash(),
- AppHash: commit.Hash(),
- LastResultsHash: commit.Hash(),
- EvidenceHash: commit.Hash(),
- ProposerAddress: crypto.AddressHash([]byte("proposer_address")),
- }
-
- validSignedHeader := SignedHeader{Header: &h, Commit: commit}
- validSignedHeader.Commit.BlockID.Hash = validSignedHeader.Hash()
- invalidSignedHeader := SignedHeader{}
-
- testCases := []struct {
- testName string
- shHeader *Header
- shCommit *Commit
- expectErr bool
- }{
- {"Valid Signed Header", validSignedHeader.Header, validSignedHeader.Commit, false},
- {"Invalid Signed Header", invalidSignedHeader.Header, validSignedHeader.Commit, true},
- {"Invalid Signed Header", validSignedHeader.Header, invalidSignedHeader.Commit, true},
- }
-
- for _, tc := range testCases {
- tc := tc
- t.Run(tc.testName, func(t *testing.T) {
- sh := SignedHeader{
- Header: tc.shHeader,
- Commit: tc.shCommit,
- }
- err := sh.ValidateBasic(validSignedHeader.Header.ChainID)
- assert.Equalf(
- t,
- tc.expectErr,
- err != nil,
- "Validate Basic had an unexpected result",
- err,
- )
- })
- }
- }
|